1"use strict";angular.module("brnaiApp",["ngAnimate","ngCookies","ngResource","ngSanitize","ngTouch","ui.router","ui.bootstrap","facebook","angular-cron-jobs","ngFileUpload","ngImgCrop","luegg.directives","textAngular","ngAudio","highcharts-ng","daterangepicker","infinite-scroll","angularMoment","ngStorage","ui-notification","ui.bootstrap.datetimepicker","angular.chips","ui.select","ngclipboard","colorpicker.module","ngScrollbars","ngMap","dndLists","angular-click-outside","ui.carousel","slickCarousel"]).config(["$stateProvider","$urlRouterProvider","$httpProvider","$locationProvider","FacebookProvider","$compileProvider","NotificationProvider",function(a,b,c,d,e,f,g){c.interceptors.push("authInterceptor"),c.useApplyAsync(!0),f.debugInfoEnabled(!1);var h=-1!==window.location.hostname.indexOf("dev.brn.ai")?"1862308860724259":"279474245766642";e.init(h),firebase.initializeApp({apiKey:"AIzaSyBjgbEkACnRmDK2wdpAjypR8pgLJhSbkaA",authDomain:"brn-project.firebaseapp.com",databaseURL:"https://brn-project.firebaseio.com",projectId:"brn-project",storageBucket:"brn-project.appspot.com",messagingSenderId:"549111506565"}),g.setOptions({delay:6e3,replaceMessage:!0,closeOnClick:!1,templateUrl:"views/modern/notification.html",startTop:24,startRight:24,verticalSpacing:20,horizontalSpacing:20,positionX:"right",positionY:"bottom"}),d.html5Mode(!0),a.state("main",{abstract:!0,templateUrl:"views/modern/main-abstract.html",controller:"MainCtrl",controllerAs:"main",resolve:{portal_info:["$rootScope","getDomainData","$http","portalService","storage",function(a,b,c,d,e){return c.get("https://api.brn.ai/portal?domain="+("localhost"===window.location.hostname?"dev.brn.ai":"app.brnz.ai")).then(function(c){if(!c)return void(window.location.href="https://app.brnz.ai");var f=c&&c.data&&c.data.status?c.data.portal.environment:"live";d.setPortal(c.data.portal),b.setHostApi(f),b.setFayeUrl(f);var g=document.querySelector("link[rel*='icon']")||document.createElement("link");return g.type="image/x-icon",g.href=c.data.portal.favicon,document.getElementsByTagName("head")[0].appendChild(g),document.title=c.data.portal.title,a.portalTitle=c.data.portal.title,a.portalLogo=c.data.portal.logo,a.portalDomain=c.data.portal.domain,a.serviceName=c.data.portal.service_name,a.portalName=c.data.portal.name,a.publishableKey=c.data.portal.payments.stripe?c.data.portal.payments.stripe.publishable_key:"",e.setItem("PortalID",c.data.portal.portal_id),a.$broadcast("getPortalInfo"),c})}]}}).state("home",{url:"/",parent:"main",views:{"":{templateUrl:"views/main.html"}},controller:"MainCtrl",onEnter:function(){},data:{authenticate:!1}}).state("vivacruises",{url:"/vivacruises",templateUrl:"views/vivacruises.html",controller:"VivacruisesWidgetCtrl",data:{authenticate:!1}}).state("about",{url:"/about",parent:"main",views:{"":{templateUrl:"views/about.html",controller:"AboutCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("profile",{url:"/profile",parent:"main",views:{"":{templateUrl:"views/edit-profile.html",controller:"ProfileCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0}}).state("crm-statistic",{url:"/crm-statistic",parent:"main",views:{"":{templateUrl:"views/stat-crm.html",controller:"StatCrmCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0}}).state("partnerschat",{url:"/whitelabel/chat",templateUrl:"views/bot-preview-widget.html",controller:"BotPreviewWidgetCtrl",controllerAs:"BotPreviewWidgetCtrl",data:{authenticate:!1}}).state("partners_old",{url:"/botfabrik",parent:"main",views:{"":{templateUrl:"views/partners.html",controller:"PartnersCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("bots",{url:"/bot",parent:"main",views:{"":{templateUrl:"views/bots.html",controller:"BotsCtrl"},menu:{templateUrl:"views/bot-menu-colapse.html"},subMenu:{templateUrl:"views/sub-menu-abstract.html"}},data:{authenticate:!0}}).state("subscription",{url:"/subscription",parent:"main",views:{"":{templateUrl:"views/subscriptions.html",controller:"SubscriptionsCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("telegram",{url:"/bot/:id/telegram",parent:"main",views:{"":{templateUrl:"views/telegram.html",controller:"TelegramCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0}}).state("sms",{url:"/bot/:id/sms",parent:"main",views:{"":{templateUrl:"views/sms.html",controller:"SmsCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0}}).state("manage-users",{url:"/users",parent:"main",views:{"":{templateUrl:"views/users.html",controller:"UsersCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("manage-bots",{url:"/admin/bots",title:"Bots - Admin",parent:"main",views:{"":{templateUrl:"views/admin-bots.html",controller:"AdminBotsCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("manage-proxies",{url:"/admin/proxies",title:"Proxies - Admin",parent:"main",views:{"":{templateUrl:"views/admin-proxies.html",controller:"AdminProxiesCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("create_proxy",{templateUrl:"views/create-proxy.html",url:"/admin/proxies/create",title:"Proxies - Admin",controller:"CreateProxyCtrl",parent:"main.back-navbar",views:{"":{templateUrl:"views/create-proxy.html",controller:"CreateProxyCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("edit_proxy",{templateUrl:"views/edit-proxy.html",url:"/admin/proxies/:proxy_id/edit",title:"Proxies - Admin",controller:"EditProxyCtrl",parent:"main",views:{"":{templateUrl:"views/edit-proxy.html",controller:"EditProxyCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("manage-content",{url:"/admin/content",title:"Content - Admin",parent:"main",views:{"":{templateUrl:"views/admin-content.html",controller:"AdminContentCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("manage-bots-by-user",{url:"/admin/bots/:user",title:"Bots - Admin",parent:"main",views:{"":{templateUrl:"views/admin-bots-user.html",controller:"AdminBotsUserCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("user-detail",{url:"/users/:id",parent:"main",views:{"":{templateUrl:"views/user-detail.html",controller:"UserDetailCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("portals",{url:"/portals",parent:"main",views:{"":{templateUrl:"views/portals.html",controller:"PortalsCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("portal",{url:"/portals/:id",parent:"main",views:{"":{templateUrl:"views/portal-detail.html",controller:"PortalDetailCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("portal-detail-user-mask",{url:"/portals/:id/users/edit-mask/:field",parent:"main",views:{"":{templateUrl:"views/portal-detail-user-mask.html",controller:"PortalDetailUserMaskCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1,admin:!0}
1}).state("portal-detail-create-mask",{url:"/portals/:id/users/create-mask",parent:"main",views:{"":{templateUrl:"views/portal-detail-create-mask.html",controller:"PortalDetailCreateMaskCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1,admin:!0}}).state("kik",{url:"/bot/:id/kik",parent:"main",views:{"":{templateUrl:"views/kik.html",controller:"KikCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0}}).state("slack",{url:"/bot/:id/slack",parent:"main",views:{"":{templateUrl:"views/slack.html",controller:"SlackCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},templateUrl:"views/slack.html",controller:"SlackCtrl",data:{authenticate:!0}}).state("widget",{url:"/bot/:id/widget",parent:"main",views:{"":{templateUrl:"views/widget.html",controller:"WidgetCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0}}).state("new-bot",{url:"/new-bot",parent:"main",views:{"":{templateUrl:"views/create-bot.html",controller:"CreateBotCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0}}).state("scenario-abstract",{templateUrl:"views/scenario-abstract.html",controller:"ScenarioAbstractCtrl",parent:"bot-abstract",abstract:!0,data:{authenticate:!0}}).state("scenario-abstract-old",{templateUrl:"views/scenario-abstract-old.html",controller:"ScenarioAbstractCtrl",parent:"bot-abstract",abstract:!0,data:{authenticate:!0}}).state("edit-scenarios-old",{url:"/bot/:id/edit-scenario-ig/:scenario/simple",parent:"scenario-abstract-old",templateUrl:"views/editscenario-simple2.html",controller:"EditscenarioSimple2Ctrl",data:{authenticate:!0}}).state("create-scenarios-old",{url:"/bot/:id/create-scenario-old",parent:"scenario-abstract-old",templateUrl:"views/editscenario-simple2.html",controller:"EditscenarioSimple2Ctrl",data:{authenticate:!0}}).state("edit-scenarios",{url:"/bot/:id/edit-scenario/:scenario",parent:"scenario-abstract",templateUrl:"views/editscenario.html",controller:"EditscenarioCtrl",data:{authenticate:!0}}).state("create-scenarios",{url:"/bot/:id/create-scenario",parent:"scenario-abstract",templateUrl:"views/editscenario.html",controller:"EditscenarioCtrl",data:{authenticate:!0}}).state("edit-scenarios-simple",{url:"/bot/:id/edit-scenario/:scenario/simple",parent:"scenario-abstract",templateUrl:"views/editscenario-simple.html",controller:"EditscenarioSimpleCtrl",data:{authenticate:!0}}).state("create-scenarios-simple",{url:"/bot/:id/create-scenario/simple",parent:"scenario-abstract",templateUrl:"views/editscenario-simple.html",controller:"EditscenarioSimpleCtrl",data:{authenticate:!0}}).state("auth",{url:"/auth?requestToken",parent:"main",views:{"":{templateUrl:"views/auth.html",controller:"AuthCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("notfound",{url:"/404",templateUrl:"views/notfound.html",controller:"NotfoundCtrl",parent:"main",data:{authenticate:!1}}).state("forbidden",{url:"/403",templateUrl:"views/forbidden.html",controller:"ForbiddenCtrl",parent:"main",data:{authenticate:!1}}).state("widgetSettings",{url:"/bot/:id/widget/settings",parent:"main",views:{"":{templateUrl:"views/widgetsettings.html",controller:"WidgetsettingsCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0}}).state("bot-abstract",{views:{"":{templateUrl:"views/bot-abstract.html",controller:"BotAbstractCtrl",controllerAs:"botNav"},subMenu:{templateUrl:"views/bot-menu-abstract.html",controller:"BotAbstractCtrl",controllerAs:"botNav"},menu:{templateUrl:"views/bot-menu-colapse.html",controller:"BotAbstractCtrl",controllerAs:"botNav"}},parent:"main",abstract:!0}).state("bot-abstract-new",{views:{"":{templateUrl:"views/bot-abstract-new.html",controller:"BotAbstractCtrl",controllerAs:"botNav"},subMenu:{templateUrl:"views/bot-menu-abstract.html",controller:"BotAbstractCtrl",controllerAs:"botNav"},menu:{templateUrl:"views/bot-menu-colapse.html",controller:"BotAbstractCtrl",controllerAs:"botNav"}},parent:"main",abstract:!0}).state("bot-abstract.back-navbar",{parent:"bot-abstract",templateUrl:"views/back-navbar.html",controller:"BackNavbarCtrl",abstract:!0}).state("main.back-navbar",{views:{"":{templateUrl:"views/back-navbar.html",controller:"BackNavbarCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},parent:"main",abstract:!0}).state("bot-abstract.bot-functions",{url:"/bot/:id/functions",parent:"bot-abstract",templateUrl:"views/bot-functions.html",controller:"BotFunctionsCtrl",data:{authenticate:!0}}).state("bot-abstract.bot-detail",{url:"/bot/:id",parent:"bot-abstract",templateUrl:"views/modern/bot-detail.html",controller:"BotDetailCtrl",data:{authenticate:!0}}).state("bot-tokens",{url:"/bot/:id/tokens",parent:"bot-abstract",templateUrl:"views/bot-tokens.html",controller:"BotTokensCtrl",data:{authenticate:!0}}).state("provider",{url:"/bot/:id/provider/:provider",parent:"main",views:{"":{templateUrl:"views/provider.html",controller:"ProviderCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0}}).state("facebook",{url:"/bot/:id/facebook",parent:"main",views:{"":{templateUrl:"views/facebook.html",controller:"FacebookCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0}}).state("rmwidget",{url:"/widget/:id?client_id&open&token&expand&position?first?placeholder",templateUrl:"views/rmwidget.html",controller:"RmwidgetCtrl",data:{authenticate:!1}}).state("edit",{url:"/edit/:portal/:page/:language",parent:"main",views:{"":{templateUrl:"views/edit.html",controller:"EditCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("landingDE",{url:"/edit/landing_DE",parent:"main",views:{"":{templateUrl:"views/landingde.html",controller:"LandingdeCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0}
1}).state("landingEN",{url:"/edit/landing_EN",parent:"main",views:{"":{templateUrl:"views/landingen.html",controller:"LandingenCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0}}).state("documentation",{url:"/documentation",parent:"main",views:{"":{templateUrl:"views/documentation.html",controller:"DocumentationCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("braincubator",{url:"/brain-cubator",parent:"main",views:{"":{templateUrl:"views/braincubator.html",controller:"BraincubatorCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("go",{url:"/go",parent:"main",views:{"":{templateUrl:"views/braincubator.html",controller:"GoCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("shipbrain",{url:"/shipbrain",parent:"main",views:{"":{templateUrl:"views/shipbrain.html",controller:"ShipbrainCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("imprint",{url:"/imprint",parent:"main",views:{"":{templateUrl:"views/imprint.html",controller:"ImprintCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("contacts",{url:"/contacts",parent:"main",views:{"":{templateUrl:"views/contacts.html",controller:"ContactsCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("currentWidget",{url:"/current-widget/:id?client_id&open&token&expand&position?first?placeholder",templateUrl:"views/currentwidget.html",controller:"CurrentwidgetCtrl",data:{authenticate:!0}}).state("statistic",{parent:"bot-abstract",abstract:!0,templateUrl:"views/statistic.html",controller:"StatisticCtrl",controllerAs:"stat",data:{authenticate:!0}}).state("conversations",{url:"/bot/:id/conversations?client_id",parent:"bot-abstract",params:{user:null},templateUrl:"views/conversations.html",controller:"ConversationsCtrl",data:{authenticate:!0}}).state("general",{templateUrl:"views/stat-main.html",url:"/bot/:id/dashboard/main",parent:"statistic",controller:"StatMainCtrl",controllerAs:"statMain",data:{authenticate:!0}}).state("realtime",{templateUrl:"views/realtime.html",parent:"statistic",url:"/bot/:id/dashboard/realtime",controller:"RealtimeCtrl",data:{authenticate:!0}}).state("sessions",{templateUrl:"views/sessions.html",parent:"statistic",url:"/bot/:id/dashboard/sessions",controller:"SessionsCtrl",data:{authenticate:!0}}).state("topusers",{templateUrl:"views/topusers.html",parent:"statistic",url:"/bot/:id/dashboard/top-users",controller:"TopusersCtrl",data:{authenticate:!0}}).state("keywords",{templateUrl:"views/keywords.html",parent:"statistic",url:"/bot/:id/dashboard/keywords",controller:"KeywordsCtrl",data:{authenticate:!0}}).state("statsAll",{parent:"main",views:{"":{templateUrl:"views/statsall.html",controller:"StatsallCtrl"},menu:{templateUrl:"views/bot-menu-colapse.html"},subMenu:{templateUrl:"views/sub-menu-abstract.html"}},url:"/stats-all",data:{authenticate:!0,admin:!0}}).state("messages",{templateUrl:"views/messages.html",parent:"statistic",url:"/bot/:id/dashboard/messages",controller:"MessagesCtrl",data:{authenticate:!0}}).state("top-messages-in",{templateUrl:"views/top-messages-in.html",parent:"statistic",url:"/bot/:id/dashboard/top-messages-in",controller:"TopMessagesInCtrl",controllerAs:"topMessagesIn",data:{authenticate:!0}}).state("top-messages-out",{templateUrl:"views/top-messages-out.html",parent:"statistic",url:"/bot/:id/dashboard/top-messages-out",controller:"TopMessagesOutCtrl",controllerAs:"topMessagesOut",data:{authenticate:!0}}).state("stat-training",{templateUrl:"views/stat-training.html",parent:"statistic",url:"/bot/:id/dashboard/training",controller:"StatTrainingCtrl",controllerAs:"statTraining",data:{authenticate:!0}}).state("users",{url:"/bot/:id/dashboard/users",parent:"statistic",templateUrl:"views/stat-users.html",controller:"StatUsersCtrl",controllerAs:"statUsers",data:{authenticate:!0}}).state("bot-preview",{url:"/catalog/bot/:name",parent:"main",views:{"":{templateUrl:"views/bot-preview.html",controller:"BotPreviewCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("bot-preview-widget",{url:"/catalog/bot/:name/chat",templateUrl:"views/bot-preview-widget.html",controller:"BotPreviewWidgetCtrl",controllerAs:"BotPreviewWidgetCtrl",data:{authenticate:!1}}).state("catalog",{url:"/catalog",parent:"main",views:{"":{templateUrl:"views/catalog.html",controller:"CatalogCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("catalog.en",{url:"/en/catalog",parent:"main",views:{"":{templateUrl:"views/catalog.html",controller:"CatalogCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("catalog.de",{url:"/de/katalog",parent:"main",views:{"":{templateUrl:"views/catalog.html",controller:"CatalogCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("collections",{templateUrl:"views/collections.html",parent:"bot-abstract",url:"/bot/:id/collections",controller:"CollectionsCtrl",data:{authenticate:!1}}).state("collections.addCollection",{templateUrl:"views/addcollection.html",url:"/add",parent:"collections",controller:"AddcollectionCtrl",data:{authenticate:!1}}).state("collections.editCollection",{templateUrl:"views/addcollection.html",url:"/:collection/edit",parent:"collections",controller:"AddcollectionCtrl",data:{authenticate:!1}}).state("collections.collection",{templateUrl:"views/collection.html",url:"/:collection",parent:"collections",controller:"CollectionCtrl",data:{authenticate:!1}}).state("collections.createElement",{templateUrl:"views/createelement.html",url:"/:collection/element/:el",parent:"collections",controller:"CreateelementCtrl",data:{authenticate:!1}}).state("learning",{templateUrl:"views/learning.html",controller:"LearningCtrl",abstract:!0,parent:"bot-abstract",data:{authenticate:!1}}).state("learning-intents",{templateUrl:"views/learning-intents.html",controller:"LearningIntentsCtrl",parent:"learning",url:"/bot/:id/learning/intents",data:{authenticate:!1}}).state("learning-entities",{templateUrl:"views/learning-entities.html",url:"/bot/:id/learning/entities",controller:"LearningEntitiesCtrl",parent:"learning",data:{authenticate:!1}}).state("learning-understanding",{templateUrl:"views/learning-understanding.html",url:"/bot/:id/learning/understanding",controller:"LearningUnderstandingCtrl",parent:"learning",data:{authenticate:!1}}).state("learning-training",{templateUrl:"views/learning-history.html",url:"/bot/:id/learning/training",controller:"LearningHistoryCtrl",parent:"learning",data:{authenticate:!1}}).state("learning-import",{templateUrl:"views/learning-import.html",url:"/bot/:id/learning/import",controller:"LearningImportCtrl",parent:"learning",data:{authenticate:!1}}).state("learning-mind",{templateUrl:"views/learning-mind.html",url:"/bot/:id/learning/mind",controller:"LearningMindCtrl",parent:"learning",data:{authenticate:!1}}).state("entity-detail",{templateUrl:"views/entity-detail.html",url:"/bot/:id/learning/entities/:entity",controller:"EntityDetailCtrl",parent:"bot-abstract.back-navbar",data:{authenticate:!1}}).state("intent-detail",{url:"/bot/:id/learning/intents/:intent",parent:"bot-abstract.back-navbar",templateUrl:"views/intent-detail.html",controller:"LearningIntentDetailCtrl",data:{authenticate:!0}}).state("bot-settings",{templateUrl:"views/bot-settings.html",controller:"BotSettingsCtrl",abstract:!0,parent:"bot-abstract",data:{authenticate:!0}}
1).state("bot-settings.settings-general",{url:"/bot/:id/settings/general",parent:"bot-settings",templateUrl:"views/settings-general.html",controller:"SettingsGeneralCtrl",controllerAs:"settingsGeneral",data:{authenticate:!0}}).state("bot-settings.settings-other",{url:"/bot/:id/settings/other",parent:"bot-settings",templateUrl:"views/settings-other.html",controller:"SettingsOtherCtrl",controllerAs:"SettingsOtherCtrl",data:{authenticate:!0}}).state("bot-settings.settings-blockchain",{url:"/bot/:id/settings/blockchain",parent:"bot-settings",templateUrl:"views/settings-blockchain.html",controller:"SettingsBlockchainCtrl",controllerAs:"SettingsBlockchainCtrl",data:{authenticate:!0}}).state("bot-settings.settings-connections",{url:"/bot/:id/settings/connections",parent:"bot-settings",templateUrl:"views/settings-connections.html",controller:"SettingsConnectionsCtrl",controllerAs:"SettingsConnectionsCtrl",data:{authenticate:!0}}).state("bot-settings.settings-catalog",{url:"/bot/:id/settings/catalog",parent:"bot-settings",templateUrl:"views/settings-catalog.html",controller:"SettingsCatalogCtrl",controllerAs:"SettingsCatalogCtrl",data:{authenticate:!0}}).state("bot-settings.settings-variables",{url:"/bot/:id/settings/variables",parent:"bot-settings",templateUrl:"views/variables.html",controller:"VariablesCtrl",data:{authenticate:!0}}).state("bot-settings.settings-variables-edit",{url:"/bot/:id/settings/variable/:name/edit",parent:"bot-settings",templateUrl:"views/variables-edit.html",controller:"VariablesEditCtrl",parent:"bot-abstract.back-navbar",data:{authenticate:!0}}).state("bot-settings.settings-payment",{url:"/bot/:id/settings/payment",parent:"bot-settings",templateUrl:"views/settings-payment.html",controller:"SettingsPaymentCtrl",controllerAs:"payment",data:{authenticate:!0}}).state("bot-settings.settings-widget",{url:"/bot/:id/settings/widget",parent:"bot-settings",templateUrl:"views/settings-widget.html",controller:"SettingsWidgetCtrl",controllerAs:"settingsWidget",data:{authenticate:!0}}).state("bot-settings.settings-roles",{url:"/bot/:id/settings/roles",parent:"bot-settings",templateUrl:"views/settings-roles.html",controller:"SettingsRolesCtrl",data:{authenticate:!0}}).state("bot-settings.settings-mails",{url:"/bot/:id/settings/mails",parent:"bot-settings",templateUrl:"views/mails.html",controller:"MailsCtrl",data:{authenticate:!0}}).state("bot-settings.settings-languages",{url:"/bot/:id/settings/languages",parent:"bot-settings",templateUrl:"views/settings-languages.html",controller:"SettingsLanguagesCtrl",data:{authenticate:!0}}).state("bot-abstract.crm",{url:"/crm/:id/?client",reloadOnSearch:!1,templateUrl:"views/crm.html",controller:"CrmCtrl",parent:"bot-abstract",data:{authenticate:!0}}).state("bot-abstract-new.crm",{url:"/bot/:id/crm?person",reloadOnSearch:!1,templateUrl:"views/crm-new.html",controller:"CrmNewCtrl",parent:"bot-abstract-new",data:{authenticate:!0}}).state("bot-abstract.lead-detail",{url:"/crm/:id/lead/:client_id",templateUrl:"views/lead.html",controller:"LeadCtrl",parent:"bot-abstract",data:{authenticate:!0}}).state("bot-abstract.broadcast",{url:"/bot/:id/broadcast",parent:"bot-abstract",templateUrl:"views/broadcast.html",controller:"BroadcastCtrl",data:{authenticate:!0}}).state("bot-abstract.broadcast_detail",{url:"/bot/:id/broadcast/:broadcastId",templateUrl:"views/broadcast_detail.html",controller:"BroadcastDetailCtrl",parent:"bot-abstract",data:{authenticate:!0}}).state("bot-abstract.broadcast_detail_create",{templateUrl:"views/broadcast_detail.html",url:"/bot/:id/create-broadcast",controller:"BroadcastDetailCtrl",parent:"bot-abstract",data:{authenticate:!0}}).state("learning.entity_create",{templateUrl:"views/create-entity.html",url:"/bot/:id/create-entity",controller:"CreateEntityCtrl",parent:"learning",data:{authenticate:!0}}).state("gui",{url:"/bot/gui/:id/:scenario/",templateUrl:"views/gui.html",controller:"GuiCtrl",parent:"scenario-abstract",data:{authenticate:!0}}).state("sequences",{templateUrl:"views/sequences.html",url:"/bot/:id/sequences",controller:"SequencesCtrl",parent:"bot-abstract",data:{authenticate:!1}}).state("sequences.sequence-detail",{templateUrl:"views/sequence-detail.html",url:"/:sequence/detail",controller:"SequenceDetailCtrl",parent:"sequences",data:{authenticate:!1}}).state("sequences.sequence-create",{templateUrl:"views/sequence-create.html",url:"/create",controller:"SequenceCreateCtrl",parent:"sequences",data:{authenticate:!1}}).state("store-users",{templateUrl:"views/store-users.html",url:"/bot/:id/store/users",controller:"StoreUsersCtrl",parent:"store",data:{authenticate:!1}}).state("store-offers",{templateUrl:"views/store-offers.html",url:"/bot/:id/store/offers",controller:"StoreOffersCtrl",parent:"store",data:{authenticate:!1}}).state("store-transactions",{templateUrl:"views/store-transactions.html",url:"/bot/:id/store/transactions",controller:"StoreTransactionsCtrl",parent:"bot-abstract",data:{authenticate:!1}}).state("store-offers-public",{templateUrl:"views/store-offers-public.html",url:"/bot/:id/store/offers-public",controller:"StoreOffersPublicCtrl",parent:"bot-abstract",data:{authenticate:!1}}).state("store-offers-direct",{templateUrl:"views/store-offers-direct.html",url:"/bot/:id/store/offers-direct",controller:"StoreOffersDirectCtrl",parent:"bot-abstract",data:{authenticate:!1}}).state("store-categories",{templateUrl:"views/store-categories.html",url:"/bot/:id/store/categories",controller:"StoreCategoriesCtrl",parent:"store",data:{authenticate:!1}}).state("store-dashboard",{templateUrl:"views/store-dashboard.html",url:"/bot/:id/store/dashboard",controller:"StoreDashboardCtrl",parent:"bot-abstract",data:{authenticate:!1}}).state("store-products",{templateUrl:"views/store-products.html",url:"/bot/:id/store/:category/products",controller:"StoreProductsCtrl",parent:"bot-abstract",data:{authenticate:!1}}).state("store-customers",{templateUrl:"views/store-customers.html",url:"/bot/:id/store/customers",controller:"StoreCustomersCtrl",parent:"bot-abstract",data:{authenticate:!1}}).state("store-persons",{templateUrl:"views/store-persons.html",url:"/bot/:id/store/persons",controller:"StorePersonsCtrl",parent:"bot-abstract",data:{authenticate:!1}}).state("store-merchants",{templateUrl:"views/store-merchants.html",url:"/bot/:id/store/merchants",controller:"StoreMerchantsCtrl",parent:"bot-abstract",data:{authenticate:!1}}).state("store-payments",{templateUrl:"views/store-payment.html",url:"/bot/:id/store/payments",controller:"StorePaymentCtrl",parent:"bot-abstract",data:{authenticate:!1}}).state("store-payments-stripe",{templateUrl:"views/store-payments-stripe.html",url:"/stripe",controller:"StorePaymentsStripeCtrl",parent:"store-payments",data:{authenticate:!1}}).state("store-customer-mask",{templateUrl:"views/client-mask-attributes.html",url:"/bot/:id/store/customer-mask",controller:"ClientMaskAttributesCtrl",parent:"store",data:{authenticate:!1}}).state("store-merchant-mask",{templateUrl:"views/store-merchant-mask.html",url:"/bot/:id/store/merchant-mask",controller:"StoreMerchantMaskCtrl",parent:"store",data:{authenticate:!1}}).state("store-edit-customer-mask",{templateUrl:"views/store-edit_customer_mask.html",url:"/bot/:id/store/customers/edit-mask",controller:"StoreEditCustomerMaskCtrl",parent:"store",data:{authenticate:!1}}).state("store-edit-merchant-mask",{templateUrl:"views/store-edit-merchant-mask.html",url:"/bot/:id/store/merchants/edit-mask",controller:"StoreEditMerchantMaskCtrl",parent:"store",data:{authenticate:!1}}).state("store.edit-customer-field",{templateUrl:"views/edit-customer-field.html",url:"/bot/:id/store/customers/edit/:field",controller:"EditCustomerFieldCtrl",parent:"store",data:{authenticate:!1}}).state("store.edit-merchant-field",{templateUrl:"views/edit-merchant-field.html",url:"/bot/:id/store/merchants/edit/:field",controller:"EditMerchantFieldCtrl",parent:"store",data:{authenticate:!1}}).state("store.create-customer",{templateUrl:"views/create-customer.html",url:"/bot/:id/store/customers/create",controller:"CreateCustomerCtrl",parent:"store",data:{authenticate:!1}}).state("store.create-merchant",{templateUrl:"views/create-merchant.html",url:"/bot/:id/store/merchants/create",controller:"CreateMerchantCtrl",parent:"store",data:{authenticate:!1}}).state("store.customer-detail",{templateUrl:"views/customer-detail.html",url:"/bot/:id/store/customers/:customer",controller:"CustomerDetailCtrl",parent:"store",data:{authenticate:!1}}).state("store.merchant-detail",{templateUrl:"views/merchant-detail.html",url:"/bot/:id/store/merchants/:merchant",controller:"MerchantDetailCtrl",parent:"store",data:{authenticate:!1}}).state("store-orders",{templateUrl:"views/store-orders.html",url:"/bot/:id/store/orders",controller:"StoreOrdersCtrl",parent:"bot-abstract",data:{authenticate:!1}}).state("store",{templateUrl:"views/store.html",controller:"StoreCtrl",abstract:!0,parent:"bot-abstract",data:{authenticate:!1}}).state("store.create_offer",{templateUrl:"views/create-offer.html",url:"/bot/:id/create-offer",controller:"CreateOfferCtrl",parent:"store",data:{authenticate:!0}}).state("store.create_product",{templateUrl:"views/create-product.html",url:"/bot/:id/:category/create-product",controller:"CreateProductCtrl",parent:"store",data:{authenticate:!0}}).state("store.create_category",{templateUrl:"views/create-category.html",url:"/bot/:id/create-category",controller:"CreateCategoryCtrl",parent:"store",data:{authenticate:!0}}).state("store.create_order",{templateUrl:"views/create-order.html",url:"/bot/:id/create-order",controller:"CreateOrderCtrl",parent:"store",data:{authenticate:!0}}).state("store.category-detail",{templateUrl:"views/category-detail.html",url:"/bot/:id/store/category-detail/:category",controller:"CategoryDetailCtrl",parent:"store",data:{authenticate:!0}}).state("store.create_category_attribute",{templateUrl:"views/create-category-attribute.html",url:"/bot/:id/:category/create-attribute",controller:"CreateCategoryAttributeCtrl",parent:"store",data:{authenticate:!0}}).state("store.edit-category-attribute",{templateUrl:"views/edit-category-attribute.html",url:"/bot/:id/:category/:attribute/edit",controller:"EditCategoryAttributeCtrl",parent:"store",data:{authenticate:!0}}).state("store.attribute-values",{templateUrl:"views/store-attribute-values.html",url:"/bot/:id/store/:category/:attribute/values",controller:"StoreAttributeValuesCtrl",parent:"store",data:{authenticate:!0}}).state("store.category-attributes",{templateUrl:"views/category-attributes.html",url:"/bot/:id/store/:category/attributes",controller:"CategoryAttributesCtrl",parent:"store",data:{authenticate:!0}}).state("store.create-attribute-values",{templateUrl:"views/store-create-attribute-values.html",url:"/bot/:id/store/category-detail/:category/:attribute/add-value",controller:"StoreCreateAttributeValuesCtrl",parent:"store",data:{authenticate:!0}}).state("bot-settings.growth-general",{templateUrl:"views/growth-general.html",parent:"bot-settings",controller:"GrowthGeneralCtrl",parent:"bot-abstract",abstract:!0,data:{authenticate:!0}}).state("bot-settings.growth-fb-comments",{url:"/bot/:id/growth/default", 2templateUrl:"views/growth-fb-comments.html",controller:"GrowthFbCommentsCtrl",parent:"bot-settings.growth-general",data:{authenticate:!0}}).state("store.product-detail",{templateUrl:"views/product-detail.html",url:"/bot/:id/:category/:product",controller:"ProductDetailCtrl",parent:"store",data:{authenticate:!0}}).state("store.order-detail",{templateUrl:"views/order-detail.html",url:"/bot/:id/store/order-detail/:order",controller:"OrderDetailCtrl",parent:"store",data:{authenticate:!0}}).state("offer",{templateUrl:"views/offer.html",url:"/offer/:client_id/:product_id",controller:"OfferCtrl"}).state("mind",{abstract:!0,parent:"main",views:{"":{templateUrl:"views/mind.html",controller:"MindCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("mind-settings",{url:"/mind",parent:"main",views:{"":{templateUrl:"views/mind-settings.html",controller:"MindSettingsCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("mind-detail",{url:"/mind/:id",parent:"main",views:{"":{templateUrl:"views/mind-detail.html",controller:"MindDetailCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("mind-intents",{url:"/mind/:id/intents",parent:"mind",templateUrl:"views/mind-intents.html",controller:"MindIntentsCtrl",data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("client-detail",{url:"/audience/:id/client/detail/:client_id/",templateUrl:"views/clientdetail.html",controller:"ClientdetailCtrl",parent:"bot-abstract",data:{authenticate:!0}}).state("page",{url:"/page/:name/:lang",templateUrl:"views/page.html",controller:"PagesCtrl",data:{authenticate:!1}}
2).state("manage-mails",{url:"/mails",parent:"main.back-navbar",templateUrl:"views/mails-admin.html",controller:"MailsAdminCtrl",data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("manage-translation",{url:"/translation/:page",parent:"main",views:{"":{templateUrl:"views/manage-translation.html",controller:"TranslationAdminCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0,admin:!0,subAdmin:!0}}).state("ard-moma-old",{url:"/ard-moma-old",templateUrl:"views/ard-moma/index.html",controller:"ArdMomaCtrl"}).state("instagram",{url:"/instagram",templateUrl:"views/insta-direct/insta-direct.html",controller:"InstaDirectCtrl"}).state("instagram-chatbot",{url:"/instagram-chatbot",templateUrl:"views/insta-direct/insta-direct.html",controller:"InstaDirectCtrl"}).state("hotelbot",{url:"/hotelbot",templateUrl:"views/hotelbot/hotelbot.html",controller:"HotelbotCtrl"}).state("terms",{url:"/terms",parent:"main",views:{"":{templateUrl:"views/terms.html",controller:"TermsCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}}}).state("visual-editor-scenario",{url:"/bot/:id/visual-editor/scenario/:scenario",templateUrl:"views/visual-editor.html",controller:"VisualEditorCtrl",parent:"bot-abstract",data:{authenticate:!0}}).state("visual-editor",{url:"/bot/:id/visual-editor",templateUrl:"views/visual-editor.html",controller:"VisualEditorCtrl",parent:"bot-abstract",data:{authenticate:!0}}).state("profile-members",{url:"/members",parent:"main",views:{"":{templateUrl:"views/profile-members.html",controller:"ProfileMembersCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("profile-companies",{url:"/companies",parent:"main",views:{"":{templateUrl:"views/profile-companies.html",controller:"ProfileCompaniesCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("profile-employee",{url:"/member/:id",parent:"main",views:{"":{templateUrl:"views/profile/employee.html",controller:"ProfileEmployeeCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("profile-company",{url:"/company/:id",parent:"main",views:{"":{templateUrl:"views/profile/company.html",controller:"ProfileCompanyCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!1}}).state("hints",{url:"/hints",parent:"main",views:{"":{templateUrl:"views/hints.html",controller:"HintsCtrl"},menu:{templateUrl:"views/modern/main-menu.html"}},data:{authenticate:!0}}),b.otherwise(function(a,b){var c=a.get("$state");b.path()?c.go("notfound"):c.go("home")})}]).run(["$rootScope","Auth","$state","firebaseNotifications","portalService","botService","getDomainData","accountChanel",function(a,b,c,d,e,f,g,h){if(a.previousState=[],a.currentState=null,a.previousParam=[],a.currentParam=null,a.isNotLoginUrl=!0,c.isCurentStateBot=!1,c.isCurentStateAllBot=!1,c.isCurentStateStatsAll=!1,c.isCurentStateTemplate=!1,c.isCurentStateTemplates=!1,a.$on("$stateChangeStart",function(d,e,f,g,h){a.previousState.length&&a.previousState[a.previousState.length-1].name==e.name?(a.previousParam.pop(),a.previousState.pop()):(a.previousParam.push(h),a.previousState.push(g),a.previousState.length>20&&(a.previousState.shift(),a.previousParam.shift())),a.currentState=e,a.currentParam=f,c.goBack=function(b,d){a.previousState.length&&a.previousState[a.previousState.length-1].name?c.go(a.previousState[a.previousState.length-1].name,a.previousParam[a.previousParam.length-1]):b&&c.go(b,d)},"home"==e.name||"partners.en"==e.name||"catalog.en"==e.name||"partners.de"==e.name||"catalog.de"==e.name?a.isNotLoginUrl=!0:a.isNotLoginUrl=!1,"home"==e.name&&b.isAuthenticated()&&setTimeout(function(){c.go("bots")},0),(!b.isAuthenticated()&&e.data.authenticate||e.data.subAdmin&&e.data.admin&&!b.isSubAdmin()&&!b.isAdmin()||e.data.admin&&!e.data.subAdmin&&!b.isAdmin())&&(c.go("forbidden"),d.preventDefault())}),a.$on("$stateChangeSuccess",function(b,d,e,g,h){var i=c.$current,j=!1;for(c.isCurentStateBot=!1,c.isCurentStateAllBot=!1,c.isCurentStateStatsAll=!1,c.isCurentStateTemplate=!1,c.isCurentStateTemplates=!1,c.isHelpBtn=!1;void 0!=i&&!j;)c.isCurentStateBot="bot-abstract"===i.self.name||"bot-abstract-new"===i.self.name,c.isCurentStateAllBot="bots"===i.self.name,c.isCurentStateStatsAll="statsAll"===i.self.name,c.isCurentStateTemplate="template"===i.self.name,c.isCurentStateTemplates="templates"===i.self.name,j=c.isCurentStateBot||c.isCurentStateAllBot||c.isCurentStateStatsAll||c.isCurentStateTemplate||c.isCurentStateTemplates,i=i.parent;"home"!==c.$current.self.name&&"partners.de"!==c.$current.self.name&&"partners.en"!==c.$current.self.name&&(c.isHelpBtn=!0),"home"==c.$current.self.name&&setTimeout(function(){var a=document.getElementById("fb-messenger_witlabel_registration_panel");a&&$(a).attr("tabindex","0")},200);var k=f.getSingletonBot();("bot-abstract"==c.current.parent||"bot-abstract-new"==c.current.parent||"statistic"==c.current.parent||"bot-settings"==c.current.parent)&&k&&k.name?document.title=k.name+" - "+a.portalTitle:c.current.title?document.title=c.current.title+" - "+a.portalTitle:document.title=a.portalTitle||"BRN.AI â BRAIN â your reliable BTS (Build-Tokenize-Sell) provider for Crypto projects"}),a.$on("singletonBot:updated",function(b,d){("bot-abstract"==c.current.parent||"bot-abstract-new"==c.current.parent||"statistic"==c.current.parent||"bot-settings"==c.current.parent)&&d&&d.name&&(document.title=d.name+" - "+a.portalTitle)}),firebase.messaging().onMessage(function(a){console.log("Message received. ",a)}),b.isAuthenticated())try{d.getPermission()}catch(a){}}]),angular.module("brnaiApp").constant("domain","http://api.brn.dev.techfunder.de"),angular.module("brnaiApp").controller("MainCtrl",["$rootScope","Auth","$state","$http","getDomainData","$uibModal","$sce","$scope","$cookies","storage","portalService","portal_info","$window","Notification","$interval","$compile","usersService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){function r(){d.get("https://api.brn.ai/translations/language/"+t.currentLang+"?portal_id="+k.portalData.portal_id).then(function(a){a.data.status&&(t.translations=a.data.translations,t.contactMessage=t.translations.menu_contact_message,t.message=t.translations.menu_rightPanel_message)})}function s(){}var t=this;if(t.authenticated=b.getUser(),t.showWidgetMessageWindow=!t.authenticated,t.authenticated)q.getUserMe().then(function(a){t.permissions=a.permissions});else{window.location.href="https://app.brnz.ai/v2/",document.title="Service temporarily unavailable";for(var u=document.querySelectorAll("link[rel*='icon']")||[],v=0;v<u.length;v++)u[v].setAttribute("href","")}t.setLang=function(a){j.setItem("lang",a),t.currentLang=a,h.$parent.$broadcast("getNewLanding",a),r()},j.getItem("lang")||("de"==navigator.language?t.setLang("de"):t.setLang("en")),t.currentLang="en",t.isAdmin=b.isAdmin(),t.isSubAdmin=b.isSubAdmin(),t.translations={},h.isShortHeader=!1,a.user=!0,a.userInfo=b.getUser(),a.state=c,h.isMainMenuOpen=!1,h.toogleMainMenuBtn=function(){h.isMainMenuOpen=!h.isMainMenuOpen},h.authUrl="https://app.brnz.ai/v2/",h.registerhUrl="http://brain.tfid.me/register?redirect_url="+window.location.origin+"/auth",h.page=null,h.isCookieBanner=!1,h.windowWidth=m.innerWidth,$(window).resize(function(){h.windowWidth=window.innerWidth,h.windowWidth>767&&(h.isMainMenuOpen=!1),h.$apply()}),t.logOut=function(){b.logOut()};var w=h.$on("getNewLanding",function(a,b){console.log(1)});t.subMenu={isOpen:!1},t.toggled=function(a){t.subMenu.isOpen=a},t.searchBotKeyword="",h.$on("$destroy",function(){w()});var x=i.getObject("is_cookie_banner");x?h.functions_mode="true"==x:h.isCookieBanner=!0,h.closeCookieBanner=function(){i.putObject("is_cookie_banner","false"),h.isCookieBanner=!1},$("body").on("click touchstart",".welcome-socials-ul",function(a){$("#contactModal").modal("show")}),$("body").on("click touchstart",".fb-registration-btn",function(a){$("#fb-messenger_witlabel_registration_panel")[0].focus()}),$("body").on("click touchstart","#fb-messenger_witlabel_registration_panel",function(a){"undefined"!=typeof yaCounter48721346&&yaCounter48721346.reachGoal("MessageUsHomepage"),ga(["_trackEvent","MessageUsHomepage","MessageUsHomepage"])});t.getStarted=function(){f.open({templateUrl:"views/getstarted.html",controller:"GetstartedCtrl"})},t.contactMessage="",t.email="",t.message="",t.modalEmail="",h.isFirstKey=!0,setTimeout(function(){$("#emailSendMessage").bind("input",function(a){h.isFirstKey&&setTimeout(function(){t.message=a.originalEvent.data,h.isFirstKey=!1,h.$apply()},0)})},0),setTimeout(function(){i.getObject("is_solutions_show")||($("#dropdown-apps-solutions-container").hover(function(){$(this).removeClass("hovered-open")}),$("#dropdown-apps-solutions-container").addClass("hovered-open")),i.putObject("is_solutions_show","true")}
2,2e3),t.sentMessage=function(a){if("undefined"!=typeof yaCounter48721346){var b=t.isBotFabrik?"MORE_DETAILS_FORM2":"MORE_DETAILS_FORM";yaCounter48721346.reachGoal(b)}if(!t.email&&!t.modalEmail)return void n.error({delay:6e4,message:t.translations.menu_rightPanel_errorMessag});var c=t.isBotFabrik?"whitelabel":"home";a||(a=t.isBotFabrik?"whitelabel_reply":"enterprise_reply"),d.post(e.host+"/contact",{email:t.email||t.modalEmail,message:t.message,source:c,template:a}).then(function(a){a&&(n.success({message:t.translations.menu_rightPanel_sucsesMessag}),t.email="",t.modalEmail="",$("#demoModal2").modal("hide"),t.message=t.isBotFabrik?t.translations.menu_rightPanel_BotFabric_message:t.translations.menu_rightPanel_message)},function(a){n.error({delay:6e4,message:a.message})})},t.subMenuBots={appsIsOpen:!1,solutionsIsOpen:!1},t.toggledApps=function(a){t.subMenuBots.appsIsOpen=a},t.toggledSolutions=function(a){t.subMenuBots.solutionsIsOpen=a},t.isBotFabrik=!1,t.isCatalog=!1,t.isNotLoginUrl=a.isNotLoginUrl,t.curentState=c,a.$watch("isNotLoginUrl",function(a){t.isNotLoginUrl=a}),t.addCollection=function(){f.open({templateUrl:"views/addcollection.html",controller:"AddcollectionCtrl",resolve:{collection:function(){}}}).result.then(function(a){},function(a){})},setTimeout(function(){if(t.authenticated){var a=document.getElementById("tf-iframe");a&&a.contentWindow.postMessage("hideEvent","https://widget.brn.ai")}},2e3),r();var y,z=0,A=0,B=0;if(window.onmousemove=function(a){a.pageY<z?++A>24&&a.clientY<30&&s():A=0,z=a.pageY,clearTimeout(y),y=setTimeout(function(){s()},6e4)},window.onscroll=function(a){$(window).scrollTop()>$("body").height()/3&&(this.oldScroll>this.scrollY?B=0:B++,this.oldScroll=this.scrollY,B>25&&s())},"ve.smsclosr.com"==window.location.hostname){document.getElementsByTagName("header")[0].style.display="none",t.curentState.isHelpBtn=!1,setTimeout(function(){var a=document.getElementsByClassName("conversation")[0];void 0!==a&&(a.style="margin-top: 158px !Important;")},2e3);const C=document.getElementsByTagName("head")[0],D=document.createElement("style");D.type="text/css",D.appendChild(document.createTextNode(".content-new{padding-top: 0px !Important};")),C.appendChild(D),h.page=null}}]),angular.module("brnaiApp").controller("AboutCtrl",function(){}),angular.module("brnaiApp").service("SessionService",["$cookies","$http","Restangular",function(a,b,c){}]),angular.module("brnaiApp").controller("AuthCtrl",["$scope","$http","$location","$stateParams","Auth","$state",function(a,b,c,d,e,f){e.loginByToken(d.requestToken)}]),angular.module("brnaiApp").factory("authInterceptor",["storage","$injector",function(a,b){return{request:function(b){if("https://ipinfo.io/json"!=b.url&&"https://api.sonftapp.com/sonft/file/ipfs/upload"!=b.url&&"https://api.sonftapp.com/sonft/file/minio/upload"!=b.url){b.headers=b.headers||{};var c=a.getItem("authData");c&&c.access_token&&(b.headers["X-Access-Token"]=c.access_token),b.headers["Portal-Id"]=a.getItem("PortalID")}return b},responseError:function(a){!1!==a.config.notification&&b.get("Notification").error({message:a.data.error,delay:6e4}),a&&"Token Expired"==a.data.error&&(window.location.href=b.get("getDomainData").redirectUrl)}}}]),angular.module("brnaiApp").service("Auth",["$http","$cookies","$rootScope","$location","$state","getDomainData","storage","firebaseNotifications",function(a,b,c,d,e,f,g,h){var i={loginByToken:function(b){"undefined"!==b&&b?a.get(f.host+"/tfid/login/"+b).then(function(a){g.setItem("authData",a.data.data),a.data.status&&(window.location.href=window.location.origin+"/v2/bots")}):window.location.href="http://brain.tfid.me/?redirect_url="+window.location.origin+"/auth"},logOut:function(){g.deleteItem("authData"),c.user=!1,window.location.href="http://brain.tfid.me/logout?redirect_url="+window.location.origin+"/auth"},getUser:function(){return g.getItem("authData")},isAuthenticated:function(){return angular.isDefined(g.getItem("authData"))},isAdmin:function(){return!!i.isAuthenticated()&&(console.log(g.getItem("authData").role),"admin"===g.getItem("authData").role)},isSubAdmin:function(){return!!i.isAuthenticated()&&"subadmin"===g.getItem("authData").role}};return i}]),angular.module("brnaiApp").directive("scroll",["$window","$anchorScroll","$timeout",function(a,b,c){return function(a,b,d){var e=b[0];b.bind("scroll",function(){if(0==e.scrollTop){var b=e.scrollHeight;a.$apply(d.scroll).then(function(){c(function(){e.scrollTop=e.scrollHeight-b})})}})}}]),angular.module("brnaiApp").controller("BotsCtrl",["$scope","$http","domain","getDomainData","Auth","$uibModal","$state","botService","$cookies","Notification","$location",function(a,b,c,d,e,f,g,h,i,j,k){function l(){a.paginationOptions.offset=0,a.paginationOptions.page=0,a.paginationOptions.lastPage=!1}function m(){if(a.inProgressActive)return void setTimeout(function(){m()},200);var c="";a.showNotifications&&a.selectedNotificationFilter>-1&&(c="&warnings."+a.notifications[a.selectedNotificationFilter].source+"="+a.notifications[a.selectedNotificationFilter].message),a.inProgressActive=!0,a.paginationOptionsActive.page=0,a.paginationOptionsActive.lastPage=!1,b.get(d.host+"/bots?active=1&limit="+a.paginationOptionsActive.limit+"&offset=0"+c+"&name="+a.main.searchBotKeyword).then(function(b){!0===b.data.status&&(a.activeBots=b.data.bots,a.loaderActive=!0),a.inProgressActive=!1},function(a){})}function n(){if(a.inProgressInactive)return void setTimeout(function(){n()},200);var c="";a.showNotifications&&a.selectedNotificationFilter>-1&&(c="&warnings."+a.notifications[a.selectedNotificationFilter].source+"="+a.notifications[a.selectedNotificationFilter].message),a.inProgressInactive=!0,a.paginationOptionsInactive.page=0,a.paginationOptionsInactive.lastPage=!1,b.get(d.host+"/bots?active=0&limit="+a.paginationOptionsInactive.limit+"&offset=0"+c+"&name="+a.main.searchBotKeyword).then(function(b){!0===b.data.status&&(a.inactiveBots=b.data.bots,a.loaderInacctive=!0),a.inProgressInactive=!1},function(a){})}function o(){b.get(d.host+"/user/notifications").then(function(b){!0===b.data.status&&(a.countAll=0,b.data.notifications.forEach(function(b){a.countAll+=b.count?b.count:0}),a.notifications=b.data.notifications,a.countAll>0&&(a.showNotifications=!0))},function(a){})}function p(){var b={};return a.main.searchBotKeyword&&(b.name=a.main.searchBotKeyword),b}window.location.href=window.location.origin+"/v2/bots",a.bots=[],a.activeBots=[],a.inactiveBots=[],a.laoder=!1,a.inProgress=!1,a.botService=h,a.loaderActive=!1,a.inProgressActive=!1,a.loaderInacctive=!1,a.inProgressInactive=!1,void 0!==k.search().name&&(a.main.searchBotKeyword=k.search().name),a.paginationOptions={limit:30,offset:0,page:0,lastPage:!1},a.paginationOptionsActive={limit:30,offset:0,page:0,lastPage:!1},a.paginationOptionsInactive={limit:30,offset:0,page:0,lastPage:!1},m(),n(),a.isTemplateNotification=!1,setTimeout(function(){if("true"!=i.get("isTemplateNotification")){a.isTemplateNotification=!0;var b=new Date,c=new Date(b.getTime()+72e5);i.put("isTemplateNotification","true",{expires:c}),a.$apply()}},2e3),a.goToTemplates=function(){},a.createBot=function(){f.open({templateUrl:"views/create-bot.html",controller:"CreateBotCtrl",windowClass:"edit-modal-window create"}
2).result.then(function(a){l(),m()},function(a){})},a.$watch("main.searchBotKeyword",function(a){l(),k.path("/bot").search(p()),m(),n()}),a.handleClick=function(c,e,f){f?b.post(d.host+"/bot/settings/"+c,{notifications:!1}).then(function(b){a.bots[e].settings.notifications=!1},function(a){console.error(a)}):b.post(d.host+"/bot/settings/"+c,{notifications:!0}).then(function(b){a.bots[e].settings.notifications=!0},function(a){console.error(a)})},a.disableBot=function(a,c){b.post(d.host+"/bot/active/"+a,{active:!1}).then(function(a){m(),n()},function(a){console.error(a)})},a.duplicateBot=function(a,c){b.post(d.host+"/bot",{account_id:e.getUser().account_id,name:c+"_clone",template:"duplicate",template_data:{bot_id:a}}).then(function(a){a.data.status?g.go("bot-settings.settings-general",{id:a.data.bot_id}):alert(a.data.error)},function(a){})},a.enableBot=function(a,c){b.post(d.host+"/bot/active/"+a,{active:!0}).then(function(a){m(),n()},function(a){console.error(a)})},a.goto=function(a){if(!a)return void j.error({delay:6e3,message:"Some error occured, please reload page and try again"});g.go("bot-abstract.bot-detail",{id:a})},a.getLink=function(a){return a?g.href("bot-abstract.bot-detail",{id:a}):void j.error({delay:6e3,message:"Some error occured, please reload page and try again"})},a.loadMoreActive=function(){a.inProgressActive||a.paginationOptionsActive.lastPage||(a.paginationOptionsActive.page++,a.inProgressActive=!0,b.get(d.host+"/bots?active=1&limit="+a.paginationOptionsActive.limit+"&offset="+a.paginationOptionsActive.page*a.paginationOptionsActive.limit+"&name="+a.main.searchBotKeyword).then(function(b){b.data.status&&b.data.bots.length?(b.data.bots.forEach(function(b){a.activeBots.push(b)}),a.loading=!1,a.inProgressActive=!1):(a.inProgressActive=!1,a.laoding=!1,a.paginationOptionsActive.lastPage=!0)}))},a.loadMoreInactive=function(){a.inProgress||a.paginationOptionsInactive.lastPage||(a.paginationOptionsInactive.page++,a.inProgress=!0,b.get(d.host+"/bots?active=0&limit="+a.paginationOptionsInactive.limit+"&offset="+a.paginationOptionsInactive.page*a.paginationOptionsInactive.limit+"&name="+a.main.searchBotKeyword).then(function(b){b.data.status&&b.data.bots.length?(b.data.bots.forEach(function(b){a.inactiveBots.push(b)}),a.loaderInacctive=!1,a.inProgressInactive=!1):(a.inProgressInactive=!1,a.loaderInacctive=!1,a.paginationOptionsInactive.lastPage=!0)}))},a.selectedNotificationFilter=-1,a.showNotifications=!1,o(),a.selectNotificationFilter=function(b){a.selectedNotificationFilter===b?a.selectedNotificationFilter=-1:a.selectedNotificationFilter=b,m(),n()},a.closeNotifications=function(){setTimeout(function(){a.selectedNotificationFilter=-1,a.notifications=[],a.countAll=0,a.$apply(),m(),n()},200),a.showNotifications=!1}}]),angular.module("brnaiApp").controller("CreateBotCtrl",["$scope","$http","$state","domain","getDomainData","Auth","$uibModalInstance",function(a,b,c,d,e,f,g){a.bots=[],a.templates=[],a.bot={account_id:f.getUser().account_id,name:"",username:"",description:"",template:"",template_data:{}},a.duplicate_bot={account_id:f.getUser().account_id,name:"",template:"duplicate",template_data:{}},a.template_bot={account_id:f.getUser().account_id,name:"",template:"content",template_data:{page_url:"",content:[]}},a.template={account_id:f.getUser().account_id,name:"",template:"duplicate",template_data:{}},b.get(e.host+"/bots?limit=1000&offset=0").then(function(b){!0===b.data.status&&(a.bots=b.data.bots)},function(a){}),b.get(e.host+"/bots/templates").then(function(b){!0===b.data.status&&(a.templates=b.data.bots)},function(a){}),a.createBot=function(){a.bot.template="blanc",b.post(e.host+"/bot",a.bot).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})},a.duplicateBot=function(){b.post(e.host+"/bot",a.duplicate_bot).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})},a.template_botFn=function(){b.post(e.host+"/bot",a.template).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})},a.templateBot=function(){a.news&&a.template_bot.template_data.content.push(a.news),a.videos&&a.template_bot.template_data.content.push(a.videos),a.photos&&a.template_bot.template_data.content.push(a.photos),a.events&&a.template_bot.template_data.content.push(a.events),b.post(e.host+"/bot",a.template_bot).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})},a.closeModal=function(){g.close("ok")}}]),angular.module("brnaiApp").controller("BotDetailCtrl",["$scope","$http","$stateParams","$uibModal","$state","getDomainData","Auth","$timeout","dateCharts","storage","$filter","botService","hintsService",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){b.get(f.host+"/bot/team/"+c.id).then(function(b){b.data.status&&(a.bot
2Creator=b.data.creator.name,a.botCreatorId=b.data.creator.id,a.team=b.data.team,a.userInfo=g.getUser())},function(a){})}function o(){l.getBot(c.id).then(function(b){a.botInfo=b.data,a.widgetsLoaded=Object.keys(a.botInfo.links).length>0,a.botInfo.account_id=g.getUser().account_id,a.botInfo.description&&(a.links=a.botInfo.description.split(","),a.botInfo.description.split(",").forEach(function(b){u(b)&&a.links.push(b)}),a.links=a.links.reduce(function(a,b){return a.indexOf(b)<0&&a.push(b),a},[])),a.warnings={};var c,d;if(a.botInfo.template&&a.botInfo.template.warnings&&a.botInfo.template.warnings.length)for(c in a.botInfo.template.warnings)d=a.botInfo.template.warnings[c],a.warnings[d.name]||(a.warnings[d.name]=d,m.getHint(d.name,"chatbrain_wizard").then(function(b){b&&(a.warnings[b.key].hint=b)}))})}function p(){var b=j.getItem("dashboardNewDate_botId:"+c.id);b?(a.date.startDate=k("date")(new Date(b.date.startDate),"yyyy-MM-dd"),a.date.endDate=k("date")(new Date(b.date.endDate),"yyyy-MM-dd")):(a.date.startDate=k("date")(new Date(Date.now()-86399136e5),"yyyy-MM-dd"),a.date.endDate=k("date")(new Date,"yyyy-MM-dd"))}function q(){b.get(f.host+"/report/"+c.id+"/structure?from="+a.date.startDate+"&to="+a.date.endDate+"&type=messages&group=subtype").then(function(b){b.data&&(a.pieMessages.data=b.data,a.pieMessages.pieData=[],a.pieMessages.data.data.forEach(function(b){a.pieMessages.pieData.push({name:b.name,y:Number(b.percent),total:Number(b.total)})}),a.pieMessages.data.pieData=a.pieMessages.pieData,a.pieMessages.data.title="Total Messages: ")})}function r(){b.get(f.host+"/report/"+c.id+"/structure?from="+a.date.startDate+"&to="+a.date.endDate+"&type=clients&group=subtype").then(function(b){b.data&&(a.pieUsers.data=b.data,a.pieUsers.pieData=[],a.pieUsers.data.data.forEach(function(b){a.pieUsers.pieData.push({name:b.name,y:Number(b.percent),total:Number(b.total)})}),a.pieUsers.data.pieData=a.pieUsers.pieData,a.pieUsers.data.title="Total Users: ")})}function s(){b.get(f.host+"/report/"+c.id+"/messages?type=in&limit=15&offset=0").then(function(b){b.data&&b.data.messages.length&&(a.botMessages=b.data.messages)})}function t(){b.get(f.host+"/report/"+c.id+"/top?sort=last&direction=desk&limit=10&offset=0").then(function(b){b.data&&b.data.clients.length&&b.data.clients.forEach(function(b){a.usersInfo.push(b)})})}function u(a){return null!=a.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g)}a.date={startDate:"",endDate:""},a.isButomShadow=!1,a.bot_id=c.id,a.widgetsLoaded=!1,a.botInfo={bot_id:c.id},a.botSocials={telegram:{name:"telegram",isActivated:!1},widget:{name:"widget",isActivated:!1},messenger:{name:"messenger",isActivated:!1},kik:{name:"kik",isActivated:!1},slack:{name:"slack",isActivated:!1},skype:{name:"skype",isActivated:!1},line:{name:"line",isActivated:!1},wechat:{name:"wechat",isActivated:!1},viber:{name:"viber",isActivated:!1},twitter:{name:"twitter",isActivated:!1},instagram:{name:"instagram",isActivated:!1},email:{name:"email",isActivated:!1},linkedin:{name:"linkedin",isActivated:!1},reddit:{name:"reddit",isActivated:!1},pinterest:{name:"pinterest",isActivated:!1}},a.importCode=!1,a.loader=!1,a.search_keyword="",a.pieMessages={data:{},pieData:[]},a.botMessages=[],a.pieUsers={data:{},pieData:[]},a.botCreator="",a.team=[],a.usersInfo=[],a.storageData=j.getItem("authData"),a.links=[],p(),q(),s(),r(),t(),a.main.authenticated.permissions.bot.team&&n(),h(function(){o()},0),b.get(f.host+"/scenarios/"+c.id).then(function(b){b.data.status&&(a.bot_scenarios=b.data.scenarios)},function(a){}),a.showElement=function(b){a.current=b},a.editBot=function(){d.open({templateUrl:"views/botedit.html",controller:"BoteditCtrl",resolve:{bot:function(){return angular.copy(a.botInfo)}}}).result.then(function(a){o()},function(a){})},a.activateWidget=function(){d.open({templateUrl:"views/provider.html",controller:"ProviderCtrl",windowClass:"large-modal"}).result.then(function(a){},function(a){})},a.uploadImg=function(){d.open({templateUrl:"views/uploadimg.html",controller:["$scope","Upload",function(a,b){a.upload=function(d,e){b.upload({url:f.host+"/bot/image/"+c.id,data:{file:b.dataUrltoBlob(d,e)}}).then(function(b){h(function(){a.result=b.data})},function(b){b.status>0&&(a.errorMsg=b.status+": "+b.data)},function(b){a.progress=parseInt(100*b.loaded/b.total)})}}],windowClass:"large-modal"}).result.then(function(a){},function(a){o()})},a.deleteBot=function(){confirm("Are you sure you want to delete bot?")&&b.delete(f.host+"/bot/"+c.id).then(function(a){a.data&&a.data.status&&1==a.data.status?e.go("bots"):alert("Something goes wrong...")},function(a){})},a.goto=function(a){e.go("conversations",{id:a})},a.handleClick=function(){a.botInfo.settings.notifications?b.post(f.host+"/bot/settings/"+a.bot_id,{notifications:!1}).then(function(a){o()}):b.post(f.host+"/bot/settings/"+a.bot_id,{notifications:!0}).then(function(a){o()})}}]),angular.module("brnaiApp").controller("TestcontrollerCtrl",["$scope","Auth",function(a,b){}]),angular.module("brnaiApp").controller("TelegramCtrl",["$scope","$http","domain","$stateParams","getDomainData","Auth","$uibModalInstance",function(a,b,c,d,e,f,g){a.telegram={account_id:f.getUser().account_id,provider_data:{username:"",token:""}},a.exist=!1,a.isProgres=!1,b.get(e.host+"/connection/"+d.id+"/telegram",{notification:!1}).then(function(b){b.data.provider_data.token.length&&(a.telegram.account_id=f.getUser().account_id,a.telegram.provider_data=b.data.provider_data,a.exist=!0)},function(a){}),a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();b.put(e.host+"/connection/telegram/"+d.id,a.telegram).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})}},a.addConnection=function(){b.post(e.host+"/connection/telegram/"+d.id,a.telegram).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})},a.close=function(){g.close("ok")},a.deleteConnection=function(){b.delete(e.host+"/connection/telegram/"+d.id).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})}}]),angular.module("brnaiApp").controller("KikCtrl",["$scope","$http","domain","$stateParams","getDomainData","Auth","$uibModalInstance",function(a,b,c,d,e,f,g){a.kik={account_id:f.getUser().account_id,provider_data:{username:"",api_key:""}},a.exist=!1,a.isProgres=!1,b.get(e.host+"/connection/"+d.id+"/kik",{notification:!1}).then(function(b){b&&b.data.status&&(a.kik.account_id=f.getUser().account_id,a.kik.provider_data=b.data.provider_data,a.exist=!0)},function(a){}),a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();b.put(e.host+"/connection/kik/"+d.id,a.kik).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})}},a.addConnection=function(){b.post(e.host+"/connection/kik/"+d.id,a.kik).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})},a.close=function(){g.close("ok")},a.deleteConnection=function(){b.delete(e.host+"/connection/kik/"+d.id).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})}}]),angular.module("brnaiApp").controller("SlackCtrl",["$scope","$http","domain","$stateParams","getDomainData","Auth","$uibModalInstance",function(a,b,c,d,e,f,g){a.slack={account_id:f.getUser().account_id,provider_data:{user:"",user_secret:""},redirect_url:e.host+"/message/receive/slack?bot_id="+d.id},a.exist=!1,a.isProgres=!1,b.get(e.host+"/connection/"+d.id+"/slack",{notification:!1}).then(function(b){b.data.status&&(a.slack.account_id=f.getUser().account_id,a.slack.provider_data=b.data.provider_data,a.exist=!0)},function(a){}),a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();b.put(e.host+"/connection/slack/"+d.id,a.slack).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})}},a.addConnection=function(){b.post(e.host+"/connection/slack/"+d.id,a.slack).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})},a.close=function(){g.close("ok")},a.deleteConnection=function(){b.delete(e.host+"/connection/slack/"+d.id).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})}}]),angular.module("brnaiApp").controller("WidgetCtrl",["$scope","$http","$stateParams","domain","$cookies","getDomainData",function(a,b,c,d,e,f){function g(){for(var a="",b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",c=0;c<15;c++)a+=b.charAt(Math.floor(Math.random()*b.length));return a}function h(){for(var a=document.cookie.split(";"),b={},d=0;d<a.length;d++){var e=a[d].split("=");b[e[0]]=unescape(e[1])}var f="bot_"+c.id;for(var g in b)if(g.trim()==f)return{status:!0,bot:f};return!1}if(a.widget_token="",a.messages=[],a.message={text:""},h().status)a.widget_token=e.getObject(h().bot);else{var i="bot_"+c.id;e.putObject(i,g()),a.widget_token=e.getObject(i)}b.get(f.host+"/widget/messages/"+c.id+"/"+a.widget_token).then(function(b){b.data.messages&&b.data.messages&&(a.messages=b.data.messages)},function(a){}),a.newDialog=function(){var d=g();b.get(f.host+"/widget/messages/"+c.id+"/"+d).then(function(b){a.messages=[]},function(a){})};var j=new Faye.Client(f.faye,{timeout:20,retry:5}) 3;j.subscribe("/messages_"+a.widget_token,function(b){"bot_"+c.id==a.widget_token&&(a.messages.push(b),a.$digest())}),a.sendMessage=function(){b.post(f.host+"/message/receive/widget/"+c.id,{user_id:a.widget_token,text:a.message.text}).then(function(b){a.message.text=""},function(a){console.error(a)})},b.get(f.host+"/bot/"+c.id).then(function(b){1==b.data.status&&(a.bot=b.data)},function(a){}),a.$on("$destoy",function(){j.cancel()})}]),angular.module("brnaiApp").factory("Faye",["$faye",function(a){return a("http://brn.dev.techfunder.de:27890/faye",function(a){})}]),angular.module("brnaiApp").controller("BoteditCtrl",["$scope","$stateParams","bot","$http","domain","$uibModalInstance","getDomainData","Upload",function(a,b,c,d,e,f,g,h){a.bot=c,a.imageLoading=!1,a.saveChanges=function(){d.put(g.host+"/bot/"+b.id,a.bot).then(function(a){1==a.data.status&&f.close("ok")},function(a){})},a.addFile=function(c,d){h.upload({url:g.host+"/bot/image/"+b.id+"?type=cover",data:{file:c}}).then(function(b){a.imageLoading=!1,b.data.status&&(a.bot.cover_image=b.data.image)},function(a){},function(b){a.imageLoading=!0})}}]),angular.module("brnaiApp").factory("getDomainData",function(){var a=this;return a.data={host:"https://api.brn.ai",faye:"https://faye-dev.brn.ai/faye",env:"dev",faye_port:27901,redirectUrl:"brn.ai"===window.location.hostname?"http://brain.tfid.me":"http://braindev.tfid.me",setHostApi:function(b){a.data.env=b,a.data.host="dev"==b?"https://api-dev.brn.ai":"https://api.brn.ai"},setFayeUrl:function(b){a.data.faye="dev"==b?"https://faye-dev.brn.ai/faye":"https://faye.brn.ai/faye/"}},a.data}),angular.module("brnaiApp").directive("scrollDown",function(){return{link:function(a,b,c){a.$watch(function(){return b.children().length},function(){b.scrollTop(b.prop("scrollHeight"))})}}}),angular.module("brnaiApp").controller("RmwidgetCtrl",["$scope","$http","$stateParams","domain","$cookies","getDomainData","$timeout","Upload","getIn
3putLanguage","ngAudio","$anchorScroll","$q",function(a,b,c,d,e,f,g,h,i,j,k,l){function m(a){for(var b="",c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",d=0;d<a;d++)b+=c.charAt(Math.floor(Math.random()*c.length));return b}function n(){g(function(){var a=document.getElementsByClassName("brn-widget-body");a[0].scrollTop=a[0].scrollHeight},100,!1)}function o(c,d){b.get("https://ipinfo.io/json").then(function(e){var g={};e?(g.city=e.data.city,g.country=e.data.country):(e.data.city||(g.city=""),e.data.country||(g.country="")),b.post(f.host+"/message/receive/widget",{user_id:c,type:"text",content:{text:"start"},bot_id:d,city:g.city,country:g.country}).then(function(b){b&&b.data.status&&!a.client_status?a.mainForm=!0:a.mainForm=!1},function(a){})})}if(a.widget_visibility="true"===c.open,a.widgetResizeStatus="true"===c.expand,a.voiceInProgress=!1,a.voiceSupport=!1,a.voiceMessage=null,a.widgetPosition=c.position,a.eventVisibility=!1,a.open=c.open,a.dataForm=!1,a.formDisabled=!1,a.widget_token="",a.messages=[],a.message={text:""},a.additionalInfo={name:"",phone:"",email:""},a.showAdditionalFormStatus=!1,a.mainForm=!1,a.welcomePlaceholder=i.getPlaceholder(window.navigator.language),a.sound=j.load(f.host+"/upload/audio/message.mp3"),a.widget_btns_title="Bot Control",a.botSocialsLinks=null,a.isLoading=!0,a.clientNotExist=!1,a.messagesOptions={limit:10,offset:0},a.initMessages=!0,b.get(f.host+"/widget/settings/"+c.id+"/"+c.token).then(function(b){a.widget_settings=b.data.settings||{showWelcomeDelay:"1"},a.botSocialsLinks=b.data.links,a.widget_settings.showWelcomeDelay+="000",1!=a.open?a.eventTimer=g(function(){a.eventVisibility=!0,parent.postMessage("event","*")},a.widget_settings.showWelcomeDelay):(a.widget_visibility=!0,g.cancel(a.eventTimer))}),e.getObject("user_widget_token")?a.widget_token=e.getObject("user_widget_token"):(e.putObject("user_widget_token",m(15)),a.widget_token=e.getObject("user_widget_token")),a.showPrevMessages=function(){var d=l.defer();return a.offsetChanged=!1,b.get(f.host+"/widget/messages/"+c.id+"/"+c.client_id+"?limit="+a.messagesOptions.limit+"&offset="+a.messagesOptions.offset).then(function(b){if(b&&b.data&&b.data.messages){var c=[];b.data.messages.forEach(function(a){c.push(a)}),a.initMessages?a.messages=b.data.messages:Array.prototype.unshift.apply(a.messages,c),b.data.messages.length>1&&(a.messagesOptions.offset=a.messagesOptions.offset+10,a.offsetChanged=!0),a.initMessages&&(g(function(){n()},1),a.initMessages=!1)}b&&b.data?b.data.client?a.client_status=!0:a.client_status=!1:a.clientNotExist=!0,d.resolve(),a.isLoading=!1},function(b){a.isLoading=!1,a.clientNotExist=!0,d.reject()}),d.promise},a.showPrevMessages(),a.showAdditionalForm=function(){a.showAdditionalFormStatus=!0},a.hideAdditionalForm=function(){a.additionalInfo.name&&a.additionalInfo.name.length?a.showAdditionalFormStatus=!0:a.showAdditionalFormStatus=!1},new Faye.Client(f.faye,{timeout:20,retry:5}).subscribe("/messages_"+c.client_id,function(b){if(b.bot_id==c.id){for(var d=0;d<a.messages.length;d++)if(angular.equals(a.messages[d],b))return;a.messages.push(b),a.$digest(),"bot"==b.author&&a.sound.play(),n(),a.messageLoadedDirection="bottom"}}),a.sendMessage=function(){var d={user_id:c.client_id,type:"text",content:{text:angular.copy(a.message.text)},bot_id:c.id};a.message.text="",b.post(f.host+"/message/receive/widget",d).then(function(b){b&&b.data.status&&!a.client_status?a.mainForm=!0:a.mainForm=!1},function(a){})},a.closeWidget=function(){parent.postMessage("close","*"),a.eventVisibility=!1,a.widget_visibility=!1},a.closeEvent=function(){parent.postMessage("closeEvent","*"),a.eventVisibility=!1},a.resizeWidget=function(b){a.widgetResizeStatus=!a.widgetResizeStatus,parent.postMessage("resize","*"),b.stopPropagation()},a.openWidget=function(b){!a.messages.length&&a.clientNotExist&&o(c.client_id,c.id),parent.postMessage("open","*"),a.widget_visibility=!0,g.cancel(a.eventTimer),n()},a.sendContacts=function(){b.post(f.host+"/widget/contacts/"+c.id+"/"+c.client_id,a.additionalInfo).then(function(b){b&&b.data.status&&(a.mainForm=!1,a.client_status=!0)})},a.addAttachment=function(d,e,g){var i={content:{}};d&&d.type&&(i.bot_id=c.id,i.user_id=c.client_id,d.type.indexOf("image")>-1?(i.type="image",i.content.url=f.host+"/message/attachment/image"):(i.type="file",i.content.url=f.host+"/message/attachment/file",i.content.name=d.name),h.upload({url:i.content.url,data:{file:d}}).then(function(c){a.formDisabled=!1,a.message.text="",c.data.status?(i.content.url=c.data.url,b.post(f.host+"/message/receive/widget",i).then(function(a){},function(a){})):alert(c.data.error)},function(a){},function(b){a.formDisabled=!0,a.message.text="Downloaded: "+parseInt(100*b.loaded/b.total)+"%"}))},b.get(f.host+"/bot/"+c.id).then(function(b){1==b.data.status&&(a.bot=b.data)},function(a){}),"webkitSpeechRecognition"in window){a.voiceSupport=!0;var p={"*val":function(a){b.post(f.host+"/message/receive/widget",{user_id:c.client_id,type:"text",content:{text:a},bot_id:c.id}).then(function(a){},function(a){})}};annyang.addCommands(p),annyang.setLanguage("ru"),annyang.debug(),a.voiceStart=function(){a.voiceInProgress=!a.voiceInProgress,annyang.start()},a.voiceEnd=function(){a.voiceInProgress=!a.voiceInProgress,annyang.abort()}}a.openSocial=function(a){window.open(a,"_blank").focus()}}]),angular.module("brnaiApp").controller("ConversationsCtrl",["$scope","$http","getDomainData","$stateParams","$uibModal","Upload","ngAudio","$filter","learningService",function(a,b,c,d,e,f,g,h,i){function j(a,b){for(var c=0;c<a.length;c++){if(b.client&&a[c].client.client_id==b.client.client_id)return!0;
3if(b.client_id&&a[c].client.client_id==b.client_id)return!0}return!1}function k(){a.isLoading=!0,b.get(c.host+"/clients/"+d.id+"?limit="+a.clientsParams.limit+"&offset="+a.clientsParams.offset).then(function(e){if(e.data.status&&e.data.clients&&(o=0!==e.data.clients.length,e.data.clients.forEach(function(b){a.clients.push(b)})),d.client_id&&!a.queryClient){var f={},g=a.clients.filter(function(a){return a.client_id==d.client_id});g[0]?(f=g[0],a.queryClient=!0,b.get(c.host+"/client/messages/"+d.id+"/"+d.client_id).then(function(b){f.messages=b.data.messages,a.addDialog(f)})):b.get(c.host+"/client/"+d.client_id).then(function(e){f=e.data,a.queryClient=!0,b.get(c.host+"/client/messages/"+d.id+"/"+d.client_id).then(function(b){f.messages=b.data.messages,a.addDialog(f)})})}})}function l(){return $("input").each(function(){$(this).trigger("blur")}),!($(".ng-invalid").length>0)||(setTimeout(function(){$($(".ng-invalid")[0]).trigger("focus"),a.$apply()},100),!1)}function m(a){var b=h("filter")(a.messages,{author:"client"});b[b.length-1]&&b[b.length-1].created&&(a.last_seen=b[b.length-1].created)}a.bot_id=d.id,a.clients=[],a.dialogs=[],a.message={text:""},a.fileLoaded=!1,a.dialog={text:""},a.sound=g.load(c.host+"/upload/audio/message.mp3"),a.clientsParams={limit:30,offset:0},a.queryClient=!1,a.selectedDialog="",a.dialogsFilterOptions=[{name:"all dialogs",value:""},{name:"manual mode",value:"manual"},{name:"auto mode",value:"auto"}],k(),a.blurDialog=function(){a.selectedDialog=""},a.isOnline=function(a){return new Date-Date.parse(a)<3e5};var n={};a.addDialog=function(e){b.get(c.host+"/client/messages/"+d.id+"/"+e.client_id).then(function(f){if(f.data.status){var g={client:e,messages:f.data.messages,lastLength:0};m(g),j(a.dialogs,g)||(a.dialogs.splice(0,0,g),a.activeClient_id=e.client_id,n[e.client_id]=!0,setTimeout(function(){document.getElementById(e.client_id).focus();var a="#"+e.client_id+"_messages";$(a).on("scroll",function(){0==$(a).scrollTop()&&n[e.client_id]&&(n[e.client_id]=!1,$(a).scrollTop(1),g.messages.length>g.lastLength&&(g.lastLength=g.messages.length,b.get(c.host+"/client/messages/"+d.id+"/"+e.client_id+"?offset="+g.messages.length).then(function(b){b.data.status&&(g.messages=b.data.messages.concat(g.messages)),n[e.client_id]=!0,$(a).scrollTop(1)})))})},100))}},function(a){})};var o=!0;a.getMoreClients=function(){o&&(o=!1,a.clientsParams.offset+=a.clientsParams.limit,k())},a.addCards=function(b){e.open({templateUrl:"views/convcard.html",controller:"ConvcardCtrl",windowClass:"large-modal no-border-modal",resolve:{dialog:b}}).result.then(function(a){},function(a){}),a.setBoxShadow(b)},a.sendMessage=function(d){b.post(c.host+"/message/send/"+d.client.client_id,{type:"text",content:{text:d.text}}
3).then(function(b){b.data.status&&a.dialogs.forEach(function(a){if(a.client.client_id==d.client.client_id){d.text,new Date;d.text=""}})},function(a){console.error(a)})},a.closeDialog=function(b){$("#"+b.client.client_id+"_messages").unbind("scroll"),delete n[b.client.client_id],a.dialogs.splice(a.dialogs.indexOf(b),1)},a.setBoxShadow=function(b){b&&b.client.client_id&&(a.selectedDialog=b.client.client_id)},a.changeDialogMode=function(a,e){var f="auto"===e?"manual":"auto";b.post(c.host+"/client/mode/"+a.client.client_id,{mode:f,bot_id:d.id}).then(function(b){b.data&&b.data.status&&(a.client.mode=f)})},a.addAttachment=function(e,g,h){a.fileLoaded=!1;var i={content:{}};e&&e.type&&(e.type.indexOf("image")>-1?(i.type="image",i.content.url=c.host+"/attachment/image/"+d.id):(i.type="file",i.content.url=c.host+"/attachment/file/"+d.id,i.content.name=e.name),f.upload({url:i.content.url,data:{file:e}}).then(function(a){h.disabled=!1,a.data.status?(h.text="",i.content.url=a.data.url,b.post(c.host+"/message/send/"+h.client.client_id,i).then(function(a){},function(a){})):alert(a.data.error)},function(a){},function(a){h.disabled=!0,h.text="Downloaded "+parseInt(100*a.loaded/a.total)+"%"}))};var p=new Faye.Client(c.faye,{timeout:20,retry:5}),q=p.subscribe("/bot_"+d.id,function(b){var c=!1;
3"client"==b.author&&a.sound.play(),a.dialogs.forEach(function(d){if(d.client.client_id==b.client_id){c=!0;var e={author:b.author,message:b.message,created:new Date};return d.messages.push(e),a.$digest(),!0}});var d=a.clients.filter(function(a){return a.client_id==b.client_id});if(!c){var e=d.length?d[0]:{client_id:b.client_id,mode:"auto",name:b.client_name,messages:[]};e.messages||(e.messages=[]),e.messages.push({author:b.author,text:b.message.content.text,created:new Date}),"bot"!=b.author&&a.addDialog(e)}});a.$on("$destroy",function(){a.dialogs.forEach(function(a){$("#"+a.client.client_id+"_messages").unbind("scroll"),delete n[a.client.client_id]}),q.cancel(),a.sound.stop()}),a.getShortName=function(a){if(!a)return a;var b=a,c=b.split(" ");return b=c[0]?c[0]:"",b+=c[1]?" "+c[1][0]+".":""},a.isDialogActive=function(b){return j(a.dialogs,b)},a.checkIsLast=function(b,c){var d=!0;b=parseInt(b),c=parseInt(c);for(var e=b+1;e<a.dialogs[c].messages.length;e++)if("client"===a.dialogs[c].messages[e].author)return d=!1;return d},a.existIntentModal=function(d,f,g){var h=a.main.translations;e.open({templateUrl:"views/widget/add-to-intent.html",windowClass:"large-modal no-border-modal",controller:["$scope","Upload","$state","$stateParams","learningService","$uibModalInstance","Notification",function(a,e,g,i,j,k,l){b.get(c.host+"/scenarios/"+i.id).then(function(b){b.data.status&&(a.bot_scenarios=b.data.scenarios)},function(a){}),a.isSendtoUser=f,a.text=d,a.intents=[],a.translations=h,j.getIntents(i.id,"").then(function(b){a.intents=b},function(b){a.intents=[]}),a.addExpression=function(b){var c={bot_id:i.id,expression:a.text};j.insertExpressionToIntent(c,a.intent.intenty_id).then(function(c){c.status?(l.success({message:'Expression "'+a.text+'" was successfully added to intent'}),b?k.close({status:"update_send",data:a.intent.intenty_id}):k.close({status:"update",data:null})):(l.error({delay:6e4,message:'Expression "'+a.text+"\" wasn't added"}),k.close({status:"error",data:null}))})},a.close=function(){k.close({status:"ok",data:null})}}]}).result.then(function(b){"update_send"===b.status&&i.runIntent(b.data,a.dialogs[g].client.client_id).then(function(a){})},function(a){})},a.existIntentAsResponseModal=function(d,f,g){var h=a.main.translations;e.open({templateUrl:"views/widget/add-to-intent-as-response.html",windowClass:"large-modal no-border-modal",controller:["$scope","Upload","$state","$stateParams","learningService","$uibModalInstance","Notification",function(a,e,g,i,j,k,l){b.get(c.host+"/scenarios/"+i.id).then(function(b){b.data.status&&(a.bot_scenarios=b.data.scenarios)},function(a){}),a.isSendtoUser=f,a.text=d,a.intents=[],a.translations=h,j.getIntents(i.id,"").then(function(b){angular.forEach(b,function(a){"reply"==a.response.type&&this.push(a)},a.intents)},function(b){a.intents=[]}),a.addResponse=function(b){a.intent.response.replies.push(a.text);var c=[];$.each(a.intent.response.replies,function(a,b){-1===$.inArray(b,c)&&c.push(b)}),a.intent.response.replies=c,j.updateIntent(a.intent.intent_id,a.intent).then(function(c){c.status?(l.success({message:'Response "'+a.text+'" was successfully added to intent'}),b?k.close({status:"update_send",data:a.intent.intent_id}):k.close({status:"update",data:null})):(l.error({delay:6e4,message:'Response "'+a.text+"\" wasn't added"}),k.close({status:"error",data:null}))})},a.close=function(){k.close({status:"ok",data:null})}}]}).result.then(function(b){"update_send"===b.status&&i.runIntent(b.data,a.dialogs[g].client.client_id).then(function(a){})},function(a){})},a.newIntentModal=function(d,f,g){var h=a.main.translations;e.open({templateUrl:"views/widget/create-intent.html",windowClass:"large-modal no-border-modal",controller:["$scope","Upload","$state","$stateParams","learningService","$uibModalInstance","Notification",function(a,e,g,i,j,k,m){b.get(c.host+"/scenarios/"+i.id).then(function(b){b.data.status&&(a.bot_scenarios=b.data.scenarios)},function(a){}),a.translations=h,a.isSendtoUser=f,a.reply={name:""},a.text=d,a.intent_types=[{type:"scenario",label:"Scenario"},{type:"reply",label:"Reply"}],a.newIntent={name:"",response:{type:a.intent_types[1].type,scenario_id:null}},a.intents=[],j.getIntents(i.id,"").then(function(b){a.intents=b},function(b){a.intents=[]}),a.close=function(){k.close({status:"ok",data:null})},a.addReply=function(){a.reply.name.length&&(void 0==a.newIntent.response.replies?(delete a.newIntent.response.scenario_id,a.newIntent.response.replies=[],a.newIntent.response.replies.push(a.reply.name)):a.newIntent.response.replies.push(a.reply.name),a.reply.name="")},a.handleScenarioChange=function(){delete a.newIntent.response.replies},a.deleteReply=function(b){a.newIntent.response.replies.splice(b,1)},a.addNewIntent=function(b){if(l())return void(""==a.newIntent.name&&m.error({delay:6e4,message:"Some required fields are empty"}));a.newIntent={bot_id:i.id,name:a.newIntent.name,expressions:[{text:a.text}],response:a.newIntent.response}
3,j.createIntent(a.newIntent).then(function(c){c.status?(m.success({message:'Intent "'+a.newIntent.name+'" was successfully created'}),b?k.close({status:"create_send",data:c.intent.intent_id}):k.close({status:"create",data:null})):(m.error({delay:6e4,message:'Intent "'+a.newIntent.name+"\" wasn't created"}),k.close({status:"error",data:null}))})}}]}).result.then(function(b){"create_send"===b.status&&i.runIntent(b.data,a.dialogs[g].client.client_id).then(function(a){})},function(a){})},function(){d.user&&a.addDialog(d.user)}()}]),angular.module("brnaiApp").factory("getRss",["$http",function(a){return{parseFeed:function(b){return a.jsonp("//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=50&callback=JSON_CALLBACK&q="+encodeURIComponent(b))}}}]),angular.module("brnaiApp").service("getComponent",function(){function a(a){for(var b="",c="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",d=0;d<a;d++)b+=c.charAt(Math.floor(Math.random()*c.length));return b}var b=[{name:"input",object:{question:"",save:"",buttons:[],question_params:[],buttons_data:{key:"",scope:""},title_template:"",content_template:"",phrases:[],reply_type:null,retry_message:"",quick_replies:[],is_lead_data:!1,close_lead:!1,reply_filter:{min:{operator:null,value:null},max:{operator:null,value:null}}}},{name:"input",object:{question:"",save:"",buttons:[],question_params:[],buttons_data:{key:"",scope:""},title_template:"",content_template:"",phrases:[],reply_type:"action",retry_message:"",quick_replies:[{id:"ActMenu_"+a(4),type:"text",title:"",content:"",action:{type:"",step:null,scenario:null}}],is_lead_data:!1,close_lead:!1,reply_filter:{min:{operator:null,value:null},max:{operator:null,value:null}}},meta:{type:"menu"}},{name:"text",object:{content:"",params:[],buttons:[],phrases:[],quick_replies:[]}},{name:"text",object:{content:"",phrases:[]},meta:{type:"content"}},{name:"text",object:{content:"",buttons:[]},meta:{type:"buttons"}},{name:"pattern",object:{regex:"",save:[""]}},{name:"data",object:{drop:[],save:[],push:[],pull:[],set:[],stringify:{data:"",value:"",template:null},split:{array:"",value:"",separator:null},join:{array:"",value:"",separator:null},command:null},meta:{type:"save"}},{name:"data",object:{drop:[],save:[],push:[],pull:[],set:[],stringify:{data:"",value:"",template:null},split:{array:"",value:"",separator:null},join:{array:"",value:"",separator:null},command:null},meta:{type:"push"}},{name:"data",object:{drop:[],save:[],push:[],pull:[],set:[],stringify:{data:"",value:"",template:null},split:{array:"",value:"",separator:null},join:{array:"",value:"",separator:null},command:null},meta:{type:"pull"}},{name:"data",object:{drop:[],save:[],push:[],pull:[],set:[],stringify:{data:"",value:"",template:null},split:{array:"",value:"",separator:null},join:{array:"",value:"",separator:null},command:null},meta:{type:"set"}},{name:"data",object:{drop:[],save:[],push:[],pull:[],set:[],stringify:{data:"",value:"",template:null},split:{array:"",value:"",separator:null},join:{array:"",value:"",separator:null},command:null},meta:{type:"drop"}},{name:"data",object:{drop:[],save:[],push:[],pull:[],set:[],stringify:{data:"",value:"",template:null},split:{array:"",value:"",separator:null},join:{array:"",value:"",separator:null},command:null},meta:{type:"stringify"}},{name:"data",object:{drop:[],save:[],push:[],pull:[],set:[],stringify:{data:"",value:"",template:null},split:{array:"",value:"",separator:null},join:{array:"",value:"",separator:null},command:null},meta:{type:"join"}},{name:"data",object:{drop:[],save:[],push:[],pull:[],set:[],stringify:{data:"",value:"",template:null},split:{array:"",value:"",separator:null},join:{array:"",value:"",separator:null},command:null},meta:{type:"split"}},{name:"rest",object:{method:"GET",url:"",url_params:[],authorization:{type:"Basic"},headers:{"Content-Type":"application/json"},data:[{type:"static",key:"",value:""},{type:"variable",key:"",param:""}],input:""}},{name:"rest",object:{name:"",code:"",discount:"",personalized:!1},meta:{type:"promo"}},{name:"output",object:{data:"",template:"",type:""}},{name:"existence",object:{params:[""]}},{name:"card",object:{data:"",link:"",image:"",text:"",type:"dynamic",title:"",collapse:[],buttons:[],template:{type:"generic",options:{}},quick_replies:[]}},{name:"card",object:{category:"",elements:[],quick_replies:[],type:"static"},meta:{type:"category"}},{name:"elasticsearch",object:{command:"index",data:{scope:"user",key:""},index:{value:"",params:[]},type:"",fields:{value:"",params:[]},id:""}},{name:"suggest",object:{text:"",buttons:[]}},{name:"nested",object:{scenario:""}},{name:"condition",object:{value:"",target:{value:"",params:[]},operator:"equal"}},{name:"tag",object:{command:"change",include:[],exclude:[]}},{name:"tag",object:{command:"check",include:[],exclude:[]},meta:{type:"check_tags"}},{name:"delay",object:{delay:0,measure_unit:"seconds",action_required:!1}},{name:"attachment",object:{type:"",url:"",url_params:[{replace:"",scope:"",param:""}],quick_replies:[]}},{name:"expression",object:{expression:"",params:[],save:""}},{name:"soap",object:{url:"",method:"",raw:{body:"",params:[]}
3,input:{scope:"user",key:""}}},{name:"collection",object:{command:"find",offset:0,collection:"",input:"",filters:[{field:"",condition:"",value:""}],sort:{field:"",direction:""}}},{name:"mode",object:{reply:"",operator:""}},{name:"subscription",object:{reply:"",command:""}},{name:"scenario",object:{scenario:"",step:""}},{name:"entity",object:{items:[{entity:"",multiple:"",save:"",title:""}],step:""}},{name:"switch",object:{switch:[{conditions:[{true:!0,operator:"equal",target:"",value:""}],operator:"and",name:"Case_"+a(4)}]},action:{default:""}},{name:"date",object:{input:"",output:"",format:"",operator:"",date:{minute:""},save:"",type:"minute"},action:{success:"",fail:""}},{name:"notification",object:{type:"push",title:"",message:"",user:""}},{name:"intent",object:{allow_best_reply:!1,min_confidence:null},action:{next:null}},{name:"product",object:{offset:"0",category:"",input:"",filter:"",sort:{field:"",direction:""}}},{name:"offer",object:{product_id:"",text:"",button_title:""}},{name:"person",object:{command:"find",profile:"",attributes:"",result:"",self:!0,person:""}},{name:"label",object:{command:"check",include:[],exclude:[]},meta:{type:"check"}},{name:"label",object:{command:"change",add:[],remove:[]},meta:{type:"edit"}},{name:"customer",object:{type:"register",login:"",password:"",token:"",error_message:"",profile:""}},{name:"switch",object:{switch:[]},meta:{type:"platform"}},{name:"schedule",object:{delay:10,measure_unit:"minutes",schedule:{days:[]}}},{name:"action",object:{action:"like"},meta:{type:"like"}},{name:"action",object:{action:"ban"},meta:{type:"ban"}},{name:"action",object:{action:"unban",data:{group_name:""}},meta:{type:"unban"}},{name:"action",object:{action:"invite_link",data:{group_name:"",save:""}},meta:{type:"invite_link"}},{name:"service",object:{service:"ethereum",method:"CheckSignature",data:{address:{value:"",is_variable:!0},signature:{value:"",is_variable:!0},nonce:{value:"",is_variable:!0},message:{value:""}},save:""},meta:{type:"ethereum"}}];return{getC:function(a,c){var d={};return b.forEach(function(b){angular.equals({},d)&&(c&&b.meta?a===b.name&&c===b.meta.type&&(d=angular.copy(b.object)):c||b.meta||b.name!==a||(d=angular.copy(b.object)))}),d},makeId:function(b){return a(b)}}}),angular.module("brnaiApp").controller("EditscenarioCtrl",["$scope","$http","$stateParams","getDomainData","getComponent","$uibModal","Upload","scenariosInitData","$timeout","Notification","$cookies",function(a,b,c,d,e,f,g,h,i,j,k){function l(a){for(var b="",c="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",d=0;d<a;d++)b+=c.charAt(Math.floor(Math.random()*c.length));return b}function m(a,b){var c=[];return angular.forEach(a,function(a,d){-1==b.filter.indexOf(a[b.itemName])&&c.push(a)}),c}function n(b){for(var c=0;c<a.categories.length;c++)if(b==a.categories[c].intent_id)return a.categories[c];return!1}a.$parent.bot_id=c.id,a.$parent.gui=null,a.$parent.scenario_id=c.scenario,a.cronTest="",a.loader=!0,a.modalBtnVisible=!0,a.categoryId={},a.quickRepliesTypes=h.quickRepliesTypes,a.cardBtnTypes=h.cardBtnTypes,a.staticItem=h.staticItem,a.variableItem=h.variableItem,a.dateOperators=h.dateOperators,a.outputFormat=h.outputFormat,a.newHeader=h.newHeader,a.types=h.types,a.attachments=h.attachments,a.scopes=h.scopes,a.scopesSystem=h.scopesSystem,a.conditions=h.conditions,a.authArray=h.authArray,a.fields=h.fields,a.methods=h.methods,a.saveTypes=h.saveTypes,a.dataRest=h.dataRest,a.commands=h.commands,a.elasticTypes=h.elasticTypes,a.dataCommands=h.dataCommands,a.cardTempalteType=h.cardTempalteType,a.topElement=h.topElement,a.subscriptionCommands=h.subscriptionCommands,a.autopostingCommands=h.autopostingCommands,a.jsonOptions={mode:"code"},k.putObject("functions_mode","advanced"),k.getObject("functions_mode")&&(a.$parent.advanced.functions_mode=k.getObject("functions_mode")),a.tags=[],a.operators=[],a.collections=[],a.entitiesList=[],a.switchCases=[],a.restHeaders={},a.collectionFieldsList=[],a.conditionsFilter=h.conditionsFilter,a.commandsList=[{name:"View",value:"view"},{name:"Add",value:"add"},{name:"Remove",value:"remove"}],a.replyTypes=[{name:"Date",value:"date"},{name:"Number",value:"number"},{name:"Email",value:"email"},{name:"Url",value:"url"},{name:"Attachment",value:"attachment"},{name:"Image",value:"image"},{name:"Audio",value:"audio"},{name:"Video",value:"video"},{name:"File",value:"file"},{name:"Text",value:"text"}],a.cardType=[{name:"Dynamic",value:"dynamic"},{name:"Static",value:"static"}],a.scopesList=[{name:"User",value:"user"},{name:"Scenario",value:"scenario"}],a.customerCollections=[{name:"Register",value:"register"},{name:"Login",value:"login"},{name:"Logout",value:"logout"}],a.orderCollections=[{name:"View",value:"view"},{name:"Cart",value:"cart"},{name:"Variable",value:"variable"}],a.collectionCommands=[{name:"find",value:"find"},{name:"insert",value:"insert"}],a.sortsFilter=[{name:"default",value:""},{name:"title",value:"title"},{name:"description",value:"description"},{name:"price",value:"price"}],a.sortsDirectionFilter=[{name:"desc",value:"desc"},{name:"asc",value:"asc"}],a.storageFilter=[{name:"scenario",value:"scenario"},{name:"user",value:"user"},{name:"system",value:"system"}],a.blockchainActionList=[{name:"Create account ",value:"create"},{name:"View account",value:"view"}],a.transactionActionList=[{name:"Transfer",value:"transfer"},{name:"Spend",value:"spend"},{name:"Receive",value:"receive"}],a.scenarioHelperOptions={findStepById:function(b){for(var c=0;c<a.scenarios.steps.length;c++)if(a.scenarios.steps[c].id==b)return{index:c+1,step:a.scenarios.steps[c]};return{index:null,step:null}}}
3,i(function(){b.get(d.host+"/intents/"+c.id).then(function(b){a.categories=b.data.intents,a.categories.forEach(function(a){a.type="intelligent",a.value=a.intent_id}),a.categories.splice(0,0,{type:null,value:null,intent_id:null,name:"Don't use intelligent intent"});var c={};a.scenarios&&a.scenarios.intents.length?a.categorySelect=a.scenarios.intents[0].intent_id:a.categories.length&&(a.categorySelect=a.categories[0].intent_id,c.type=a.categories[0].type,c.intent_id=a.categories[0].value,null===c.type?a.scenarios.intents=[]:a.scenarios.intents[0]=c)})},0),b.get(d.host+"/collections/"+c.id).then(function(c){c.data.collections.forEach(function(c){a.collections.push({name:c.name,value:c.collection_id}),b.get(d.host+"/collection/"+c.collection_id).then(function(b){a.collectionFields=b.data.fields,a.collectionFieldsList[c.collection_id]=b.data.fields})}),Object.keys(a.virualAutopost).forEach(function(b){a.virualAutopost[b].filterArray=m(a.collections,{filter:a.scenarios.steps[b].properties.autoposting.collections,itemName:"value"})})}),b.get(d.host+"/entities/"+c.id+"?system=true").then(function(b){a.entitiesList=b.data.entities}),b.get(d.host+"/tags/"+c.id).then(function(b){a.tags=b.data.tags},function(b){a.tags=[]}),b.get(d.host+"/bot/team/"+c.id).then(function(b){a.operators.push({name:b.data.creator.name,value:b.data.creator.id}),b.data.status&&b.data.team&&b.data.team.forEach(function(b){var c={name:b.name,value:b.id};a.operators.push(c)})}),a.typeSwitchOnNotification=function(b){"push"==a.scenarios.steps[b].properties.type?(a.scenarios.steps[b].properties.user="",delete a.scenarios.steps[b].properties.email):(a.scenarios.steps[b].properties.email="",delete a.scenarios.steps[b].properties.user)},a.doFields=function(c,e){b.get(d.host+"/collection/"+c).then(function(b){a.collectionFields=b.data.fields,a.scenarios.steps[e].properties.filters=[]})},a.addStep=function(b){var c=e.getC(b);a.scenarios.steps.push(new Object({name:"",component:b,properties:c}))},a.switchCardBtnTypes=function(b,c){"link"==a.scenarios.steps[c].properties.buttons[b].type?a.scenarios.steps[c].properties.buttons[b].webview=!1:delete a.scenarios.steps[c].properties.buttons[b].webview},a.handleAddParam=function(b,c,d){switch(c){case"targetParams":a.scenarios.steps[b].properties.target.params.push(new Object({replace:"",scope:"",param:""}));break;case"text":a.scenarios.steps[b].properties.params.push(new Object({replace:"",scope:"",param:""}));break;case"existence":a.scenarios.steps[b].properties.params.push(new Object({scope:"",key:""}));break;case"save":a.scenarios.steps[b].properties.save.push(new Object({scope:"",param:""}));break;case"raw":a.scenarios.steps[b].properties.raw.params.push(new Object({replace:"",scope:"",param:""}));break;case"drop":a.scenarios.steps[b].properties.drop.push(new Object({scope:"",key:""}));break;case"header":a.scenarios.steps[b].properties.headers["header_"+Object.keys(a.scenarios.steps[b].properties.headers).length]="";break;case"static":a.scenarios.steps[b].properties.data.push(new Object({type:"static",key:"",value:""}));break;case"variable":a.scenarios.steps[b].properties.data.push(new Object({type:"variable",key:"",scope:"",param:""}));break;case"saveType":delete a.scenarios.steps[b].properties.input,a.scenarios.steps[b].properties.save.push(new Object({key:"",scope:"",param:""}));break;case"rest":a.scenarios.steps[b].properties.url_params.push(new Object({replace:"",scope:"",param:""}));break;case"saveParam":a.scenarios.steps[b].properties.save.push(new Object({scope:"",key:"",value:""}));break;case"collapse":a.scenarios.steps[b].properties.collapse.push(new Object({title:"",content:""}));break;case"linkBtn":"dynamic"==a.scenarios.steps[b].properties.type&&a.scenarios.steps[b].properties.buttons.push(new Object({type:"link",title:"",url:""})),"static"==a.scenarios.steps[b].properties.type&&a.scenarios.steps[b].properties.elements[d].buttons.push(new Object({type:"link",title:"",url:""}));break;case"elasticsearch":a.scenarios.steps[b].properties.index.params.push(new Object({replace:"",param:"",scope:""}));break;case"fields":a.scenarios.steps[b].properties.fields.params.push(new Object({replace:"",param:"",scope:""}));break;case"score":a.scenarios.steps[b].properties.score.params.push(new Object({replace:"",param:"",scope:""}));break;case"suggetBtn":a.scenarios.steps[b].properties.buttons.push(new Object({title:"",content:""}));break;case"addBtnToInput":a.scenarios.steps[b].properties.buttons.push(new Object({title:"",content:{value:"",params:[]}}));break;case"addQuickReply":a.scenarios.steps[b].properties.quick_replies||(a.scenarios.steps[b].properties.quick_replies=[]), 4a.scenarios.steps[b].properties.quick_replies.push(new Object({type:"text",title:"",content:"",url:""}));break;case"addParamToInputBtns":break;case"suggestBtn":"dynamic"==a.scenarios.steps[b].properties.type&&a.scenarios.steps[b].properties.buttons.push(new Object({type:"suggest",title:"",content:""})),"static"==a.scenarios.steps[b].properties.type&&a.scenarios.steps[b].properties.elements[d].buttons.push(new Object({type:"suggest",title:"",content:""}));break;case"pushParam":a.scenarios.steps[b].properties.push.push(new Object({array:{key:"",scope:""},value:{key:"",scope:""}}));break;case"pullParam":a.scenarios.steps[b].properties.pull.push(new Object({array:{key:"",scope:""},value:{key:"",scope:""}}));break;case"setParam":a.scenarios.steps[b].properties.set.push(new Object({from:{key:"",scope:"",key_params:[]},to:{key:"",scope:""}}));break;case"attachmentParam":a.scenarios.steps[b].properties.url_params.push(new Object({replace:"",scope:"",param:""}));break;case"attachmentNameParam":a.scenarios.steps[b].properties.name_params.push(new Object({replace:"",scope:"",param:""}));break;case"expression":a.scenarios.steps[b].properties.params.push(new Object({replace:"",scope:"",param:""}));case"card":"generic"===a.scenarios.steps[b].properties.template.type?a.scenarios.steps[b].properties.template.options={}:(a.scenarios.steps[b].properties.template.options={},a.scenarios.steps[b].properties.template.options.top_element_style="large")}},a.addParamToInputBtns=function(b,c){a.scenarios.steps[b].properties.buttons[c].content.params.push(new Object({replace:"",param:"",scope:""}))},a.addField=function(b,c){a.scenarios.steps[b].properties.fields.push(c)},a.addEntity=function(b){var c={entity:"",multiple:!1,save:{key:"",scope:""}};a.scenarios.steps[b].properties.items.push(c)},a.addSwitchCondition=function(b,c){a.scenarios.steps[b].properties.switch[c].conditions.push(new Object({true:!0,operator:"",target:"",value:{param:"",scope:""}}))},a.addActionCase=function(b,c,d){a.scenarios.steps[c].action[b]=a.switchCases[b]},a.conditionChange=function(b,c,d){a.scenarios.steps[b].properties.switch[c].conditions[d].true=0==a.conditions[b][c][d]}
4,a.deleteCase=function(b,c){delete a.scenarios.steps[b].action[a.scenarios.steps[b].properties.switch[c].name],a.scenarios.steps[b].properties.switch.splice(c,1)};var o="";a.renameCaseStart=function(a){o=a},a.renameCaseEnd=function(b,c,d){if(o){if(!b)return void(a.scenarios.steps[c].properties.switch[d].name=o);var e=a.scenarios.steps[c].action[o];delete a.scenarios.steps[c].action[o],a.scenarios.steps[c].action[b]=e,o=""}},a.addSwitchCase=function(b,c){var d="Case_"+l(4);a.scenarios.steps[b].properties.switch.push(new Object({conditions:[{true:!0,operator:"",target:"",value:{param:"",scope:""}}],operator:"",name:d})),a.scenarios.steps[b].action[d]=null},a.handleRaw=function(b,c){"raw"==c?(delete a.scenarios.steps[b].properties.data,a.scenarios.steps[b].properties.raw={}):(delete a.scenarios.steps[b].properties.raw,a.scenarios.steps[b].properties.data=[])},a.handleContentType=function(b,c){"raw"==c?(delete a.scenarios.steps[b].properties.data,a.scenarios.steps[b].properties.raw={}):(delete a.scenarios.steps[b].properties.raw,a.scenarios.steps[b].properties.data=[])},a.collectionCommandsChange=function(b,c){var d=a.scenarios.steps[b].properties;"insert"==c?(delete d.input,delete d.filters):(d.filters=[],delete d.data)},a.esCommand=function(b,c){var d=a.scenarios.steps[c].properties;switch(b){case"index":for(var e in d)d.hasOwnProperty(e)&&"type"!=e&&"index"!=e&&"command"!=e&&"fields"!=e&&delete d[e];d.fields&&!d.fields.params.length&&(d.fields={value:"",params:[]}),d.data={key:"",scope:"scenario"},d.id="";break;case"like":for(var e in d)d.hasOwnProperty(e)&&"type"!=e&&"index"!=e&&"command"!=e&&"fields"!=e&&delete d[e];d.fields&&!d.fields.params.length&&(d.fields={value:"",params:[]}),d.data={key:"",scope:"scenario"},d.score={value:"",params:[]};break;case"search":for(var e in d)d.hasOwnProperty(e)&&"type"!=e&&"index"!=e&&"command"!=e&&delete d[e];d.input={scope:"scenario",key:""},d.data={key:"",scope:"scenario"}}},a.scheduleCommand=function(b,c){"stop"==b?(delete a.scenarios.steps[c].properties.scenario,delete a.scenarios.steps[c].properties.period):(a.scenarios.steps[c].properties.scenario="",a.scenarios.steps[c].properties.period="")},a.handleRadio=function(b,c){"input"==b?(delete a.scenarios.steps[c].properties.save,a.scenarios.steps[c].properties.input={}):(delete a.scenarios.steps[c].properties.input,a.scenarios.steps[c].properties.save=[])},a.authHandle=function(b,c){delete a.scenarios.steps[b].properties.authorization.data},a.esTypeHandle=function(b,c){"variable"==c?(delete a.scenarios.steps[b].properties.fields.value,delete a.scenarios.steps[b].properties.fields.scope):"static"==c&&delete a.scenarios.steps[b].properties.fields.key},a.handleHeadersChange=function(b,c,d,e){if(!c)return void j.error({delay:6e4,message:"Header cannot be empty"});var f=a.scenarios.steps[b].properties.headers;if(e){for(var g=Object.keys(f),h=Object.values(f),i={},k=!1,l=0;l<g.length;l++)l!=e&&g[l]==c&&(j.error({delay:6e4,message:"Header with this name exsist"}),k=!0);if(k)f[g[e]]=d;else{for(var l=0;l<g.length;l++)l==e?i[c]=d:i[g[l]]=h[l];setTimeout(function(){a.scenarios.steps[b].properties.headers=i,a.$apply()},0)}}else f[c]=d},a.deleteHeaderRest=function(b,c){delete a.scenarios.steps[b].properties.headers[c]},a.handleCustomerChange=function(b,c){var d=a.scenarios.steps[b].properties;"logout"==c&&(delete d.login,delete d.password),"register"!==c&&delete d.profile},a.handleOrderChange=function(b,c){var d=a.scenarios.steps[b].properties;"view"==c&&(delete d.products,delete d.attachments),"cart"==c&&delete d.products},a.handleAttachmentChange=function(b,c){var d=a.scenarios.steps[b].properties;"file"==c?(d.name="",d.name_params=[],d.name_params.push(new Object({replace:"",scope:"",param:""}))):"image"!=c&&"audio"!=c&&"video"!=c||(d.url="",delete d.name_params,delete d.name)},a.fixTextBtn=function(b){var c=a.scenarios.steps[b];void 0==c.properties.buttons&&(c.properties.buttons=[]),void 0==c.properties.phrases&&(c.properties.phrases=[])},a.handleCardType=function(b,c){var d=a.scenarios.steps[b];"dynamic"==c?(delete d.properties,d.properties=e.getC("card")):(delete d.properties,d.properties={elements:[{buttons:[],image:"",title:"",text:""}],type:"static",quick_replies:[]})},a.handleQuickRepliesTypes=function(b,c,d){var e=a.scenarios.steps[b];"text"==c?(e.properties.quick_replies[d].title="",e.properties.quick_replies[d].content="",e.properties.quick_replies[d].url=""):(delete e.properties.quick_replies[d].title,delete e.properties.quick_replies[d].content,delete e.properties.quick_replies[d].url)},a.uploadCardImage=function(b,e,f){b&&g.upload({url:d.host+"/attachment/image/"+c.id,data:{file:b}}).then(function(b){a.scenarios.steps[e].properties.elements[f].spinnerLoading=!1,delete a.scenarios.steps[e].properties.elements[f].spinnerLoading,b.data.status&&(a.scenarios.steps[e].properties.elements[f].image=b.data.url)},function(a){},function(b){a.scenarios.steps[e].properties.elements[f].spinnerLoading=!0})},a.addCard=function(b){12!=a.scenarios.steps[b].properties.elements.length&&a.scenarios.steps[b].properties.elements.push({buttons:[],image:"",title:"",text:""})},a.addFile=function(b,e){b&&g.upload({url:d.host+"/attachment/"+a.scenarios.steps[e].properties.type+"/"+c.id,data:{file:b}}).then(function(b){a.scenarios.steps[e].properties.spinnerLoading=!1,delete a.scenarios.steps[e].properties.spinnerLoading,b.data.status&&(a.scenarios.steps[e].properties.url=b.data.url)},function(a){},function(b){a.scenarios.steps[e].properties.spinnerLoading=!0})},a.handleCategorySelect=function(){var b=n(a.categorySelect),c={};null===b.type?a.scenarios.intents=[]:(c.type=b.type,c.intent_id=b.intent_id,a.scenarios.intents=[],a.scenarios.intents.push(c))},a.deleteComponent=function(b){a.scenarios.steps.splice(b,1),a.$parent.newStepIndex.splice(b,1),a.$parent.activeSelectIndex>b?a.$parent.activeSelectIndex--:a.$parent.activeSelectIndex==b&&(a.$parent.activeSelectIndex=-1)},a.autopostingTumb=function(b){a.scenarios.steps[b].properties.autoposting?a.scenarios.steps[b].properties.autoposting=!1:a.scenarios.steps[b].properties.autoposting={command:"add",collections:[]}},a.virualAutopost={}
4,a.createVirualAutopost=function(b){a.virualAutopost[b]={filterArray:m(a.collections,{filter:a.scenarios.steps[b].properties.autoposting.collections,itemName:"value"}),filterModel:null}},a.autopostingChangeItem=function(b,c){null===b&&(a.scenarios.steps[c].properties.autoposting.collections=[],b="*"),a.scenarios.steps[c].properties.autoposting.collections.push(b),a.virualAutopost[c].filterModel=null,a.virualAutopost[c].filterArray=m(a.collections,{filter:a.scenarios.steps[c].properties.autoposting.collections,itemName:"value"})},a.removeAutopostinCollection=function(b,c){a.scenarios.steps[b].properties.autoposting.collections.splice(c,1),a.virualAutopost[b].filterArray=m(a.collections,{filter:a.scenarios.steps[b].properties.autoposting.collections,itemName:"value"})},a.getAutopostingName=function(b){if("*"===b)return"All";for(var c=0;c<a.collections.length;c++)if(a.collections[c].value===b)return a.collections[c].name;return null},a.moveComponent=function(b,c){if("up"==c){if(0==b)return;a.scenarios.steps[b-1]=a.scenarios.steps.splice(b,1,a.scenarios.steps[b-1])[0],a.$parent.newStepIndex[b-1]=a.$parent.newStepIndex.splice(b,1,a.$parent.newStepIndex[b-1])[0],a.$parent.activeSelectIndex==b?a.$parent.activeSelectIndex--:a.$parent.activeSelectIndex==b-1&&a.$parent.activeSelectIndex++}else{if(b==a.scenarios.steps.length-1)return;a.scenarios.steps[b+1]=a.scenarios.steps.splice(b,1,a.scenarios.steps[b+1])[0],a.$parent.newStepIndex[b+1]=a.$parent.newStepIndex.splice(b,1,a.$parent.newStepIndex[b+1])[0],a.$parent.activeSelectIndex==b?a.$parent.activeSelectIndex++:a.$parent.activeSelectIndex==b+1&&a.$parent.activeSelectIndex--}},a.moveComponentButton=function(b,c,d,e,f){for(var g=a.scenarios.steps[b],h=e.split("."),i=g,j=0;j<h.length;j++)i=i[h[j]];if(i)if("up"==c)if(f){for(var j=d;j>0;j--)if(i[j-1]=i.splice(j,1,i[j-1])[0],i[j].type==f)return}else{if(0==d)return;i[d-1]=i.splice(d,1,i[d-1])[0]}else if(f){for(var j=d;j<i.length-1;j++)if(i[j+1]=i.splice(j,1,i[j+1])[0],i[j].type==f)return}else{if(d==i.length-1)return;i[d+1]=i.splice(d,1,i[d+1])[0]}},a.addPhrase=function(b,c){void 0===a.scenarios.steps[b].properties.phrases&&(a.scenarios.steps[b].properties.phrases=[]),a.scenarios.steps[b].properties.phrases.push("")},a.searchProducts=function(a){return b.get(d.host+"/products/"+c.id+"?name="+a).then(function(a){if(a.data.status)return a.data.products.map(function(a){return{name:a.name,id:a.product_id}})},function(a){})},a.offerProductSelect=function(b,c,d,e){a.scenarios.steps[d].properties.product_id=b.id},a.editPhrase=function(b,c,d){void 0===a.scenarios.steps[b].properties.phrases&&(a.scenarios.steps[b].properties.phrases=[]),a.scenarios.steps[b].properties.phrases[c]=d},a.addCustomFilter=function(b,c){a.scenarios.steps[b].properties.filters.push({field:"",condition:"",value:""})},a.filterValue=function(a){isNaN(String.fromCharCode(a.keyCode))&&a.preventDefault()},a.deleteCustomFilter=function(b,c){a.scenarios.steps[b].properties.filters.splice(c,1)},a.deleteEntity=function(b,c){a.scenarios.steps[b].properties.items.splice(c,1)},a.deleteSwitchCondition=function(b,c,d){a.scenarios.steps[b].properties.switch[c].conditions.splice(d,1)},a.dndDragstart=function(b){a.$parent.activeIndex=b,a.$apply()},a.dropCallback=function(b,c,d,e){if("item"==e)a.$parent.newStepIndex.splice(b,0,!0),a.scenarios.steps.splice(b,0,c),a.$parent.activeSelectIndex>=b&&a.$parent.activeSelectIndex++;else{-1!=a.$parent.activeSelectIndex&&(a.$parent.activeIndex==a.$parent.activeSelectIndex&&(a.$parent.activeSelectIndex=b),a.$parent.activeIndex>a.$parent.activeSelectIndex&&b<=a.$parent.activeSelectIndex&&a.$parent.activeSelectIndex++,a.$parent.activeIndex<a.$parent.activeSelectIndex&&b>=a.$parent.activeSelectIndex&&a.$parent.activeSelectIndex--),a.$parent.activeIndex>=0&&a.$parent.activeIndex!=b&&b-a.$parent.activeIndex!=1&&(b>a.$parent.activeIndex&&b--,a.scenarios.steps.splice(a.$parent.activeIndex,1),a.scenarios.steps.splice(b,0,c));var f=a.$parent.newStepIndex[a.$parent.activeIndex];a.$parent.newStepIndex.splice(a.$parent.activeIndex,1),a.$parent.newStepIndex.splice(b,0,f),a.$parent.activeIndex=-1}a.$apply()}}]),angular.module("brnaiApp").controller("ForbiddenCtrl",["$scope",function(a){a.$parent.isShortHeader=!0,a.back=function(){a.$parent.isShortHeader=!1}}]),angular.module("brnaiApp").controller("NotfoundCtrl",["$scope",function(a){a.$parent.isShortHeader=!0,a.back=function(){a.$parent.isShortHeader=!1}}]),angular.module("brnaiApp").controller("WidgetsettingsCtrl",["$scope","$http","$stateParams","getDomainData","$cookies","Auth",function(a,b,c,d,e,f){function g(){for(var a="",b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",c=0;c<25;c++)a+=b.charAt(Math.floor(Math.random()*b.length));return a}
4a.provider_data={token:"",settings:{welcomeText:"",showWelcomeDelay:"",position:""}},a.settingData={account_id:f.getUser().account_id,provider_data:a.provider_data},e.getObject(c.id)&&(a.provider_data.token=e.getObject(c.id),b.get(d.host+"/widget/settings/"+c.id+"/"+e.getObject(c.id)).then(function(b){a.provider_data.settings=b.data.settings},function(a){})),a.activateWidget=function(){a.bot_token=g(),e.putObject(c.id,a.bot_token),b.post(d.host+"/connection/widget/"+c.id,a.settingData).then(function(b){b.data.status&&(a.provider_data.token=a.bot_token,alert("activated"))},function(a){})},a.editWidget=function(){b.put(d.host+"/connection/widget/"+c.id,a.settingData).then(function(a){a.data.status&&alert("edited")},function(a){console.error(a)})},a.strVar+="<script>\n",a.strVar+=" window.brnSettings = {\n",a.strVar+=" bot_id: '"+c.id+"',\n",a.strVar+=" token: '"+a.provider_data.token+"',\n",a.strVar+=" url: 'http://widget.brn.ai/#'',\n",a.strVar+=" position: '"+a.provider_data.settings.position+"\n",a.strVar+=" };\n",a.strVar+=" <\/script>\n",a.strVar+=" <script>(function () {\n",a.strVar+=" var w = window;\n",a.strVar+=" var tf = w.TechFunder;\n",a.strVar+=' if (typeof tf === "function") {\n',a.strVar+=" tf('reattach_activator');\n",a.strVar+=" tf('update', brnSettings);\n",a.strVar+=" } else {\n",a.strVar+=" var d = document;\n",a.strVar+=" var i = function () {\n",a.strVar+=" i.c(arguments)\n",a.strVar+=" };\n",a.strVar+=" i.q = [];\n",a.strVar+=" i.c = function (args) {\n",a.strVar+=" i.q.push(args)\n",a.strVar+=" };\n",a.strVar+=" w.TechFunder = i;\n",a.strVar+=" function l() {\n",a.strVar+=" var s = d.createElement('script');\n",a.strVar+=" s.type = 'text/javascript';\n",a.strVar+=" s.async = true;\n",a.strVar+=" s.src = 'http://verstka.dev.techfunder.de/kanban/widget_launcher.js';\n",a.strVar+=" var x = d.getElementsByTagName('script')[0];\n",a.strVar+=" x.parentNode.insertBefore(s, x);\n",a.strVar+=" }\n",a.strVar+=" if (w.attachEvent) {\n",a.strVar+=" w.attachEvent('onload', l);\n",a.strVar+=" } else {\n",a.strVar+=" w.addEventListener('load', l, false);\n",a.strVar+=" }\n",a.strVar+=" }\n",a.strVar+=" })();<\/script>"}]),angular.module("brnaiApp").controller("ProviderCtrl",["$scope","$http","$stateParams","getDomainData","$cookies","Auth","$uibModalInstance",function(a,b,c,d,e,f,g){function h(){for(var a="",b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",c=0;c<25;c++)a+=b.charAt(Math.floor(Math.random()*b.length));return a}a.positionTypes=[{name:"left",value:"left"},{name:"right",value:"right"}],a.isProgres=!1,a.isCreated=!1,a.settingData={account_id:f.getUser().account_id,provider_data:{token:"",settings:{welcomeText:"",showWelcomeDelay:"",position:""}}},a.strVar="",b.get(d.host+"/connection/"+c.id+"/widget",{notification:!1}).then(function(b){if(b.data.status&&"widget"==b.data.provider){const e=-1==d.host.search(/api-dev/i)?"https://test-widget.bots.work/widget/widget.js":"https://test-widget.bots.work/dev/widget.js";a.isCreated=!0,a.settingData.provider_data=b.data.provider_data,a.strVar+='<script type="text/javascript" charset="utf-8">\n',a.strVar+=" var currentScript = document.currentScript;\n",a.strVar+="\n",a.strVar+=" window.addEventListener('load', function() {\n",a.strVar+=" var s = document.createElement('script');\n",a.strVar+=" s.src = '"+e+"';\n",a.strVar+=' s.type = "text/javascript";\n',a.strVar+=" currentScript.parentNode.appendChild(s);\n",a.strVar+="\n",a.strVar+=" var w = document.createElement('chat-widget');\n",a.strVar+=' w.setAttribute("bot", "'+c.id+'");\n',a.strVar+=' w.setAttribute("token", "'+b.data.provider_data.token+'");\n',a.strVar+=" currentScript.parentNode.appendChild(w);\n",a.strVar+=" });\n",a.strVar+="<\/script>"}},function(a){console.error(a)}),a.activateWidget=function(){if(!a.isProgres){if(a.isProgres=!0,a.isCreated)return void a.editWidget();a.bot_token=h(),a.settingData.provider_data.token=a.bot_token,b.post(d.host+"/connection/widget/"+c.id,a.settingData).then(function(b){if(a.isProgres=!1,b&&b.data.status){const e=-1==d.host.search(/api-dev/i)?"https://test-widget.bots.work/widget/widget.js":"https://test-widget.bots.work/dev/widget.js";a.settingData.provider_data.token=a.bot_token,a.strVar+='<script type="text/javascript" charset="utf-8">\n',a.strVar+=" var currentScript = document.currentScript;\n",a.strVar+="\n",a.strVar+=" window.addEventListener('load', function() {\
4n",a.strVar+=" var s = document.createElement('script');\n",a.strVar+=" s.src = '"+e+"';\n",a.strVar+=' s.type = "text/javascript";\n',a.strVar+=" currentScript.parentNode.appendChild(s);\n",a.strVar+="\n",a.strVar+=" var w = document.createElement('chat-widget');\n",a.strVar+=' w.setAttribute("bot", "'+c.id+'");\n',a.strVar+=' w.setAttribute("token", "'+a.bot_token+'");\n',a.strVar+=" currentScript.parentNode.appendChild(w);\n",a.strVar+=" });\n",a.strVar+="<\/script>"}a.isCreated=!0},function(a){console.error(a)})}},a.editWidget=function(){b.put(d.host+"/connection/widget/"+c.id,a.settingData).then(function(b){a.isProgres=!1,b.data.status&&g.close("ok")},function(a){console.error(a)})},a.deleteConnection=function(){b.delete(d.host+"/connection/widget/"+c.id).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})},a.close=function(){g.close("ok")}}]),angular.module("brnaiApp").factory("facebookService",["$q","$window","$http",function(a,b,c){return{getPagesList:function(){var b=a.defer();return FB.login(function(a){!a||a.error?b.reject("Error occured"):b.resolve(a)}),b},getPosts:function(a,b){return c.get("https://graph.facebook.com/v2.9/"+a+"/posts?fields=link,message,created_time,story&access_token="+b).then(function(a){return a})}}}]),angular.module("brnaiApp").controller("FacebookCtrl",["$scope","Facebook","Auth","$http","getDomainData","$stateParams","$state","$uibModalInstance","Notification",function(a,b,c,d,e,f,g,h,i){function j(a){if(a&&a.length)for(var b=0;b<a.length;b++)switch("nested"==a[b].type&&j(a[b].call_to_actions),a[b].type){case"web_url":delete a[b].call_to_actions,delete a[b].payload;break;case"postback":delete a[b].call_to_actions,delete a[b].url;break;case"nested":delete a[b].payload,delete a[b].url}}function k(){b.api("/me/accounts?limit=300",{fields:"name, access_token"},function(b){console.log(b),0==b.data.length?i.error({delay:6e4,message:"Sorry, but you have no Facebook pages to select."}):1==b.data.length?(a.pages.push(b.data[0]),a.selectPage(b.data[0])):a.pages=b.data})}a.pages=[],a.pageFilter={name:""},a.page_name="",a.page={get_started:{status:!0,content:""},greeting_text:{status:!1,content:""},menu:{status:!1,content:{input_disabled:!1,buttons:[]}},whitelisted_domains:[]},a.currentPage=null,a.settingsData={account_id:c.getUser().account_id,provider_data:{user_token:"",page_id:"",whitelisted_domains:[]}},a.btnTypes=[{name:"nested",value:"nested"},{name:"web_url",value:"web_url"},{name:"postback",value:"postback"}],a.NotificationsTypes=[{name:"Regular",value:"REGULAR"},{name:"Silent",value:"SILENT_PUSH"},{name:"No push",value:"NO_PUSH"}],a.btnTypesLvl2=[{name:"web_url",value:"web_url"},{name:"postback",value:"postback"}],a.selectedPage=null,a.close=function(){h.close("ok")},a.subBtn=null,a.subBtnLvl2=null,a.subBtnIndex=null,a.subBtnLvl2Index=null,a.cancelSubBtn=function(){a.subBtn=null,a.subBtnIndex=null},a.cancelSubBtnLvl2=function(){a.subBtnLvl2=null,a.subBtnLvl2Index=null},a.applySubBtn=function(){a.subBtn.call_to_actions?a.page.menu.content.buttons[a.subBtnIndex].call_to_actions=a.subBtn.call_to_actions.slice():delete a.page.menu.content.buttons[a.subBtnIndex].call_to_actions,a.cancelSubBtn()},a.applySubBtnLvl2=function(){a.subBtnLvl2.call_to_actions?a.subBtn.call_to_actions[a.subBtnLvl2Index].call_to_actions=a.subBtnLvl2.call_to_actions.slice():delete a.subBtn.call_to_actions[a.subBtnLvl2Index].call_to_actions,a.cancelSubBtnLvl2()},a.isProgres=!1,a.createConnection=function(){if(!a.page.menu.status||a.page.get_started.content&&a.page.get_started.status){if(Object.assign(a.settingsData.provider_data,a.page),a.isProgres)return;a.isProgres=!0,d.post(e.host+"/connection/messenger/"+f.id,a.settingsData).then(function(b){a.isProgres=!1,b.data.status?(h.close(),l=!0):alert(b.data.error)})}else i.error({delay:6e4,message:"Get started button required"})},a.saveConnection=function(){if(j(a.page.menu.content.buttons),!l)return void a.createConnection();a.isProgres||(a.isProgres=!0,!a.page.menu.status||0!=a.page.get_started.content.length&&a.page.get_started.status?(Object.assign(a.settingsData.provider_data,a.page),d.put(e.host+"/connection/messenger/"+f.id,a.settingsData).then(function(b){a.isProgres=!1,b.data.status?h.close():alert(b.data.error)})):i.error({delay:6e4,message:"Get started button required"}))},a.showSubMenu=function(b,c,d){b.call_to_actions||(b.call_to_actions=[]);var e=b.call_to_actions.slice();1==c&&(a.subBtn={call_to_actions:e},a.subBtnIndex=d),2==c&&(a.subBtnLvl2={call_to_actions:e},a.subBtnLvl2Index=d)},a.addBtnsToBtn=function(a){console.log(a),a.call_to_actions||(console.log("array"),a.call_to_actions=[]),a.call_to_actions.push({title:"",type:"web_url"})},a.deleteBtnFromArray=function(b,c,d){0!==d?(b.call_to_actions.splice(c,1),0==b.call_to_actions.length&&delete b.call_to_actions):b.splice(c,1),1===d&&a.cancelSubBtnLvl2(),0===d&&(a.cancelSubBtn(),a.cancelSubBtnLvl2())},a.handleTypeBtn=function(a){switch(a.type){case"web_url":delete a.call_to_actions,delete a.payload,a.messenger_extensions=!1;break;case"postback":delete a.call_to_actions,delete a.url,delete a.messenger_extensions;break;case"nested":delete a.payload,delete a.url,delete a.messenger_extensions,a.call_to_actions=[]}console.log(a)},a.deleteConnection=function(){d.delete(e.host+"/connection/messenger/"+f.id).then(function(a){a.data.status?h.close():alert(a.data.error)})},a.deleteDomainFromArray=function(b){a.page.whitelisted_domains.splice(b,1)},a.addDomain=function(){a.page.whitelisted_domains.push("")},a.addBtn=function(){a.page.menu.content.buttons.push({title:"",type:"",call_to_actions:[]})},a.$watch("selectedPage",function(b,c){b&&a.selectPage(b)},!0),a.selectPage=function(b){a.settingsData.provider_data.page_id=b.id,a.settingsData.provider_data.page_name=b.name,a.page.page_id=b.id,a.page.page_name=b.name,a.page_name=b.name,a.pageFilter.name=b.name},a.aditional=!1,a.toogleAditional=function(){a.aditional=!a.aditional};var l=!1;d.get(e.host+"/connection/"+f.id+"/messenger/",{notification:!1}).then(function(b){console.log(b),b&&(l=!0,b.data.provider_data&&(a.currentPage=b.data.provider_data.page_name,a.selectedPage={name:a.currentPage,id:b.data.provider_data.page_id}
4,Object.assign(a.page,b.data.provider_data)))}),b.getLoginStatus(function(d){if("RTYP57CWRTY5BOF"===c.getUser().account_id)return b.logout(),FB.init({appId:"2588016001344408",version:"v2.0"}),void b.login(function(b){"connected"==b.status?(a.settingsData.provider_data.user_token=b.authResponse.accessToken,k()):alert(b.status)},{scope:"public_profile, pages_messaging, pages_manage_metadata"});"connected"==d.status?(a.settingsData.provider_data.user_token=d.authResponse.accessToken,k()):b.login(function(b){"connected"==b.status?(a.settingsData.provider_data.user_token=b.authResponse.accessToken,k()):alert(b.status)},{scope:"public_profile, pages_messaging,pages_manage_metadata"})})}]),angular.module("brnaiApp").filter("newlines",function(){return function(a){if(a&&"string"==typeof a)return a.split(/\n/g)}}),angular.module("brnaiApp").directive("widgetMessage",["ngAudio",function(a){return{restrict:"E",controller:["$scope","$sce","$http","$stateParams","getDomainData","$window","linkify","Auth",function(a,b,c,d,e,f,g,h){a.trustAsHtml=b.trustAsHtml,a.isBubleActive=!1,a.htmlFormat=function(a){return b.trustAsHtml(g.getUrl(a.trim()))},a.trustSrc=function(a){return b.trustAsResourceUrl(a)};var i="",j=!0;a.getSelectedText=function(){setTimeout(function(){if(i="",f.getSelection){var b=f.getSelection();i=b.toString();var c=b.focusNode.parentNode.getBoundingClientRect(),d=b.getRangeAt(0).getBoundingClientRect(),e=d.top-c.top,g=d.left-c.left,h=c.right-d.right;a.setBuble(e,g,h)}else document.selection&&(i=document.selection.createRange().text);i?(a.isBubleActive=!0,j=a.checkIsLast(a.curentIndex,a.dialogIndex)):a.isBubleActive=!1,a.$apply()},10)},a.toggleNewIntent=function(){a.newIntentModal(i,j,a.dialogIndex)},a.toggleExistIntent=function(){a.existIntentModal(i,j,a.dialogIndex)},a.toggleExistIntentAsResponse=function(){a.existIntentAsResponseModal(i,j,a.dialogIndex)},a.toggleBuble=function(){a.isBubleActive=!1},a.sendCommand=function(b){if("link"==b.type)f.open(b.url,"_blank");else if("suggest"==b.type){var g=d.client_id?d.client_id:h.getUser().account_id,i=d.client_id?"/message/receive/widget":"/message/debug";c.post(e.host+i,{user_id:g,type:"text",content:{text:b.content},bot_id:d.id}).then(function(b){b&&b.data.status&&!a.client_status?a.mainForm=!0:a.mainForm=!1,a.message.text=""},function(a){console.error(a)})}},a.handleMoreInfo=function(a){return 300==a.limitTo?a.limitTo=999999:a.limitTo=300}}],link:function(b,c,d){var e=JSON.parse(d.type);b.image=d.image,b.hideImage=d.hideImage,b.curentIndex=d.curentIndex,b.dialogIndex=d.dialogIndex,b.setBuble=function(a,b,d){var e,f,g,h,i=c.find(".messages"),j=c.find(".buble-dropdown-menu");i.hasClass("author_message")?(e=b,f=16,e+j.width()>i.width()&&(f=b+16,e=0),j[0]&&(j[0].style.top=a+"px",j[0].style.left=e+"px",j.find(".before")[0].style.left=f+"px",j.find(".after")[0].style.left=f+"px")):(g=d,h=16,g+j.width()>i.width()&&(h=d+16,g=0),j[0]&&(j[0].style.top=a+"px",j[0].style.right=g+"px",j.find(".before")[0].style.right=h+"px",j.find(".after")[0].style.right=h+"px"))};var f="";"card"==e.message.type?f="slider":"audio"==(f=e.message.type)&&(b.audio=a.load(e.message.content.url)),b.wmType="views/widget/"+f+".html",d.$observe("type",function(c){var d=JSON.parse(c);"card"==d.message.type?f="slider":"audio"==(f=d.message.type)&&(b.audio=a.load(d.message.content.url)),b.wmType="views/widget/"+f+".html"}),d.$observe("image",function(a){b.image=a})},template:'<div ng-include="wmType"></div>'}}]),angular.module("brnaiApp").controller("WidgetsliderCtrl",function(){this.awesomeThings=["HTML5 Boilerplate","AngularJS","Karma"]}),angular.module("brnaiApp").directive("ngSelect",function(){return{bindToController:!0,controller:function(){var a=this;a.selectOpened=!1,a.toggleOpened=function(){a.selectOpened=!a.selectOpened},a.selectValue=function(b){var c=a.ngModel;a.ngModel=a.modelValue?b[a.modelValue]:b,"function"==typeof a.ngChange&&a.ngChange({newVal:a.ngModel,oldVal:c})}},controllerAs:"vm",restrict:"E",templateUrl:"views/select.template.html",scope:{options:"=",ngModel:"=",viewValue:"@",modelValue:"@",optionValue:"@",ngChange:"&"}}}),angular.module("brnaiApp").filter("noContain",function(){return function(a,b){for(var c=[],d=0;d<a.length;d++)a[d]!=b&&c.push(a[d]);return c}}),angular.module("brnaiApp").filter("sanitize",["$sce",function(a){return a.trustAsHtml}]),angular.module("brnaiApp").controller("ConvcardCtrl",["$scope","Upload","$timeout","getDomainData","$stateParams","dialog","$http","$uibModalInstance",function(a,b,c,d,e,f,g,h){a.cards=[],a.progress=null,a.addCard=function(){a.cards.push({image:null,title:null,text:null,progress:0,buttons:[]})},a.addCardImg=function(c,e){b.upload({url:d.host+"/message/attachment/image",data:{file:c}}).then(function(b){b.status&&(a.cards[e].image=b.data.url)},function(a){},function(b){a.cards[e].progress=parseInt(100*b.loaded/b.total)})},a.close=function(){h.close("ok")},a.addButton=function(b){a.cards[b].buttons.push({url:null,title:null,type:"link"})},a.deleteButton=function(b,c){a.cards[b].buttons.splice(c,1)},a.deleteTab=function(b){a.cards.splice(b,1)},a.sendCard=function(){a.cards.forEach(function(a){delete a.progress}),g.post(d.host+"/message/send/"+f.client.client_id,{type:"card",content:{elements:a.cards}}).then(function(a){a.data.status?h.close("ok"):alert(a.data.error)},function(a){console.error(a)})}}]),angular.module("brnaiApp").directive("httpPrefix",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){function e(a){return a&&!/^(https?):\/\//i.test(a)&&0!=="http://".indexOf(a)&&0!=="https://".indexOf(a)?(d.$setViewValue("http://"+a),d.$render(),"http://"+a):a}d.$formatters.push(e),d.$parsers.splice(0,0,e)}}}),angular.module("brnaiApp").service("widgetAttachment",function(){}),angular.module("brnaiApp").controller("EditCtrl",["$scope","$http","getDomainData","$sce","$stateParams","portalService",function(a,b,c,d,e,f){a.page=null,a.page_id=e.page,a.portal_id=e.portal,a.save=function(){b.put(c.host+"/page/"+e.page+"/"+e.language+"?portal_id="+a.portal_id,{content:a.page}).then(function(a){a.data.status?alert("Data was successfully changed"):alert(a.data.error)})},b.get(c.host+"/page/"+e.page+"/"+e.language+"?portal_id="+a.portal_id).then(function(b){a.page=b.data.content})}
4]),angular.module("brnaiApp").directive("componentsModalMenu",["getComponent","componentsModal",function(a,b){return{restrict:"EA",templateUrl:"views/componentsmodal.html",replace:!0,scope:{steps:"=",gui:"=",saveModel:"&"},link:function(c,d,e){function f(a){switch(a.component.toLowerCase()){case"condition":a.action={true:null,false:null};break;case"existence":a.action={exists:null,nonexists:null};break;case"rest":case"blockchain":case"transaction":a.action={success:null,fail:null};break;case"switch":a.action={default:null},a.action[a.properties.switch[0].name]=null;break;default:a.action={next:null}}}function g(a){for(var b="",c="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",d=0;d<a;d++)b+=c.charAt(Math.floor(Math.random()*c.length));return b}c.gui=c.gui||null,c.helperModals={input:b.input,condition:b.condition,helpers:b.helpers,output:b.output,learning:b.learning,store:b.store,blockchain:b.blockchain},c.selected="",c.createComponent=function(b){var c=a.getC(b),d=g(5),e={name:d,component:b,id:d,properties:c};return f(e),e},c.addComponent=function(b){if(c.gui){var d=g(5),e={action:{},component:b,id:d,name:d,position:{left:100,top:100},properties:a.getC(b)};f(e),c.$broadcast("newEndpoint",e),c.modalBtnVisible=!0,c.saveModel(),e.isNewStep=!0,c.$parent.$parent.$parent.$parent.openStep(e)}else{var e=c.createComponent(b);if(c.$parent.activeSelectIndex>=0){c.steps.splice(c.$parent.activeSelectIndex+1,0,new Object(e)) 5;var h=c.$parent.$parent.$parent.newStepIndex?c.$parent.$parent.$parent.newStepIndex:c.$parent.$parent.$parent.$parent.newStepIndex;h.splice(c.$parent.activeSelectIndex+1,0,!0)}else{c.steps.push(new Object(e));var h=c.$parent.$parent.$parent.newStepIndex?c.$parent.$parent.$parent.newStepIndex:c.$parent.$parent.$parent.$parent.newStepIndex;h.push(!0)}}}}}}]),angular.module("brnaiApp").service("getInputLanguage",function(){var a=[{key:"en-US",text:"Type your message"},{key:"de-DE",text:"Hier antworten"},{key:"ru",text:"ÐведиÑе ÑообÑение"}];return{getPlaceholder:function(b){for(var c=0;c<a.length;c++)if(a[c].key==b)return a[c].text;return a[0].text}}}),angular.module("brnaiApp").service("voiceRecognitionLanguage",function(){}),angular.module("brnaiApp").controller("DocumentationCtrl",function(){this.awesomeThings=["HTML5 Boilerplate","AngularJS","Karma"]}),angular.module("brnaiApp").controller("PrivacyCtrl",["$scope","$http","$sce","getDomainData","storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get("https://api.brn.ai/page/privacy/en?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0})}a.page={},h.isHelpBtn=!1,j()}]),angular.module("brnaiApp").controller("ContactsCtrl",function(){this.awesomeThings=["HTML5 Boilerplate","AngularJS","Karma"]}),angular.module("brnaiApp").controller("GetstartedCtrl",function(){this.awesomeThings=["HTML5 Boilerplate","AngularJS","Karma"]}),angular.module("brnaiApp").service("getStarted",function(){}),angular.module("brnaiApp").directive("scrolleddown",function(){return{restrict:"A",link:function(a,b,c){var d=b[0];b.bind("scroll",function(){d.scrollTop+d.offsetHeight>=d.scrollHeight&&a.$apply(c.scrolleddown)})}}}),angular.module("brnaiApp").controller("CurrentwidgetCtrl",["$scope","$http","$stateParams","domain","$cookies","getDomainData","$timeout","Upload","getInputLanguage","ngAudio",function(a,b,c,d,e,f,g,h,i,j){function k(){for(var a="",b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",c=0;c<15;c++)a+=b.charAt(Math.floor(Math.random()*b.length));return a}function l(){g(function(){var a=document.getElementsByClassName("brn-widget-body");a[0].scrollTop=a[0].scrollHeight},100,!1)}function m(c,d){b.post(f.host+"/message/receive/widget",{user_id:c,type:"text",content:{text:"start"},bot_id:d}).then(function(b){b&&b.data.status&&!a.client_status?a.mainForm=!0:a.mainForm=!1},function(a){console.error(a)})}if(a.widget_visibility="true"===c.open,a.widgetResizeStatus="true"===c.expand,a.voiceInProgress=!1,a.voiceSupport=!1,a.voiceMessage=null,a.widgetPosition=c.position,a.eventVisibility=!1,a.open=c.open,a.dataForm=!1,a.formDisabled=!1,a.widget_token="",a.messages=[],a.message={text:""},a.additionalInfo={name:"",phone:"",email:""},a.showAdditionalFormStatus=!1,a.mainForm=!1,a.welcomePlaceholder=i.getPlaceholder(window.navigator.language),a.sound=j.load(f.host
5+"/upload/audio/message.mp3"),a.widget_btns_title="Bot Control",a.botSocialsLinks=null,b.get(f.host+"/widget/settings/"+c.id+"/"+c.token).then(function(b){a.widget_settings=b.data.settings,a.botSocialsLinks=b.data.links,a.widget_settings.showWelcomeDelay+="000",1!=a.open?a.eventTimer=g(function(){a.eventVisibility=!0,parent.postMessage("event","*")},a.widget_settings.showWelcomeDelay):(a.widget_visibility=!0,g.cancel(a.eventTimer))}),e.getObject("user_widget_token")?a.widget_token=e.getObject("user_widget_token"):(e.putObject("user_widget_token",k()),a.widget_token=e.getObject("user_widget_token")),b.get(f.host+"/widget/messages/"+c.id+"/"+c.client_id).then(function(b){b.data.messages&&b.data.messages&&(a.messages=b.data.messages,l()),b.data.client?a.client_status=!0:a.client_status=!1},function(a){}),a.showAdditionalForm=function(){a.showAdditionalFormStatus=!0},a.hideAdditionalForm=function(){a.additionalInfo.name&&a.additionalInfo.name.length?a.showAdditionalFormStatus=!0:a.showAdditionalFormStatus=!1},a.newDialog=function(){var d=k();b.get(f.host+"/widget/messages/"+c.id+"/"+d).then(function(b){a.messages=[]},function(a){})},new Faye.Client(f.faye,{timeout:20,retry:5}).subscribe("/messages_"+c.client_id,function(b){b.bot_id==c.id&&(a.messages.push(b),a.$digest(),l(),"bot"==b.author&&a.sound.play())}),a.sendMessage=function(){b.post(f.host+"/message/receive/widget",{user_id:c.client_id,type:"text",content:{text:a.message.text},bot_id:c.id}).then(function(b){b&&b.data.status&&!a.client_status?a.mainForm=!0:a.mainForm=!1,a.message.text=""},function(a){console.error(a)})},a.closeWidget=function(){parent.postMessage("close","*"),a.eventVisibility=!1,a.widget_visibility=!1},a.closeEvent=function(){parent.postMessage("closeEvent","*"),a.eventVisibility=!1},a.resizeWidget=function(){a.widgetResizeStatus=!a.widgetResizeStatus,parent.postMessage("resize","*")},a.openWidget=function(b){a.messages.length||m(c.client_id,c.id),parent.postMessage("open","*"),a.widget_visibility=!0,g.cancel(a.eventTimer),l()},a.sendContacts=function(){b.post(f.host+"/widget/contacts/"+c.id+"/"+c.client_id,a.additionalInfo).then(function(b){b&&b.data.status&&(a.mainForm=!1)})},a.addAttachment=function(d,e,g){var i={content:{}};d&&d.type&&(i.bot_id=c.id,i.user_id=c.client_id,d.type.indexOf("image")>-1?(i.type="image",i.content.url=f.host+"/attachment/image/"+c.id):(i.type="file",i.content.url=f.host+"/attachment/file/"+c.id,i.content.name=d.name),h.upload({url:i.content.url,data:{file:d}}).then(function(c){a.formDisabled=!1,a.message.text="",c.data.status?(i.content.url=c.data.url,b.post(f.host+"/message/receive/widget",i).then(function(a){},function(a){console.error(a)})):alert(c.data.error)},function(a){},function(b){a.formDisabled=!0,a.message.text="Downloaded: "+parseInt(100*b.loaded/b.total)+"%"}))},b.get(f.host+"/bot/"+c.id).then(function(b){1==b.data.status&&(a.bot=b.data)},function(a){}),"webkitSpeechRecognition"in window){a.voiceSupport=!0;var n={"*val":function(a){b.post(f.host+"/message/receive/widget",{user_id:c.client_id,type:"text",content:{text:a},bot_id:c.id}).then(function(a){},function(a){console.error(a)})}};annyang.addCommands(n),annyang.setLanguage("ru"),annyang.debug(),a.voiceStart=function(){a.voiceInProgress=!a.voiceInProgress,annyang.start()},a.voiceEnd=function(){a.voiceInProgress=!a.voiceInProgress,annyang.abort()}}a.openSocial=function(a){window.open(a,"_blank").focus()}}]),angular.module("brnaiApp").directive("scrolltop",function(){return{restrict:"A",link:function(a,b,c){var d=b[0];b.bind("scroll mousewheel",function(b){b.stopPropagation(),d.scrollTop<=80&&a.$apply(c.scrolltop)})}}}),angular.module("brnaiApp").directive("keepScrollPosition",function(){return{restrict:"A",link:function(a,b,c){a.$watch(function(){return b[0].scrollHeight},function(a,c){b[0].scrollTop=a-c})}}}),angular.module("brnaiApp").controller("StatisticCtrl",["$http","$stateParams",function(a,b){}]),angular.module("brnaiApp").controller("StatMainCtrl",["$scope","$http","getDomainData","$stateParams","dateCharts","getDateArray",function(a,b,c,d,e,f){function g(){b.get(c.host+"/report/"+d.id+"/structure?from="+a.date.startDate+"&to="+a.date.endDate+"&type=messages&group=subtype").then(function(b){b.data&&(a.pieMessages.data=b.data,a.pieMessages.pieData=[],a.pieMessages.data.data.forEach(function(b){a.pieMessages.pieData.push({name:b.name,y:Number(b.percent),total:Number(b.total)})}),a.pieMessages.data.pieData=a.pieMessages.pieData,a.pieMessages.data.title="Total Messages: ")})}function h(){b.get(c.host+"/report/"+d.id+"/structure?from="+a.date.startDate+"&to="+a.date.endDate+"&type=clients&group=subtype").then(function(b){b.data&&(a.pieUsers.data=b.data,a.pieUsers.pieData=[],a.pieUsers.data.data.forEach(function(b){a.pieUsers.pieData.push({name:b.name,y:Number(b.percent),total:Number(b.total)})}),a.pieUsers.data.pieData=a.pieUsers.pieData,a.pieUsers.data.title="Total Users: ")})}function i(){b.get(c.host+"/report/"+d.id+"/timeline?from="+a.date.startDate+"&to="+a.date.endDate+"&lines=clients_unique&mode=day").then(function(b){b.data.status&&b.data.data.length?k(b,a.uniqueUsers):a.uniqueUsers.data.data=[]})}function j(){g(),h(),i()}function k(a,b){b.data.data=[],a.data.data.forEach(function(a){var c=[];
5a.series.forEach(function(a){null===a&&(a=0),c.push(a)}),b.data.data.push({name:a.name,data:c})})}a.date=e.getFormatedDate(),a.pieMessages={data:{},pieData:[]},a.pieUsers={data:{},pieData:[]},a.baseUsers={data:{data:[]},baseData:[],date:f.transformed(a.date.startDate,a.date.endDate)},a.uniqueUsers={data:{data:[]},baseData:[],date:f.transformed(a.date.startDate,a.date.endDate)},j(),e.subscribe().then(null,null,function(b){a.date=b;var c=f.transformed(a.date.startDate,a.date.endDate);a.uniqueUsers.date=c,j()})}]),angular.module("brnaiApp").controller("StatUsersCtrl",["$scope","$filter","$timeout","dateCharts","$http","getDomainData","$stateParams","getDateArray",function(a,b,c,d,e,f,g,h){function i(){a.baseUsers.data.data=[],e.get(f.host+"/report/"+g.id+"/timeline?from="+a.date.startDate+"&to="+a.date.endDate+"&lines=clients,clients_new,clients_existing&mode="+a.mode).then(function(b){b.data.status&&b.data.data.length?l(b,a.baseUsers):a.baseUsers.data.data=[]})}function j(){e.get(f.host+"/report/"+g.id+"/providers?from="+a.date.startDate+"&to="+a.date.endDate+"&type=clients&mode="+a.mode).then(function(b){b.data.status&&b.data.data.length?l(b,a.usersPerWidget):a.usersPerWidget.data.data=[]})}function k(){i(),j()}function l(a,b){b.data.data=[],a.data.data.forEach(function(a){var c=[];a.series.forEach(function(a){null===a&&(a=0),c.push(a)}),b.data.data.push({name:a.name,data:c})})}a.date=d.getFormatedDate(),a.modeStatus=!0,a.mode="day",a.baseUsers={data:{data:[]},baseData:[],date:h.transformed(a.date.startDate,a.date.endDate)},a.usersPerWidget={data:{data:[]},baseData:[],date:h.transformed(a.date.startDate,a.date.endDate)},k(),d.subscribe().then(null,null,function(b){a.date=b;var c=h.transformed(a.date.startDate,a.date.endDate);a.baseUsers.date=a.usersPerWidget.date=c,k()}),a.$watch("modeStatus",function(b,c){a.mode=b?"day":"hourly",k()})}]),angular.module("brnaiApp").directive("testGrapsh",function(){return{restrict:"E",link:function(a,b,c){b.text("this is the testGrapsh directive")}}}),angular.module("brnaiApp").directive("pieChart",function(){return{restrict:"E",scope:{data:"="},link:function(a,b,c){a.$watch("data",function(a,c){a.pieData&&a.pieData.length&&(a.pieData[0].selected=!0,a.pieData[0].sliced=!0),Highcharts.chart(b[0],{chart:{plotBackgroun
5dColor:null,backgroundColor:null,plotBorderWidth:null,plotShadow:!1,type:"pie"},title:{text:a.title+a.total},tooltip:{formatter:function(a){return this.point.options.name+": "+this.point.options.total}},plotOptions:{pie:{allowPointSelect:!0,cursor:"pointer",dataLabels:{enabled:!0,formatter:function(){return this.point.options.name+": "+this.point.options.total},style:{color:Highcharts.theme&&Highcharts.theme.contrastTextColor||"black"}}}},series:[{name:"Messages",colorByPoint:!0,data:a.pieData}]})})}}}),angular.module("infinite-scroll",[]).value("THROTTLE_MILLISECONDS",null).directive("infiniteScroll",["$rootScope","$window","$interval","THROTTLE_MILLISECONDS",function(a,b,c,d){return{scope:{infiniteScroll:"&",infiniteScrollContainer:"=",infiniteScrollDistance:"=",infiniteScrollDisabled:"=",infiniteScrollUseDocumentBottom:"=",infiniteScrollListenForEvent:"@"},link:function(e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;return z=angular.element(b),u=null,v=null,j=null,k=null,r=!0,y=!1,x=null,i=!1,q=function(a){return a=a[0]||a,isNaN(a.offsetHeight)?a.document.documentElement.clientHeight:a.offsetHeight},s=function(a){if(a[0].getBoundingClientRect&&!a.css("none"))return a[0].getBoundingClientRect().top+t(a)},t=function(a){return a=a[0]||a,isNaN(window.pageYOffset)?a.document.documentElement.scrollTop:a.ownerDocument.defaultView.pageYOffset},p=function(){var b,d,g,h,l;return k===z?(b=q(k)+t(k[0].document.documentElement),g=s(f)+q(f)):(b=q(k),d=0,void 0!==s(k)&&(d=s(k)),g=s(f)-d+q(f)),y&&(g=q((f[0].ownerDocument||f[0].document).documentElement)),h=g-b,l=h<=q(k)*u+1,l?(j=!0,v?e.$$phase||a.$$phase?e.infiniteScroll():e.$apply(e.infiniteScroll):void 0):(i&&c.cancel(i),j=!1)},w=function(a,b){var d,e,f;return f=null,e=0,d=function(){return e=(new Date).getTime(),c.cancel(f),f=null,a.call()},function(){var g,h;return g=(new Date).getTime(),h=b-(g-e),h<=0?(c.cancel(f),f=null,e=g,a.call()):f?void 0:f=c(d,h,1)}},null!=d&&(p=w(p,d)),e.$on("$destroy",function(){if(k.unbind("scroll",p),null!=x&&(x(),x=null),i)return c.cancel(i)}),n=function(a){return u=parseFloat(a)||0},e.$watch("infiniteScrollDistance",n),n(e.infiniteScrollDistance),m=function(a){if((v=!a)&&j)return j=!1,p()},e.$watch("infiniteScrollDisabled",m),m(e.infiniteScrollDisabled),o=function(a){return y=a},e.$watch("infiniteScrollUseDocumentBottom",o),o(e.infiniteScrollUseDocumentBottom),h=function(a){if(null!=k&&k.unbind("scroll",p),k=a,null!=a)return k.bind("scroll",p)},h(z),e.infiniteScrollListenForEvent&&(x=a.$on(e.infiniteScrollListenForEvent,p)),l=function(a){if(null!=a&&0!==a.length){if(a.nodeType&&1===a.nodeType?a=angular.element(a):"function"==typeof a.append?a=angular.element(a[a.length-1]):"string"==typeof a&&(a=angular.element(document.querySelector(a))),null!=a)return h(a);throw new Error("invalid infinite-scroll-container attribute.")}},e.$watch("infiniteScrollContainer",l),l(e.infiniteScrollContainer||[]),null!=g.infiniteScrollParent&&h(angular.element(f.parent())),null!=g.infiniteScrollImmediateCheck&&(r=e.$eval(g.infiniteScrollImmediateCheck)),i=c(function(){return r&&p(),c.cancel(i)})}}}]),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="infinite-scroll"),angular.module("brnaiApp").directive("lineChart",function(){return{template:"<div></div>",restrict:"E",link:function(a,b,c){b.text("this is the lineChart directive")}}}),angular.module("brnaiApp").factory("dateCharts",["$q","$filter",function(a,b){var c={startDate:new Date(Date.now()-6048e5),endDate:new Date},d=a.defer();return{getDate:function(){return c},setDate:function(a,b){c.startDate=a,c.endDate=b,d.notify(this.getFormatedDate())},subscribe:function(){return d.promise},getFormatedDate:function(){return{startDate:b("date")(c.startDate,"yyyy-MM-dd"),endDate:b("date")(c.endDate,"yyyy-MM-dd")}}}}]),angular.module("brnaiApp").directive("statisticMenu",function(){return{restrict:"E",templateUrl:"views/statistic-menu.html",controller:["$scope","dateCharts","$stateParams","$state",function(a,b,c,d){var e=this;d.activeLink=d.current.name,a.goto=function(a,b){d.go(a,{id:b}),d.activeLink=a},a.check=function(a){return d.activeLink==a},e.datePicker={options:{eventHandlers:{"apply.daterangepicker":function(){e.datePicker.endDate=e.datePicker.date.endDate._d,e.datePicker.startDate=e.datePicker.date.startDate._d,b.setDate(e.datePicker.date.startDate._d,e.datePicker.date.endDate._d)}},ranges:{},locale:{applyLabel:"Confirm",fromLabel:"From",toLabel:"To",cancelLabel:"Discard",customRangeLabel:"Custom range"}},date:b.getDate()}
5,e.navStatus=!1,e.id=c.id,a.$on("globalClick",function(a){e.navStatus=!1}),e.handleNavClick=function(a){a.stopPropagation()}}],controllerAs:"vm"}}),angular.module("brnaiApp").service("linkify",function(){return{getUrl:function(a){var b,c,d,e;return c=/(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim,b=a.replace(c,'<a href="$1" style="word-break: break-word;" target="_blank">$1</a>'),d=/(^|[^\/])(www\.[\S]+(\b|$))/gim,b=b.replace(d,'$1<a href="http://$2" style="word-break: break-word;" target="_blank">$2</a>'),e=/(\w+@[a-zA-Z_]+?(\.[a-zA-Z]{2,6})+)/gim,b=b.replace(e,'<a href="mailto:$1" style="word-break: break-word;">$1</a>')}}}),angular.module("brnaiApp").filter("unsafe",["$sce",function(a){return a.trustAsHtml}]),angular.module("brnaiApp").directive("baseChart",function(){return{restrict:"E",scope:{data:"="},link:function(a,b,c,d){a.$watch("data",function(a,c){Highcharts.chart(b[0],{chart:{type:"area"},title:{text:"Users activity"},xAxis:{categories:a.date},yAxis:{labels:{formatter:function(){return this.value}}},tooltip:{pointFormat:"{series.name} increased to <b>{point.y:,.0f}</b>"},plotOptions:{area:{marker:{enabled:!1,symbol:"circle",radius:2,states:{hover:{enabled:!0}}}}},series:a.data.data})},!0)}}}),angular.module("brnaiApp").directive("objEdit",function(){return{restrict:"A",scope:{obj:"=obj"},link:function(a,b,c){a.$watch("obj",function(c,d){a.obj=c,b.text(JSON.stringify(a.obj,null,1))}),b.change(function(b){a.$apply(function(){a.obj=JSON.parse(b.currentTarget.value)})})}}}),angular.module("brnaiApp").factory("scenariosInitData",function(){return{staticItem:{type:"static",key:"",value:""},variableItem:{type:"variable",key:"",scope:"",param:""},newHeader:{key:"",value:""},types:[{value:"object",name:"object"},{value:"array",name:"array"}],attachments:[{value:"image",name:"image"},{value:"file",name:"file"},{value:"audio",name:"audio"},{value:"video",name:"video"}],scopes:[{value:"user",name:"user"},{value:"scenario",name:"scenario"}],scopesSystem:[{value:"user",name:"user"},{value:"scenario",name:"scenario"},{value:"system",name:"system"}],conditions:[{value:"Equal (==)",name:"equal"},{value:"Not equal (!=)",name:"not equal"},{value:"Greater then (>)",name:"gt"},{value:"Less then (<)",name:"less than"},{value:"Match regex pattern",name:"match"},{value:"Containe element",name:"contains"}],authArray:[{value:"Basic",name:"Basic"},{value:"Digest",name:"Digest"},{value:"Bearer",name:"Bearer"}],fields:[{name:"static",value:"static"},{name:"variable",value:"variable"}],methods:[{name:"GET",value:"GET"},{name:"PUT",value:"PUT"},{name:"POST",value:"POST"},{name:"PATCH",value:"PATCH"},{name:"DELETE",value:"DELETE"}],saveTypes:[{name:"Whole body to one variable",value:"input"},{name:"Selected response fields in the corresponding variables",value:"save"}],contentTypes:[{name:"JSON body",value:"raw"},{name:"URL-encoded form",value:"form"}],dataRest:[{name:"object",value:"data"},{name:"json string",value:"raw"}],commands:[{value:"start",name:"start"},{value:"stop",name:"stop"}],elasticTypes:[{name:"index",value:"Index documents"},{name:"like",value:"More like this search"},{name:"search",value:"Search by keyword"},{name:"ids",value:"Search by ids"}],subscriptionCommands:[{name:"Enable",value:"enable"},{name:"Disable",value:"disable"}],autopostingCommands:[{name:"Add",value:"add"},{name:"Remove",value:"remove"}],conditionsFilter:[{name:"Equal",value:"equal"},{name:"Greater than",value:"gt"},{name:"Greater than or equal",value:"gte"},{name:"Less than",value:"lt"},{name:"Less than or equal",value:"lte"},{name:"Not equal",value:"ne",symbol:"â "},{name:"Exists",value:"exists"},{name:"Not exists",value:"not_exists"},{name:"Days",value:"days",symbol:"D"},{name:"Match Regex",value:"regex",symbol:"R"}],outputFormat:[{name:"timestamp",value:"timestamp"},{name:"date",value:"date"},{name:"calendar",value:"calendar"},{name:"ISOString",value:"ISOString"},{name:"object",value:"object"},{name:"format",value:"format"}],cardTempalteType:[{name:"Gorizontal carousel",value:"generic"},{name:"Vertical list",value:"list"}],dateOperators:[{name:"+",value:"+"},{name:"-",value:"-"},{name:"set",value:"set"}],topElement:[{name:"large",value:"large"},{name:"compact",value:"compact"}],dataCommands:[{name:"Save variable to storage",value:"save"},{name:"Push element to list",value:"push"},{name:"Remove element from list",value:"pull"},{name:"Set value to another variable",value:"set"},{name:"Stringify json using templater",value:"stringify"},{name:"Join list elements to string with separator",value:"join"},{name:"Split string with separator to list",value:"split"},{name:"Drop variable fron storage",value:"drop"}],quickRepliesTypes:[{name:"Text",value:"text"},{name:"Location",value:"location"},{name:"User email",value:"user_email"},{name:"User phone number",value:"user_phone_number"}],cardBtnTypes:[{name:"Suggest",value:"suggest"},{name:"Link",value:"link"}]}}),angular.module("brnaiApp").directive("widget",["Notification",function(a){return{templateUrl:"views/widget-template.html",restrict:"E",scope:{botName:"@",botImage:"@",welcomeText:"@",showByTimer:"=",messengerAppId:"@",pageId:"@",inputPlaceholder:"@",prefix:"@"},link:function(b,c,d){function e(){var a=document.getElementById("fb-messenger_widget_button_container");if(a){for(b.fbMessage=b.message.text?j(b.message.text).substring(0,238).replace(/ /g,"_"):b.inputPlaceholder,b.fbMessage=b.fbMessage.replace(/[^A-Za-z0-9_]+/gi,"_");a.firstChild;)a.removeChild(a.firstChild);$("#fb-messenger_widget_button_container").html("<div class='fb-send-to-messenger' class='fb-send-to-messenger'messenger_app_id='"+b.messengerAppId+"' page_id='"+b.pageId+"' data-ref='"+b.prefix+b.fbMessage+"' size='xlarge' color='blue' pluginID='widget_fb_btn'> </div>"),FB.XFBML.parse(a)}}b.eventVisibility=!1,b.message={text:""},b.welcomeText=b.welcomeText?b.welcomeText:"",b.inputPlaceholder=b.inputPlaceholder?b.inputPlaceholder:"",b.messengerAppId=b.messengerAppId?b.messengerAppId:"279474245766642",b.pageId=b.pageId?b.pageId:"1237860396355276",b.fbMessage="",b.isMessage=!1,b.prefix=b.prefix?b.prefix:"_",b.firstFbInit=!1;var f=!!b.showByTimer,g=!1,h=!0,i=!1;
5b.$watch("message.text",function(a,c){b.firstFbInit&&(clearTimeout(g),g=setTimeout(function(){e()},400))},!0),b.toogleWidget=function(){b.eventVisibility&&(h&&!i&&(b.isMessage=!0),h=!1),f=!1,b.eventVisibility=!b.eventVisibility},b.closeWidget=function(){h&&!i&&(b.isMessage=!0),h=!1,b.showByTimer=!1,b.eventVisibility=!1},f&&setTimeout(function(){b.eventVisibility=!!f||b.eventVisibility,b.isMessage=!!f||b.isMessage,b.$apply()},5e3),setTimeout(function(){b.firstFbInit=!0,b.$apply(),setTimeout(function(){e(),FB.Event.subscribe("send_to_messenger",function(c){"opt_in"==c.event&&"widget_fb_btn"==c.pluginID&&(b.isMessage=!1,i=!0,a.success({message:"We've got your message and will contact you on Messenger soon!"}),b.closeWidget(),"undefined"!=typeof yaCounter48721346&&yaCounter48721346.reachGoal("SendtoMessengerWidget"),ga(["_trackEvent","SendtoMessengerWidget","SendtoMessengerWidget"]))})},0)},1500);var j=function(a){return a=a.replace(/\u0401/g,"YO").replace(/\u0419/g,"I").replace(/\u0426/g,"TS").replace(/\u0423/g,"U").replace(/\u041A/g,"K").replace(/\u0415/g,"E").replace(/\u041D/g,"N").replace(/\u0413/g,"G").replace(/\u0428/g,"SH").replace(/\u0429/g,"SCH").replace(/\u0417/g,"Z").replace(/\u0425/g,"H").replace(/\u042A/g,"").replace(/\u0451/g,"yo").replace(/\u0439/g,"i").replace(/\u0446/g,"ts").replace(/\u0443/g,"u").replace(/\u043A/g,"k").replace(/\u0435/g,"e").replace(/\u043D/g,"n").replace(/\u0433/g,"g").replace(/\u0448/g,"sh").replace(/\u0449/g,"sch").replace(/\u0437/g,"z").replace(/\u0445/g,"h").replace(/\u044A/g,"'").replace(/\u0424/g,"F").replace(/\u042B/g,"I").replace(/\u0412/g,"V").replace(/\u0410/g,"a").replace(/\u041F/g,"P").replace(/\u0420/g,"R").replace(/\u041E/g,"O").replace(/\u041B/g,"L").replace(/\u0414/g,"D").replace(/\u0416/g,"ZH").replace(/\u042D/g,"E").replace(/\u0444/g,"f").replace(/\u044B/g,"i").replace(/\u0432/g,"v").replace(/\u0430/g,"a").replace(/\u043F/g,"p").replace(/\u0440/g,"r").replace(/\u043E/g,"o").replace(/\u043B/g,"l").replace(/\u0434/g,"d").replace(/\u0436/g,"zh").replace(/\u044D/g,"e").replace(/\u042F/g,"Ya").replace(/\u0427/g,"CH").replace(/\u0421/g,"S").replace(/\u041C/g,"M").replace(/\u0418/g,"I").replace(/\u0422/g,"T").replace(/\u042C/g,"'").replace(/\u0411/g,"B").replace(/\u042E/g,"YU").replace(/\u044F/g,"ya").replace(/\u0447/g,"ch").replace(/\u0441/g,"s").replace(/\u043C/g,"m").replace(/\u0438/g,"i").replace(/\u0442/g,"t").replace(/\u044C/g,"'").replace(/\u0431/g,"b").replace(/\u044E/g,"yu")}}}}]),angular.module("brnaiApp").factory("Observe",function(){return function(a){var b=[],c=a,d=1,e=function(a,b){this.id=a,this.cb=b};e.prototype={cancel:function(){for(var a=0;a<b.length;a++)if(this.id===b[a].id)return b.splice(a,1),!0}},this.subscribe=function(a){try{if("function"==typeof a){var f=new e(d++,a);return b.push(f),f.cb(c),f}throw new TypeError("Argument is not a function!")}catch(a){console.error(a)}},this.next=function(a){c=a;for(var d=0;d<b.length;d++)b[d].cb(c)}}}),angular.module("brnaiApp").factory("componentsList",function(){return{someMethod:function(){return 42}}}),angular.module("brnaiApp").factory("componentsModal",function(){return{input:[{value:"input",name:"Input",icon:"edit"},{value:"pattern",name:"Pattern",icon:"layers"},{value:"date",name:"Date",icon:"today"}],condition:[{value:"condition",name:"Condition",icon:"group_work"},{value:"existence",name:"Existence",icon:"lightbulb_outline"},{value:"switch",name:"Switch",icon:"invert_colors"}],helpers:[{value:"mail",name:"Mail",icon:"email"},{value:"rest",name:"Rest",icon:"extension"},{value:"data",name:"Data",icon:"subtitles"},{value:"elasticsearch",name:"Elastic Search",icon:"find_in_page"},{value:"nested",name:"Nested",icon:"archive"},{value:"schedule",name:"Schedule",icon:"alarm_on"},{value:"delay",name:"Delay",icon:"watch_later"},{value:"expression",name:"Expression",icon:"new_releases"},{value:"soap",name:"SOAP",icon:"widgets"},{value:"subscription",name:"Subscription",icon:"next_week"},{value:"mode",name:"Mode",icon:"device_hub"},{value:"scenario",name:"Scenario",icon:"low_priority"},{value:"notification",name:"Notification",icon:"notifications"},{value:"tag",name:"Tag",icon:"loyalty"}],output:[{value:"text",name:"Text",icon:"translate"},{value:"output",name:"Output",icon:"reply"},{value:"card",name:"Card",icon:"view_carousel"},{value:"attachment",name:"Attachment",icon:"insert_drive_file"},{value:"collection",name:"Collection",icon:"class"}],learning:[{value:"entity",name:"Entity",icon:"assignment_ind"},{value:"intent",name:"Intent",icon:"assignment_turned_in"}],store:[{value:"product",name:"Product",icon:"shopping_basket"},{value:"cart",name:"Cart",icon:"shopping_cart"},{value:"customer",name:"Customer",icon:"face"},{value:"order",name:"Order",icon:"receipt"},{value:"category",name:"Category",icon:"folder"},{value:"offer",name:"Offer",icon:"add_shopping_cart"}],blockchain:[{value:"blockchain",name:"Blockchain",icon:"attach_file"},{value:"transaction",name:"Transaction",icon:"attach_money"}]}}),angular.module("brnaiApp").controller("CatalogCtrl",["$scope","$http","getDomainData","botService","$state",function(a,b,c,d,e){function f(a){"en"==a?e.go("catalog.en"):e.go("catalog.de")}a.loader=!0,a.botService=d,a.main.isCatalog=!0,a.$on("getNewLanding",function(a,b){f(b)}),"catalog"!=e.current.name?("catalog.en"==e.current.name&&"en"!==a.main.currentLang?a.main.setLang("en"):"catalog.de"==e.current.name&&"de"!==a.main.currentLang&&a.main.setLang("de"),b.get(c.host+"/bots/catalog").then(function(b){a.loader=!1,a.bots=b.data.bots})):f(a.main.currentLang),a.$on("$destroy",function(){a.main.isCatalog=!1})}]),angular.module("brnaiApp").controller("BotPreviewCtrl",["$scope","$http","$stateParams","$cookies","getDomainData","botService","$window","$state",function(a,b,c,d,e,f,g,h){function i(){a.isProgress||(a.isProgress=!0,b.get(e.host+"/bot/resolve/"+c.name).then(function(c){a.bot=c.data,b.get(e.host+"/screenshots/"+c.data.bot_id).then(function(b){b.data.status&&(a.screenshots=b.data.screenshots)}),a.isProgress=!1}))}a.bot={},a.screenshots=[],a.windowWidth=g.innerWidth,a.iframe=null,$(window).resize(function(){a.windowWidth=window.innerWidth,a.$apply()}),a.isProgress=!1,a.selectedScreenshot=null,a.isWidget=!1,a.selectScreenshot=function(b){a.selectedScreenshot=b},i(),a.openWidgetLink=function(){h.go("bot-preview-widget",{name:a.bot.username})},a.getWidgetLink=function(){return h.href("bot-preview-widget",{name:a.bot.username},{absolute:!0})},a.goBack=function(){h.goBack()},a.$on("$destroy",function(){var a=document.getElementById("tf-widget"),b=document.getElementById("testqwerty");a.remove(),b.remove(),d.put("tf-open","0")})}]),angular.module("brnaiApp").service("getDateArray",["$filter",function(a){return{transformed:function(b,c){for(var d=new Date(b),e=new Date(c),f=[],g=864e5,h=d.getTime();h<=e.getTime();h+=g)f.push(a("date")(new Date(h),"dd MMMM"));return f}}}]),angular.module("brnaiApp").directive("basicLine",function(){return{restrict:"E",scope:{data:"="},link:function(a,b,c,d){a.$watch("data",function(a,c){Highcharts.chart(b[0],{title:{text:a.text,x:-20},xAxis:{categories:a.date},yAxis:{title:{text:"Total"},plotLines:[{value:0,width:1,color:"#808080"}]},legend:{layout:"vertical",align:"right",verticalAlign:"middle",borderWidth:0},series:a.data.data})},!0)}}}),angular.module("brnaiApp").directive("irregularLine",function(){return{restrict:"E",scope:{data:"="},link:function(a,b,c,d){a.$watch("data",function(a,c){Highcharts.chart(b[0],{rangeSelector:{selected:1},title:{text:"AAPL Stock Price"},series:a.data.data})},!0)}}}),angular.module("brnaiApp").controller("RealtimeCtrl",["$scope","$filter","$http","getDomainData","$stateParams","$interval",function(a,b,c,d,e,f){function g(){c.get(d.host+"/report/"+e.id+"/realt
5ime").then(function(b){a.usersInfo=b.data.clients})}a.messages={link:d.host+"/report/"+e.id+"/realtime",tooltip:"messages count",type:"messages"},a.users={tooltip:"users count",link:d.host+"/report/"+e.id+"/realtime",type:"clients"},a.usersInfo=[],a.usersTimer=f(g,1e4),g(),a.$on("$destroy",function(){f.cancel(a.usersTimer)})}]),angular.module("brnaiApp").directive("realtimeLine",["$http",function(a){return{restrict:"E",scope:{data:"="},link:function(b,c){function d(){Highcharts.chart(c[0],{chart:{type:"spline",animation:Highcharts.svg,marginRight:10,width:c[0].clientWidth,events:{load:function(){function c(){a.get(b.data.link).then(function(a){var c=e(),f=a.data.realtime[b.data.type];d.addPoint([c,f],!0,!0)})}var d=this.series[0];c(),g=setInterval(c,1e4)}}},title:{text:""},xAxis:{type:"datetime",tickPixelInterval:150},yAxis:{title:{text:"Total"},plotLines:[{value:0,width:1,color:"#808080"}]},tooltip:{formatter:function(){return"<b>"+this.series.name+"</b><br/>"+Highcharts.dateFormat("%Y-%m-%d %H:%M:%S",this.x)+"<br/>"+Highcharts.numberFormat(this.y,2)}},legend:{enabled:!1},exporting:{enabled:!1},series:[{name:b.data.tooltip,data:function(){var a,b,c=[];if(f){const d=(new Date).toLocaleString("en-US",{timeZone:f});a=new Date(d).getTime()}else a=Date.now();for(b=-19;b<=0;b+=1)c.push({x:a+1e3*b,y:null});return c}()}]})}function e(){if(f){const a=(new Date).toLocaleString("en-US",{timeZone:f});return new Date(a).getTime()}return(new Date).getTime()}var f,g,h=!1;b.$parent.$watch("botInfo",function(a){a.settings&&!h&&(a.settings.timezone&&(f=a.settings.timezone,Highcharts.setOptions({global:{useUTC:!1}})),h=!0,d())}),b.$on("$destroy",function(){clearInterval(g)})}}}]),angular.module("brnaiApp").controller("TopusersCtrl",["$scope","$http","$stateParams","getDomainData",function(a,b,c,d){function e(e){a.inProgress=!0;var f="?sort="+a.sort.name+"&direction="+a.sort.direction+"&limit="+a.options.limit+"&offset="+a.options.offset;b.get(d.host+"/report/"+c.id+"/top"+f).then(function(b){a.inProgress=!1,"sort"==e&&(a.usersInfo=[]),b.data&&b.data.clients.length?(b.data.clients.forEach(function(b){a.usersInfo.push(b)}),a.options.offset+=b.data.clients.length):b.data.clients.length||(a.requestNeeded=!1)})}a.inProgress=!1,a.options={limit:30,offset:0},a.usersInfo=[],a.requestNeeded=!0,a.sort={name:"last",direction:"desk"},a.tableHeaders=[{name:"name",sortDirection:!1},{name:"provider",sortDirection:!1},{name:"messages",sortDirection:!1},{name:"last",sortDirection:!0},{name:"sessions",sortDirection:!1}],e(),a.loadMore=function(){a.requestNeeded&&!a.inProgress&&e()},a.sortColumn=function(b){a.sort.name=b.name,a.sort.direction=b.sortDirection?"desk":"asc",b.sortDirection=!b.sortDirection,a.tableHeaders.forEach(function(a){a.name!=b.name&&(a.sortDirection=!1)}),a.options.offset=0,a.requestNeeded=!0,e("sort")}}]),angular.module("brnaiApp").controller("KeywordsCtrl",["$scope","$http","$stateParams","getDomainData","dateCharts",function(a,b,c,d,e){function f(e){ 6a.inProgress=!0;var f="?from="+a.date.startDate+"&to="+a.date.endDate;b.get(d.host+"/tool/"+c.id+"/message-keywords/report"+f).then(function(b){var c=0;a.keywordsInfo=[],a.pieKeywords={pieData:[]},b.data.keywords.forEach(function(b){a.keywordsInfo.push(b),c+=b.count}),b.data.keywords.forEach(function(b){a.pieKeywords.pieData.push({name:b.keyword,y:100*b.count/c,total:Number(b.count)})}),a.inProgress=!1})}a.date=e.getFormatedDate(),a.inProgress=!1,a.keywordsInfo=[],a.tableHeaders=[{name:"keyword"},{name:"count"}],a.pieKeywords={pieData:[]},f(),e.subscribe().then(null,null,function(b){a.date=b,f()})}]),angular.module("brnaiApp").controller("TopMessagesInCtrl",["$scope","$filter","$timeout","dateCharts","$http","getDomainData","$stateParams",function(a,b,c,d,e,f,g){function h(){a.inProgress=!0;var b="?type=in&limit="+a.options.limit+"&offset="+a.options.offset;e.get(f.host+"/report/"+g.id+"/messages"+b).then(function(b){a.inProgress=!1,b.data&&b.data.messages.length?(b.data.messages.forEach(function(b){a.messages.push(b)}),a.options.offset+=b.data.messages.length):b.data.messages.length||(a.requestNeeded=!1)})}a.messagesStats={data:[],categories:[],text:"messages in"},a.inProgress=!1,a.options={limit:30,offset:0},a.requestNeeded=!0,a.messages=[],e.get(f.host+"/report/"+g.id+"/messages/?type=in").then(function(b){b.data&&b.data.messages.length&&b.data.messages.forEac
6h(function(b){a.messagesStats.data.push(b.count),a.messagesStats.categories.push(b.text)})}),a.loadMore=function(){a.requestNeeded&&!a.inProgress&&h()}}]),angular.module("brnaiApp").controller("TopMessagesOutCtrl",["$scope","$filter","$timeout","dateCharts","$http","getDomainData","$stateParams",function(a,b,c,d,e,f,g){function h(){a.inProgress=!0;var b="?type=out&limit="+a.options.limit+"&offset="+a.options.offset;e.get(f.host+"/report/"+g.id+"/messages"+b).then(function(b){a.inProgress=!1,b.data&&b.data.messages.length?(b.data.messages.forEach(function(b){a.messages.push(b)}),a.options.offset+=b.data.messages.length):b.data.messages.length||(a.requestNeeded=!1)})}a.messagesStats={data:[],categories:[],text:"messages out"},a.inProgress=!1,a.options={limit:30,offset:0},a.requestNeeded=!0,a.messages=[],e.get(f.host+"/report/"+g.id+"/messages/?type=out").then(function(b){b.data&&b.data.messages.length&&b.data.messages.forEach(function(b){a.messagesStats.data.push(b.count),a.messagesStats.categories.push(b.text)})}),a.loadMore=function(){a.requestNeeded&&!a.inProgress&&h()}}]),angular.module("brnaiApp").controller("StatTrainingCtrl",["$scope","$http","getDomainData","$stateParams","dateCharts","getDateArray",function(a,b,c,d,e,f){function g(){b.get(c.host+"/report/"+d.id+"/expressions?from="+a.date.startDate+"&to="+a.date.endDate).then(function(b){b.data&&(a.pieTraining.data=b.data,a.pieTraining.pieData=[],a.pieTraining.data.data.forEach(function(b){a.pieTraining.pieData.push({name:b.name,y:Number(b.percent),total:Number(b.total)})}),a.pieTraining.data.pieData=a.pieTraining.pieData,a.pieTraining.data.title="Total: ")})}function h(){g()}a.date=e.getFormatedDate(),a.pieTraining={data:{},pieData:[]},h(),e.subscribe().then(null,null,function(b){a.date=b;f.transformed(a.date.startDate,a.date.endDate);h()})}]),angular.module("brnaiApp").directive("basicBar",function(){return{restrict:"E",scope:{data:"="},link:function(a,b,c,d){a.$watch("data",function(a,c){Highcharts.chart(b[0],{chart:{type:"bar",width:b[0].clientWidth,height:600},xAxis:{categories:a.categories,title:{text:null}},yAxis:{allowDecimals:!1,title:{text:null}},credits:{enabled:!1},series:[{name:a.text,data:a.data}]})},!0)}}}),angular.module("brnaiApp").controller("SessionsCtrl",["$scope","$filter","$timeout","dateCharts","$http","getDomainData","$stateParams","getDateArray",function(a,b,c,d,e,f,g,h){function i(){a.baseUsers.data.data=[],e.get(f.host+"/report/"+g.id+"/timeline?from="+a.date.startDate+"&to="+a.date.endDate+"&lines=sessions&mode="+a.mode).then(function(b){b.data.status&&b.data.data.length?l(b,a.baseUsers):a.baseUsers.data.data=[]})}function j(){e.get(f.host+"/report/"+g.id+"/providers?from="+a.date.startDate+"&to="+a.date.endDate+"&type=sessions&mode="+a.mode).then(function(b){b.data.status&&b.data.data.length?l(b,a.usersPerWidget):a.usersPerWidget.data.data=[]})}function k(){i(),j()}function l(a,b){b.data.data=[],a.data.data.forEach(function(a){var c=[];a.series.forEach(function(a){null===a&&(a=0),c.push(a)}),b.data.data.push({name:a.name,data:c})})}a.date=d.getFormatedDate(),a.modeStatus=!0,a.mode="day",a.baseUsers={data:{data:[]},baseData:[],date:h.transformed(a.date.startDate,a.date.endDate)},a.usersPerWidget={data:{data:[]},baseData:[],date:h.transformed(a.date.startDate,a.date.endDate)},k(),d.subscribe().then(null,null,function(b){a.date=b;var c=h.transformed(a.date.startDate,a.date.endDate);a.baseUsers.date=a.usersPerWidget.date=c,k()}),a.$watch("modeStatus",function(b,c){a.mode=b?"day":"hourly",k()})}]),angular.module("brnaiApp").controller("MessagesCtrl",["$scope","$filter","$timeout","dateCharts","$http","getDomainData","$stateParams","getDateArray",function(a,b,c,d,e,f,g,h){function i(){a.baseUsers.data.data=[],e.get(f.host+"/report/"+g.id+"/timeline?from="+a.date.startDate+"&to="+a.date.endDate+"&lines=messages,messages_in,messages_out&mode="+a.mode).then(function(b){b.data.status&&b.data.data.length?l(b,a.baseUsers):a.baseUsers.data.data=[]})}function j(){e.get(f.host+"/report/"+g.id+"/providers?from="+a.date.startDate+"&to="+a.date.endDate+"&type=messages&mode="+a.mode).then(function(b){b.data.status&&b.data.data.length?l(b,a.usersPerWidget):a.usersPerWidget.data.data=[]})}function k(){i(),j()}function l(a,b){b.data.data=[],a.data.data.forEach(function(a){var c=[];
6a.series.forEach(function(a){null===a&&(a=0),c.push(a)}),b.data.data.push({name:a.name,data:c})})}a.date=d.getFormatedDate(),a.modeStatus=!0,a.mode="day",a.baseUsers={data:{data:[]},baseData:[],date:h.transformed(a.date.startDate,a.date.endDate)},a.usersPerWidget={data:{data:[]},baseData:[],date:h.transformed(a.date.startDate,a.date.endDate)},k(),d.subscribe().then(null,null,function(b){a.date=b;var c=h.transformed(a.date.startDate,a.date.endDate);a.baseUsers.date=a.usersPerWidget.date=c,k()}),a.$watch("modeStatus",function(b,c){a.mode=b?"day":"hourly",k()})}]),angular.module("brnaiApp").service("getBotInfo",["$http","getDomainData",function(a,b){return{data:function(c){return a.get(b.host+"/bot/"+c)}}}]),angular.module("brnaiApp").controller("AddcollectionCtrl",["$scope","Auth","getDomainData","$http","$state","$stateParams","Notification",function(a,b,c,d,e,f,g){function h(){for(var b={},c=0;c<a.collection.fields.length;c++)a.sources.api.source_data.map[a.collection.fields[c].name]?b[a.collection.fields[c].name]=a.sources.api.source_data.map[a.collection.fields[c].name]:b[a.collection.fields[c].name]="";a.sources.api.source_data.map=b}function i(){d.get(c.host+"/scenarios/"+f.id).then(function(b){b.data&&b.data.status&&b.data.scenarios.forEach(function(b){a.scenariosList.push({name:b.name,value:b.scenario_id})})})}function j(a,b){return b.indexOf(a)>-1}function k(){return $("input").each(function(){$(this).trigger("blur")}),!($(".ng-invalid").length>0)||(g.error({delay:6e4,message:"Some required fields are empty"}),setTimeout(function(){$($(".ng-invalid")[0]).trigger("focus"),a.$apply()},100),!1)}a.isAdmin=b.isAdmin(),a.rssModel={newFeed:"",newCustom:""},a.$parent.isShortSidebar=!0,a.fields=[{name:"text",value:"text"},{name:"file",value:"file"},{name:"audio",value:"audio"},{name:"image",value:"image"},{name:"date",value:"date"},{name:"video",value:"video"},{name:"number",value:"number"}],a.collectionType="manual",a.collectionTypes=[{name:"manual",value:"manual"},{name:"twitter",value:"twitter"},{name:"youtube",value:"youtube"},{name:"facebook",value:"facebook"},{name:"rss",value:"rss"},{name:"api",value:"api"}],a.apiOperators=[{name:"in",value:"in"},{name:"eq",value:"eq"},{name:"lte",value:"lte"},{name:"gte",value:"gte"}],a.requestMetods=[{name:"GET",value:"GET"},{name:"POST",value:"POST"},{name:"PUT",value:"PUT"},{name:"PATCH",value:"PATCH"},{name:"DELETE",value:"DELETE"},{name:"HEAD",value:"HEAD"},{name:"OPTIONS",value:"OPTIONS"},{name:"TRACE",value:"TRACE"},{name:"CONNECT",value:"CONNECT"}],a.requestAuths=[{name:"Basic",value:"Basic"},{name:"Digest",value:"Digest"},{name:"Bearer",value:"Bearer"}],a.facebookSelects=[{name:"photos",value:"photos"},{name:"videos",value:"videos"},{name:"posts",value:"posts"},{name:"events",value:"events"}],a.collection={bot_id:f.id,name:"",rotation:!0,fields:[]},a.updateCollection=!1,a.sources={facebook:{source:"facebook",source_data:{active:!1,url:"",types:[]},template:{buttons:[]},autoposting:{active:!1}},youtube:{source:"youtube",source_data:{active:!1,url:""},template:{buttons:[]},autoposting:{active:!1}},twitter:{source:"twitter",source_data:{active:!1,url:""},template:{buttons:[]},autoposting:{active:!1}},rss:{source:"rss",source_data:{url:"",active:!1,extra_fields:{feed:[],custom:[]}},template:{buttons:[]},autoposting:{active:!1}},manual:{source:"manual",source_data:{active:!1,url:""},template:{buttons:[]},autoposting:{active:!1}},api:{source:"api",source_data:{extra_fields:[],request:{method:"GET",auth:{type:"Basic",login:"",password:"",bearer:""},url:"",headers:[]},key:{field:"",operator:"in",value:null},map:{title:"",picture:"",link:"",description:""},path:"",active:!1,initial_fetch:10,frequency:10},template:{buttons:[]},autoposting:{active:!1}}},a.loading=!1,a.broadcast={type:"",text:"",image:"",title:"",link:"",buttons:[],autoposting:!1,scenario_id:null},a.scenariosList=[],a.NameChange=function(b,c){0===b.name.toLowerCase().indexOf("img")||0===b.name.toLowerCase().indexOf("imag")||0===b.name.toLowerCase().indexOf("pic")?a.collection.fields[c].type="image":0===b.name.toLowerCase().indexOf("musi")||0===b.name.toLowerCase().indexOf("audio")?a.collection.fields[c].type="audio":0===b.name.toLowerCase().indexOf("vide")||
60===b.name.toLowerCase().indexOf("move")?a.collection.fields[c].type="video":0===b.name.toLowerCase().indexOf("file")?a.collection.fields[c].type="file":0===b.name.toLowerCase().indexOf("num")?a.collection.fields[c].type="number":0===b.name.toLowerCase().indexOf("date")?a.collection.fields[c].type="date":0===b.name.toLowerCase().indexOf("text")&&(a.collection.fields[c].type="text")},a.apiNameChange=function(b,c){a.collection.fields[c+4]=b,h()},a.addField=function(){a.collection.fields.push({name:"",type:"text",title:""})},a.addApiField=function(){a.sources.api.source_data.extra_fields.push({name:"",type:"text",title:""}),a.collection.fields.push({name:"",type:"text",title:""})},f.collection&&(a.updateCollection=!0,a.collection_id=f.collection,d.get(c.host+"/collection/"+a.collection_id).then(function(b){a.collection=b.data,a.collectionType=b.data.source,a.updRoute=!0,a.sources[b.data.source].source_data=b.data.source_data,a.sources[b.data.source].template=b.data.template,a.sources[b.data.source].autoposting=b.data.autoposting})),a.deleteProperty=function(b){a.collection.fields.splice(a.collection.fields.indexOf(b),1)},a.deleteApiFeald=function(b){a.sources.api.source_data.extra_fields.splice(a.sources.api.source_data.extra_fields.indexOf(b),1),a.collection.fields.splice(a.collection.fields.indexOf(b),1)},a.changeKeyOperator=function(b){a.sources.api.source_data.key.value="in"==b?null:""},a.getChecked=function(b){return console.log("check"),!!j(b,a.sources.facebook.source_data.types)},a.toggleFacebokTypes=function(b){console.log(b);var c=a.sources.facebook.source_data.types.indexOf(b);c>-1?a.sources.facebook.source_data.types.splice(c,1):a.sources.facebook.source_data.types.push(b)},a.createCollection=function(){k()&&(a.loading=!0,d.post(c.host+"/collection",a.collection).then(function(b){a.loading=!1,b.data.status?(a.$emit("updateCollections"),a.$parent.goto(f.id,b.data.collection_id)):alert(b.data.error)}))},a.updCollection=function(){k()&&(a.loading=!0,a.collection.bot_id=f.id,a.collection.template||(a.collection.template=a.sources[a.collectionType].template),d.put(c.host+"/collection/"+a.collection_id,a.collection).then(function(b){a.loading=!1,b.data.status?(a.$emit("updateCollections"),a.$parent.goto(f.id,f.collection)):alert(b.data.error)}))},a.collection.template=a.sources[a.collectionType].template,a.collection.autoposting=a.sources[a.collectionType].autoposting,a.handleCollectionType=function(){a.collection.template=a.sources[a.collectionType].template,a.collection.autoposting=a.sources[a.collectionType].autoposting,"manual"!=a.collectionType?("api"==a.collectionType?0==a.collection.fields.length&&(a.collection.fields=[{type:"text",name:"title",title:"Title"},{type:"image",name:"picture",title:"Picture"},{type:"text",name:"link",title:"Link"},{type:"text",name:"description",title:"Description"}]):delete a.collection.fields,a.collection.source=a.sources[a.collectionType].source,a.collection.source_data=a.sources[a.collectionType].source_data):(delete a.collection.source,delete a.collection.source_data,a.collection.fields=[]),"api"==a.collectionType&&0==a.collection.fields.length&&(a.collection.fields=[{type:"text",name:"title",title:"Title"},{type:"image",name:"picture",title:"Picture"},{type:"text",name:"link",title:"Link"},{type:"text",name:"description",title:"Description"}])},a.updateCustom=function(b,c){if(!c)return void g.error({delay:6e4,message:"Custom fields cannot be empty"});a.sources.rss.source_data.extra_fields.custom[b]=c},a.addCustom=function(){if(!a.rssModel.newCustom)return void g.error({delay:6e4,message:"Please fill field New Custom Item"});a.sources.rss.source_data.extra_fields||(a.sources.rss.source_data.extra_fields={custom:[],feed:[]}),a.sources.rss.source_data.extra_fields.custom.push(a.rssModel.newCustom),a.rssModel.newCustom=""},a.deleteCustom=function(b){a.sources.rss.source_data.extra_fields.custom.splice(b,1)},a.updateFeed=function(b,c){if(!c)return void g.error({delay:6e4,message:"Feed fields cannot be empty"});a.sources.rss.source_data.extra_fields.feed[b]=c},a.addFeed=function(b){if(!b)return void g.error({delay:6e4,message:"Please fill field New Feed Item"});a.sources.rss.source_data.extra_fields||(a.sources.rss.source_data.extra_fields={custom:[],feed:[]}),a.sources.rss.source_data.extra_fields.feed.push(a.rssModel.newFeed),a.rssModel.newFeed=""},a.deleteFeed=function(b){a.sources.rss.source_data.extra_fields.feed.splice(b,1)},a.addBtn=function(b){"link"===b?a.broadcast.buttons.push({type:"link",title:"",url:""}):a.broadcast.buttons.push({type:"suggest",title:"",content:""})},a.changeBtnType=function(b,c){"link"===c?(delete a.broadcast.buttons[b].content,a.broadcast.buttons[b].url=""):(delete a.broadcast.buttons[b].url,a.broadcast.buttons[b].content="")},a.removeBtn=function(b){a.broadcast.buttons.splice(b,1)},a.saveBroadcast=function(){a.sources[a.collectionType].template||(a.sources[a.collectionType].template={}),a.sources[a.collectionType].template.buttons=a.broadcast.buttons.splice(),a.sources[a.collectionType].template.type=a.broadcast.type?a.broadcast.type.slice(0):"",a.sources[a.collectionType].template.text=a.broadcast.text?a.broadcast.text.slice(0):"",a.sources[a.collectionType].template.image=a.broadcast.image?a.broadcast.image.slice(0):"",a.sources[a.collectionType].template.title=a.broadcast.title?a.broadcast.title.slice(0):"",a.sources[a.collectionType].template.link=a.broadcast.link?a.broadcast.link.slice(0):"",a.sources[a.collectionType].template.link=a.broadcast.link?a.broadcast.link.slice(0):"",a.sources[a.collectionType].autoposting.active=!!a.broadcast.autoposting,a.sources[a.collectionType].autoposting.scenario_id=a.broadcast.autoposting?a.broadcast.scenario_id:null,$("#broadcastModal").modal("hide")}
6,a.openModal=function(){a.sources[a.collectionType].template&&(a.broadcast.buttons=a.sources[a.collectionType].template.buttons.splice(),a.broadcast.type=a.sources[a.collectionType].template.type?a.sources[a.collectionType].template.type.slice(0):"",a.broadcast.text=a.sources[a.collectionType].template.text?a.sources[a.collectionType].template.text.slice(0):"",a.broadcast.image=a.sources[a.collectionType].template.image?a.sources[a.collectionType].template.image.slice(0):"",a.broadcast.title=a.sources[a.collectionType].template.title?a.sources[a.collectionType].template.title.slice(0):"",a.broadcast.link=a.sources[a.collectionType].template.link?a.sources[a.collectionType].template.link.slice(0):""),a.broadcast.autoposting=!!a.sources[a.collectionType].autoposting.active,a.broadcast.scenario_id=a.sources[a.collectionType].autoposting.scenario_id?a.sources[a.collectionType].autoposting.scenario_id:null},i()}]),angular.module("brnaiApp").controller("CollectionsCtrl",["$http","$scope","Auth","getDomainData","$uibMod
6al","$state","Notification","collectionsService",function(a,b,c,d,e,f,g,h){function i(c){a.get(d.host+"/collections/"+b.bot_id).then(function(a){b.loader=!1,b.collections=a.data.collections,!f.params.collection&&b.collections.length>0&&b.goto(b.bot_id,b.collections[0].collection_id),c&&b.collections.length>0&&b.goto(b.bot_id,b.collections[0].collection_id)})}b.collections=[],b.loader=!0,b.bot_id=f.params.id,b.isLogin=angular.isDefined(c.getUser()),f.activeId=f.params.collection,b.goto=function(a,c){f.go("collections.collection",{id:a,collection:c}),f.activeId=c,b.isShortSidebar=!1},b.deleteCollection=function(c){a.delete(d.host+"/collection/"+b.bot_id+"/"+c.collection_id).then(function(a){if(a.data.status){i(c.collection_id==f.activeId)}else g.error({delay:6e4,message:a.error})})},b.cloneCollection=function(c){var e=angular.copy(c);delete e.collection_id,e.name+=" clone",e.bot_id=b.bot_id,a.post(d.host+"/collection",e).then(function(a){a.data.status?i():g.error({delay:6e4,message:a.error})})},f.isShortSidebar=!1,f.defStateName="collections",b.goBack=function(){f.goBack(f.defStateName,f.defStateParam),setTimeout(function(){b.isShortSidebar=!1},0)},b.check=function(a){return f.activeId==a},b.$on("updateCollections",function(){i(),b.isShortSidebar=!1}),b.editCollection=function(a){b.coll=a,e.open({templateUrl:"views/addcollection.html",controller:"AddcollectionCtrl",resolve:{collection:function(){return b.coll}}}).result.then(function(a){},function(a){})},b.$watch(function(){return f.params},function(a,c){a.collection&&a.collection==c.collection&&0!=b.collections.length||"/add"!=f.current.url&&i()}),b.clearCollection=function(a){var b=+prompt("This action will remove data from collection. How many last record you want to save?","0");b>0&&h.clearCollection(a.collection_id,b).then(function(a){a.status&&g.success("Successfully cleared")})}}]),angular.module("brnaiApp").controller("CollectionCtrl",["$scope","$http","Auth","getDomainData","$stateParams","$state",function(a,b,c,d,e,f){a.collection={},a.bot_id=e.id,a.titles=[],a.fields={},a.elements=[],a.loading=!0,a.inProgress=!1,a.paginationOptions={limit:30,offset:0,page:0,lastPage:!1},b.get(d.host+"/collection/"+e.collection).then(function(c){if(a.loading=!1,c.data.status){if(c.data.fields.forEach(function(b){a.titles.push(b.title),a.fields[b.name]=b.type}),a.collection=c.data,a.inProgress)return;a.inProgress=!0;var e="twitter"==a.collection.source?"&sort_field=date&sort_direction=-1":"";b.get(d.host+"/items/"+a.collection.collection_id+"?limit="+a.paginationOptions.limit+"&offset="+a.paginationOptions.page*a.paginationOptions.limit+e).then(function(b){b.data.items.forEach(function(b){var c=b.fields;c.linkEditId=b.item_id,c.published=b.published,c.starred=b.starred,a.elements.push(c)}),a.inProgress=!1})}else alert(c.data.error)}),a.loadMore=function(){if(!a.inProgress&&!a.paginationOptions.lastPage){a.paginationOptions.page++,a.inProgress=!0;var c="twitter"==a.collection.source?"&sort_field=date&sort_direction=-1":"";b.get(d.host+"/items/"+a.collection.collection_id+"?limit="+a.paginationOptions.limit+"&offset="+a.paginationOptions.page*a.paginationOptions.limit+c).then(function(b){b.data.status&&b.data.items.length?(b.data.items.forEach(function(b){var c=b.fields;c.linkEditId=b.item_id,c.published=b.published,c.starred=b.starred,a.elements.push(c)}),a.loading=!1,a.inProgress=!1):(a.inProgress=!1,a.loading=!1,a.paginationOptions.lastPage=!0)})}},a.deleteElement=function(c){confirm("Are you sure you want to delete this element?")&&b.delete(d.host+"/item/"+c.linkEditId).then(function(b){if(b.data.status)for(var d=0;d<a.elements.length;d++)a.elements[d].linkEditId==c.linkEditId&&a.elements.splice(d,1)})},a.toggleStatus=function(a,c,e){b.put(d.host+"/item/"+a,{published:!c}).then(function(a){"material-icons item-red"==e.target.className?(e.target.className="material-icons",e.target.parentElement.setAttribute("title","Disable published collections element")):(e.target.className="material-icons item-red",e.target.parentElement.setAttribute("title","Enable published collections element"))},function(a){})},a.deleteCollection=function(a){confirm("Are you sure you want to delete this collection?")&&b.delete(d.host+"/collection/"+e.id+"/"+e.collection).then(function(a){a.data.status?f.go("collections.addCollection",{id:e.id},{reload:!0}):alert(a.error)})},a.toggleStarredStatus=function(a,c){a.starred=!c,b.put(d.host+"/item/"+a.linkEditId,{starred:!c}).then(function(b){b.status&&(a.starred=!c)},function(a){})}}]),angular.module("brnaiApp").controller("CreateelementCtrl",["$scope","$http","getDomainData","$stateParams","Upload","$state","$timeout","Notification","$window",function(a,b,c,d,e,f,g,h,i){function j(b,c,d){for(var e in a.fields)d.name==e&&a.fields.hasOwnProperty(e)&&(a.fields[e]=c)}function k(){if($("input").each(function(){$(this).trigger("blur")}),$(".ng-invalid").length>0)return h.error({delay:6e4,message:"Some required fields are empty"}),setTimeout(function(){$($(".ng-invalid")[0]).trigger("focus"),a.$apply()},100),!1;var b=!0;for(var c in a.fields)a.fields[c]&&(b=!1);return b&&h.error({delay:6e4,message:"All fields cannot be empty"}),!b}function l(a){for(var b in a)isNaN(a[b])||(a[b]=parseFloat(a[b]))}a.collection={},a.fields={},a.bot_id=d.id,a.$parent.isShortSidebar=!0,a.disabledBtnCreate=!1,a.addElement=function(){if(k()){a.disabledBtnCreate=!0;var e={collection_id:a.collection.collection_id,fields:a.fields};b.post(c.host+"/item",e).then(function(b){b.data.status?a.$parent.goto(d.id,d.collection):console.error(b.data.error),a.disabledBtnCreate=!1})}},a.updateElement=function(){k()&&b.put(c.host+"/item/"+d.el,{fields:a.fields}).then(function(b){b.data.status?a.$parent.goto(d.id,d.collection):console.error(b.data.error)})},a.addFile=function(b,f,g,h){delete h.progress,delete h.error,b&&e.upload({url:c.host+"/attachment/"+g+"/"+
6d.id,data:{file:b}}).then(function(b){if(!b)return h.error="Some error occured on upload file",void delete h.progress;a.collection.fields[f].loading=!1,b.data.status&&j(f,b.data.url,h),delete h.progress},function(a){delete h.progress,h.error=a.message},function(b){a.collection.fields[f].loading=!0,h.progress=parseInt(100*b.loaded/b.total)})},a.redirectToFile=function(a,b){i.open(b,"_blank"),a.stopPropagation()},function(){d.el&&(a.updateRoute=!0,b.get(c.host+"/item/"+d.el).then(function(b){a.fields=b.data.fields,l(a.fields)})),g(function(){b.get(c.host+"/collection/"+d.collection).then(function(b){b.data.status?(a.collection=b.data,d.el||b.data.fields.forEach(function(b){a.fields[b.name]=""})):console.error(b.data.error)})},100)}()}]),angular.module("brnaiApp").controller("StatsallCtrl",["$scope","$http","$stateParams","getDomainData","getBotInfo","Auth","$interval",function(a,b,c,d,e,f,g){function h(c,e,f){e=e||a.options.limit,f=f||a.options.offset,a.inProgress=!0;var j="?sort="+a.sort.name+"&direction="+a.sort.direction+"&limit="+e+"&offset="+f;b.get(d.host+"/report/clients"+j).then(function(b){if(!b)return void(a.inProgress=!1);if("sort"==c&&(a.usersInfo=[]),a.total_clients=b.data.total_clients,a.total_messages=b.data.total_messages,b.data&&b.data.clients.length){var d=[];d="sort"==c?b.data.clients:i("more"==c?a.usersInfo.concat(b.data.clients):b.data.clients.concat(a.usersInfo)),a.usersInfo=d}a.inProgress=!1,g.cancel(a.intervalUsers),a.intervalUsers=g(h,1e4)})}function i(a){for(var b=a.concat(),c=0;c<b.length;++c)for(var d=c+1;d<b.length;++d)b[c].client_id===b[d].client_id&&b.splice(d--,1);return b}a.usersInfo=[],a.sort={name:"last",direction:"desk"},a.tableHeaders=[{name:"bot",sortDirection:!1,active:!1},{name:"client",sortDirection:!1,active:!1},{name:"provider",sortDirection:!1,active:!1},{name:"messages",sortDirection:!1,active:!1},{name:"last",sortDirection:!1,active:!0},{name:"sessions",sortDirection:!1,active:!1}],a.inProgress=!1,a.intervalUsers=null,a.total_rows=0,a.options={limit:50,offset:0},a.loadMore=function(){a.usersInfo.length>350||h("more",30,a.usersInfo.length)},a.sortColumn=function(b){a.sort.name="bot"==b.name?"bot_name":"client"==b.name?"name":b.name,a.sort.direction=b.sortDirection?"desk":"asc",b.sortDirection=!b.sortDirection,a.tableHeaders.forEach(function(a){a.name!=b.name?(a.sortDirection=!1,a.active=!1):a.active=!0}),h("sort",a.options.limit,a.options.offset)},a.$on("$destroy",function(){g.cancel(a.intervalUsers)}),a.goto=function(a){$state.go("conversations",{id:a})},h()}]),angular.module("brnaiApp").controller("BotAbstractCtrl",["$http","getDomainData","$state","$window","$scope","$timeout","Auth","botService","Notification",function(a,b,c,d,e,f,g,h,i){function j(){a.get(b.host+"/alerts/"+c.params.id).then(function(a){a.data.status&&(e.alerts=a.data.alerts,e.isNotificationError=!1,e.isNotificationWarning=!1,a.data.alerts.forEach(function(a){a.viewed||(e.isNotificationWarning=!0,"error"===a.type&&(e.isNotificationError=!0))}),m=!1)})}function k(){h.updateSingletonBot(c.params.id)}function l(a){switch(a.category){case"message":c.go("bot-settings.settings-connections",{id:c.params.id}),e.notifications.visibility=!1;break;case"scenario":c.go("bot-abstract.bot-functions",{id:c.params.id}),e.notifications.visibility=!1}}e.alerts=[],e.isAlert=!1,e.isMenu=!0,e.state=!1,e.viewedType=!1,e.isNotificationError=!1,e.isNotificationWarning=!1,e.botInfo={bot_id:c.params.id},e.notifications={visibility:!1}
6,e.bugReportFiles=[],e.bugDescription="",e.bugSubject="",e.addFile=function(a){9!=e.bugReportFiles.length&&a&&e.bugReportFiles.push(a)};var m=!0,n=this;n.urlPath=c,n.botInfo=e.botInfo,n.authenticated=g.getUser(),k(),j(),n.user=g.getUser(),a.get(b.host+"/alerts/count/"+c.params.id).then(function(a){a.data.status&&a.data.unviewed>0&&(e.isAlert=!0)}),e.$on("getBot",function(){k()}),e.handleAlertClick=function(a){(e.isNotificationError||e.isNotificationWarning)&&(e.notifications.visibility=!e.notifications.visibility,a.stopPropagation())},e.clearAll=function(){a.put(b.host+"/alerts/"+c.params.id+"/viewed").then(function(a){a.data&&a.data.status&&1==a.data.status?(e.state=!1,j(),e.notifications.visibility=!1):alert("Something goes wrong...")},function(a){})},e.notivicationAction=function(c,d){l(c),a.get(b.host+"/alert/"+c.alert_id).then(function(a){j()})},e.$on("singletonBot:updated",function(a,b){n.botInfo=b,e.botInfo=n.botInfo,n.botInfo||(n.botInfo={bot_id:c.params.id}),n.botInfo.bot_id||(n.botInfo.bot_id=c.params.id)}),e.switchBotActivity=function(){a.post(b.host+"/bot/active/"+n.botInfo.bot_id,{active:!n.botInfo.active}).then(function(a){k()},function(a){})},e.enableBot=function(c,d){a.post(b.host+"/bot/active/"+c,{active:!0}).then(function(a){getActiveBots(),getInActiveBots()},function(a){console.error(a)})},e.subMenu={isOpen:!1,storeIsOpen:!1},e.toggled=function(a){e.subMenu.isOpen=a},e.toggledStore=function(a){e.subMenu.storeIsOpen=a},e.sendReport=function(){var a="===Info===\nUser: "+n.user.email+"\n\n===Bot===\nName: "+e.botNav.botInfo.name+"\nId: "+e.botNav.botInfo.bot_id+"\n\n===Description===\n"+e.bugDescription,b=new FormData;if(b.append("token","idj2810asd"),b.append("project_id","52"),b.append("subject",e.bugSubject),b.append("description",a),e.bugReportFiles.length)for(var c=0;c<e.bugReportFiles.length;c++)if(c<9){var d=c+1;b.append("file"+d,e.bugReportFiles[c])}$.ajax({type:"POST",url:"http://taiga.techfunder.de:5001/issue/",data:b,success:function(){},cache:!1,contentType:!1,processData:!1}
6),e.bugSubject="",e.bugReportFiles=[],e.bugDescription="",i.success({message:"Thank you for bug reporting!"})}}]),angular.module("brnaiApp").controller("BotFunctionsCtrl",["$scope","$http","getDomainData","$stateParams","$uibModal","Notification","$cookies","Auth","$location",function(a,b,c,d,e,f,g,h,i){function j(){b.get(c.host+"/scenarios/"+d.id).then(function(b){b.data.status?(a.scenarios=b.data.scenarios,a.selectedScenarios=[],a.isAllScenariosSelected=!1,a.keyword&&m()):(f.error({delay:6e4,message:b.data.error}),$state.go("bots"))},function(a){console.error(a)})}function k(b){return a.scenarios.find(function(a){return a.scenario_id===b})}function l(b){return a.scenarios.find(function(a){return a.name===b})}a.bot_id=d.id,a.selectedScenarios=[],g.getObject("functions_mode")?a.functions_mode=g.getObject("functions_mode"):(g.putObject("functions_mode","simple"),a.functions_mode=g.getObject("functions_mode")),j(),a.copyScenario=function(d){b.post(c.host+"/scenario/"+d.scenario_id+"/clone").then(function(b){j(),a.$emit("getBot")})},a.copyScenarios=function(){var d=a.selectedScenarios.length;a.selectedScenarios.forEach(function(e){b.post(c.host+"/scenario/"+e+"/clone").then(function(b){--d||(j(),a.$emit("getBot"))})})},a.addFunction=function(){e.open({templateUrl:"views/createscenario.html",controller:"CreatescenarioCtrl",size:"lg",resolve:{scenario:function(){return null}}}).result.then(function(a){})},a.addScenario=function(){if(!a.isAddingScenario){a.isAddingScenario=!0;for(var e=1,g="NewScenario";l(g);)g="NewScenario"+e,e++;var i={bot_id:d.id,account_id:h.getUser().account_id,name:g,description:null,keywords:[],intents:[],steps:[],template:"visual",default:!1,roles:[],validation:{status:"ok",forced:!1}};b.post(c.host+"/scenario/",i).then(function(b){a.editScenario(b.data.scenario_id)},function(a){f.error({delay:6e4,message:a.message})}),a.isAddingScenario=!1}},a.deleteScenario=function(d){var e=d.scenario_id;delete d.bot_id,delete d.scenario_id,delete d.status,b.delete(c.host+"/scenario/"+e).then(function(b){b.data.status?(j(),a.$emit("getBot"),f.success({message:"Scenario successfully deleted"})):f.error({delay:6e4,message:"Can't delete this scenario"})},function(a){f.error({delay:6e4,message:a.message})})},a.deleteScenarios=function(){var d=a.selectedScenarios.length;a.selectedScenarios.forEach(function(e){b.delete(c.host+"/scenario/"+e).then(function(b){d--,b.data.status||f.error({delay:6e4,message:"Can't delete this scenario"}),d||(j(),a.$emit("getBot"))},function(a){f.error({delay:6e4,message:a.message})})})},a.makeDefault=function(){if(1==a.selectedScenarios.length){var d=a.selectedScenarios[0],e=k(d);if(e&&!e.default){var g=angular.copy(e);g.default=!0,delete g.scenario_id,delete g.tableSelected,delete g.searchResult,b.put(c.host+"/scenario/"+d,g).then(function(b){j(),a.$emit("getBot")},function(a){f.error({delay:6e4,message:a.message})})}}},a.editScenario=function(b){location.href="/v2/bot/"+a.bot_id+"/scenario/"+b},a.onTableSelect=function(b,c){if(c.tableSelected){c.tableSelected=!1,a.isAllScenariosSelected=!1;var d=a.selectedScenarios.indexOf(c.scenario_id);-1!==d&&a.selectedScenarios.splice(d,1)}else c.tableSelected=!0,a.selectedScenarios.push(c.scenario_id),a.selectedScenarios.length===a.scenarios.length&&(a.isAllScenariosSelected=!0)},a.onTableSelectAll=function(){a.isAllScenariosSelected?(a.selectedScenarios=[],a.scenarios.forEach(function(a){a.tableSelected=!1}),a.isAllScenariosSelected=!1):(a.selectedScenarios=[],a.scenarios.forEach(function(b){a.keyword&&!b.searchResult||(a.selectedScenarios.push(b.scenario_id),b.tableSelected=!0)}),a.isAllScenariosSelected=!0)},a.showSearch=!1,a.searchPlaceholder="Search",a.toggleSearch=function(){a.showSearch=!a.showSearch,a.searchPlaceholder=a.showSearch?"Type here...":"Search"},a.keyword="",a.clearKeyword=function(){ 7a.keyword=""};var m=function(){a.scenarios&&(a.isAllScenariosSelected=!1,a.selectedScenarios=[],a.scenarios.forEach(function(b){b.tableSelected=!1,a.keyword&&(b.searchResult=b.name.toLowerCase().search(a.keyword.toLowerCase())>-1||b.keywords.join(" ").toLowerCase().search(a.keyword.toLowerCase())>-1)}))};a.$watch("keyword",m);
7var n=function(a){if(!$(a.target).closest(".container-updated .table-actions").length){var b=$(".container-updated .table-actions"),c=$(".container-updated .brn-table-wrap"),d=a.pageY-b.height()/2;d<c.offset().top?d=c.offset().top:d+b.height()>c.offset().top+c.outerHeight()&&(d=c.offset().top+c.outerHeight()-b.height()),b.css("top"," "+d+"px")}};$(document).on("mousemove click",n),a.$on("$destroy",function(){$(document).off("mousemove click",n)})}]),angular.module("brnaiApp").controller("BotSettingsCtrl",["$scope","$state","$http","Notification","getDomainData","Auth",function(a,b,c,d,e,f){b.activeLink=b.current.name,a.isAdmin=f.isAdmin(),a.goto=function(a,c){b.go(a,{id:c}),b.activeLink=a},a.check=function(a){return b.activeLink==a},a.deleteBot=function(){confirm("Are you sure you want to delete bot?")&&c.delete(e.host+"/bot/"+a.botNav.botInfo.bot_id).then(function(a){a.data&&a.data.status&&1==a.data.status?b.go("bots"):d.error({delay:6e4,message:"Something goes wrong..."})},function(a){})}}]),angular.module("brnaiApp").controller("SettingsGeneralCtrl",["$http","$scope","getDomainData","Upload","$uibModal","$stateParams","uploadCoverService","uploadScreenshot","$timeout","botData","Auth","storage","$filter","$state","botService","Notification",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){function q(){j.get(f.id).then(function(a){b.bot=a.data})}function r(){a.get(c.host+"/bot/"+f.id).then(function(a){1==a.data.status&&(b.botInfo=a.data)},function(a){})}function s(){var a=l.getItem("dashboardNewDate_botId:"+f.id);a?b.dashboard=a:(b.dashboard.dateFormatted="lifetime",b.dashboard.date.startDate=m("date")(new Date(Date.now()-86399136e5),"yyyy-MM-dd"),b.dashboard.date.endDate=m("date")(new Date,"yyyy-MM-dd"))}b.bot={},b.widgetsLoading=!0,b.bot_id=f.id,b.botInfo={bot_id:f.id},b.importCode=!1,b.loader=!1,b.dashboard={dateFormatted:"",date:{}},b.dates=[{name:"lifetime",value:"lifetime"},{name:"last year",value:"last year"},{name:"last month",value:"last month"},{name:"last week",value:"last week"},{name:"last day",value:"last day"}],b.storageData=l.getItem("authData"),s(),q(),b.handleBotNotifications=function(){a.post(c.host+"/bot/settings/"+f.id,{notifications:!b.bot.settings.notifications}).then(function(a){b.bot.settings.notifications=!b.bot.settings.notifications,b.updateBot()},function(a){})},b.uploadImg=function(a){if(b.progress=0,null==a)return b.urlActive=!0,b.urlStatus=!1,b.errorText="incorrect file format",void(b.urlStatus=!1);b.urlActive=!1,d.upload({url:c.host+"/bot/image/"+f.id,data:{file:a}}).then(function(a){b.urlActive=!0,b.urlStatus=!0,a.data&&(b.bot.image=a.data.image,b.$emit("getBot"))},function(a){},function(a){b.progress=parseInt(100*a.loaded/a.total)})},b.openUrl=function(){setTimeout(function(){b.uplActive=!1,b.$apply()},0)},b.progress=0,b.urlStatus=!1,b.urlActive=!1,b.errorText="",i(function(){a.get(c.host+"/bot/"+f.id).then(function(a){1==a.data.status&&(b.loader=!0,b.botInfo=a.data,b.botInfo.account_id=k.getUser().account_id)},function(a){})},0),a.get(c.host+"/scenarios/"+f.id).then(function(a){a.data.status&&(b.bot_scenarios=a.data.scenarios)}),b.showElement=function(a){b.current=a},b.$watch("dashboard",function(a,c){if(a.dateFormatted){var d="dashboardNewDate_botId:"+f.id;switch(a.dateFormatted){case"lifetime":b.dashboard.date.startDate=m("date")(new Date(Date.now()-86399136e5),"yyyy-MM-dd"),b.dashboard.date.endDate=m("date")(new Date,"yyyy-MM-dd");break;case"last year":b.dashboard.date.startDate=m("date")(new Date(Date.now()-31536e6),"yyyy-MM-dd"),b.dashboard.date.endDate=m("date")(new Date,"yyyy-MM-dd");break;case"last month":b.dashboard.date.startDate=m("date")(new Date(Date.now()-2592e6),"yyyy-MM-dd"),b.dashboard.date.endDate=m("date")(new Date,"yyyy-MM-dd");break;case"last week":b.dashboard.date.startDate=m("date")(new Date(Date.now()-6048e5),"yyyy-MM-dd"),b.dashboard.date.endDate=m("date")(new Date,"yyyy-MM-dd");break;case"last day":b.dashboard.date.startDate=m("date")(new Date(Date.now()-864e5),"yyyy-MM-dd"),b.dashboard.date.endDate=m("date")(new Date,"yyyy-MM-dd")}l.setItem(d,a)}},!0),b.editBot=function(){e.open({templateUrl:"views/botedit.html",controller:"BoteditCtrl",resolve:{bot:function(){return angular.copy(b.botInfo)}}}).result.then(function(a){r()},function(a){})}
7,b.updateBot=function(){a.put(c.host+"/bot/"+f.id,b.bot).then(function(a){p.success({message:"Succesfuly saved"})},function(a){p.error({delay:6e4,message:"Something went wrong"})})}}]),angular.module("brnaiApp").controller("SettingsPaymentCtrl",function(){this.awesomeThings=["HTML5 Boilerplate","AngularJS","Karma"]}),angular.module("brnaiApp").controller("SettingsWidgetCtrl",["$scope","$http","getDomainData","Auth","$state","$stateParams","$window",function(a,b,c,d,e,f,g){a.widget={width:480,height:800,resizeable:!1,color:"#C61B0C",theme:"square",type:"button",direction:"ltr",fontFamily:"inherit",fontSize:"14px"},a.isLogin=angular.isDefined(d.getUser()),a.authUrl="http://brain.tfid.me?redirect_url="+window.location.origin+"/auth",a.widget_id=f.id,a.themes=[{name:"square",title:"Square"},{name:"rounded",title:"Rounded"},{name:"cutted",title:"Cutted edge"},{name:"plain",title:"Plain text"}],a.types=[{name:"button",title:"Floating button"},{name:"bage",title:"Clipped badge"},{name:"embedded",title:"Embedded"},{name:"fullscreen",title:"Fullscreen"}],a.directions=[{name:"ltr",title:"left-to-right"},{name:"rtl",title:"right-to-left"}],a.saveWidget=function(){a.bot_token&&b.put(c.host+"/connection/widget/"+f.id,{provider_data:{token:a.bot_token,settings:Object.assign({},a.widget)}}).then(function(b){b&&(Notification.success({message:"Succesfuly saved"}),a.$emit("getBot"))},function(a){Notification.error({delay:6e4,message:"Something went wrong"})})},this.$onInit=function(){b.get(c.host+"/connection/"+f.id+"/widget",{notification:!1}).then(function(d){a.bot_token=d.data.provider_data.token,b.get(c.host+"/widget/settings/"+f.id+"/"+a.bot_token).then(function(b){a.widget=Object.assign({},a.widget,b.data.settings)},function(a){})},function(a){console.error(a)})}}]),angular.module("brnaiApp").controller("SettingsTeamCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","Auth","storage",function(a,b,c,d,e,f,g){function h(){b.get(e.host+"/bot/team/"+d.id).then(function(b){b.data.status&&(a.bot
7Creator=b.data.creator.name,a.botCreatorId=b.data.creator.id,a.team=b.data.team,a.userInfo=f.getUser())},function(a){})}a.botCreator="",a.team=[],a.usersInfo=[],a.selected={},a.search_users=[],a.storageData=g.getItem("authData"),h(),a.onedit=function(c){b.get(e.host+"/users/search?limit=10000").then(function(b){b.data.status&&(a.search_users=b.data.users,a.search_users.forEach(function(a){a.index=a.name+" ("+a.email+")"}))},function(a){})},a.addMember=function(c){a.selected.user.id&&b.post(e.host+"/bots/team/add",{user_id:a.selected.user.id,bot_id:d.id}).then(function(b){h(),a.selected.user=""},function(a){console.error(a)})},a.removeMember=function(a){b.post(e.host+"/bots/team/remove",{user_id:a,bot_id:d.id}).then(function(a){h()},function(a){console.error(a)})}}]),angular.module("brnaiApp").controller("SettingsOtherCtrl",["$http","$scope","getDomainData","Notification","Upload","$uibModal","$stateParams","uploadCoverService","$timeout","botData","Auth","storage","$filter","$state","botService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(){a.get(c.host+"/tool/"+n.params.id+"/sentiment",{notification:!1}).then(function(a){void 0!==a&&a.data.status&&(b.sentimentAnalysis=a.data.tool)})}function q(){j.get(g.id).then(function(a){b.bot=a.data,b.bot.settings.protection.question=b.bot.settings.protection.question||"Access code","vip"==b.bot.tag&&(b.isVip=!0)})}function r(){a.get(c.host+"/analytics/"+g.id).then(function(a){if(Object.keys(a.data.analytics).length){b.services=a.data.analytics;for(var c in b.services)b.types.forEach(function(a){a.type==c&&(a.token=b.services[c].token,a.tracking_id=b.services[c].tracking_id,a.active=b.services[c].active)})}})}b.bot={},b.isAdmin=k.isAdmin(),b.botToken="",b.types=[{type:"google",name:"Google Analytics",tracking_id:"",active:""},{type:"mixpanel",name:"Mixpanel Analytics",token:"",active:""}],b.services=[],b.sentimentAnalysis={name:"sentiment",active:!1},b.isVip=!1,b.addSentimentAnalysis=function(){b.sentimentAnalysis.active?a.post(c.host+"/tool/"+n.params.id+"/sentiment",{}).then(function(a){p()},function(a){d.error({delay:6e4,message:"Something went wrong"})}):a.delete(c.host+"/tool/"+n.params.id+"/sentiment",{}).then(function(a){b.sentimentAnalysis={name:"sentiment",active:!1}},function(a){d.error({delay:6e4,message:"Something went wrong"})})},b.addBotSettingsIntentsEnabled=function(){a.post(c.host+"/bot/settings/"+n.params.id,{intents:{parse:b.bot.settings.intents.parse||null,train:b.bot.settings.intents.train||null,enabled:b.bot.settings.intents.enabled}}).then(function(a){a.data.status||(b.bot.settings.intents.enabled=!b.bot.settings.intents.enabled)},function(a){d.error({delay:6e4,message:"Something went wrong"})})},r(),p(),b.addService=function(b){if("mixpanel"==b.type)var e={token:b.token,active:b.active};else var e={tracking_id:b.tracking_id,active:b.active};a.post(c.host+"/analytics",{bot_id:g.id,type:b.type,data:e}).then(function(a){d.success({message:"Succesfuly saved"})},function(a){d.error({delay:6e4,message:"Something went wrong"})})},q(),b.updateProtection=function(){var a=b.bot.settings.protection;o.setProtection(a.active,a.code,a.question,g.id).then(function(a){d.success({message:"Succesfuly saved"})},function(a){})},b.switchVipMonitoring=function(){var a=b.bot.settings.monitoring;void 0!==a.warnings.active&&null!==a.warnings.active||(a.warnings.active=!1),o.setMonitorings(a,g.id).then(function(a){d.success({message:"Succesfuly saved"})},function(a){})},b.getToken=function(){b.isAdmin&&o.getBotToken(g.id).then(function(a){b.botToken=a.data.token},function(a){d.error({delay:6e4,message:a.message})})},b.getToken(),b.saveWebhook=function(){o.saveWebhook(g.id,b.bot.webhook).then(function(a){a&&d.success({message:"Webhook successfully saved"}),q()},function(a){d.error({delay:6e4,message:a.error})})},b.saveIntents=function(){o.saveIntents(g.id,b.bot.settings.intents.parse,b.bot.settings.intents.train).then(function(a){a&&d.success({message:"Urls successfully saved"}),q()},function(a){d.error({delay:6e4,message:a.error})})},b.toggleVip=function(){var d={tag:b.isVip?null:"vip"};a.patch(c.host+"/bot/"+g.id,d).then(function(a){})}}]),angular.module("brnaiApp").service("botData",["$http","getDomainData",function(a,b){return{get:function(c){return a.get(b.host+"/bot/"+c).then(function(a){return a})}}}]),angular.module("brnaiApp").controller("BotDashboardCtrl",function(){this.awesomeThings=["HTML5 Boilerplate","AngularJS","Karma"]}),angular.module("brnaiApp").service("storage",["$localStorage",function(a){var b=a;return{setItem:function(a,c){b[a]=c},getItem:function(a){return b[a]},deleteItem:function(a){delete b[a]},getStorage:function(){return b},clear:function(){}}}]),angular.module("brnaiApp").controller("LearningCtrl",["$scope","$http","getDomainData","Auth","$state","Upload","$rootScope","$
7window",function(a,b,c,d,e,f,g,h){e.activeLink=e.current.name,a.check=function(a){return e.activeLink==a},a.goto=function(a,b){switch(a){case"learning-training":e.go("learning-training",{id:b}),e.activeLink="learning-training";break;case"learning-intents":e.go("learning-intents",{id:b}),e.activeLink="learning-intents";break;case"learning-entities":e.go("learning-entities",{id:b}),e.activeLink="learning-entities";break;case"learning-mind":e.go("learning-mind",{id:b}),e.activeLink="learning-mind"}},a.openUpl=function(){setTimeout(function(){a.uplActive=!1,a.$apply()},0)},a.progress=0,a.uplStatus=!1,a.uplActive=!1,a.errorText="",a.upload=function(b){if(a.progress=0,null==b)return a.uplActive=!0,a.uplStatus=!1,a.errorText="incorrect file format",void(a.uplStatus=!1);a.uplActive=!1,f.upload({url:c.host+"/intent/import/"+a.botNav.botInfo.bot_id,data:{file:b}}).then(function(b){b.data.status?(a.uplActive=!0,a.uplStatus=!0):(a.uplActive=!0,a.uplStatus=!1,a.errorText=b.data.error)},function(a){},function(b){a.progress=parseInt(100*b.loaded/b.total)})},a.export=function(){b.get(c.host+"/intent/export/"+a.botNav.botInfo.bot_id).then(function(a){a?g.popupWindow=h.open(a.data.file,"_blank"):Notification.error({delay:6e4,message:"Can't export mind"})})},a.entities=[],a.intent={},a.info=!1,a.expression="",a.parse=function(){b.post(c.host+"/expression/parse",{expression:a.expression,bot_id:a.botNav.botInfo.bot_id}).then(function(b){b.data.status&&(a.entities=b.data.result.entities,a.intent=b.data.result.intent,a.info=a.expression,a.expression=b.data.result.text)},function(a){})},a.handleSelectedText=function(a){}}]),angular.module("brnaiApp").controller("LearningIntentDetailCtrl",["$scope","$http","getDomainData","$stateParams","$state","learningService","$uibModal","Notification","$window","Upload","crmService",function(a,b,c,d,e,f,g,h,i,j,k){function l(){a.isNew||(a.inProgress=!0,f.getIntent(d.intent).then(function(b){a.intent=b,a.getBotTags(),a.inProgress=!1}),f.getEntities(d.id,!0).then(function(b){a.entities=b.entities}))}function m(){if(a.isNew)return void a.createIntent();f.updateIntent(a.intent.intent_id,{bot_id:d.id,name:a.intent.name,response:a.intent.response,expressions:a.intent.expressions}).then(function(a){a.data.status&&h.success({message:"Intent successfully updated"})})}function n(a,b){f.updateEntity(a,{bot_id:d.id,values:[b]})}a.intent={bot_id:d.id,name:"",expressions:[],response:{replies:[],type:"reply"}},a.disabledImg=!1,e.defStateName="learning-intents",e.defStateParam={id:d.id},a.expression="",a.inProgress=!1,a.intentsList=[],a.entities=[],a.selected_expression={entities:[],text:"",index:-1},a.reply={type:"",url:"",text:""},a.isNew="new"===d.intent,a.intent_types=[{type:"scenario",label:"Scenario"},{type:"reply",label:"Reply"}],a.selected_replies={obj:null,key:null},a.tags=[],a.addListOpened=!1,a.removeListOpened=!1,a.editingTag={},a.tagColors=["#94cc25","#f5a623","#d0021b","#9013fe","#4a90e2","#969696"],a.newTagName="",a.getBotTags=function(){k.getBotTags(d.id).then(function(b){a.tags=b.data.tags})},a.closePopups=function(){a.addListOpened=!1,a.removeListOpened=!1,a.editingTag={}},a.isTagAvaliable=function(b){for(var c=a.intent.response.tags.add.concat(a.intent.response.tags.remove),d=!1,e=0;e<c.length;e++)if(c[e].tag_id==b){d=!0;break}return!d},a.openAddList=function(b){b.stopPropagation(),a.editingTag={},a.removeListOpened=!1,!0===a.addListOpened?a.addListOpened=!1:a.addListOpened=!0},a.openRemoveList=function(b){b.stopPropagation(),a.editingTag={},a.addListOpened=!1,!0===a.removeListOpened?a.removeListOpened=!1:a.removeListOpened=!0},a.addTagToAddList=function(b,c){c.stopPropagation(),a.addListOpened=!1,a.editingTag={},a.intent.response.tags.add.push(b)},a.addTagToRemoveList=function(b,c){c.stopPropagation(),a.removeListOpened=!1,a.editingTag={},a.intent.response.tags.remove.push(b)},a.editTag=function(b,c){c.stopPropagation(),a.removeListOpened=!1,a.addListOpened=!1,a.editingTag.tag_id===b.tag_id?a.editingTag={}:a.editingTag=b},a.deleteTag=function(b,c){c.stopPropagation(),k.deleteTag(b.tag_id).then(function(c){if(c.data.status)for(var d=0;d<a.tags.length;d++)if(a.tags[d].tag_id==b.tag_id){a.tags.splice(d,1);break}})},a.setTagColor=function(b,c){c.stopPropagation();var e={bot_id:d.id,name:a.editingTag.name,color:b};k.updateTag(a.editingTag.tag_id,e).then(function(c){c.data.status&&(a.editingTag.color=b,a.editingTag={})})},a.removeTagFromIntent=function(b,c,d){if(d.stopPropagation(),"add"===c){for(var e=0;e<a.intent.response.tags.add.length;e++)if(a.intent.response.tags.add[e].tag_id==b){a.intent.response.tags.add.splice(e,1),a.editingTag={};break}}else for(var e=0;e<a.intent.response.tags.remove.length;e++)if(a.intent.response.tags.remove[e].tag_id==b){a.intent.response.tags.remove.splice(e,1),a.editingTag={};break}},a.isTagEditing=function(b){return!(!a.editingTag||a.editingTag.tag_id!==b)},a.createTag=function(){a.newTagName?k.createNewTag({bot_id:d.id,name:a.newTagName}).then(function(b){a.newTagName="",a.getBotTags(),$("#editTag").modal("hide"),h.success({delay:2500,message:"Tag created"})},function(a){h.error({delay:6e4,message:a.message})}):h.error({delay:2500,message:"Tag name is required"})},b.get(c.host+"/scenarios/"+d.id).then(function(b){b.data.status&&(a.bot_scenarios=b.data.scenarios)},function(a){}),a.addExpression=function(){if(a.expression.length){var b={bot_id:d.id,expression:a.expression};f.insertExpressionToIntent(b,a.intent.intent_id).then(function(b){if(b.status){a.intent.expressions.push({text:a.expression,entities:b.expression.entities});h.success({message:'Expression "'+a.expression+'" added to intent'}),a.expression=null}else h.error({delay:6e4,message:'Expression "'+a.expression+"\" wasn't add to intent"})})}},a.addReply=function(){if(!a.reply.text.length)return void h.error({delay:6e4,message:"The field `Text` isn't found!"});a.reply.url.length?a.reply.type="image":a.reply.type="text",void 0==a.intent.response.replies?(delete a.intent.response.scenario_id,a.intent.response.replies=[],a.intent.response.replies.push(a.reply
7)):a.intent.response.replies.push(a.reply),a.reply={type:"",url:"",text:""},m()},a.deleteReply=function(b){a.intent.response.replies.splice(b,1),m()},a.deleteExpression=function(b){a.intent.expressions.splice(b,1),m()},a.selectExpression=function(b){a.selected_expression.index=b,a.selected_expression.text=a.intent.expressions[b].text,void 0===a.intent.expressions[b].entities?a.selected_expression.entities=[]:a.selected_expression.entities=a.intent.expressions[b].entities},a.handleEntityChange=function(){a.intent.expressions[a.selected_expression.index].text=a.selected_expression.text,m(),a.intent.expressions[a.selected_expression.index].entities.forEach(function(a){n(a.entity_id,a.value)},this),$("#editEntities").modal("hide")},a.handleScenarioChange=function(){delete a.intent.response.replies,m()},a.deleteEntity=function(b){a.selected_expression.entities.splice(b,1)},a.handleSelectedText=function(b){if(!a.entities.length)return h.error({delay:6e4,message:"No available entities"}),!1;a.selected_expression.entities.push({value:b.value,start:b.start<b.end?b.start:b.end,end:b.end>b.start?b.end:b.start,entity_id:null,name:""})},a.replayChanged=function(){a.intent.response.replies[a.selected_replies.key]=a.selected_replies.obj,a.intent.response.replies[a.selected_replies.key].text=a.selected_replies.text,"image"===a.selected_replies.obj.type&&(a.intent.response.replies[a.selected_replies.key].url=a.selected_replies.url),m()},a.selectReplays=function(b,c){a.selected_replies.obj=angular.copy(b),a.selected_replies.text=a.selected_replies.obj.text?a.selected_replies.obj.text:a.selected_replies.obj,a.selected_replies.url=a.selected_replies.obj.url?a.selected_replies.obj.url:"",a.selected_replies.key=c},a.handleIntentNameChange=function(){m()},a.createIntent=function(){if(!a.intent.name)return h.error({delay:6e4,message:"Intent name cannot be empty"}),!1;f.createIntent(a.intent).then(function(b){b&&(a.intent=b.intent,d.intent=b.intent.intent_id,a.isNew=!1)})},a.addFile=function(b,e,f,g){j.upload({url:c.host+"/attachment/"+f+"/"+d.id,data:{file:b}}).then(function(b){a.disabledImg=!1,b.data.status&&(a.reply.url=b.data.url)},function(a){},function(b){a.disabledImg=!0})},l()}]),angular.module("brnaiApp").controller("CrmCtrl",["$scope","$http","$stateParams","getDomainData","$cookies","Notification","$location","crmService","Upload","$filter","$uibModal","$timeout","storage","storingservice","usersService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(){b.get(d.host+"/products/"+a.botId).then(function(b){1==b.data.status&&(a.listProducts=b.data.products)},function(a){})}function q(){b.get(d.host+"/store/"+a.botId).then(function(b){var c=b.data.customer.schema;angular.forEach(c,function(b,c){b.visible&&"Name"!=b.label&&"Image"!=b.label&&"Email"!=b.label&&"Phone"!=b.label&&"Size"!=b.label&&"Student"!=b.label&&(a.visibleAttributes.push(b),a.tableFilterParams[b.name]="")}),a.filterTemplate=Object.assign(a.filterTemplate,a.tableFilterParams)})}function r(){h.getFilters(a.botId).then(function(b){a.filterData=b.data.filters,a.getTagGroups()})}function s(a){return"?"+Object.keys(a).map(function(b){return encodeURIComponent(b)+"="+encodeURIComponent(a[b])}).join("&")}function t(b){const c=Math.ceil(b/a.pagination.options.limit);a.pagination.avaliablePages=c}function u(){const b=a.pagination.options.limit;a.pagination={currentPage:1,avaliablePages:0,options:{offset:0,limit:b}}}function v(){if(!a.inProgress){a.inProgress=!0,a.clients=[];var c=Object.assign({},a.filterParams);c=Object.assign(c,a.pagination.options),delete c.startDate,delete c.endDate,c=s(c),1===a.pagination.currentPage&&(a.activity.isDetected=!1),b.post(d.host+"/clients/crm/"+a.botId+c,a.sentimentPostFilter).then(function(b){b.status&&b.data&&b.data.clients.length?(w(a.pagination.currentPage,b.data.clients[0]),t(b.data.total),a.totalClients=b.data.total,a.clients=b.data.clients,a.inProgress=!1):(a.totalClients=0,a.clients=[],a.inProgress=!1)})}}function w(b,c){!b||b>1||(clearInterval(a.activity.interval),a.activity.isDetected=!1,a.activity.lastTime=c.statistics.last,a.activity.interval=setInterval(function(){x()},8e3))}function x(){if(!a.inProgress&&!a.activity.isDetected){var c=Object.assign({},a.filterParams);c.offset=0,c.limit=1,delete c.startDate,delete c.endDate,c=s(c),b.post(d.host+"/clients/crm/"+a.botId+c,a.sentimentPostFilter).then(function(b){if(!(b.status&&b.data&&b.data.clients.length))return void clearInterval(a.activity.interval);
7a.activity.lastTime!=b.data.clients[0].statistics.last&&(a.activity.isDetected=!0,clearInterval(a.activity.interval))})}}function y(){o.getUserMe().then(function(b){b.permissions.bot.tags&&h.getBotTags(a.botId).then(function(b){a.tags=b.data.tags})})}function z(){return m.getItem("crm_"+c.id)?m.getItem("crm_"+c.id):Object.assign({},a.filterTemplate)}function A(){const b="crm_"+c.id;m.setItem(b,a.filterParams)}function B(){b.get(d.host+"/scenarios/"+a.botId).then(function(b){1==b.data.status&&(a.scenarios=b.data.scenarios)},function(a){})}function C(){document.addEventListener("keydown",function(b){a.isSliderOpen&&("ArrowLeft"==b.key&&a.prevClient(),"ArrowRight"==b.key&&a.nextClient())})}function D(){return $("input").each(function(){$(this).trigger("blur")}),!($(".ng-invalid").length>0)||(setTimeout(function(){$($(".ng-invalid")[0]).trigger("focus"),a.$apply()},100),!1)}g.path("/bot/"+c.id+"/crm"),a.audience={tag:""},a.selectedRole=g.search().role||"",a.rolesFilters=[],a.botId=c.id,a.tagOption="new",a.changed=0,a.filter={name:g.search().name||"",providers:g.search().providers||"",tagId:g.search().tags||"",gender:g.search().gender||"",subscription:g.search().subscription||!1},a.clients=[],a.isAllClientsSelected=!1,a.inProgress=!1,a.options={limit:3e4,offset:0},a.requestNeeded=!0,a.selectedClient=null,a.isFilterActive=!1,a.$watch("tagOption",function(b,c){a.audience.tag=""}),a.isSliderOpen=!1,a.sliderClient={},a.isClientCustomer=!1,a.testFilter=!1,a.filters={isActive:!1},a.widgetMessage={text:""},a.tags=[],a.currentSliderTab="messages",a.selectedClients=[],a.selectedClientsTags=[],a.isAddProduct=!1,a.filterTemplate={name:"",client_role:"",tags:"",providers:"",subscriptions:"",gender:"",role:"",last_message:"",last_message_from:"",last_message_to:"",status:"",order_statuses:"",email:"",tag_filter:"","statistics.send":""},a.pagination={currentPage:1,avaliablePages:0,options:{offset:0,limit:50}},a.client,a.channel,a.filterParams=z(),a.filterTags=[],a.tableFilterParams={},a.filterData={},a.tagGroups=[],a.tagGroupEditingIndex=null,a.tagGroupEditing=null,a.statusVisible={tags:!1,order_status:!1,status:!1,gender:!1,sentiment:!1,role:!1,tags_filter:!1,messaging_period:!1,provider:!1},a.changeVisible=function(b){a.statusVisible[b]=!a.statusVisible[b]},a.$watch("datePicker.date",function(b){b&&(a.filterParams.endDate=b.endDate,a.filterParams.startDate=b.startDate,a.filterParams.last_message_from=moment(a.filterParams.startDate.getTime()+6e4*a.filterParams.startDate.getTimezoneOffset()).format("YYYY-MM-DDTHH:mm:ss"),a.filterParams.last_message_to=moment(a.filterParams.endDate.getTime()+6e4*a.filterParams.endDate.getTimezoneOffset()).format("YYYY-MM-DDTHH:mm:ss"))},!0),a.datePicker={options:{eventHandlers:{"apply.daterangepicker":function(){}},ranges:{},locale:{applyLabel:"Confirm",fromLabel:"From",toLabel:"To",cancelLabel:"Discard",customRangeLabel:"Custom range"},date:""}},a.customerViewed=[],a.customerFavorites=[],a.customerOrders=[],a.visibleAttributes=[],a.clientMessages=[],a.clientMessagesLoaded=!1,a.clientMessagesLastLength=0,a.clientMode,a.suggestions=[],a.newTag="",a.listProducts=[],a.sentimentPostFilter={sentiment:{type:"number",operator:"gte",value:[-100,100]}},a.activity={isDetected:!1,lastTime:null,interval:null},g.search().client&&setTimeout(function(){a.getClientById(g.search().client,-1)},1e3),a.swapFilter=function(){a.filters.isActive=!a.filters.isActive},a.sendSMS=function(a){if(!a.contacts.phone)return alert("Phone number is missing in contacts"),!1;b.post(d.host+"/bot/"+c.id+"/sms",{phone:a.contacts.phone,message:"Hi. This is a test m"}).then(function(a){a?f.success({message:"Sms successfully send"}):f.error({delay:6e4,message:"Can't send sms"})})},a.startSms=function(a){b.post(d.host+"/message/init/"+a.client_id).then(function(a){a?f.success({message:"Scenario started"}):f.error({delay:6e4,message:"Something went wrong, can't start scenario"})})},a.switchSliderTab=function(b){a.currentSliderTab=b},a.tableFilter=function(){a.filterParams=Object.assign(a.filterParams,a.tableFilterParams)},a.orderStatuses=n.getOrderStatusesView(),a.resetFilter=function(){a.inProgress||(u(),a.filterParams=Object.assign({},a.filterTemplate),a.filters.isActive=!1,a.filterTags=[],a.datePicker.date="")},a.createTag=function(){a.newTag&&h.createNewTag({bot_id:a.botId,name:a.newTag}).then(function(b){a.newTag="",y()},function(a){f.error({delay:6e4,message:a.message})})},a.deleteTag=function(a){h.deleteTag(a.tag_id).then(function(a){y()},function(a){f.error({delay:6e4,message:a.message})})},a.setTag=function(){switch(a.tagOption){case"new":if(a.tags.forEac
7h(function(b){if(a.audience.tag===b.name)return void f.error({delay:3e3,message:"This tag is already exist"})}),!a.audience.tag)return void f.error({message:"Set tag name"});h.createNewTag({bot_id:a.botId,name:a.audience.tag}).then(function(b){a.addTagToClients(b.data.tag_id)},function(a){f.error({delay:6e4,message:a.message})});break;case"old":if(!a.audience.tag)return void f.error({message:"Select tag"});a.tags.forEach(function(b){if(a.audience.tag===b.name)return void a.addTagToClients(b.tag_id)});break;case"delete":if(!a.audience.tag)return void f.error({message:"Select tag"});h.removeTagFromClients(a.botId,{tag_id:a.audience.tag,client_ids:a.selectedClients}).then(function(b){b.data.status&&(a.selectedClients=[],a.audience.tag="",$("#editTags").modal("hide"),a.clients.forEach(function(a){a.tableSelected=!1}),v(),f.success({message:"Tag deleted from clients"}))},function(a){f.error({delay:6e4,message:a.message})})}},a.deleteOrder=function(b){confirm("Are you sure, you want to delete order?")&&n.deleteOrder(b.order_id).then(function(c){c.data.status&&(a.customerOrders.splice(a.customerOrders.indexOf(b),1),f.success({message:"Order "+b.order_id+" successfully deleted"}))})},a.editOrder=function(b,c){a.customerOrder=c,a.customerOrderId=c},a.deleteProduct=function(b){a.customerOrder.products.splice(b,1)},p(),a.addProduct=function(){a.isAddProduct=!0},a.saveProduct=function(b){a.listProducts.forEach(function(c){c.product_id==b&&(a.customerOrder.products.push(c),a.isAddProduct=!1)})},a.saveOrder=function(){a.customerOrder.count=0,a.customerOrder.products=a.customerOrder.products.map(function(b){return b.count=parseInt(b.count),a.customerOrder.count+=parseInt(b.count),b}),n.updateOrder(a.customerOrder).then(function(b){b.status&&(f.success({message:"Order "+a.customerOrder.order_id+" successfully saved!"}),a.customerOrder=!1)})},a.addTagToClients=function(b){var c={tag_id:b,client_ids:a.selectedClients};h.addTagToClients(c).then(function(b){if(b.data.status){if("solved"==a.audience.tag.toLowerCase()){var c={mode:"auto",bot_id:a.botId};a.selectedClients.forEach(function(a){h.changeDialogMode(a,c)})}a.selectedClients=[],a.audience.tag="",$("#editTags").modal("hide"),a.clients.forEach(function(a){a.tableSelected=!1}),v(),y(),r(),f.success({message:"Tag added"})}},function(a){f.error({delay:6e4,message:a.message})})},a.cancelEditOrder=function(){a.customerOrder=!1},a.deleteClients=function(){if(confirm("Are you sure you want to delete selected clients?")){var b={client_ids:a.selectedClients};h.deleteClients(b).then(function(b){b.data.status&&(a.selectedClients=[],a.audience.tag="",v(),y(),r(),f.success({message:"Clients deleted"}))},function(a){f.error({delay:6e4,message:a.message})})}},a.getTagsFromSelectedClients=function(){},$("#editTags").on("shown.bs.modal",function(){}),$("#editTags").on("hidden.bs.modal",function(){a.audience.tag=""}),a.getClientById=function(c,e){var f;if(c.client_id)f=c.client_id;else{if(!c)return;f=c}a.customerViewed=[],a.customerFavorites=[],a.customerOrders=[],a.customerOrder=!1,b.get(d.host+"/client/"+f).then(function(b){a.sliderClient=b.data,a.sliderClient.client_index=e,g.search("client",a.sliderClient.client_id),a.sliderClient.lead.data.length?a.currentSliderTab="lead":a.currentSliderTab="messages",a.sliderClient.customer&&a.sliderClient.customer.customer_id?(a.currentSliderTab="orders",a.sliderClient.lead.data.length&&(a.currentSliderTab="lead"),a.getCustomerById(a.sliderClient.customer.customer_id)):(a.isSliderOpen=!0,$(".mCustomScrollBox").unbind("keydown"))})},a.nextClient=function(){if(a.sliderClient&&a.sliderClient.client_index<a.clients.length-1){var b=a.sliderClient.client_index+1;a.getClientById(a.clients[b],b)}},a.prevClient=function(){if(a.sliderClient&&a.sliderClient.client_index>0){var b=a.sliderClient.client_index-1;a.getClientById(a.clients[b],b)}},a.getCustomerById=function(c){b.get(d.host+"/customer/"+c).then(function(b){a.sliderClient.customer=b.data,a.isSliderOpen=!0,$(".mCustomScrollBox").unbind("keydown"),a.sliderClient.customer.statistics.orders||(a.sliderClient.customer.statistics.orders=0),a.getCustomerOrders(a.botId,c)})},a.changeOrderStatus=function(a,b){a.order_status=b.name,n.updateOrder(a)},a.getCustomerOrders=function(b,c){a.customerOrders=[],h.getCustomerOrders(b,c).then(function(b){angular.forEach(b.data.orders,function(b){b.count=0,angular.forEach(b.products,function(a){b.count+=a.count}),angular.forEach(b.attachments,function(a){"image"==a.type&&(b.image=a.url)}),b.date=b.created_at,a.customerOrders.push(b)}),a.customerOrders.length||(a.currentSliderTab="favorites"),a.getCustomerFavorites(a.botId,c)})},a.getCustomerFavorites=function(b,c){a.customerFavorites=[],h.getCustomerFavorites(b,c).then(function(b){a.customerFavorites=b.data.favorites,a.customerFavorites.length||(a.currentSliderTab="viewed"),a.getCustomerViewed(a.botId,c)})},a.getCustomerViewed=function(b,c){a.customerViewed=[],h.getCustomerViewed(b,c).then(function(b){angular.forEach(b.data.views,function(b){var c=b.product;c.date=b.date,a.customerViewed.push(c)}),a.customerOrders.length?a.currentSliderTab="orders":a.customerViewed.length||(a.currentSliderTab="messages")})},a.openClientSidebar=function(b,c){b.stopPropagation(),a.sliderClient=c,a.isSliderOpen=!0,$(".mCustomScrollBox").unbind("
7keydown")},a.closeSlider=function(b){a.isSliderOpen=!1, 8b.stopPropagation()},a.onTableSelect=function(b,c){if(b.stopPropagation(),c.tableSelected){c.tableSelected=!1,a.isAllClientsSelected=!1;var d=a.selectedClients.indexOf(c.client_id);-1!==d&&a.selectedClients.splice(d,1)}else c.tableSelected=!0,a.selectedClients.push(c.client_id),a.selectedClients.length===a.clients.length&&(a.isAllClientsSelected=!0)},a.onTableSelectAll=function(){a.isAllClientsSelected?(a.selectedClients=[],a.clients.forEach(function(a){a.tableSelected=!1}),a.isAllClientsSelected=!1):(a.selectedClients=[],a.clients.forEach(function(b){a.selectedClients.push(b.client_id),b.tableSelected=!0}),a.isAllClientsSelected=!0)},a.setFilter=function(b,c){a.inProgress||(a.filterParams[b]===c?a.filterParams[b]="":a.filterParams[b]=c)},a.setTagsFilter=function(b){a.inProgress||(a.filterTags.includes(b)?a.filterTags.splice(a.filterTags.indexOf(b),1):a.filterTags.push(b),a.filterParams.tags=a.filterTags.join(","))},a.setTagGroupFilter=function(b){a.inProgress||(a.filterParams.tag_filter==b?a.filterParams.tag_filter="":a.filterParams.tag_filter=b)},a.getClientsTags=function(){},a.setPaginationLimit=function(b){a.pagination.options.offset=0,a.pagination.options.limit=b,a.pagination.currentPage=1,v()},a.pageChanged=function(){a.inProgress||(a.sliderClient.client_index=-1,a.pagination.options.offset=(a.pagination.currentPage-1)*a.pagination.options.limit,v())},a.goToFirstPage=function(){a.sliderClient.client_index=-1,u(),v()};var E;a.$watch("filterParams",function(){if(a.inProgress)return void(a.datePicker.date={startDate:a.filterParams.startDate,datePicker:a.filterParams.endDate});E&&l.cancel(E),E=l(function(){a.pagination.currentPage=1,a.pagination.options.offset=0,A(),v(),r(),a.selectedClients=[]},1e3)},!0),a.$watch("sentimentPostFilter",function(){E&&l.cancel(E),E=l(function(){v(),r(),a.selectedClients=[]},1e3)},!0),a.$watch("tableFilterParams",function(){a.tableFilter()},!0),a.$watch("isSliderOpen",function(b,c){if(a.isSliderOpen)g.search("client",a.sliderClient.client_id);else{if(!c)return;a.currentSliderTab="messages",a.sliderClient={},g.search("client",null),a.sliderClient.client_id&&h.updateClient(a.sliderClient.client_id,a.sliderClient).then(function(a){})}},!0),a.isFilterEmpty=function(){return JSON.stringify(a.filterParams)===JSON.stringify(a.filterTemplate)},a.getTagGroups=function(){h.getBotTagGroups(a.botId).then(function(b){a.tagGroups=b.data.settings.tags.filters})},a.makeid=function(a){for(var b="",c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",d=c.length,e=0;e<a;e++)b+=c.charAt(Math.floor(Math.random()*d));return b},a.openTagGroupEditor=function(b,c,d){return d.stopPropagation(),b===a.tagGroupEditingIndex?(a.updateTagGroups(),a.tagGroupEditingIndex=null,void(a.tagGroupEditing=null)):-1===b?(a.tagGroupEditingIndex=b,void(a.tagGroupEditing={name:"Group #"+a.makeid(5),filter:{match:[],not_match:[]}})):void a.tagGroups.forEach(function(d){d.name===c&&(a.tagGroupEditingIndex=b,a.tagGroupEditing=d)})},a.isTagGroupEditing=function(b){if(a.tagGroupEditingIndex===b)return!0},a.$watch("tagGroupEditingIndex",function(a,b){}),a.updateTagGroups=function(){-1===a.tagGroupEditingIndex&&a.tagGroups.push(a.tagGroupEditing);var b={tags:{filters:a.tagGroups}};h.updateTagGroups(a.botId,b).then(function(b){b.status&&(r(),a.tagGroupEditingIndex=null,a.tagGroupEditing=null,f.success({delay:3e3,message:"Tag group updated"}))})},a.sendTextMessage=function(){if(a.widgetMessage.text){var b={type:"text",content:{text:a.widgetMessage.text}};h.sendTextMessage(a.sliderClient.client_id,b).then(function(b){a.widgetMessage.text=""})}},B(),a.scenarioStatus=[],a.checkScenarioStatus=function(b){if(1==a.scenarioStatus[b])return!0},a.runScenario=function(c,e){b.post(d.host+"/client/"+e.client_id+"/run/scenario",{scenario_id:c.scenario_id}).then(function(b){1==b.data.status&&(a.scenarioStatus=[],a.scenarioStatus[c.scenario_id]=!0)},function(a){})},a.addAttachment=function(c,e,f){a.fileLoaded=!1;var g={content:{}};c&&c.type&&(c.type.indexOf("image")>-1?(g.type="image",g.content.url=d.host+"/attachment/image/"+a.botId):(g.type="file",g.content.url=d.host+"/attachment/file/"+a.botId,g.content.name=c.name),i.upload({url:g.content.url,data:{file:c}}).then(function(a){a.data.status?(g.content.url=a.data.url,b.post(d.host+"/message/send/"+f.client_id,g).then(function(a){},function(a){})):alert(a.data.error)},function(a){console.log(a)},function(a){}))},a.getDialogLastSeenData=function(){var b=j("filter")(a.clientMessages,{author:"client"});b[b.length-1]&&b[b.length-1].created&&(a.sliderClient.last_seen=b[b.length-1].created)},a.isOnline=function(a){return new Date-Date.parse(a)<3e5},a.$on("$destroy",function(){a.destroyFayeChanel()}),C(),r(),v(),y(),q(),a.existIntentModal=function(c,e){var f=a.main.translations;k.open({templateUrl:"views/widget/add-to-intent.html",windowClass:"large-modal no-border-modal no-shadow-modal",controller:["$scope","Upload","$state","$stateParams","learningService","$uibModalInstance","Notification",function(a,g,h,i,j,k,l){b.get(d.host+"/scenarios/"+i.id).then(function(b){b.data.status&&(a.bot_scenarios=b.data.scenarios)},function(a){}),a.isSendtoUser=e,a.text=c,a.intents=[],a.translations=f,j.getIntents(i.id,"").then(function(b){a.intents=b},function(b){a.intents=[]}),a.addExpression=function(b){var c={bot_id:i.id,expression:a.text};j.insertExpressionToIntent(c,a.intent.intenty_id).then(function(c){c.status?(l.success({message:'Expression "'+a.text+'" was successfully added to intent'}),b?k.close({status:"update_send",data:a.intent.intenty_id}):k.close({status:"update",data:null})):(l.error({delay:6e4,message:'Expression "'+a.text+"\" wasn't added"}),k.close({status:"error",data:null}))})},a.close=function(){k.close({status:"ok",data:null})}}]}).result.then(function(b){"update_send"===b.status&&learningService.runIntent(b.data,a.sliderClient.client_id).then(function(a){})},function(a){})},a.existIntentAsResponseModal=function(c,e){var f=a.main.translations;k.open({templateUrl:"views/widget/add-to-intent-as-response.html",windowClass:"large-modal no-border-modal no-shadow-modal",controller:["$scope","Upload","$state","$stateParams","learningService","$uibModalInstance","Notification",function(a,g,h,i,j,k,l){b.get(d.host+"/scenarios/"+i.id).then(function(b){b.data.status&&(a.bot_scenarios=b.data.scenarios)},function(a){}),a.isSendtoUser=e,a.text=c,a.intents=[],a.translations=f,j.getIntents(i.id,"").then(function(b){angular.forEach(b,function(a){"reply"==a.response.type&&this.push(a)},a.intents)},function(b){a.intents=[]}),a.addResponse=function(b){a.intent.response.replies.push(a.text);var c=[];$.each(a.intent.response.replies,function(a,b){-1===$.inArray(b,c)&&c.push(b)}
8),a.intent.response.replies=c,j.updateIntent(a.intent.intent_id,a.intent).then(function(c){c.status?(l.success({message:'Response "'+a.text+'" was successfully added to intent'}),b?k.close({status:"update_send",data:a.intent.intent_id}):k.close({status:"update",data:null})):(l.error({delay:6e4,message:'Response "'+a.text+"\" wasn't added"}),k.close({status:"error",data:null}))})},a.close=function(){k.close({status:"ok",data:null})}}]}).result.then(function(b){"update_send"===b.status&&learningService.runIntent(b.data,a.sliderClient.client_id).then(function(a){})},function(a){})},a.newIntentModal=function(c,e){var f=a.main.translations;k.open({templateUrl:"views/widget/create-intent.html",windowClass:"large-modal no-border-modal no-shadow-modal",controller:["$scope","Upload","$state","$stateParams","learningService","$uibModalInstance","Notification",function(a,g,h,i,j,k,l){b.get(d.host+"/scenarios/"+i.id).then(function(b){b.data.status&&(a.bot_scenarios=b.data.scenarios)},function(a){}),a.translations=f,a.isSendtoUser=e,a.reply={name:""},a.text=c,a.intent_types=[{type:"scenario",label:"Scenario"},{type:"reply",label:"Reply"}],a.newIntent={name:"",response:{type:a.intent_types[1].type,scenario_id:null}},a.intents=[],j.getIntents(i.id,"").then(function(b){a.intents=b},function(b){a.intents=[]}),a.close=function(){k.close({status:"ok",data:null})},a.addReply=function(){a.reply.name.length&&(void 0==a.newIntent.response.replies?(delete a.newIntent.response.scenario_id,a.newIntent.response.replies=[],a.newIntent.response.replies.push(a.reply.name)):a.newIntent.response.replies.push(a.reply.name),a.reply.name="")},a.handleScenarioChange=function(){delete a.newIntent.response.replies},a.deleteReply=function(b){a.newIntent.response.replies.splice(b,1)},a.addNewIntent=function(b){if(D())return void(""==a.newIntent.name&&l.error({delay:6e4,message:"Some required fields are empty"}));a.newIntent={bot_id:i.id,name:a.newIntent.name,expressions:[{text:a.text}],response:a.newIntent.response},j.createIntent(a.newIntent).then(function(c){c.status?(l.success({message:'Intent "'+a.newIntent.name+'" was successfully created'}),b?k.close({status:"create_send",data:c.intent.intent_id}):k.close({status:"create",data:null})):(l.error({delay:6e4,message:'Intent "'+a.newIntent.name+"\" wasn't created"}),k.close({status:"error",data:null}))})}}]}).result.then(function(b){"create_send"===b.status&&learningService.runIntent(b.data,a.sliderClient.client_id).then(function(a){})},function(a){})},a.checkIsLast=function(b){var c=!0;b=parseInt(b);for(var d=b+1;d<a.clientMessages.length;d++)if("client"===a.clientMessages[d].author)return c=!1;return c}}]),angular.module("brnaiApp").controller("BroadcastCtrl",["$scope","broadcastService","$stateParams","Notification",function(a,b,c,d){function e(){a.inProgress=!0,b.getBroadcasts(c.id).then(function(b){a.broadcasts=b,a.inProgress=!1})}a.bot_id=c.id,a.broadcasts=[],a.inProgress=!1,a.deleteBroadcast=function(c){b.deleteBroadcast(c.broadcast_id).then(function(b){b?(d.success({message:"Broadcast successfully deleted"}),a.broadcasts.splice(a.broadcasts.indexOf(c),1)):d.error({delay:6e4,message:"Can't delete broadcast"})})},e()}]),angular.module("brnaiApp").controller("BroadcastDetailCtrl",["$scope","$http","getDomainData","$stateParams","uploadService","ngAudio","$sce","Notification","$timeout","$state","$filter","collectionsService","scenariosService","scenariosInitData","$window",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(){if("manual"!==a.broadcast.type)return!1;a.broadcast.broadcast_data.messages.forEach(function(a){switch(a.type){case"audio":delete a.audio;break;case"file":delete a.filename;break;case"card":a.content.elements.forEach(function(a){a.buttons.forEach(function(a){delete a.edit})})}})}function q(){if(void 0!==a.broadcast.broadcast_data.collection_id)var d=a.broadcast.broadcast_data.collection_id;else var d=a.collectionsArray[0].value;b.get(c.host+"/collection/"+d).then(function(b){void 0!==b.data.source_data.template?a.broadcast.broadcast_data.template=b.data.source_data.template:(a.broadcast.broadcast_data.template.link="",a.broadcast.broadcast_data.template.text="",a.broadcast.broadcast_data.template.title="",a.broadcast.broadcast_data.template.image="",a.broadcast.broadcast_data.template.type=""),a.collection_variables=[],b.data.fields.forEach(function(b){a.collection_variables.push("{{"+b.name+"}}")})})}function r(a){if(a.$valid)return!0;a.$error.required&&a.$error.required.forEach(function(a){h.error({delay:6e4,message:"Field "+a.$name+" is empty"})})}a.broadcast={bot_id:d.id,name:"",type:"",timing:{type:"now"},subscribers:{gender:null,providers:[],tags:[],context:[],roles:[]},broadcast_data:{messages:[]}},a.jsoneditor={onEditable:function(a){console.log(a)}},a.cardTempalteType=n.cardTempalteType,a.topElement=n.topElement,m.transformScenariosIntoSelectType(d.id).then(function(b){a.scenariosArray=b}).catch(function(){a.scenariosArray=[]}),l.transformCollectionsIntoSelectType(d.id).then(function(b){a.collectionsArray=b}).catch(function(){a.scenariosArray=[]}),a.timings=[{name:"Send now",value:"now"},{name:"Send later",value:"schedule"},{name:"Repeat",value:"repeat"}],a.broadcastTypes=[{name:"manual",value:"manual"},{name:"collection",value:"collection"},{name:"scenario",value:"scenario"}],a.conditionsFilter=[{name:"Equal",value:"equal"},{name:"Greater than",value:"gt"},{name:"Greater than or equal",value:"gte"},{name:"Less than",value:"lt"},{name:"Less than or equal",value:"lte"},{name:"Not equal",value:"ne"},{name:"Exists",value:"exists"},{name:"Not exists",value:"not_exists"},{name:"Days (-+)",value:"days"},{name:"Pattern",value:"regex"}],a.repeatArray=[{name:"Daily",value:"daily"},{name:"Monthly",value:"monthly"}],a.filters={tags:[],gender:[],providers:[],roles:[]},a.updRoute=!1,d.broadcastId?(a.updRoute=!0,b.get(c.host+"/broadcast/"+d.broadcastId).then(function(b){a.broadcast=b.data,a.broadcast.subscribers.roles||(a.broadcast.subscribers.roles=[]),a.broadcast.broadcast_data.messages&&Array.isArray(a.broadcast.broadcast_data.messages)&&a.broadcast.broadcast_data.messages.forEac
8h(function(a){"audio"===a.type&&(a.audio=f.load(a.content.url))}),"scenario"!=a.broadcast.type||a.broadcast.broadcast_data.variables||(a.broadcast.broadcast_data.variables={})})):"now"===a.broadcast.timing.type||a.broadcast.timing.date||(a.broadcast.timing.date=new Date),b.get(c.host+"/clients/filters/"+d.id).then(function(b){b.data.status&&b.data.filters&&(a.filters=b.data.filters)}),a.trustSrc=function(a){return g.trustAsResourceUrl(a)},a.handleTemplateType=function(){a.broadcast.broadcast_data.template.options={},"generic"===a.broadcast.broadcast_data.template.type||(a.broadcast.broadcast_data.template.options.top_element_style="large")},a.handleTiming=function(){"now"===a.broadcast.timing.type?(a.broadcast.timing.date=new Date,delete a.broadcast.timing.frequency,delete a.broadcast.timing.date):"schedule"===a.broadcast.timing.type?(a.broadcast.timing.date=new Date,delete a.broadcast.timing.frequency):(a.broadcast.timing.date=new Date,a.broadcast.timing.frequency="daily")},a.handleSwipe=function(a){a.stopPropagation(),a.preventDefault()},a.addCustomFilter=function(){a.broadcast.subscribers.context.push({field:"",condition:"",value:""})},a.deleteCustomFilter=function(b){a.broadcast.subscribers.context.splice(b,1)},a.addElement=function(b){"card"!==b?a.broadcast.broadcast_data.messages.push(new Object({type:b,content:{}})):a.broadcast.broadcast_data.messages.push(new Object({type:b,content:{elements:[{buttons:[],link:"",text:"",image:"",title:""}]}}))},a.deleteEl=function(b){a.broadcast.broadcast_data.messages.splice(b,1)},a.playAudio=function(b){a.$parent.$broadcast("audios",b)},a.$on("audios",function(b,c){a.broadcast.broadcast_data.messages.forEach(function(a){"audio"===a.type&&(a.content.url!==c.content.url?a.audio.pause():a.audio.paused?a.audio.play():a.audio.pause())})}),a.addFile=function(a,b,c){delete c.error,a&&(c.content||(c.content={}),e.upload(a,b,d.id).then(function(a){if(!a)return c.error="Some error occured on upload file",void delete c.progress;c.content.url=a.data.url,delete c.progress,"audio"===b&&(c.audio=f.load(a.data.url)),"file"!==b&&"video"!==b||(c.filename=a.data.name)},function(a){delete c.progress,c.error=a.message},function(a){c.content.url&&(c.content.url=""),c.audio&&(c.audio.stop(),delete c.audio),c.progress=parseInt(100*a.loaded/a.total)}))},a.redirectToFile=function(a){o.open(a,"_blank")},a.addImgToCard=function(a,b,c){e.upload(a,b,d.id).then(function(a){if(!a)return c.error="Some error occured on upload file",void delete c.progress;c.image=a.data.url,delete c.progress},function(a){delete c.progress,c.error=a.message},function(a){c.image&&(c.image=""),c.progress=parseInt(100*a.loaded/a.total)})},a.addBtnToSlide=function(a){if(3==a.buttons.length)return h.error({delay:6e4,message:"Limit is exceeded"}),!1;a.buttons.push(new Object({title:"this is button",type:"link",url:""}))},a.addSlide=function(a){if(!(a.content.elements.length<=10))return h.error({delay:6e4,message:"Limit is exceeded"}),!1;var b={buttons:[],link:"",text:"",image:"",title:""};a.content.elements.push(b)},a.deleteSlide=function(a,b){a.elements.splice(b,1)},a.editSlideBtn=function(a){a.edit=!1,a.title.length||(a.title="this is button")},a.removeBtn=function(a,b){a.buttons.splice(a.buttons.indexOf(b),1)},a.addFilterInstance=function(a,b){a.indexOf(b)>=0?a.splice(a.indexOf(b),1):a.push(b)},a.addGender=function(b){var c=a.broadcast.subscribers.gender;a.broadcast.subscribers.gender=b.name===c?null:b.name},a.moveComponent=function(b,c){if("up"==c){if(0==b)return;var d=a.broadcast.broadcast_data.messages[b];a.broadcast.broadcast_data.messages.splice(b,1),a.broadcast.broadcast_data.messages.splice(b-1,0,d)}else{if(b==a.broadcast.broadcast_data.messages.length-1)return;var d=a.broadcast.broadcast_data.messages[b];a.broadcast.broadcast_data.messages.splice(b,1),a.broadcast.broadcast_data.messages.splice(b+1,0,d)}},a.handleBroadcastType=function(){switch(a.broadcast.type){case"manual":a.broadcast.broadcast_data={},a.broadcast.broadcast_data.messages=[];break;case"collection":delete a.broadcast.broadcast_data.messages,a.broadcast.broadcast_data.template={buttons:[]},q();break;case"scenario":a.broadcast.broadcast_data={},a.broadcast.broadcast_data.variables={}}},a.createBroadcast=function(e){if(p(),!r(e))return!1;b.post(c.host+"/broadcast",a.broadcast).then(function(a){a.data.status&&(h.success({message:"Broadcast successfully created"}),j.go("bot-abstract.broadcast",{id:d.id}))})},b.get(c.host+"/scenarios/"+d.id).then(function(b){b.data.status&&(a.bot_scenarios=b.data.scenarios)},function(a){}),a.editBroadcast=function(e){if(p(),!r(e))return!1;b.put(c.host+"/broadcast/"+d.broadcastId,a.broadcast).then(function(a){a.data.status&&(h.success({message:"Broadcast successfully updated"}),j.go("bot-abstract.broadcast",{id:d.id}))})},a.deleteBroadcast=function(){b.delete(c.host+"/broadcast/"+d.broadcastId).then(function(a){a.data.status&&(h.success({message:"Broadcast successfully deleted"}),j.go("bot-abstract.broadcast",{id:d.id}))})},a.addBtn=function(b){"link"===b?a.broadcast.broadcast_data.template.buttons.push({type:"link",title:"",url:""}):a.broadcast.broadcast_data.template.buttons.push({type:"suggest",title:"",content:""})},a.handleCollection=function(){q()}}]),angular.module("brnaiApp").directive("broadcastElement",["ngAudio",function(a){return{restrict:"E",controller:["$scope","$sce","$http","$stateParams","getDomainData","$window","linkify",function(a,b,c,d,e,f,g){}],link:function(a,b,c){var d=c.type,e="card"===d?"slider":d;a.wmType="views/broadcast/"+e+".html",c.$observe("type",function(b){var c=b;e="card"===c?"slider":c,a.wmType="views/broadcast/"+e+".html"}),a.paused=!0,a.firstVideoEnter=!0,a.active=0,a.swipeLeft=function(){a.active<b.content.elements.length-1&&a.active++},a.swipeRight=function(){a.active>0&&a.active--},a.togleVideo=function(){var c=$(b.find(".video")[0])[0];c.paused?(c.play(),c.setAttribute("controls","")):(c.pause(),c.removeAttribute("controls")),a.firstVideoEnter&&(c.onpause=function(){a.paused=!0,a.$apply()},c.onplay=function(){a.paused=!1,a.$apply()}),a.firstVideoEnter=!1}},template:'<div ng-include="wmType" style="position: relative"></div>'}}]),angular.module("brnaiApp").service("uploadService",["Upload","getDomainData","Notification",function(a,b,c){function d(a){return a.indexOf("image")>=0?"image":a.indexOf("audio")>=0?"audio":a.indexOf("video")>=0?"video":"file"}return{upload:function(e,f,g){if(!e&&!e.type&&null!==e)return!1;if(d(e.type)!=f)return c.error({delay:6e4,message:"Wrong type. You should upload "+f}),!1;var h=g?b.host+"/attachment/"+f+"/"+g:b.host+"/message/attachment/"+f;return a.upload({url:h,data:{file:e}})}}}]),angular.module("brnaiApp").directive("noSwipe",function(){return function(a,b){var c=angular.element(b);$(c).on("swipe",function(a){})}}),angular.module("brnaiApp").service("firebaseNotifications",["storage","$http","getDomainData",function(a,b,c){var d=firebase.messaging(),e={getPermission:function(){d.requestPermission().then(function(a){console.log("Notification permission granted."),e.isTokenSentToServer()||e.getToken()}).catch(function(a){console.log("Unable to get permission to notify.",a)})},getToken:function(){d.getToken().then(function(a){console.log(a),e.setTokenSentToServer(!1),e.sendTokenToServer(a)}).catch(function(a){console.log("Unable to retrieve refreshed token ",a)})},deleteToken:function(){d.getToken().then(function(a){d.deleteToken(a).then(function(){console.log("Token deleted."),e.setTokenSentToServer(!1)}).catch(function(a){console.log("Unable to delete token. ",a)})}).catch(function(a){console.log("Error retrieving Instance ID token. ",a)})},sendTokenToServer:function(a){console.log(a),e.isTokenSentToServer()?console.log("Token already sent to server so won't send it again unless it changes"):(console.log("Sending token to
8server..."),b.post(c.host+"/user/push?token="+a+"&type=web").then(function(a){console.log(a)}),e.setTokenSentToServer(!0))},setTokenSentToServer:function(b){b?a.setItem("sentToServer",1):a.setItem("sentToServer",0)},isTokenSentToServer:function(){return 1==a.getItem("sentToServer")}};return d.onTokenRefresh(function(){d.getToken().then(function(a){console.log("Token refreshed."),e.setTokenSentToServer(!1),e.sendTokenToServer(a)}).catch(function(a){console.log("Unable to retrieve refreshed token ",a)})}),e}]),angular.module("brnaiApp").controller("LineCtrl",["$scope","$http","domain","$stateParams","getDomainData","Auth","$uibModalInstance",function(a,b,c,d,e,f,g){a.line={account_id:f.getUser().account_id,provider_data:{channel_id:"",channel_secret:"",channel_token:"",link:""},redirect_url:e.host+"/message/receive/line?bot_id="+d.id},a.exist=!1,a.isProgres=!1,b.get(e.host+"/connection/"+d.id+"/line",{notification:!1}).then(function(b){b.data.status&&(a.line.account_id=f.getUser().account_id,a.line.provider_data=b.data.provider_data,a.exist=!0)},function(a){}),a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();b.put(e.host+"/connection/line/"+d.id,a.line).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})}},a.addConnection=function(){b.post(e.host+"/connection/line/"+d.id,a.line).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})},a.close=function(){g.close("ok")},a.deleteConnection=function(){b.delete(e.host+"/connection/line/"+d.id).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})}}]),angular.module("brnaiApp").service("collectionsService",["$http","getDomainData","$q",function(a,b,c){var d={getCollections:function(c){return a.get(b.host+"/collections/"+c).then(function(a){return a.data.collections})},transformCollectionsIntoSelectType:function(a){return d.getCollections(a).then(function(a){return a.map(function(a){return{name:a.name,value:a.collection_id}})})},getFilters:function(){return a.get(b.host+"/collections/filters").then(function(a){return a.data.status?a.data.filters:{portals:[],roles:[],plans:[]}})},getAdminCollections:function(c){var d="?name="+c.name+"&limit="+c.limit+"&offset="+c.page*c.limit;return c.source&&(d+="&source="+c.source),c.active&&(d+="&active="+c.active),c.sort&&(d+="&sort="+c.sort),a.get(b.host+"/collections/search"+d).then(function(a){return a.data})},clearCollection:function(c,d){var e=c;return d>0&&(e+="?keep="+d),a.post(b.host+"/collection/clear/"+e).then(function(a){return a.data})}};return d}]),angular.module("brnaiApp").service("scenariosService",["$http","getDomainData",function(a,b){var c={getScenarios:function(c){return a.get(b.host+"/scenarios/"+c).then(function(a){return a.data.scenarios})},transformScenariosIntoSelectType:function(a){return c.getScenarios(a).then(function(a){return a.map(function(a){return{name:a.name,value:a.scenario_id}})})}};return c}]),angular.module("brnaiApp").directive("scenarioComponent",["$http","getDomainData",function(a,b){return{restrict:"E",link:function(c,d,e){function f(a){h(),c.$parent.$parent&&(h=c.$parent.$parent.$watch("newStepIndex["+a+"]",function(a){c.cardSection=a,c.isFirstOpen||(c.isFirstOpen=!0)}))}c.aditional=!1,c.toogleAditional=function(){c.aditional=!c.aditional};var g="true"==e.isOpen;c.cardSection=g,c.isFirstOpen=g,c.copyIcon="content_copy",c.activeCardElement=0,c.selectedProduct={},c.switchCard=function(a){c.activeCardElement=a},c.copyIconClic=function(){c.copyIcon="check",setTimeout(function(){c.copyIcon="content_copy",c.$apply()},2e3)},c.$watch(e.index,function(a){f(a)});var h=function(){};c.toogleStep=function(a){c.$parent.$parent?c.$parent.$parent.activeSelectIndex!==a?c.$parent.$parent.activeSelectIndex=a:c.$parent.$parent.activeSelectIndex=-1:c.$parent.activeSelectIndex!==a?c.$parent.activeSelectIndex=a:c.$parent.activeSelectIndex=-1},c.toogleCardSection=function(){c.cardSection&&c.$parent.$parent.activeSelectIndex==e.index&&(c.$parent.$parent.activeSelectIndex=-1),c.$parent.$parent.newStepIndex[e.index]=!c.cardSection},e.$observe("component",function(d){var f=JSON.parse(d);f.properties.product_id&&a.get(b.host+"/product/"+c.$parent.$parent.bot_id+"/"+f.properties.product_id).then(function(a){a.data.status&&(c.selectedProduct={name:a.data.name,id:a.data.product_id})},function(a){}),c.wmType="views/"+e.folder+"/"+f.component+".html"})},template:'<div class="scenario-steps" ng-dblclick="toogleStep($index)" ng-class="{active : $parent.$parent.activeSelectIndex === $index}"> <div ng-include="wmType" style="position: relative" ></div></div>'}}]),angular.module("brnaiApp").service("uploadCoverService",["Upload","getDomainData","Notification",function(a,b,c){function d(a){return a.indexOf("image")>=0?"image":a.indexOf("audio")>=0?"audio":a.indexOf("video")>=0?"video":"file"}return{upload:function(e,f,g){return console.log(e),d(e.type)!=f?(c.error({delay:6e4,message:"Wrong type. You should upload "+f}),!1):a.upload({url:b.host+"/bot/image/"+g+"?type=cover",data:{file:e}})}}}]),angular.module("brnaiApp").service("uploadScreenshot",["Upload","getDomainData","Notification",function(a,b,c){function d(a){return a.indexOf("image")>=0?"image":a.indexOf("audio")>=0?"audio":a.indexOf("video")>=0?"video":"file"}return{upload:function(e,f){return!(!e&&!e.type&&null!==e)&&("image"!=d(e.type)?(c.error({delay:6e4,message:"Wrong type. You should upload "+type}),!1):a.upload({url:b.host+"/screenshots/"+f+"/upload?save=true",data:{file:e}}))}}}]),angular.module("brnaiApp").controller("PartnersCtrl",["$scope","$http","$sce","getDomainData","
8storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){setTimeout(function(){var a=$(".carousel");if(a){var b=a.find(".carousel-control");b&&2==b.length&&($(b[0]).data("slide","prev"),$(b[1]).data("slide","next"));var c=function(a){a.preventDefault();var b=$(this);b.parents(".carousel").carousel(b.data("slide"))};a.carousel({interval:3e4}).on("click touchstart",".carousel-control",c),a.carousel("pause")}},0)}function k(a){"en"==a?h.go("partners.en"):h.go("partners.de")}a.page={},a.currentLang=e.getItem("lang")||"de",a.main.contactMessage=a.main.translations.menu_contact_BotFabric_message,a.main.message=a.main.translations.menu_rightPanel_BotFabric_message,a.main.isBotFabrik=!0,"partners"!=h.current.name?("partners.en"==h.current.name&&"en"!==a.main.currentLang?a.main.setLang("en"):"partners.de"==h.current.name&&"de"!==a.main.currentLang&&a.main.setLang("de"),b.get("https://api.brn.ai/page/botfabric/"+a.currentLang+"?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0,j()}),$("body").on("click touchstart",".welcome-registration-btn",function(a){$(".footer-registration").find("input")[0].focus()})):k(a.main.currentLang),a.$on("getNewLanding",function(d,e){b.get("https://api.brn.ai/page/botfabric/"+e+"?portal_id="+g.portalData.portal_id).then(function(b){a.response=b,a.page=c.trustAsHtml(b.data.content),j()})}),a.$on("$destroy",function(){a.main.contactMessage=a.main.translations.menu_contact_message,a.main.message=a.main.translations.menu_rightPanel_message,a.main.isBotFabrik=!1}),a.$on("getNewLanding",function(a,b){k(b)})}]),angular.module("brnaiApp").controller("LearningIntentsCtrl",["learningService","$stateParams","$scope","Notification","$state","$location",function(a,b,c,d,e,f){function g(){a.getIntents(b.id,c.filters).then(function(a){c.intents=a,c.inProgress=!1},function(a){c.intents=[],c.inProgress=!1})}function h(){var a={};return c.filters.searchKeyword&&(a.search=c.filters.searchKeyword),a}c.intents=[],c.expression="",c.entities=[],c.intent={bot_id:b.id,name:"",expressions:[]},c.inProgress=!0,c.filters={searchKeyword:f.search().search||"",isActive:!!f.search().search,limit:50,page:0,lastPage:!1},c.$watch("filters.searchKeyword",function(a){c.inProgress=!0,f.path("/bot/"+b.id+"/learning/intents").search(h()),g(c.filters)}),c.swapFilter=function(){c.filters.isActive=!c.filters.isActive},a.getEntities(b.id,!0).then(function(a){c.entities=a.entities}),c.deleteIntent=function(b){a.deleteIntent(b.intent_id).then(function(a){a.data.status&&(c.intents.splice(c.intents.indexOf(b),1),d.success({message:"Intent "+b.name+" successfully deleted"}))})},c.deleteExpression=function(a){c.intent.expressions.splice(a,1)},c.handleSelectedText=function(a){if(!c.entities.length)return d.error({delay:6e4,message:"No available entities"}),!1;c.intent.expressions[a.index].entities.push({value:a.value,start:a.start,end:a.end,entity_id:null,name:""})},c.addExpression=function(){var d={bot_id:b.id,expression:c.expression};a.testExpression(d).then(function(a){c.intent.expressions.push({text:c.expression,entities:a.result.entities}),c.expression=""})},c.createIntent=function(){var f=$("#addIntentModal");if(!c.intent.name)return d.error({delay:6e4,message:"Intent name cannot be empty"}),!1;a.createIntent(c.intent).then(function(a){f.modal("hide"),setTimeout(function(){e.go("intent-detail",{id:b.id,intent:a.intent.intent_id})},800)})},c.loadMore=function(){c.inProgress||c.filters.lastPage||(c.inProgress=!0,c.filters.page++,a.getIntents(b.id,c.filters).then(function(a){a.length?c.intents.push.apply(c.intents,a):c.filters.lastPage=!0,c.inProgress=!1},function(a){c.intents=[],c.inProgress=!1}))},g()}]),angular.module("brnaiApp").controller("LearningEntitiesCtrl",["learningService","$scope","$stateParams","Notification","$state",function(a,b,c,d,e){b.entities=[],b.entity="",b.inProgress=!0,a.getEntities(c.id,!1).then(function(a){b.entities=a.entities,b.inProgress=!1},function(a){b.entities=[],b.inProgress=!1}),b.deleteEntity=function(c){a.deleteEntity(c.entity_id).then(function(a){a.status&&(d.success({message:"Entity "+c.name+" successfully deleted"}),b.entities.splice(b.entities.indexOf(c),1))})},b.addEntity=function(){var f={bot_id:c.id,name:b.entity,values:[]};if(!b.entity)return d.error({delay:6e4,message:"Entity name cannot be empty"}),!1;var g=$("#addEntityModal");a.createEntity(f).then(function(a){a.data.status&&(d.success({message:"Entity "+a.data.entity.name+" successfully created"}),b.entity="",g.modal("hide"),setTimeout(function(){e.go("entity-detail",{id:c.id,entity:a.data.entity.entity_id})},800))})}}]),angular.module("brnaiApp").controller("LearningUnderstandingCtrl",["learningService","$scope","$stateParams","getDomainData","$http","Notification",function(a,b,c,d,e,f){b.entities=[],b.intents=[],b.info=!1,b.parse=function(){e.post(d.host+"/expression/parse",{expression:b.expression,bot_id:c.id}).then(function(a){a.data.status&&(b.entities=a.data.result.entities,b.intent=a.data.result.intent,b.info=b.expression,b.expression="")},function(a){})},b.handleSelectedText=function(a){}}]),angular.module("brnaiApp").service("learningService",["$http","getDomainData",function(a,b){return{getIntents:function(c,d){var e=[];d.limit&&e.push("limit="+d.limit),d.page&&e.push("offset="+d.page*d.limit),d.searchKeyword&&e.push("search="+d.searchKeyword),d.isSystem&&(e.push("type=system"),d.selectedMind&&e.push("mind_id="+d.selectedMind.mind_id),d.selectedCategory&&e.push("category="+d.selectedCategory.name)),null!=d.reply&&e.push("responses="+d.reply) 9;var f=e.join("&"),g=b.host+"/intents/"+c+(f.length?"?"+f:"");return a.get(g).then(function(a){return!!a.data.status&&a.data.intents})},getSystemIntents:function(c,d,e){var f=b.host+"/intents/system/"+d+"?limit=100&search="+c;return e&&(f+="&category="+e),a.get(f).then(function(a){return!!a.data.status&&a.data.intents})},getIntent:function(c){return a.get(b.host+"/intent/"+c).then(function(a){return a.data})},runIntent:function(c,d){return a.post(b.host+"/client/"+d+"/run/intent",{intent_id:c}).then(function(a){return a.data})},createIntent:function(c){return a.post(b.host+"/intent",c).then(function(a){return a.data})},updateIntent:function(c,d){return a.put(b.host+"/intent/"+c,d).then(function(a){return a})},deleteIntent:function(c){return a.delete(b.host+"/intent/"+c).then(function(a){return a})},createEntity:function(c){return a.post(b.host+"/entity",c).then(function(a){return a})},getEntities:function(c,d){return d=d?"?system=true":"",a.get(b.host+"/entities/"+c+d).then(function(a){return a.data})},getEntity:function(c){return a.get(b.host+"/entity/"+c).then(function(a){return a.data})},updateEntity:function(c,d){return a.put(b.host+"/entity/"+c,d).then(function(a){return a.data})},deleteEntity:function(c){return a.delete(b.host+"/entity/"+c).then(function(a){return a.data})},insertExpressionToIntent:function(c,d){return a.post(b.host+"/intent/"+d+"/expression",c).then(function(a){return a.data})},testExpression:function(c){return a.post(b.host+"/expression/test",c).then(function(a){return a.data})},addExpressionToIntent:function(c,d){return a.post(b.host+"/expression/"+d.expression_
9id+"/match",{intent_id:c}).then(function(a){return a.data})},addNewIntentWithExpression:function(c,d){return a.post(b.host+"/expression/"+d.expression_id+"/match",{name:c.name,response:c.response}).then(function(a){return a.data})},addIntentToIntents:function(a,b){a.push({name:b.name,expressions:b.expressions,intent_id:b.intent_id})},addEntityToEntities:function(a,b){a.push({name:b.name,expressions:b.expressions,intent_id:b.intent_id})},acceptExpression:function(c){return a.post(b.host+"/expression/"+c+"/accept",{}).then(function(a){return a.data})},deleteExpression:function(c){return a.delete(b.host+"/expression/"+c).then(function(a){return a.data})}}}]),angular.module("brnaiApp").controller("SkypeCtrl",["$scope","$http","domain","$stateParams","getDomainData","Auth","$uibModalInstance",function(a,b,c,d,e,f,g){a.skype={account_id:f.getUser().account_id,provider_data:{client_id:"",secret:""},redirect_url:e.host+"/message/receive/skype?bot_id="+d.id},a.exist=!1,a.isProgres=!1,b.get(e.host+"/connection/"+d.id+"/skype",{notification:!1}).then(function(b){b.data.status&&(a.skype.account_id=f.getUser().account_id,a.skype.provider_data=b.data.provider_data,a.exist=!0)},function(a){}),a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();b.put(e.host+"/connection/skype/"+d.id,a.skype).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})}},a.addConnection=function(){b.post(e.host+"/connection/skype/"+d.id,a.skype).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})},a.close=function(){g.close("ok")},a.deleteConnection=function(){b.delete(e.host+"/connection/skype/"+d.id).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})}}]),angular.module("brnaiApp").controller("EntityDetailCtrl",["$scope","learningService","$stateParams","Notification","$state",function(a,b,c,d,e){a.entity={},a.inProgress=!0,a.new_entity_value="",e.defStateName="learning-entities",e.defStateParam={id:c.id},b.getEntity(c.entity).then(function(b){a.entity=b,a.inProgress=!1}),a.filters={searchKeyword:"",isActive:!1},a.swapFilter=function(){a.filters.isActive=!a.filters.isActive},a.addValue=function(){if(!a.new_entity_value)return void d.error({delay:6e4,message:"Expressions cannot be empty"});a.entity.values.push(a.new_entity_value),a.updateEntity(!0)},a.deleteValue=function(b){a.entity.values.splice(b,1),a.updateEntity()},a.updateEntity=function(e){if(!a.entity.name)return void d.error({delay:6e4,message:"Entity name cannot be empty"});b.updateEntity(c.entity,{bot_id:c.id,values:a.entity.values,name:a.entity.name}).then(function(b){b.status&&(d.success({message:'Entity "'+a.entity.name+'" updatet'}),e&&(a.new_entity_value=""))},function(a){d.error({delay:6e4,message:a.message})})}}]),angular.module("brnaiApp").directive("highlight",function(){return{restrict:"E",scope:{data:"=",text:"=",callback:"=",index:"="},link:function(a,b,c){function d(){var c=a.text.split("");void 0!==a.data&&a.data.forEach(function(a){a.start>=0&&a.end<c.length&&a.start<=a.end&&(c[a.start]='<span class="highlight-brn">'+c[a.start],c[a.end]=c[a.end]+"</span>")}),b[0].innerHTML=c.join("")}a.$watch("text",function(){d()}),a.$watch("data",function(){d()},!0),b.on("mouseup",function(b){var c="";if(window.getSelection?c=window.getSelection().toString().replace(/(^[.,:;\s]+|[.,:;\s]+$)/,""):document.selection&&"Control"!=document.selection.type&&(c=document.selection.createRange().text.replace(/(^[.,:;\s]+|[.,:;\s]+$)/,"")),c.length<=1)return!1;if(!new RegExp("(\\.|\\s|^|,|;|:)"+c+"(\\s|$|\\.|,|;|:)").test(a.text))return!1;var d=a.text.indexOf(c),e=d+c.length-1;a.callback({text:a.text,value:c,start:d,end:e,index:a.index})})}}}),angular.module("brnaiApp").controller("ExpressionEditCtrl",["entities","$scope","expression","intent","learningService","$stateParams","$uibModalInstance",function(a,b,c,d,e,f,g){b.entities=a,b.expression=c,b.intent=d,b.currentEntity={},b.addExpression=function(){b.intent.expressions.forEach(function(a){b.expression.text===a.text&&a.entities.push({value:b.expression.value,start:b.expression.start,end:b.expression.end,entity_id:b.currentEntity.entity_id})}
9),e.updateIntent(b.intent.intent_id,{bot_id:f.id,name:b.intent.name,expressions:b.intent.expressions}).then(function(a){g.close()})}}]),angular.module("brnaiApp").controller("WechatCtrl",["$scope","$http","domain","$stateParams","getDomainData","Auth","$uibModalInstance",function(a,b,c,d,e,f,g){a.wechat={account_id:f.getUser().account_id,provider_data:{app_id:"",secret:"",token:f.getUser().account_id+d.id},redirect_url:e.host+"/message/receive/wechat?bot_id="+d.id},a.exist=!1,a.isProgres=!1,b.get(e.host+"/connection/"+d.id+"/wechat",{notification:!1}).then(function(b){b.data.status&&(a.wechat.account_id=f.getUser().account_id,a.wechat.provider_data=b.data.provider_data,a.exist=!0)},function(a){}),a.close=function(){g.close("ok")},a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();b.put(e.host+"/connection/wechat/"+d.id,a.wechat).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})}},a.addConnection=function(){b.post(e.host+"/connection/wechat/"+d.id,a.wechat).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})},a.deleteConnection=function(){b.delete(e.host+"/connection/wechat/"+d.id).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})}}]),angular.module("brnaiApp").controller("ViberCtrl",["$scope","$http","domain","$stateParams","getDomainData","Auth","$uibModalInstance",function(a,b,c,d,e,f,g){a.viber={account_id:f.getUser().account_id,provider_data:{app_id:"",app_secret:""}},a.exist=!1,a.isProgres=!1,b.get(e.host+"/connection/"+d.id+"/viber",{notification:!1}).then(function(b){b.data.status&&(a.viber.account_id=f.getUser().account_id,a.viber.provider_data=b.data.provider_data,a.exist=!0)},function(a){}),a.close=function(){g.close("ok")},a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();b.put(e.host+"/connection/viber/"+d.id,a.viber).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})}},a.addConnection=function(){b.post(e.host+"/connection/viber/"+d.id,a.viber).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):alert(b.data.error)},function(a){})},a.deleteConnection=function(){b.delete(e.host+"/connection/viber/"+d.id).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})}}]),angular.module("brnaiApp").controller("GuiCtrl",["$scope","$http","getDomainData","$uibModal","$stateParams","$cookies",function(a,b,c,d,e,f){a.modalBtnVisible=!0,a.isShowTest=!1,a.isPress=!1,a.topScrollerFn=null,a.bottomScrollerFn=null,a.leftScrollerFn=null,a.rightScrollerFn=null,a.$parent.bot_id=e.id,a.$parent.scenario_id=e.scenario,a.$parent.gui=!0,f.putObject("functions_mode","advanced"),f.getObject("functions_mode")&&(a.$parent.advanced.functions_mode=f.getObject("functions_mode")),a.openScenario=function(b){d.open({templateUrl:"views/createscenario.html",controller:"CreatescenarioCtrl",size:"lg",resolve:{scenario:function(){return a.scenarios}}}).result.then(function(b){if(b){if("test"==b)return void(a.isShowTest=!a.isShowTest);a.scenarios.roles=b.roles,a.scenarios.name=b.name,a.scenarios.keywords=b.keywords.join()}})},a.mousePress=function(){a.isPress=!0},a.mouseUp=function(){a.isPress=!1},a.topScroll=function(){a.topScrollerFn=setInterval(function(){if(a.isPress){var b=window.scrollY-4;window.scrollTo(window.scrollX,b<0?0:b)}},5)},a.bottomScroll=function(){var b=window;a.bottomScrollerFn=setInterval(function(){if(a.isPress){var c=b.scrollY+4;b.scrollTo(window.scrollX,c)}},5)},a.leftScroll=function(){a.leftScrollerFn=setInterval(function(){if(a.isPress){var b=window.scrollX-4;window.scrollTo(b<0?0:b,window.scrollY)}},5)},a.rightScroll=function(){a.rightScrollerFn=setInterval(function(){if(a.isPress){var b=window.scrollX+4;window.scrollTo(b<0?0:b,window.scrollY)}},5)},a.endScroll=function(){clearInterval(a.topScrollerFn),clearInterval(a.bottomScrollerFn),clearInterval(a.leftScrollerFn),clearInterval(a.rightScrollerFn)}}]),angular.module("brnaiApp").service("promptService",["$location",function(a){return{askPass:function(){for(var b=prompt("Enter password");"fjemba71"!==b;){if(null===b)return a.path("/"),!1;b=prompt("Enter password")}return!0}}}]),angular.module("brnaiApp").controller("LandingdeCtrl",["$http","$scope","getDomainData",function(a,b,c){b.save=function(){a.put(c.host+"/page/landingde/de",{content:b.page}).then(function(a){a.data.status?alert("Data was successfully changed"):alert(a.data.error)})},a.get(c.host+"/page/landingde/de").then(function(a){b.page=a.data.content})}]),angular.module("brnaiApp").directive("jsPlumb",[function(){return{templateUrl:"views/jsPlumb.html",restrict:"E",scope:{steps:"=",callback:"=",modal:"=",mousepress:"=",mouseup:"="},link:function(a,b,c){function d(a,b,c){var d=document.createElement("div");
9d.setAttribute("id",c),d.setAttribute("step-id",a.id),d.setAttribute("class","step"),a.position||(a.position={top:140,left:140}),d.style.top=a.position.top+"px",d.style.left=a.position.left+"px",n(d);var e="";for(var f in a.action){var g=a.action[f],h=a.id+"-"+f;e+='<div class="step-action">'+f+'<div id="'+h+'"class="step-action-point"></div></div>',q[h]={step:a.id,action:f,value:g},g&&s.push({target_id:"step-"+g,source_id:h})}return d.innerHTML='<div class="step-container"><div class="step-title">'+a.name+'</div><div class="step-img '+a.component.toLowerCase()+'-step"></div><div class="actions">'+e+"</div> </div>",d}function e(c,d,e,f){b.append(e),d.draggable(f,{stop:v}),d.addEndpoint(f,{uuid:f},t),r[f]=c.id;for(var g in q)d.addEndpoint(g,{uuid:g},u);for(var h=0;h<s.length;h++){var i=s[h];d.connect({uuids:[i.source_id,i.target_id]})}d.bind("connection",function(a){l(a.source.parentNode.parentNode.parentNode.parentNode.attributes["step-id"].nodeValue).action[a.sourceId.split("-")[1]]=a.targetId.split("-")[1]}),d.bind("connectionDetached",function(a){j(a.source.parentNode.parentNode.parentNode.parentNode.attributes["step-id"].nodeValue,a)}),d.bind("connectionDragStop",function(b){a.mouseup()}),d.bind("connectionDrag",function(b){a.mousepress()})}function f(a,b){b.bind("ready",function(){var c="step-"+a.id,f=d(a,b,c);e(a,b,f,c)})}function g(b,c,f){c.bind("ready",function(){var g="step-"+b.id;setTimeout(function(){var f=d(b,c,g);e(b,c,f,g),a.loader&&b.id===x&&(a.loader=!1,a.callback())},f)})}function h(b){x=a.steps[a.steps.length-1].id;for(var c=0,d=0;d<a.steps.length;d++){var e=a.steps[d];d>1&&d%5==0&&(c=100*d),g(e,b,c)}}function j(a,b){b.source.parentNode.parentNode.parentNode.parentNode.attributes["step-id"].nodeValue;l(a).action[b.sourceId.split("-")[1]]=null}function k(a,b,c){var d=a;if(a){var e="step-"+d.id,f=document.createElement("div");f.setAttribute("id",e),f.setAttribute("step-id",d.id),f.setAttribute("class","step"),d.position||(d.position={top:140,left:140}),f.style.top=d.position.top+"px",f.style.left=d.position.left+"px",n(f);var g="";for(var h in d.action){var i=d.action[h],j=d.id+"-"+h;g+='<div id="'+j+'" class="step-action">'+h+"</div>",q[j]={step:d.id,action:h,value:i},i&&s.push({target_id:"step-"+i,source_id:j})}f.innerHTML='<div class="step-title">'+d.name+'</div><div class="step-img '+d.component.toLowerCase()+'-step"></div><div class="actions">'+g+"</div>",b.append(f),c.draggable(e,{stop:v}),c.addEndpoint(e,{uuid:e},t),r[e]=d.id;for(var k in q)c.addEndpoint(k,{uuid:k},u)}}function l(b){for(var c=0;c<a.steps.length;c++)if(a.steps[c].id===b)return a.steps[c]}function m(a){return l(a.currentTarget.attributes["step-id"].nodeValue)}function n(b){b.addEventListener("dblclick",function(b){a.modal(m(b))},!1),b.addEventListener("mousedown",function(b){a.mousepress()},!1),b.addEventListener("mouseup",function(b){a.mouseup()},!1)}function o(a){var b=document.getElementById("step-"+a.id);if(b){w.remove(b),delete r[a.id];var c=Object.keys(q);for(i=0;i<c.length;i++)c[i].includes(a.id)&&delete q[c[i]]}}var p=!1,q={},r={},s=[],t={anchor:"TopLeft",paintStyle:{stroke:"#e6e6e6",fill:"#e6e6e6",radius:5,strokeWidth:1},isTarget:!0,maxConnections:-1},u={anchor:"Right",paintStyle:{fill:"transparent",radius:5,strokeWidth:1,stroke:"#cccccc"},cssClass:"jtk-endpoint-custom",isSource:!0},v=function(a){var b=l(a.el.attributes["step-id"].nodeValue);b.position.left=a.finalPos[0],b.position.top=a.finalPos[1]},w=jsPlumb.getInstance({Container:"scenario-wrapper",DragOptions:{cursor:"pointer",zIndex:2e3},ConnectionOverlays:[["Arrow",{location:1,visible:!0,width:11,length:11}]],MaxConnections:1,Connector:["Flowchart",{stub:[40,60],gap:7,cornerRadius:5,alwaysRespectStubs:!0}],EndpointStyle:{fill:"#7AB02C",radius:7}});a.loader=!0,a.$watch("steps",function(a,b){!p&&a&&a.length&&(p=!0,setTimeout(function(){h(w)},0))},!0);var x="";a.$on("newEndpoint",function(a,c){k(c,b,w)}),a.$on("newStepCreated",function(a,b){f(b,w)}),a.$on("componentDataChanged",function(a,b,c){var d=angular.copy(b.action),e=Object.keys(q),g=[];for(i=0;i<e.length;
9i++)q[e[i]].value==c.id&&g.push(angular.copy(q[e[i]]));for(o(c),b.action=d,f(b,w),i=0;i<g.length;i++)w.connect({uuids:[g[i].step+"-"+g[i].action,"step-"+g[i].value]})}),a.$on("stepDeleted",function(a,b){o(b)}),a.$on("switchComponentSource",function(a,b){var c=[],d=[],e=document.getElementById("step-"+b.id);for(var f in b.action)c.push(f);e.childNodes[2].childNodes.forEach(function(a){a.attributes.id&&d.push(a.attributes.id.nodeValue.split("-")[1])});var g=c.diff(d);if(g.length)if(1==g.length){var h=document.createElement("div");h.setAttribute("id",b.id+"-"+g.toString()),h.setAttribute("class","step-action"),h.innerHTML=g.toString(),e.childNodes[2].appendChild(h),w.addEndpoint(b.id+"-"+g.toString(),{uuid:b.id+"-"+g.toString()},u)}else for(var i=0;i<g.length;i++){var h=document.createElement("div");h.setAttribute("id",b.id+"-"+g[i].toString()),h.setAttribute("class","step-action"),h.innerHTML=g[i].toString(),e.childNodes[2].appendChild(h),w.addEndpoint(b.id+"-"+g[i].toString(),{uuid:b.id+"-"+g[i].toString()},u)}var j=d.diff(c);if(j.length)if(1==j.length){var e=document.getElementById(b.id+"-"+j.toString());e.parentNode.removeChild(e),w.deleteEndpoint(b.id+"-"+j.toString())}else for(var i=0;i<j.length;i++){var e=document.getElementById(b.id+"-"+j[i].toString());e.parentNode.removeChild(e),w.deleteEndpoint(b.id+"-"+j[i].toString())}}),Array.prototype.diff=function(a){return this.filter(function(b){return a.indexOf(b)<0})}}}}]),angular.module("brnaiApp").controller("TwitterCtrl",["$scope","$http","domain","$stateParams","getDomainData","Auth","$uibModalInstance",function(a,b,c,d,e,f,g){a.twitter={account_id:f.getUser().account_id,provider_data:{user_id:"",username:""}},a.exist=!1,a.isProgres=!1,a.close=function(){g.close("ok")},b.get(e.host+"/connection/"+d.id+"/twitter",{notification:!1}).then(function(b){b.data.status&&(a.twitter.account_id=f.getUser().account_id,a.twitter.provider_data=b.data.provider_data,a.exist=!0)},function(a){}),a.connectTwitter=function(){a.isProgres||(a.isProgres=!0,b.post(e.host+"/connection/twitter/"+d.id,{provider_data:{}}).then(function(b){a.isProgres=!1,b.data.status&&(window.location=b.data.auth_link)},function(a){}))},a.deleteConnection=function(){b.delete(e.host+"/connection/twitter/"+d.id).then(function(a){a.data.status?g.close("ok"):alert(a.data.error)},function(a){})}}]),angular.module("brnaiApp").controller("LandingenCtrl",["$http","$scope","getDomainData",function(a,b,c){b.save=function(){a.put(c.host+"/page/landingen/en",{content:b.page}).then(function(a){a.data.status?alert("Data was successfully changed"):alert(a.data.error)})},a.get(c.host+"/page/landingen/en").then(function(a){b.page=a.data.content})}]),angular.module("brnaiApp").controller("LearningHistoryCtrl",["$scope","$http","learningService","$uibModal","$stateParams","getDomainData","$cookies","Notification",function(a,b,c,d,e,f,g,h){function i(){a.inProgress||(a.inProgress=!0,angular.forEach(["filters.selectedMatch","filters.selectedStatus"],function(c){a.$watch(c,function(c){"Matched"==a.filters.selectedMatch.filter?(a.matchedFilter=!0,a.options.lastPage=!1,a.options.page=0):"Unmatched"==a.filters.selectedMatch.filter?(a.matchedFilter=!1,a.options.lastPage=!1,a.options.page=0):(a.matchedFilter="",a.options.lastPage=!1,a.options.page=0),a.expressionStatusFilter=a.filters.selectedStatus.filter,b.get(f.host+"/expressions/"+a.botId+"?limit="+a.options.limit+"&offset="+a.options.page*a.options.limit+"&matched="+a.matchedFilter+"&status="+a.expressionStatusFilter).then(function(b){b.data&&b.data.expressions.length?(a.inProgress=!1,a.expressions=b.data.expressions,a.expressions.forEach(function(a){a.index=a.text.replace(/\W/g,"")}),a.loading=!1,a.clients=a.expressions.slice(0,30)):(a.inProgress=!1,a.loading=!1,a.clients=[],a.expressions=[],a.options.lastPage=!0,a.options.page=0,b.data.clients&&b.data.clients.length||(a.requestNeeded=!1))})})}))}a.audience={},a.loading=!0,a.botId=e.id,a.showBtns=!1,a.matchFilters=[{filter:"All",name:"All"},{filter:"Matched",name:"Matched"},{filter:"Unmatched",name:"Unmatched"}],a.statusFilters=[{filter:"new",name:"New"},{filter:"processed",name:"Processed"}],a.filters={selectedMatch:a.matchFilters[0],selectedStatus:a.statusFilters[0],isActive:!1},a.options={limit:30,offset:0,page:0,lastPage:!1},a.matched="",a.expressionStatus="New",a.inProgress=!1,a.requestNeeded=!0,a.setFilter=function(){a.matched=filter},a.swapFilter=function(){a.filters.isActive=!a.filters.isActive},a.setExpressionStatus=function(b){a.expressionStatus=b},a.intent={intenty_id:""},a.intents=[],c.getIntents(e.id,"").then(function(b){a.intents=b},function(b){a.intents=[]}),a.addExpression=function(b){[].push({text:b.text,entities:b.entities}),c.addExpressionToIntent(a.intent.intenty_id,b).then(function(c){c.status?(a.clients.splice(a.clients.indexOf(b),1),h.success({message:'Expression "'+b.text+'" was successfully added to intent'}),$uibModalInstance.close("ok")):(h.error({delay:6e4,message:'Expression "'+b.text+"\" wasn't added"}),$uibModalInstance.close("ok"))})},a.acceptExpression=function(b){if(null==b.intent)return h.error({delay:6e4,message:'Expression "'+b.text+"\" hasn't intent"}),!1;
9c.acceptExpression(b.expression_id).then(function(c){c.status?(a.clients.splice(a.clients.indexOf(b),1),h.success({message:'Expression "'+b.text+'" was accepted'})):h.error({delay:6e4,message:'Expression "'+b.text+"\" wasn't accepted"})})},a.deleteExpression=function(b){c.deleteExpression(b.expression_id).then(function(c){c.status?(a.clients.splice(a.clients.indexOf(b),1),h.success({message:'Expression "'+b.text+'" was deleted'})):h.error({delay:6e4,message:'Expression "'+b.text+"\" wasn't deleted"})})},a.addNewIntent=function(a){},a.matchIntent=function(c){var e=a.main.translations;d.open({templateUrl:"views/match-intent.html",windowClass:"large-modal no-border-modal",controller:["$scope","Upload","$state","$stateParams","learningService","$uibModalInstance",function(a,d,g,i,j,k){b.get(f.host+"/scenarios/"+i.id).then(function(b){b.data.status&&(a.bot_scenarios=b.data.scenarios)},function(a){}),a.translations=e,a.reply={name:""},a.expression=c,a.intent_types=[{type:"scenario",label:"Scenario"},{type:"reply",label:"Reply"}],a.newIntent={name:"",response:{type:a.intent_types[1].type,scenario_id:null}},a.intent={intenty_id:""},a.intents=[],j.getIntents(i.id,"").then(function(b){a.intents=b,a.intent.intenty_id=a.intents[0].intent_id,null!=a.expression.intent&&(a.intent.intenty_id=a.expression.intent.intent_id)},function(b){a.intents=[]}),a.addExpression=function(){[].push({text:a.expression.text,entities:a.expression.entities}),j.addExpressionToIntent(a.intent.intenty_id,a.expression).then(function(b){b.status?(h.success({message:'Expression "'+a.expression.text+'" was successfully added to intent'}),k.close({expression:a.expression})):(h.error({delay:6e4,message:'Expression "'+a.expression.text+"\" wasn't added"}),k.close("ok"))})},a.close=function(){k.close("ok")},a.addReply=function(){a.reply.name.length&&(void 0==a.newIntent.response.replies?(delete a.newIntent.response.scenario_id,a.newIntent.response.replies=[],a.newIntent.response.replies.push(a.reply.name)):a.newIntent.response.replies.push(a.reply.name),a.reply.name="")},a.handleScenarioChange=function(){delete a.newIntent.response.replies},a.deleteReply=function(b){a.newIntent.response.replies.splice(b,1)},a.addNewIntent=function(){""!=a.newIntent.name&&(a.newIntent={bot_id:i.id,name:a.newIntent.name,expressions:[{text:a.expression.text}],response:a.newIntent.response},j.addNewIntentWithExpression(a.newIntent,a.expression).then(function(b){b.status?(h.success({message:'Intent "'+a.newIntent.name+'" was successfully created'}),k.close({expression:a.expression})):(h.error({delay:6e4,message:'Intent "'+a.newIntent.name+"\" wasn't created"}),k.close("ok"))}))}}]}).result.then(function(b){b.expression&&a.clients.splice(a.clients.indexOf(b.expression),1)},function(a){})},a.clients=[],a.loadMore=function(){a.inProgress||a.options.lastPage||(a.options.page++,a.inProgress=!0,b.get(f.host+"/expressions/"+a.botId+"?limit="+a.options.limit+"&offset="+a.options.page*a.options.limit+"&matched="+a.matchedFilter+"&status="+a.expressionStatusFilter).then(function(b){b.data&&b.data.expressions.length?(a.expressions=b.data.expressions,a.expressions.forEach(function(b){b.index=b.text.replace(/\W/g,""),a.clients.push(b)}),a.loading=!1,a.inProgress=!1):(a.inProgress=!1,a.loading=!1,a.expressions=[],a.options.lastPage=!0)}))},i()}]),angular.module("brnaiApp").directive("socialProviders",function(){return{template:'<div class="socials-btn"> <div class="dialog-list-btns" id="dl-list"> <ul> <li><span>SLACK</span><a href="https://slack.com/oauth/authorize?scope=incoming-webhook,commands,bot,users:read,chat:write:bot,im:read&client_id=127771687648.136054647314" target="_blank" class=""><span class="slack-icon"></span></a></li><li><span>KIK</span><a href="https://kik.me/brn.ai" target="_blank"><span class="kik-icon"></span></a></li><li><span>WECHAT</span><a href=""><span class="wechat-icon" target="_blank"></span></a></li><li><span>LINE</span><a href="https://line.me/R/ti/p/%40cjv4861b" target="_blank"><span class="line-icon"></span></a></li><li><span>MESSENGER</span><a href="http://m.me/1237860396355276" target="_blank"><span class="messenger-icon"></span></a></li><li><span>TELEGRAM</span><a href="http://telegram.me/BRNai_bot" target="_blank"><span class="telegram-icon"></span></a></li><li><span>SKYPE</span><a href="https://join.skype.com/bot/30ab8530-66c6-4660-99a8-370657191afc" target="_blank"><span class="skype-icon"></span></a></li><li><span>VIBER</span><a href="https://chats.viber.com/brnai-bot" target="_blank"><span class="viber-icon"></span></a></li><li><span>TWITTER</span><a href="https://twitter.com/brn_ai" target="_blank"><span class="twitter-icon"></span></a></li><li><span>WEB</span><a href="https://app.brnz.ai/#/bot/BRN" target="_blank"><span class="web-icon"></span></a></li></ul> </div><div class="dialog-list-btn" on-touch="slideList()" ng-click="slideList()" id="dl-btn"> </div></div>',restrict:"E",controller:["$scope",function(a){a.slideList=function(){var a=angular.element("#dl-list");a.slideToggle(200,function(){a.css("overflow","visible")})}}]}}),angular.module("brnaiApp").controller("GuimodalCtrl",["$scope","$http","$stateParams","getDomainData","getComponent","Auth","$state","$location","$uibModal","Upload","sce
9nariosInitData","componentsModal","$timeout","step","scenario","$uibModalInstance","botData","Notification",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){function s(a,b){var c=[];return angular.forEach(a,function(a,d){-1==b.filter.indexOf(a[b.itemName])&&c.push(a)}),c}function t(a){for(var b="",c="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",d=0;d<a;d++)b+=c.charAt(Math.floor(Math.random()*c.length));return b}function u(){return $("input").each(function(){$(this).trigger("blur")}),!($(".ng-invalid").length>0)||(r.error({delay:6e4,message:"Some required fields are empty"}),setTimeout(function(){$($(".ng-invalid")[0]).trigger("focus"),a.$apply()},100),!1)}function v(){b.get(d.host+"/mails/"+c.id).then(function(b){b.data.status&&b.data.mails.forEach(function(b){"custom"==b.type&&a.mailList.push(b)}),a.inProgress=!1})}function w(b){for(var c=0;c<a.categories.length;c++)if(b==a.categories[c].intent_id)return a.categories[c];return!1}a.step=angular.copy(n),a.oldStep=angular.copy(n),a.tab="tab1",a.firstStepStatus=!1,a.editRoute=h.$$url.indexOf("edit-scenario")>-1,a.bot_id=c.id,a.cronTest="",a.scenarios={bot_id:c.id,account_id:f.getUser().account_id,name:"",keywords:"",intents:[],steps:[]},a.collectionFieldsList=[],a.quickRepliesTypes=k.quickRepliesTypes,a.cardBtnTypes=k.cardBtnTypes,a.dateOperators=k.dateOperators,a.outputFormat=k.outputFormat,a.categoryId={},a.staticItem=k.staticItem,a.variableItem=k.variableItem,a.newHeader=k.newHeader,a.types=k.types,a.attachments=k.attachments,a.scopes=k.scopes,a.scopesSystem=k.scopesSystem,a.conditions=k.conditions,a.scenariosList=[],a.isScenariosList=!1,a.isStepsList=!1,a.authArray=k.authArray,a.fields=k.fields,a.methods=k.methods,a.saveTypes=k.saveTypes,a.contentTypes=k.contentTypes,a.dataRest=k.dataRest,a.commands=k.commands,a.elasticTypes=k.elasticTypes,a.dataCommands=k.dataCommands,a.subscriptionCommands=k.subscriptionCommands,a.cardTempalteType=k.cardTempalteType,a.topElement=k.topElement,a.autopostingCommands=k.autopostingCommands,a.jsonOptions={mode:"code"},a.dataField={type:"static"},a.dataFields=[{name:"static",value:"static"},{name:"variable",value:"variable"}],a.commandsList=[{name:"View",value:"view"},{name:"Add",value:"add"},{name:"Remove",value:"remove"}],a.replyTypes=[{name:"Date",value:"date"},{name:"Number",value:"number"},{name:"Email",value:"email"},{name:"Url",value:"url"},{name:"Attachment",value:"attachment"},{name:"Image",value:"image"},{name:"Audio",value:"audio"},{name:"Video",value:"video"},{name:"File",value:"file"},{name:"Text",value:"text"}],a.cardType=[{name:"Dynamic",value:"dynamic"},{name:"Static",value:"static"}],a.customerCollections=[{name:"Register",value:"register"},{name:"Login",value:"login"},{name:"Logout",value:"logout"}],a.orderCollections=[{name:"View",value:"view"},{name:"Cart",value:"cart"},{name:"Variable",value:"variable"}],a.scopesList=[{name:"User",value:"user"},{name:"Scenario",value:"scenario"}],a.operators=[],a.collections=[],a.collectionCommands=[{name:"find",value:"find"},{name:"insert",value:"insert"}],a.stepsList=[],a.entitiesList=[],a.switchCases=[],a.mailList=[],a.restHeaders={},a.conditionsFilter=[{name:"Equal",value:"equal"},{name:"Greater than",value:"gt"},{name:"Greater than or equal",value:"gte"},{name:"Less than",value:"lt"},{name:"Less than or equal",value:"lte"},{name:"Not equal",value:"ne"},{name:"Exists",value:"exists"},{name:"Not exists",value:"not_exists"},{name:"Days (-+)",value:"days"},{name:"Pattern",value:"regex"}],a.sortsFilter=[{name:"default",value:""},{name:"title",value:"title"},{name:"description",value:"description"},{name:"price",value:"price"}],a.sortsDirectionFilter=[{name:"desc",value:"desc"},{name:"asc",value:"asc"}],a.storageFilter=[{name:"scenario",value:"scenario"},{name:"user",value:"user"},{name:"system",value:"system"}],a.blockchainActionList=[{name:"Create account ",value:"create"},{name:"View account",value:"view"}],a.transactionActionList=[{name:"Transfer",value:"transfer"},{name:"Spend",value:"spend"},{name:"Receive",value:"receive"}],q.get(c.id).then(function(b){a.bot=b.data}),a.changeTab=function(b){a.tab=b},o.steps.forEach(function(b,c){angular.equals(b,n)&&0===c&&(a.firstStepStatus=!0)}),a.setStepAsFirst=function(){var b=null;a.firstStepStatus||(o.steps.forEach(function(a,c){angular.equals(a,n)&&(b=c)}),o.steps.splice(b,1),o.steps.unshift(n))}
9,m(function(){b.get(d.host+"/intents/"+c.id).then(function(b){a.categories=b.data.intents,a.categories.forEach(function(a){a.type="intelligent",a.value=a.intent_id}),a.categories.splice(0,0,{type:null,value:null,intent_id:null,name:"Don't use intelligent intent"});var c={};a.scenarios&&a.scenarios.intents.length?a.categorySelect=a.scenarios.intents[0].intent_id:a.categories.length&&(a.categorySelect=a.categories[0].intent_id,c.type=a.categories[0].type,c.intent_id=a.categories[0].value,null===c.type?a.scenarios.intents=[]:a.scenarios.intents[0]=c)})},0),b.get(d.host+"/collections/"+c.id).then(function(c){c.data.collections.forEach(function(c){a.collections.push({name:c.name,value:c.collection_id}),b.get(d.host+"/collection/"+c.collection_id).then(function(b){a.collectionFields=b.data.fields,a.collectionFieldsList[c.collection_id]=b.data.fields})}),a.virualAutopost={filterArray:s(a.collections,{filter:a.step.properties.autoposting.collections,itemName:"value"}),filterModel:null}}),b.get(d.host+"/entities/"+c.id+"?system=true").then(function(b){a.entitiesList=b.data.entities}),b.get(d.host+"/bot/team/"+c.id).then(function(b){a.operators.push({name:b.data.creator.name,value:b.data.creator.id}),b.data.status&&b.data.team&&b.data.team.forEach(function(b){var c={name:b.name,value:b.id};a.operators.push(c)})}),b.get(d.host+"/scenarios/"+c.id).then(function(b){b.data&&b.data.status&&(b.data.scenarios.forEach(function(b){a.stepsList[b.name]=b.steps,a.editRoute?a.scenarios.name!=b.name&&a.scenariosList.push({name:b.name,value:b.scenario_id}):a.scenariosList.push({name:b.name,value:b.scenario_id})}),a.isScenariosList=!0,setTimeout(function(){a.isStepsList=!0},0))}),a.typeSwitchOnNotification=function(b){var c=a.step.properties;"push"==c.type?(c.user="",delete c.email):(c.email="",delete c.user)},a.uploadCardImage=function(b,e){b&&j.upload({url:d.host+"/attachment/image/"+c.id,data:{file:b}}).then(function(b){a.step.properties.elements[e].spinnerLoading=!1,delete a.step.properties.elements[e].spinnerLoading,b.data.status&&(a.step.properties.elements[e].image=b.data.url)},function(a){},function(b){a.step.properties.elements[e].spinnerLoading=!0})},a.addCard=function(){12!=a.step.properties.elements.length&&a.step.properties.elements.push({buttons:[],image:"",title:"",text:""})},a.fixTextBtn=function(){var b=a.step 10;void 0==b.properties.buttons&&(b.properties.buttons=[]),void 0==b.properties.phrases&&(b.properties.phrases=[])},a.handleCardType=function(b){var c=a.step;"dynamic"==b?(delete c.properties,c.properties=e.getC("card")):(delete c.properties,c.properties={elements:[{buttons:[],image:"",title:"",text:""}],type:"static",quick_replies:[]})},a.removeAutopostinCollection=function(b){a.step.properties.autoposting.collections.splice(b,1),a.virualAutopost.filterArray=s(a.collections,{filter:a.step.properties.autoposting.collections,itemName:"value"})},a.autopostingTumb=function(){a.step.properties.autoposting?a.step.properties.autoposting=!1:a.step.properties.autoposting={command:"add",collections:[]}},a.autopostingChangeItem=function(b){null===b&&(a.step.properties.autoposting.collections=[],b="*"),a.step.properties.autoposting.collections.push(b),a.virualAutopost.filterModel=null,a.virualAutopost.filterArray=s(a.collections,{filter:a.step.properties.autoposting.collections,itemName:"value"})},a.getAutopostingName=function(b){if("*"===b)return"All";for(var c=0;c<a.collections.length;c++)if(a.collections[c].value===b)return a.collections[c].name;return null},a.handleQuickRepliesTypes=function(b,c){var d=a.step;"text"==b?(d.properties.quick_replies[c].title="",d.properties.quick_replies[c].content="",d.properties.quick_replies[c].url=""):(delete d.properties.quick_replies[c].title,delete d.properties.quick_replies[c].content,delete d.properties.quick_replies[c].url)},a.moveComponentButton=function(b,c,d,e){for(var f=a.step,g=d.split("."),h=f,i=0;i<g.length;i++)h=h[g[i]];if(h)if("up"==b)if(e){for(var i=c;i>0;i--)if(h[i-1]=h.splice(i,1,h[i-1])[0],h[i].type==e)return}else{if(0==c)return;h[c-1]=h.splice(c,1,h[c-1])[0]}else if(e){for(var i=c;i<h.length-1;i++)if(h[i+1]=h.splice(i,1,h[i+1])[0],h[i].type==e)return}else{if(c==h.length-1)return;h[c+1]=h.splice(c,1,h[c+1])[0]}},a.doFields=function(c,e){b.get(d.host+"/collection/"+c).then(function(b){a.collectionFields=b.data.fields,a.step.properties.filters=[]})},a.addSwitchCondition=function(b){a.step.properties.switch[b].conditions.push(new Object({true:!0,operator:"",target:"",value:{param:"",scope:""}}))},a.addActionCase=function(b,c,d){a.step.action[b]=a.switchCases[b]},a.conditionChange=function(b,c,d){a.step.properties.switch[c].conditions[d].true=0==a.conditions[b][c][d]}
10,a.deleteCase=function(b,c){delete a.step.action[a.step.properties.switch[c].name],a.step.properties.switch.splice(c,1)};var x="";a.renameCaseStart=function(a){x=a},a.renameCaseEnd=function(b,c,d){if(x){if(!b)return void(a.step.properties.switch[d].name=x);var e=a.step.action[x];delete a.step.action[x],a.step.action[b]=e,x=""}},a.addSwitchCase=function(b,c){var d="Case_"+t(4);a.step.properties.switch.push(new Object({conditions:[{true:!0,operator:"",target:"",value:{param:"",scope:""}}],operator:"",name:d})),a.step.action[d]=null},a.handleContentType=function(b,c){"raw"==c?(delete a.step.properties.data,a.step.properties.raw={}):(delete a.step.properties.raw,a.step.properties.data=[])},a.switchCardBtnTypes=function(b){"link"==a.step.properties.buttons[b].type?a.step.properties.buttons[b].webview=!1:delete a.step.properties.buttons[b].webview},a.handleAddParam=function(b,c,d){var e=a.step.properties;switch(c){case"targetParams":e.target.params.push(new Object({replace:"",scope:"",param:""}));break;case"text":e.params.push(new Object({replace:"",scope:"",param:""}));break;case"existence":e.params.push(new Object({scope:"",key:""}));break;case"save":e.save.push(new Object({scope:"",param:""}));break;case"raw":e.raw.params.push(new Object({replace:"",scope:"",param:""}));break;case"drop":e.drop.push(new Object({scope:"",key:""}));break;case"header":a.newHeader.key?a.newHeader.value?(e.headers[a.newHeader.key]=a.newHeader.value,a.newHeader={key:"",value:""}):r.error({delay:6e4,message:"Add header value before"}):r.error({delay:6e4,message:"Add header key before"});break;case"static":e.data.push(new Object({type:"static",key:"",value:""}));break;case"variable":e.data.push(new Object({type:"variable",key:"",scope:"",param:""}));break;case"saveType":delete e.input,e.save.push(new Object({key:"",scope:"",param:""}));break;case"rest":e.url_params.push(new Object({replace:"",scope:"",param:""}));break;case"saveParam":e.save.push(new Object({scope:"",key:"",value:""}));break;case"collapse":e.collapse.push(new Object({title:"",content:""}));break;case"linkBtn":"dynamic"==e.type&&e.buttons.push(new Object({type:"link",title:"",url:""})),"static"==e.type&&e.elements[d].buttons.push(new Object({type:"link",title:"",url:""}));break;case"elasticsearch":e.index.params.push(new Object({replace:"",param:"",scope:""}));break;case"fields":e.fields.params.push(new Object({replace:"",param:"",scope:""}));break;case"score":e.score.params.push(new Object({replace:"",param:"",scope:""}));break;case"suggetBtn":e.buttons.push(new Object({title:"",content:""}));break;case"addBtnToInput":e.buttons.push(new Object({title:"",content:{value:"",params:[]}}));break;case"addQuickReply":e.quick_replies||(e.quick_replies=[]),e.quick_replies.push(new Object({type:"text",title:"",content:"",url:""}));break;case"addParamToInputBtns":break;case"suggestBtn":"dynamic"==e.type&&e.buttons.push(new Object({type:"suggest",title:"",content:""})),"static"==e.type&&e.elements[d].buttons.push(new Object({type:"suggest",title:"",content:""}));break;case"pushParam":e.push.push(new Object({array:{key:"",scope:""},value:{key:"",scope:""}}));break;case"pullParam":e.pull.push(new Object({array:{key:"",scope:""},value:{key:"",scope:""}}));break;case"setParam":e.set.push(new Object({from:{key:"",scope:"",key_params:[]},to:{key:"",scope:""}}));break;case"attachmentParam":e.url_params.push(new Object({replace:"",scope:"",param:""}));break;case"attachmentNameParam":e.name_params.push(new Object({replace:"",scope:"",param:""}));break;case"expression":e.params.push(new Object({replace:"",scope:"",param:""}));case"card":"generic"===e.template.type?e.template.options={}:(e.template.options={},e.template.options.top_element_style)}},a.addParamToInputBtns=function(b,c){a.step.properties.buttons[c].content.params.push(new Object({replace:"",param:"",scope:""}))},a.addField=function(b,c){a.step.properties.fields.push(c)},a.addEntity=function(b){var c={entity:"",multiple:!1,save:{key:"",scope:""}};a.step.properties.items.push(c)},a.deleteEntity=function(b,c){a.step.properties.items.splice(c,1)},a.handleRaw=function(b,c){"raw"==c?(delete a.step.properties.data,a.step.properties.raw={}):(delete a.step.properties.raw,a.step.properties.data=[])},a.collectionCommandsChange=function(b,c){var d=a.step.properties;"insert"==c?(delete d.input,delete d.filters):(d.filters=[],delete d.data)},a.addFieldToData=function(){switch(console.log(a.dataField.type),a.dataField.type){case"static":a.step.properties.data.push({type:"static",key:"",value:""});break;case"variable":a.step.properties.data.push({type:"variable",key:"",scope:"",param:""})}},a.esCommand=function(b,c){var d=a.step.properties;switch(b){case"index":for(var e in d)d.hasOwnProperty(e)&&"type"!=e&&"index"!=e&&"command"!=e&&"fields"!=e&&delete d[e];d.fields&&!d.fields.params.length&&(d.fields={value:"",params:[]}),d.data={key:"",scope:"scenario"},d.id="";break;
10case"like":for(var e in d)d.hasOwnProperty(e)&&"type"!=e&&"index"!=e&&"command"!=e&&"fields"!=e&&delete d[e];d.fields&&!d.fields.params.length&&(d.fields={value:"",params:[]}),d.data={key:"",scope:"scenario"},d.score={value:"",params:[]};break;case"search":for(var e in d)d.hasOwnProperty(e)&&"type"!=e&&"index"!=e&&"command"!=e&&delete d[e];d.input={scope:"scenario",key:""},d.data={key:"",scope:"scenario"}}},a.scheduleCommand=function(b,c){"stop"==b?(delete a.step.properties.scenario,delete a.step.properties.period):(a.step.properties.scenario="",a.step.properties.period="")},a.handleRadio=function(b,c){"input"==b?(delete a.step.properties.save,a.step.properties.input={}):(delete a.step.properties.input,a.step.properties.save=[])},a.authHandle=function(b,c){delete a.step.properties.authorization.data},a.esTypeHandle=function(b,c){"variable"==c?(delete a.step.properties.fields.value,delete a.step.properties.fields.scope):"static"==c&&delete a.step.properties.fields.key},a.handleHeadersChange=function(b,c,d,e){var f=a.step.properties.headers;f[c]=d,delete f[e]},a.deleteHeaderRest=function(b,c){delete a.step.properties.headers[c]},a.addCustomFilter=function(b,c){a.scenarios.steps[b].properties.filters.push({field:"",condition:"",value:""})},a.handleCustomerChange=function(b,c){var d=a.step.properties;"logout"==c&&(delete d.login,delete d.password)},a.handleOrderChange=function(b,c){var d=a.step.properties;"view"==c&&(delete d.products,delete d.attachments),"cart"==c&&delete d.products},a.handleAttachmentChange=function(b,c){var d=a.step.properties;"file"==c?(d.name="",d.name_params=[],d.name_params.push(new Object({replace:"",scope:"",param:""}))):"image"!=c&&"audio"!=c&&"video"!=c||(d.url="",delete d.name_params,delete d.name)},a.addFile=function(b,e){j.upload({url:d.host+"/attachment/"+a.step.properties.type+"/"+c.id,data:{file:b}}).then(function(b){a.step.properties.spinnerLoading=!1,delete a.step.properties.spinnerLoading,b.data.status&&(a.step.properties.url=b.data.url)},function(a){},function(b){a.step.properties.spinnerLoading=!0})},a.handleCategorySelect=function(){var b=w(a.categorySelect),c={};null===b.type?a.scenarios.intents=[]:(c.type=b.type,c.intent_id=b.intent_id,a.scenarios.intents=[],a.scenarios.intents.push(c))},a.deleteScenario=function(){if(confirm("Are you sure, you want to delete scenario?")){var e=angular.copy(a.scenarios);delete e.bot_id,delete e.scenario_id,delete e.status,b.delete(d.host+"/scenario/"+c.scenario).then(function(b){b.data.status?(a.$emit("getBot"),g.go("bot-abstract.bot-detail",{id:c.id})):alert("Can't delete these scenario")},function(a){console.error(a)})}},a.deleteComponent=function(b){a.scenarios.steps.splice(b,1)},a.saveStep=function(){if(u())if(a.step.name){var b={oldStep:a.oldStep,step:a.step};p.close(b)}else r.error({delay:6e4,message:"Step name is required"})},a.removeStep=function(){p.close({status:"delete",index:o.steps.indexOf(n),step:n})},a.closeModal=function(){p.close()},a.addPhrase=function(b,c){void 0===a.step.properties.phrases&&(a.step.properties.phrases=[]),a.step.properties.phrases.push("")},a.editPhrase=function(b,c,d){void 0===a.step.properties.phrases&&(a.step.properties.phrases=[]),a.step.properties.phrases[c]=d},a.addCustomFilter=function(b,c){a.step.properties.filters.push({field:"",condition:"",value:""})},a.filterValue=function(a){isNaN(String.fromCharCode(a.keyCode))&&a.preventDefault()},a.deleteCustomFilter=function(b,c){a.step.properties.filters.splice(c,1)},a.deleteEntity=function(b,c){a.step.properties.items.splice(c,1)},a.deleteSwitchCondition=function(b,c,d){a.step.properties.switch[c].conditions.splice(d,1)},a.scenarioChanged=function(b){var c=a.step.properties.scenario,d=a.stepsList[c][0].name;a.step.properties.step=d},a.stepChanged=function(b){a.step.properties.step=a.scenario.step},a.findScenarioIdByName=function(b){for(var c=0;c<a.scenariosList.length;c++)if(a.scenariosList[c].name===b)return a.scenariosList[c].value;return b},a.findStepIdByName=function(b,c){if(!b||!c)return b;for(var d=0;d<a.stepsList[c].length;d++)if(a.stepsList[c][d].name===b)return a.stepsList[c][d].id;return b},b.get(d.host+"/scenarios/"+c.id).then(function(b){b.data&&b.data.status&&b.data.scenarios.forEach(function(b){a.editRoute?a.scenarios.name!=b.name&&a.scenariosList.push({name:b.name,value:b.scenario_id}):a.scenariosList.push({name:b.name,value:b.scenario_id})})}),a.getMailVariables=function(b){if(!b||!a.mailList.length)return[];for(var c=0;c<a.mailList.length;c++)if(a.mailList[c].name==b)return a.mailList[c].variables?a.mailList[c].variables:[]},a.deleteMailVariables=function(a){delete a.properties.scope},v()}]),angular.module("brnaiApp").controller("CreateEntityCtrl",["$scope","Auth","getDomainData","$http","$state","$stateParams","learningService","Notification",function(a,b,c,d,e,f,g,h){a.loading=!1,a.addEntity=function(){var b={bot_id:f.id,name:a.entity,values:[]};g.createEntity(b).then(function(b){b.data.status?(h.success({message:"Entity "+b.data.entity.name+" successfully created"}),a.entity="",e.go("learning-entities",{id:f.id})):alert(response.data.error)})}}]),angular.module("brnaiApp").directive("scrollOnClick",function(){return{restrict:"A",link:function(a,b,c){var d=c.href;b.on("click touchstart",function(a){a.preventDefault();var c;c=d?$(d):b,$("html, body").animate({scrollTop:c.offset().top},"slow")})}}}),angular.module("brnaiApp").directive("srefOnClick",function(){return{restrict:"A",link:function(a,b,c){var d=c.cref;b.on("click touchstart",function(a){a.preventDefault(),window.open(d)})}}}),angular.module("brnaiApp").directive("formTitle",["$window",function(a){return{restrict:"A",link:function(b,c,d){function e(a,b){j.css("left",a),j.css("top",b-50)}var f,g,h,i=!1,j=angular.element('<div id="form-label">'+d.formTitle+"</div>");c.bind("focus",function(){angular.element(j).insertBefore(document.getElementById("app")),f=c[0].getBoundingClientRect(),document.getElementsByClassName("modal").length?(h=document.getElementsByClassName("modal"),i=!0):h=a,g||(g=!0),e(f.left,f.top),angular.element(h).bind("scroll",function(a){f
10=c[0].getBoundingClientRect(),g&&e(f.left,f.top),b.$apply()})}).bind("blur",function(){var a=document.getElementById("form-label");a&&a.parentNode.removeChild(a),angular.element(h).unbind("scroll")}),b.$on("$destroy",function(){if(angular.element(h).unbind("scroll"),i){var a=document.getElementById("form-label");a&&a.parentNode.removeChild(a),angular.element(h).unbind("scroll")}})}}}]),angular.module("brnaiApp").directive("accordionTest",["$compile","$timeout",function(a,b){return{restrict:"AEC",controller:["$scope",function(a){a.current=null,a.height=[],a.zero={height:0},a.toggle=function(b){a.current=a.current===b?null:b}}],link:function(c,d,e){var f=e.itemSelector||"li",g=e.titleSelector||"h2",h=e.contentSelector||"div";b(function(){var b=d[0].querySelectorAll(f);for(var e in b)if(angular.isObject(b[e])){var i=b[e].querySelectorAll(g)[0],j=b[e].querySelectorAll(h)[0];c.height.push({height:j.offsetHeight+10+"px"}),angular.element(b[e]).addClass("item").attr({"ng-class":"{'open':current == "+e+"}"}),angular.element(i).addClass("title").attr("ng-click","toggle("+e+")"),angular.element(j).addClass("content").attr({"ng-style":"current == "+e+"?height["+e+"]:zero"})}a(angular.element(d).contents())(c)})}}}]),angular.module("brnaiApp").controller("CreatescenarioCtrl",["$scope","Auth","$stateParams","getDomainData","$http","$state","scenario","$uibModalInstance",function(a,b,c,d,e,f,g,h){function i(b){var c=!1;return a.scenario.roles.forEach(function(a){if(a===b)return c=!0}),c}function j(){e.get(d.host+"/roles/"+c.id).then(function(b){b.status&&(a.roles=b.data.roles,a.roles.unshift({name:null,title:"Select role for adding"}))})}a.guiRoute="gui"==f.current.name,a.selectedRole=null,a.roles=[],a.scenario=angular.copy(g)||{bot_id:c.id,account_id:b.getUser().account_id,name:"",template:"visual",keywords:"",intents:[],steps:[]},a.saveScenario=function(){a.scenario.keywords.length&&a.scenario.keywords.indexOf(",")>-1&&(a.scenario.keywords=a.scenario.keywords.split(","),a.scenario.keywords.map(function(a){return a.trim()})),a.updateScenario(),h.close(a.scenario)},a.closeModal=function(){h.close()},a.testScenario=function(){h.close("test")},a.updateScenario=function(){e.put(d.host+"/scenario/"+c.scenario,a.scenario).then(function(a){console.log(a)})},a.deleteScenario=function(){confirm("Are you sure?")&&e.delete(d.host+"/scenario/"+c.scenario).then(function(a){a.data.status&&(h.close(),f.go("bot-abstract.bot-functions",{id:c.id}))})},a.nextStep=function(){a.scenario.keywords.length&&a.scenario.keywords.indexOf(",")>-1&&(a.scenario.keywords=a.scenario.keywords.split(","),a.scenario.keywords.map(function(a){return a.trim()})),e.post(d.host+"/scenario",a.scenario).then(function(a){console.log(a),a&&a.data&&a.data.status?(h.close(),f.go("gui",{id:c.id,scenario:a.data.scenario_id})):console.log(a)})},a.addRole=function(){i(a.selectedRole)||a.scenario.roles.push(a.selectedRole),a.selectedRole=null},a.removeRole=function(b){a.scenario.roles.splice(b,1)},j()}]),angular.module("brnaiApp").service("botService",["$http","getDomainData","$rootScope",function(a,b,c){var d={};return{getBots:function(c,d){var c=c||1e3,d=d||0;return a.get(b.host+"/bots?limit="+c+"&offset="+d)},massDeactivate:function(c){if(c.length)return a.post(b.host+"/bots/bulk/deactivate",{ids:c}).then(function(a){return a.data})},massActivate:function(c){if(c.length)return a.post(b.host+"/bots/bulk/activate",{ids:c}).then(function(a){return a.data})},massDelete:function(c){if(c.length)return a.post(b.host+"/bots/bulk/delete",{ids:c}).then(function(a){return a.data})},getAdminBots:function(c){var d="?name="+c.name+"&limit="+c.limit+"&offset="+c.page*c.limit;return c.portal&&(d+="&portal_id="+c.portal),c.active&&(d+="&active="+c.active),c.user&&(d+="&account_id="+c.user),c.provider&&(d+="&provider="+c.provider),c.sort&&(d+="&sort="+c.sort),a.get(b.host+"/bots/search"+d).then(function(a){return a.data.status&&a.data.bots.length?a.data:{bots:[],total:0}})},getConnectionsImages:function(){return{messenger:"images/socials/messenger.png",telegram:"images/socials/telegram.png",widget:"images/socials/widget.png",kik:"images/socials/kik.png",slack:"images/socials/slack.png",line:"images/socials/line.png",skype:"images/socials/skype.png",wechat:"images/socials/we-chat.png",viber:"images/socials/viber.png",twitter:"images/socials/twitter.png",instagram:"images/socials/instagram.png",email:"images/socials/email.png",linkedin:"images/socials/linkedin.png",techfunder:"images/tf.png",reddit:"images/socials/reddit.png",pinterest:"images/socials/pinterest.png",twilio:"images/socials/twilio.svg"}},getBot:function(c){return a.get(b.host+"/bot/"+c)},updateSingletonBot:function(e){a.get(b.host+"/bot/"+e).then(function(a){d=a.data,c.$broadcast("singletonBot:updated",d)})},getSingletonBot:function(){return d},getBotSocials:function(c){return a.get(b.host+"/connections/"+c)},setProtection:function(c,d,e,f){return a.post(b.host+"/bot/settings/"+f,{protection:{active:c,code:d,question:e}})},setMonitorings:function(c,d){return a.post(b.host+"/bot/settings/"+d,{monitoring:c})},getBotNickname:function(a){var b=a.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g,"");return b=b.toLowerCase(),b=b.replace(/ /g,"_")},getBotToken:function(c){return a.get(b.host+"/bot/token/"+c)},saveWebhook:function(c,d){return a.post(b.host+"/bot/webhook/"+c,d)},saveIntents:function(c,d,e){return a.post(b.host+"/bot/settings/"+c,{intents:{parse:d,train:e}})},getFilters:function(){return a.get(b.host+"/bots/filters").then(function(a){return a.data.status?a.data.filters:{portals:[],roles:[],plans:[]}})}}}]),angular.module("brnaiApp").service("portalService",["getDomainData","$http",function(a,b){var c=this;return c.service={getPortalsList:function(){return b.get(a.host+"/portals").then(function(a){return!!a.data.status&&a.data.portals})},createPortal:function(c){return b.post(a.host+"/portal",c).then(function(a){return a.data.status})},updatePortal:function(c){return b.put(a.host+"/portal/"+c.portal_id,c).then(function(a){return a.data.status})},deletePortal:function(c){return b.delete(a.host+"/portal/"+c).then(function(a){return a.data.status})},setPortalIcon:function(c,d,e){return b.post(a.host+"/portal/image/"+c+"/"+d,e).then(function(a){return!!a.data.status&&a.data.image})},deletePortalIcon:function(c,d){return b.delete(a.host+"/portal/image/"+c+"/"+d).then(function(a){return a.data.status})},getPortal:function(d,e){var f="id"==e?"?portal_id="+d:"?domain="+d;return b.get(a.host+"/portal"+f).then(function(a){return!!a.data.status&&(c.service.portalData=a.data.portal,c.service.portalData)})},setPortal:function(a){c.service.portalData=a},portalData:{}},c.service}]),angular.module("brnaiApp").controller("PortalsCtrl",["$scope","portalService","$uibModal",function(a,b,c){function d(){b.getPortalsList().then(function(b){a.portals=b,a.loader=!1})}a.portals=[],a.loader=!0,d(),a.createDomain=function(){b.createPortal(a.newDomain).then(function(b){b?(Notification.success({message:"Portal "+a.newDomain.name+" successfully created"}),a.newDomain={opened:!1,default:!1},d()):Notification.error({delay:6e4,message:"Unavailable to create new portal"})})}
10,a.openModal=function(){c.open({templateUrl:"views/addportal.html",controller:"AddportalCtrl",windowClass:"large-modal no-border-modal"}).result.then(function(a){a&&d()},function(){})}}]),angular.module("brnaiApp").controller("LearningImportCtrl",["$http","$scope","getDomainData","Upload","$stateParams","Auth","$state","Notification",function(a,b,c,d,e,f,g,h){b.progress=0,b.uplStatus=!1,b.upload=function(a){if(null==a)return h.error({delay:6e4,message:"You can upload only .csv files"}),void(b.uplStatus=!1);d.upload({url:c.host+"/intent/import/"+e.id,data:{file:a}}).then(function(a){a.data.status?(b.uplStatus=!0,h.success({message:"File was successfully uploaded"})):(b.uplStatus=!1,h.error({delay:6e4,message:a.data.error}))},function(a){},function(a){b.progress=parseInt(100*a.loaded/a.total)})}}]),angular.module("brnaiApp").directive("uiNiceSelect",function(){var a=function(a,b){var c=!1;return angular.forEach(a.find("option"),function(a){$(a).attr("value").toString()==c.toString()&&(c=!0)}),c},b=function(a,b){var c=a.find('[value="'+b+'"]'),d=(c.data("display")||c.text(),a.next());d.find(".current").text(b),d.find(".list .selected").removeClass("selected"),d.find('.list [data-value="'+b+'"]').addClass("selected")};return{restrict:"A",require:"ngModel",scope:{ngModel:"="},link:function(c,d,e,f){f.render=function(){var c=f.$modelValue;if(null!==c&&""!==c&&a(d,c))throw new Error("ng-Model value can't be null, and must be a valid select element value");b(d,c)},c.$watch("ngModel",function(){f.render()}),c.$watch(function(){return d[0].innerText},function(a,b){d.niceSelect("update")}),d.niceSelect()}}}),angular.module("brnaiApp").controller("PortalDetailCtrl",["$scope","$state","Notification","portalService","getDomainData","Upload","pagesService","$stateParams","$http",function(a,b,c,d,e,f,g,h,i){function j(){i.get(e.host+"/subscription-plans/"+h.id).then(function(b){b.status&&(a.subscription_plans=b.data.plans)},function(a){})}function k(){i.get(e.host+"/bots/templates/all").then(function(b){b.status&&(p=b.data.bots),a.default_botsList=l(p,a.portal.properties.default_bots),a.portal.properties.default_bots||(a.portal.properties.default_bots=[])},function(a){})}function l(a,b){if(!b)return a;var c=[];return angular.forEach(a,function(a,d){for(var e=-1,f=0;f<b.length;f++)if(a.bot_id===b[f].bot_id){e=f;break}-1==e&&c.push(a)}),c}function m(b){for(var c=0;c<a.portal.properties.default_scenarios.length;c++)if(a.portal.properties.default_scenarios[c]==b)return{index:c,isExsist:!0};return{index:-1,isExsist:!1}}function n(){a.newPage={name:"",language:"en",content:"New page",portal_id:h.id}}function o(){g.getPages(h.id).then(function(b){a.portalPages=b})}a.payment_data_saved=!1,a.portalPages=[],a.subscription_plans=[],a.subscription_plan={name:"",title:"",description:"",properties:{bots:""},portal_id:"",price:"",interval:"",active:!0,is_default:!1},a.defaultScenarios={startValue:!1,defaultValue:!1},a.default_botsList=[],a.newDefaultBot={name:"",bot_id:""},a.attributes={},a.modes=[{value:"free",title:"Free"},{value:"balance",title:"Balance"},{value:"subscription",title:"Subscription"}],j();var p=[];i.get(e.host+"/portal/"+h.id).then(function(b){b.status&&(a.portal_mask=b.data.portal.properties),a.attributes=a.portal_mask.users.schema,a.portal=b.data.portal,a.portal.properties.default_scenarios&&a.portal.properties.default_scenarios.forEach(function(b){"start"==b&&(a.defaultScenarios.startValue=!0),"default"==b&&(a.defaultScenarios.defaultValue=!0)}),a.$watch("portal.properties.balance_threshold",function(b){b>0&&(a.portal.properties.balance_threshold=-b)}),k()},function(a){}),a.defaultScenariosChange=function(){a.portal.properties.default_scenarios||(a.portal.properties.default_scenarios=[]),setTimeout(function(){var b=m("start"),c=m("default");a.defaultScenarios.startValue?b.isExsist||a.portal.properties.default_scenarios.push("start"):b.isExsist&&a.portal.properties.default_scenarios.splice(b.index,1),a.defaultScenarios.defaultValue?c.isExsist||a.portal.properties.default_scenarios.push("default"):c.isExsist&&a.portal.properties.default_scenarios.splice(c.index,1),a.$apply()},10)},a.addDefaultBot=function(){a.portal.properties.default_bots.push(a.newDefaultBot),a.newDefaultBot={name:"",bot_id:""},a.default_botsList=l(p,a.portal.properties.default_bots)},a.deleteDefaultBot=function(b){a.portal.properties.default_bots.splice(b,1),a.default_botsList=l(p,a.portal.properties.default_bots)},a.addPlan=function(){a.subscription_plan.portal_id=a.portal.portal_id,i.post(e.host+"/subscription-plan",a.subscription_plan).then(function(a){if
10(a.data.status){$("#addIntentModal").modal("hide"),j()}else alert(a.data.error)})},a.editPlan=function(b,c){i.put(e.host+"/subscription-plan/"+b,a.subscription_plans[c]).then(function(a){if(1==a.data.status){$("#editPlanModal"+b).modal("hide"),j()}},function(a){})},a.deletePlan=function(a){confirm("Are you sure you want to delete plan?")&&i.delete(e.host+"/subscription-plan/"+a).then(function(a){a.data&&a.data.status&&1==a.data.status?j():alert("Something goes wrong...")},function(a){})},a.langs=[{name:"EN",value:"en"},{name:"DE",value:"de"}],a.newPage=null,a.uploadFile=function(b,g){null!=g&&f.upload({url:e.host+"/portal/image/"+a.portal.portal_id+"?type="+b,data:{file:g,name:g.name}}).then(function(e){var f="",g="",h="";if("logo"===b)a.portal.logo=e.data.name,f=e.data.image;else if("favicon"===b&&(a.portal.favicon=e.data.name,g=e.data.image),"widgets.chat.image"===b&&(a.portal.widgets.chat.image=e.data.name,h=e.data.image),"string"==typeof a.portal.logo){var i=a.portal.logo.split("/");f=a.portal.logo,a.portal.logo=i[i.length-1]}if("favicon"!==b&&"string"==typeof a.portal.favicon){var j=a.portal.favicon.split("/");g=a.portal.favicon,a.portal.favicon=j[j.length-1]}if("widgets.chat.image"!==b&&"string"==typeof a.portal.widgets.chat.image){var k=a.portal.widgets.chat.image.split("/");h=a.portal.widgets.chat.image,a.portal.widgets.chat.image=k[k.length-1]}d.updatePortal(a.portal).then(function(b){a.portal.logo=f,a.portal.favicon=g,a.portal.widgets.chat.image=h,b?c.success({message:"Portal "+a.portal.name+" successfully updated"}):c.error({delay:6e4,message:"Can't update portal"})})},function(a){})},a.onSubmit=function(){a.portal_mask.users.schema=a.attributes;const e=JSON.parse(JSON.stringify(a.portal));delete e.logo,delete e.favicon,delete e.widgets.chat.image,e.properties.users=a.portal_mask.users,d.updatePortal(e).then(function(d){d?(a.payment_data_saved=!0,c.success({message:"Portal "+a.portal.name+" successfully updated"})):c.error({delay:6e4,message:"Can't update portal"}),b.go("portals")})},a.deletePortal=function(){confirm("Are you sure, you want to delete portal?")&&d.deletePortal(a.portal.portal_id).then(function(a){a?(c.success({message:"Portal successfully deleted"}),b.go("portals")):c.error({delay:6e4,message:"Can't delete portal"})})},a.deletePage=function(b){confirm("Confirm the action")&&g.deletePage(b,a.portal.portal_id).then(function(d){d?(c.success({message:"Page "+b.name+"successfully deleted"}),a.portalPages.splice(a.portalPages.indexOf(b),1)):c.error({delay:6e4,message:"Can't delete page"})})},a.addPage=function(b){i.post(e.host+"/page",a.newPage).then(function(b){b?(c.success({message:"Page "+a.newPage.name+" successfully created"}),n(),o(),$("#addPage").modal("hide")):c.error({delay:6e4,message:"Can't create page"})})},a.changeMode=function(){switch(delete a.portal.properties.free_mode,a.portal.properties.mode){case"free":delete a.portal.properties.trial,delete a.portal.properties.balance_threshold,delete a.portal.properties.stop_delay;break;case"balance":delete a.portal.properties.trial;break;case"subscription":delete a.portal.properties.balance_threshold,delete a.portal.properties.stop_delay}},n(),o(),a.deleteAttribute=function(b){if(confirm("Are you sure, you want to delete field?")){delete a.attributes[b],a.portal_mask.users.schema=a.attributes;const d=JSON.parse(JSON.stringify(a.portal));delete d.logo,delete d.favicon,delete d.widgets.chat.image,d.properties.users=a.portal_mask.users,i.put(e.host+"/portal/"+h.id,d).then(function(a){a.status&&c.success({message:'Field "'+b+'" was successfully deleted'})})}}}]),angular.module("brnaiApp").service("pagesService",["getDomainData","$http",function(a,b){return{getPages:function(c){return b.get(a.host+"/pages/"+c).then(function(a){return a.data.status?(angular.forEach(a.data.pages,function(a){a.url=window.location.hostname+"/edit/"+a.name+"/"+a.language}),a.data.pages):[]})},deletePage:function(c,d){return b.delete(a.host+"/page/"+c.name+"/"+c.language+"?portal_id="+d).then(function(a){return a.data.status})}}}]),angular.module("brnaiApp").controller("AddportalCtrl",["getDomainData","portalService","$uibModalInstance","$scope","Notification",function(a,b,c,d,e){d.newDomain={default:!1},d.onSubmit=function(){b.createPortal(d.newDomain).then(function(a){a?(e.success({message:"Portal successfully created"}),c.close("created")):e.error({delay:6e4,message:"Can't create portal"})})},d.closeModal=function(){c.close()}}]),angular.module("brnaiApp").controller("UsersCtrl",["usersService","$scope","$uibModal","Notification","Auth",function(a,b,c,d,e){function f(c){b.inProgress=!0,a.getUsers(b.filter).then(function(a){b.inProgress=!1,b.countUsers=a.total,a.users&&a.users.length?b.users.push.apply(b.users,a.users):b.filter.lastPage=!0})}function g(){a.getCountUsers().then(function(a){b.countUsers=a})}function h(){a.getFilters().then(function(a){b.filters=a})}function i(){b.filter={name:"",limit:50,page:0,lastPage:!1}}b.inProgress=!0,b.users=[],b.filters={},b.countUsers=0,b.selectedFilters={portals:{},roles:{},plans:{}},b.filter={name:"",portal:"",group_id:"",plan:"",limit:50,page:0,lastPage:!1,sort:"-created_at"},g(),f(),h(),b.isAdmin=function(){return e.isAdmin()},b.changeSort=function(){b.filter.sort="created_at"===b.filter.sort?"-created_at":"created_at",b.filter.page=0,b.filter.lastPage=!1,b.loading=!0,b.users=[],f()},b.loadMore=function(){b.inProgress||b.filter.lastPage||(b.filter.page++,f())},b.filterUsers=function(){b.filter.page=0,b.filter.lastPage=!1,a.getUsers(b.filter).then(function(a){b.inProgress=!1,b.users=a.users,b.countUsers=a.total,a.users&&a.users.length||(b.filter.lastPage=!0)})},b.searchUsers=function(c){13===c.keyCode&&(b.filter.page=0,b.filter.lastPage=!1,b.loading=!0,a.getUsers(b.filter).then(function(a){b.loading=!1,b.inProgress=!1,b.users=a.users,b.countUsers=a.total,a.users&&a.users.length||(b.filter.lastPage=!0)}))},b.addUser=function(){c.open({templateUrl:"views/createuser.html",controller:"CreateuserCtrl",windowClass:"large-modal no-border-modal create-new-user",resolve:{bot:function(){}}}).result.then(function(a){i(),f()},function(a){})},b.deleteUser=function(c){confirm("Are you sure, you want to delete user?")&&a.deleteUser(c.id).then(function(a){a.data.status&&(b.users.splice(b.users.indexOf(c),1),d.success({message:"User "+c.name+" successfully deleted"}))})},b.getBalance=function(a){return a.plan.balance<0?"- $"+Math.abs(a.plan.balance):a.plan.balance>0?"$"+Math.abs(a.plan.balance):0},b.editRole=function(a){console.log(a),c.open({templateUrl:"views/edit-role.html",windowClass:"large-modal no-border-modal",controller:["$scope","Upload","$state","$stateParams","getDomainData","$uibModalInstance","$http",function(b,c,e,f,g,i,j){a?(b.role=a.value,j.get(g.host+"/group/"+a.value).then(function(a){a.data&&(b.group=a.data) 11})):j.get(g.host+"/groups").then(function(a){a.data&&(b.group=a.data.groups[1],b.group.name="")}),b.getResourceName=function(a){switch(a){case"clients":return"CRM & Dialogs";case"tools":return"Growth";default:return a}},b.toggleSelection=function(a,c,d){b.group.permissions[a][c]=1!=d},b.saveRole=function(){j.put(g.host+"/group/"+a.value,b.group).then(function(a){a.data.status?(i.close({status:"ok",data:null}),d.success({message:"Group successfully updated"}),h()):alert(a.data.error)})},b.createRole=function(){j.post(g.host+"/group",b.group).then(function(a){a.data.status?(i.close({status:"ok",data:null}),d.success({message:"Group successfully created"}),h()):alert(a.data.error)})},b.deleteRole=function(){j.delete(g.host+"/group/"+a.value).then(function(a){a.data&&a.data.status&&1==a.data.status?(i.close({status:"ok",data:null}),d.success({message:"Group successfully deleted"}),h()):alert("Something goes wrong...")},function(a){})},b.close=function(){i.close({status:"ok",data:null})}}]}).result.then(function(a){},function(a){})}}]),angular.module("brnaiApp").service("usersService",["getDomainData","$http",function(a,b){return{getUsers:function(c){var d="?name="+c.name+"&limit="+c.limit+"&offset="+c.page*c.limit+"&group_id="+c.group_id+"&portal_id="+c.portal+"&plan="+c.plan+"&sort="+c.sort;return b.get(a.host+"/users/search"+d).then(function(a){return a.data.status&&a.data.users.length?a.data:[]})},changePlan:function(c,d){return b.post(a.host+"/user/"+c+"/plan/"+d).then(function(a){return a?a.data:a})},getUser:function(c){return b.get(a.host+"/user/"+c).then(function(a){return a.data.status?a.data:{}})},getUserMe:function(){return b.get(a.host+"/user/me").then(function(a){return a.data.status?a.data:{}})},getTransactions:function(c,d){var e="?limit="+d.limit+"&offset="+d.page*d.limit;return b.get(a.host+"/user/"+c+"/billing/transactions"+e).then(function(a){return a.data.status&&a.data.transactions.length?a.data.transactions:[]})},updateUser:function(c){return b.put(a.host+"/user/"+c.id,c).then(function(a){return a?a.data:a})},deleteUser:function(c){return b.delete(a.host+"/user/"+c).then(function(a){return a})},addUser:function(c){return b.post(a.host+"/tfid/register",c).then(function(a){return a.data.status})},getFilters:function(){return b.get(a.host+"/users/filters").then(function(a){return a.data.status?a.data.filters:{portals:[],groups:[],plans:[]}})},getCountUsers:function(){return b.get(a.host+"/users/search?limit=99999").then(function(a){return a.data.status&&a.data.users.length?a.data.users.length:0})},getPortals:function(){return b.get(a.host+"/portals").then(function(a){return a.data.status&&a.data.portals.length?a.data.portals:[]})},getRoles:function(){return[{name:"admin",title:"Administrator"},{name:"subadmin",title:"Sub-Administrator"},{name:"user",title:"Regular User"}]}}}]),angular.module("brnaiApp").controller("CreateuserCtrl",["usersService","$scope","Notification","$uibModalInstance",function(a,b,c,d){b.user={email:"",password:"",nickname:"",firstname:"",lastname:"",portal:"",group_id:""},b.portals=[],b.groups=[],a.getPortals().then(function(a){a&&angular.forEach(a,function(a,c){b.portals.push({service_name:a.service_name,name:a.name})})}),a.getFilters().then(function(a){b.groups=a.groups}),b.onSubmit=function(){a.addUser(b.user).then(function(a){a?c.success({message:"User "+b.user.firstname+" "+b.user.lastname+" successfully added"}):c.error({delay:6e4,message:"Cant add user"}),d.close("success")})},b.closeModal=function(){d.close()},$(".flex-col-small").css("background","red")}]),angular.module("brnaiApp").factory("accountChanel",["getDomainData","Notification","Auth","$rootScope",function(a,b,c,d){var e={};return d.$on("getPortalInfo",function(b,d){if(angular.isDefined(c.getUser())){new Faye.Client(a.faye,{timeout:20,retry:5}).subscribe("/alert_"+c.getUser().account_id,function(a){e.message=a.message,e.title=a.bot_name+" bot",e.type="info"===a.type?"success":"error"})}}),{subscribeChannel:function(){return c.getUser()}}}]),angular.module("brnaiApp").directive("slideMenu",["$document",function(a){return{templateUrl:"views/slide-menu.html",restrict:"EA",transclude:!0,controlller:function(){},scope:{align:"@",visibility:"="}
11,link:function(b,c,d){var e=function(a){if(!$("body").hasClass("modal-open")){var d=c[0].contains(a.target),e=c[0]==a.target;d||e||b.$apply(function(){$(a.target).is("input")?b.visibility=!0:b.visibility=!1})}};b.config={autoHideScrollbar:!1,theme:"minimal",advanced:{updateOnContentResize:!0},scrollInertia:0},b.$watch("visibility",function(b,c){b!==c&&!0===b?(a.bind("click",e),a.bind("touchstart",e)):b!==c&&!1===b&&(a.unbind("click",e),a.unbind("touchstart",e))})}}}]),angular.module("brnaiApp").service("broadcastService",["$http","getDomainData",function(a,b){return{getBroadcasts:function(c){return a.get(b.host+"/broadcasts/"+c).then(function(a){return a.data.broadcasts})},deleteBroadcast:function(c){return a.delete(b.host+"/broadcast/"+c).then(function(a){return a.data.status})}}}]),angular.module("brnaiApp").service("variablesService",["$http","getDomainData",function(a,b){return{getVariables:function(c){return a.get(b.host+"/variables/"+c).then(function(a){return a.data.status?a.data.variables:[]})},getVariable:function(c,d){return a.get(b.host+"/variable/"+c+"/"+d).then(function(a){return a.data.status?a.data:{}})},updateVariables:function(c,d){return a.put(b.host+"/variables/"+c,d).then(function(a){return a.data.status})},updateVariable:function(c,d,e){return a.put(b.host+"/variable/"+c+"/"+d,e).then(function(a){return a.data.status})}}}]),angular.module("brnaiApp").controller("VariablesCtrl",["variablesService","$scope","$stateParams","$uibModal","Notification",function(a,b,c,d,e){function f(a,b){for(var c=0;c<a.length;c++)if(angular.equals(a[c],b))return c;return-1}b.variables=[],b.loading=!0,b.bot_id=c.id,a.getVariables(c.id).then(function(a){b.loading=!1,b.variables=a}),b.deleteVariable=function(d){var g=angular.copy(b.variables);g.splice(f(g,d),1),a.updateVariables(c.id,{variables:g}).then(function(a){a?(e.success({message:"Variable successfully deleted"}),b.variables.splice(b.variables.indexOf(d),1)):e.error({delay:6e4,message:"Cant delete variable"})})},b.updateVariables=function(){a.updateVariables(c.id,{variables:b.variables})},b.openModal=function(){d.open({templateUrl:"views/variablesmodal.html",controller:"VariablesmodalCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations,variables:function(){return angular.copy(b.variables)},botId:function(){return c.id}}}).result.then(function(a){angular.isDefined(a)&&b.variables.push(a)})}}]),angular.module("brnaiApp").controller("VariablesmodalCtrl",["variablesService","$scope","$uibModalInstance","Notification","variables","botId",function(a,b,c,d,e,f){b.variables=e,b.variable={bot_id:f,name:"",type:"private",value:""},b.onSubmit=function(){b.variables.push(b.variable),a.updateVariables(f,{variables:b.variables}).then(function(a){a?(d.success({message:"Variable successfully added"}),c.close(b.variable)):(d.error({delay:6e4,message:"Cant add variable"}),c.close())})},b.closeModal=function(){c.close()}}]),angular.module("brnaiApp").controller("StoreUsersCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification",function(a,b,c,d,e,f,g){a.loading=!0,a.inProgress=!1,a.typeFilters=[{filter:1,name:"One"},{filter:2,name:"Two"}],a.searchUserModel={id:"",username:"",first_name:"",last_name:"",email:"",type:"",status:""},a.selectedType=a.typeFilters[0],a.statusFilters=[{filter:"active",name:"Active"},{filter:"not_active",name:"Not active"}],a.selectedStatus=a.statusFilters[0],a.options={limit:30,offset:0,page:0,lastPage:!1},a.users=c.getUsers(1),a.loadMore=function(){if(!a.inProgress&&!a.options.lastPage){c.getUsers(a.users[a.users.length-1].id+1).forEach(function(b){a.users.push(b)})}},a.searchUser=function(){if(""==a.searchUserModel.id&&""==a.searchUserModel.type)return void(a.users=c.getUsers(1));var b=a.users;a.users=[],b.forEach(function(b){b.id!=a.searchUserModel.id&&b.type!=a.searchUserModel.type.filter||a.users.push(b)})}}]),angular.module("brnaiApp").controller("StoreCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification","$state","$window",function(a,b,c,d,e,f,g,h,i){a.goBack=function(){h.goBack()}}]),angular.module("brnaiApp").service("storingservice",["$http","getDomainData",function(a,b){return{createPayments:function(c,d){return a.put(b.host+"/store/"+c,d).then(function(a){return a?a.data:a})},getSlug:function(a,b){var c=/\s+/g;b||(b={});var d="Ð-Яа-ÑA-Za-z0-9_ -";b.alsoAllow&&(d=b.alsoAllow+d);var e,f,g=new RegExp("[^"+d+"]","g"),h=b.maintainCase||!1,i=b.replacement||"-",j=b.smartTrim,k=!1!==b.decode;return"string"!=typeof a?"":(h||(a=a.toLowerCase()),k&&(a=decodeURIComponent(a)),e=a.trim().replace(g,"").replace(c,i),j&&e.length>j&&(f=e.charAt(j)===i,e=e.slice(0,j),f||(e=e.slice(0,e.lastIndexOf(i)))),e)},getUsers:function(a){for(var b=10+a,c=[];a<b;a++)c.push({id:a,username:"username"+a,first_name:"firstname"+a,last_name:"lastname"+a,email:"email@email."+a,status:a%2?"not_active":"active",type:a%2?1:2});return c},getOffers:function(a){for(var b=10+a,c=[];a<b;a++)c.push({id:a,merchant:"username"+a,category:a%2?"coupe":"sedan",brand:a%2?"BMW":"Audi",model:a%2?"X4":"Z3",km:100+a,price:25478+a,frpc:a%2?3:2,frm:Math.round(453535/a),fp:72+a,ffi:23e3+a,fer:a%2?1:0,ff:a%2?0:1});return c},getOrderStatuses:function(){return[{name:"new",title:"New",color:"#94cb25"},{name:"completed",title:"Completed",color:"#989898"},{name:"shipped",title:"Shipped",color:"#68beeb"},{name:"canceled",title:"Canceled",color:"#fd6a6a"}]},getOrderStatusesView:function(){return{new:{name:"new",title:"New",color:"#94cb25"},completed:{name:"completed",title:"Completed",color:"#989898"},shipped:{name:"shipped",title:"Shipped",color:"#68beeb"},canceled:{name:"canceled",title:"Canceled",color:"#fd6a6a"}}}
11,getSchemaTypes:function(){return[{name:"string",title:"String"},{name:"number",title:"Number"},{name:"boolean",title:"Boolean"},{name:"date",title:"Date"},{name:"file",title:"File"},{name:"image",title:"Image"},{name:"color",title:"Color"},{name:"location",title:"Location"}]},getAttributesTypes:function(){return[{name:"string",title:"String"},{name:"mixed",title:"Mixed"},{name:"number",title:"Number"},{name:"boolean",title:"Boolean"},{name:"date",title:"Date"},{name:"file",title:"File"},{name:"image",title:"Image"},{name:"color",title:"Color"},{name:"location",title:"Location"}]},getCategories:function(c){return a.get(b.host+"/categories/"+c).then(function(a){return a.data})},createMerchant:function(c,d){return a.post(b.host+"/merchant/create/"+c,d).then(function(a){return a?a.data:a})},deleteMerchant:function(c){return a.delete(b.host+"/merchant/"+c).then(function(a){return a})},getMerchants:function(c,d,e){var f=[],g="";for(var h in e)e.hasOwnProperty(h)&&f.push(h+"="+e[h]);return f.length&&(g="&"+f.join("&")),a.get(b.host+"/merchants/"+c+"?limit="+d.limit+"&offset="+d.page*d.limit+g).then(function(a){return a.data})},getMerchant:function(c){return a.get(b.host+"/merchant/"+c).then(function(a){return a.data})},updateMerchant:function(c,d){return a.put(b.host+"/merchant/"+c,d).then(function(a){return a?a.data:a})},createCategory:function(c){return a.post(b.host+"/category",c).then(function(a){return a?a.data:a})},deleteCategory:function(c){return a.delete(b.host+"/category/"+c).then(function(a){return a})},getCategory:function(c,d){return a.get(b.host+"/category/"+c+"/"+d).then(function(a){return a.data})},updateCategory:function(c){return a.put(b.host+"/category/"+c.category_id,c).then(function(a){return a?a.data:a})},createCategoryAttributeValue:function(c,d,e){return a.post(b.host+"/category/"+c+"/attribute/"+d,e).then(function(a){return a.data})},deleteCategoryAttributeValue:function(c,d,e,f){var g=b.host+"/category/"+c+"/attribute/"+d+"?";return console.log(e),g+="location"==f?"value[0]="+e.coordinates[0]+"&value[1]="+e.coordinates[1]:"value="+e,a.delete(g).then(function(a){return a.data})},searchItem:function(a,b,c){return a.filter(function(a){return a[b]==c})},createProduct:function(c){return a.post(b.host+"/product",c).then(function(a){return a.data})},getProducts:function(c,d,e,f){var g=b.host+"/products/"+c+"?limit="+e.limit+"&offset="+e.page*e.limit+"&category="+d;return void 0!=f&&angular.forEach(f,function(a,b){g+="&"+b+"="+a}),a.get(g).then(function(a){return a.data})},getProduct:function(c,d){return a.get(b.host+"/product/"+c+"/"+d).then(function(a){return a.data})},updateProduct:function(c){return a.put(b.host+"/product/"+c.product_id,c).then(function(a){return a.data})},deleteProduct:function(c){return a.delete(b.host+"/product/"+c).then(function(a){return a})},getStore:function(c){return a.get(b.host+"/store/"+c).then(function(a){return a.data})},updateStore:function(c,d){return a.put(b.host+"/store/"+c,d).then(function(a){return a.data})},getCustomers:function(c,d,e){var f=[],g="";for(var h in e)e.hasOwnProperty(h)&&f.push(h+"="+e[h]);return f.length&&(g="&"+f.join("&")),a.get(b.host+"/customers/"+c+"?limit="+d.limit+"&offset="+d.page*d.limit+g).then(function(a){return a.data})},getCustomer:function(c){return a.get(b.host+"/customer/"+c).then(function(a){return a.data})},updateCustomer:function(c,d){return a.put(b.host+"/customer/"+c,d).then(function(a){return a.data})},deleteCustomer:function(c){return a.delete(b.host+"/customer/"+c).then(function(a){return a})},getPersons:function(c,d){return a.get(b.host+"/persons/"+c+"?limit="+d.limit+"&offset="+d.offset)},createOrder:function(c){return a.post(b.host+"/order",c).then(function(a){return a.data})},getOrders:function(c,d,e){var f=[],g="";for(var h in e)e.hasOwnProperty(h)&&f.push(h+"="+e[h]);return f.length&&(g="&"+f.join("&")),a.get(b.host+"/orders/"+c+"?limit="+d.limit+"&offset="+d.page*d.limit+g).then(function(a){return a.data})},getOrder:function(c){return a.get(b.host+"/order/"+c).then(function(a){return a.data})},deleteOrder:function(c){return a.delete(b.host+"/order/"+c).then(function(a){return a})},updateOrder:function(c){return a.put(b.host+"/order/"+c.order_id,c).then(function(a){return a.data})},getClients:function(c){return a.get(b.host+"/clients/"+c).then(function(a){return a.data})},getTransactions:function(c,d){return a.get(b.host+"/store/"+c+"/payment/transactions?with=users,object&limit="+d.limit+"&offset="+d.page*d.limit).then(function(a){return a.data})},getPublicOffers:function(c,d){return a.get(b.host+"/offers/public/"+c+"?limit="+d.limit+"&offset="+d.page*d.limit).then(function(a){return a.data})},getDirectOffers:function(c,d){return a.get(b.host+"/offers/direct/"+c+"?creation_type=public,custom&limit="+d.limit+"&offset="+d.page*d.limit).then(function(a){return a.data})},deleteOfferById:function(c){return a.delete(b.host+"/offer/"+c).then(function(a){return a.data})}}}]),angular.module("brnaiApp").controller("StoreOffersCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification",function(a,b,c,d,e,f,g){a.loading=!0,a.inProgress=!1,a.options={limit:30,offset:0,page:0,lastPage:!1},a.offers=c.getOffers(1),a.loadMore=function(){if(!a.inProgress&&!a.options.lastPage){c.getOffers(a.offers[a.offers.length-1].id+1).forEac
11h(function(b){a.offers.push(b)})}}}]),angular.module("brnaiApp").controller("CreateOfferCtrl",["$scope","$http","$state","domain","getDomainData","Auth",function(a,b,c,d,e,f){a.createOffer=function(){console.log(a.offer)}}]),angular.module("brnaiApp").controller("CreateCategoryCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","$uibModal",function(a,b,c,d,e,f,g,h,i){a.categories=[],a.schemaKeys=[],a.schemaKey="",a.disabledTemplate=!1,a.options={limit:1e3,offset:0,page:0,lastPage:!1},a.category={bot_id:g.id,name:"",title:"",attributes:{name:{type:"string",label:"Name",visible:!0,multiple:!1,selectable:!1},price:{type:"number",label:"Price",visible:!0,multiple:!1,selectable:!1}},parent:"",template:{name:""}},b.getCategories(g.id).then(function(b){a.categories=b.categories},function(b){a.categories=[]}),a.deleteAttribute=function(b){delete a.category.attributes[b]},a.createCategory=function(){a.category.name=b.getSlug(a.category.title,{replacement:"-"}),b.createCategory(a.category).then(function(b){b&&b.status&&(h.success({message:'Category "'+a.category.title+'" added successfully'}),d.go("store.category-detail",{id:g.id,category:a.category.name}))},function(a){})},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.createCategoryAttribute=function(b){i.open({templateUrl:"views/create-category-attribute.html",controller:["$scope","storingservice","$uibModalInstance",function(a,c,d){a.oldIndex=null,a.schemaKeys=[],a.schemaKey="",a.attributeTypes=c.getAttributesTypes(),a.schemaTypes=c.getSchemaTypes(),a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}},b&&(a.newAttr=b,a.oldIndex=a.newAttr.name,"mixed"==b.type&&(a.schemaKeys=[],angular.forEach(b.schema.fields,function(b,c){a.schemaKeys.push({name:b.name})}),a.schemaKey=b.schema.key)),a.newSchemaAttr={name:"",label:"",type:""},a.handleChangeType=function(){"mixed"!=a.newAttr.type&&(a.newAttr.schema={fields:{},key:null},a.schemaKeys=[],a.schemaKey="")},a.handleChangeKey=function(){a.newAttr.schema.key=a.schemaKey},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.addSchemaAttribute=function(){a.newSchemaAttr.type&&a.newSchemaAttr.name.length&&(a.newSchemaAttr.name=c.getSlug(a.newSchemaAttr.name),a.newAttr.schema.fields[a.newSchemaAttr.name]=a.newSchemaAttr,"string"!=a.newSchemaAttr.type&&"number"!=a.newSchemaAttr.type&&"date"!=a.newSchemaAttr.type&&"boolean"!=a.newSchemaAttr.type||a.schemaKeys.push({name:a.newSchemaAttr.name}),a.newSchemaAttr={name:"",label:"",type:""})},a.deleteSchemaAttribute=function(b){delete a.newAttr.schema.fields[b],angular.forEach(a.schemaKeys,function(c,d){c.name==b&&a.schemaKeys.splice([d],1)})},a.addAttribute=function(){return a.newAttr.type?a.newAttr.name.length?"mixed"!=a.newAttr.type||null!=a.newAttr.schema.key&&""!=a.newAttr.schema.key?(a.newAttr.name=c.getSlug(a.newAttr.name),a.isEmpty(a.newAttr.schema)||angular.forEach(a.newAttr.schema.fields,function(b,c){c!=b.name&&(a.newAttr.schema.fields[b.name]=b,delete a.newAttr.schema.fields[c])}),d.close({attribute:a.newAttr,oldIndex:a.oldIndex}),a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}},a.oldIndex=null,a.schemaKeys=[],void(a.schemaKey="")):void h.error({delay:6e4,message:"You must set key field for schema"}):void h.error({delay:6e4,message:"You must set attribute name"}):void h.error({delay:6e4,message:"You must set attribute type"})}}],windowClass:"large-modal"}).result.then(function(b){null!=b.oldIndex&&delete a.category.attributes[b.oldIndex],a.category.attributes[b.attribute.name]=b.attribute},function(a){})}}]),angular.module("brnaiApp").controller("StoreCategoriesCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification",function(a,b,c,d,e,f,g){a.loading=!0,a.inProgress=!0,a.options={limit:30,offset:0,page:0,lastPage:!1},a.categories=[],c.getCategories(d.id).then(function(b){a.categories=b.categories,a.inProgress=!1},function(b){a.categories=[]}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}
11,a.deleteCategory=function(b){confirm("Are you sure, you want to delete category?")&&c.deleteCategory(b.category_id).then(function(c){c.data.status&&(a.categories.splice(a.categories.indexOf(b),1),g.success({message:"Category "+b.title+" successfully deleted"}))})}}]),angular.module("brnaiApp").controller("CategoryDetailCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","Upload","$uibModal",function(a,b,c,d,e,f,g,h,i,j){a.categories=[],a.options={limit:1e3,offset:0,page:0,lastPage:!1},a.disabledTemplate=!1,a.inProgress=!0,a.isAttributes=!1,b.getCategory(g.id,g.category).then(function(b){a.category=b,a.inProgress=!1,a.isAttributes=Object.keys(a.category.attributes).length,a.category.template.name&&(a.disabledTemplate=!0)},function(b){a.category={},a.inProgress=!1}),b.getCategories(g.id).then(function(b){a.categories=b.categories},function(b){a.categories=[]}),a.addFile=function(b,c,d){i.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploader=!1,b.data.status&&(a.category.image=b.data.url)},function(a){},function(b){a.uploader=!0})},a.deleteAttribute=function(b){delete a.category.attributes[b]},a.updateCategory=function(){a.category.parent&&"object"==typeof a.category.parent&&(a.category.parent=a.category.parent.category_id),a.category.bot_id=g.id,b.updateCategory(a.category).then(function(b){b&&b.status&&(h.success({message:'Category "'+a.category.title+'" was successfully updated'}),d.go("store-products",{id:g.id,category:a.category.name}))},function(a){})},a.createCategoryAttribute=function(b){j.open({templateUrl:"views/create-category-attribute.html",controller:["$scope","storingservice","$uibModalInstance",function(a,c,d){a.schemaKeys=[],a.schemaKey="",a.oldIndex=null,a.attributeTypes=c.getAttributesTypes(),a.schemaTypes=c.getSchemaTypes(),a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}},b&&(a.newAttr=b,a.oldIndex=a.newAttr.name,"mixed"==b.type&&(a.schemaKeys=[],angular.forEach(b.schema.fields,function(b,c){"string"!=b.type&&"number"!=b.type&&"date"!=b.type&&"boolean"!=b.type||a.schemaKeys.push({name:b.name})}),a.schemaKey=b.schema.key)),a.newSchemaAttr={name:"",label:"",type:""},a.handleChangeType=function(){"mixed"!=a.newAttr.type&&(a.newAttr.schema={fields:{},key:null},a.schemaKeys=[],a.schemaKey="")},a.handleChangeKey=function(){a.newAttr.schema.key=a.schemaKey},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.addSchemaAttribute=function(){a.newSchemaAttr.type&&a.newSchemaAttr.name.length&&(a.newSchemaAttr.name=c.getSlug(a.newSchemaAttr.name),a.newAttr.schema.fields[a.newSchemaAttr.name]=a.newSchemaAttr,"string"!=a.newSchemaAttr.type&&"number"!=a.newSchemaAttr.type&&"date"!=a.newSchemaAttr.type&&"boolean"!=a.newSchemaAttr.type||a.schemaKeys.push({name:a.newSchemaAttr.name}),a.newSchemaAttr={name:"",label:"",type:""})},a.deleteSchemaAttribute=function(b){delete a.newAttr.schema.fields[b],angular.forEach(a.schemaKeys,function(c,d){c.name==b&&a.schemaKeys.splice([d],1)})},a.addAttribute=function(){return a.newAttr.type?a.newAttr.name.length?"mixed"!=a.newAttr.type||null!=a.newAttr.schema.key&&""!=a.newAttr.schema.key?(a.newAttr.name=c.getSlug(a.newAttr.name),a.isEmpty(a.newAttr.schema)||angular.forEach(a.newAttr.schema.fields,function(b,c){c!=b.name&&(a.newAttr.schema.fields[b.name]=b,delete a.newAttr.schema.fields[c])}),d.close({attribute:a.newAttr,oldIndex:a.oldIndex}),a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}},a.oldIndex=null,a.schemaKeys=[],void(a.schemaKey="")):void h.error({delay:6e4,message:"You must set key field for schema"}):void h.error({delay:6e4,message:"You must set attribute name"}):void h.error({delay:6e4,message:"You must set attribute type"})}}],windowClass:"large-modal"}).result.then(function(b){null!=b.oldIndex&&delete a.category.attributes[b.oldIndex],a.category.attributes[b.attribute.name]=b.attribute,a.isAttributes=Object.keys(a.category.attributes).length,console.log(a.category)},function(a){})},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}}]),angular.module("brnaiApp").controller("CreateProductCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","Upload","$uibModal",function(a,b,c,d,e,f,g,h,i,j){a.categories=[],a.selectedCategory={},a.options={limit:1e3,offset:0,page:0,lastPage:!1},a.attributes={},a.rows=[],a.uploaders={},a.multipleImages=[],a.multipleImagesModels={},a.product={bot_id:g.id,category_id:"",name:"",attributes:{}},b.getCategory(g.id,g.category).then(function(b){a.selectedCategory=b,a.isEmpty(a.selectedCategory.attributes)||angular.forEach(a.selectedCategory.attributes,function(b,c){"mixed"!=b.type||b.selectable||(
11a.uploaders[c]={},angular.forEach(b.schema.fields,function(b,d){"file"!=b.type&&"image"!=b.type||(a.uploaders[c][d]=!1)})),a.attributes[c]=b,a.product.attributes[c]="","file"!=b.type&&"image"!=b.type||!b.multiple||(a.multipleImagesModels[c]="",a.multipleImages.push(b),a.product.attributes[c]=[],a.uploaders[c]=!1)});var c=1,d={},e=!1,f=Object.keys(a.attributes).length;angular.forEach(a.attributes,function(b,g){e&&(a.rows.push(d),d={},e=!1),c%1==0&&(e=!0),d[g]=b,c==f&&a.rows.push(d),c++}),a.product.category_id=a.selectedCategory.category_id},function(b){a.selectedCategory={}}),b.getCategories(g.id).then(function(b){a.categories=b.categories},function(b){a.categories=[]}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.createProduct=function(){b.createProduct(a.product).then(function(b){b.status&&(h.success({message:'Product "'+a.product.name+'" added successfully'}),d.go("store-products",{id:g.id,category:a.selectedCategory.name}))},function(a){})},a.showMapForm=function(b,c){j.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,d,e,f,g){a.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",g.getMap().then(function(b){a.map=b;var d=a.map.getCenter();c.coordinates&&c.coordinates.length&&(d={lat:c.coordinates[1],lng:c.coordinates[0]}),google.maps.event.trigger(a.map,"resize"),a.map.setCenter(d)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},c.coordinates&&c.coordinates.length&&(a.marker=c),a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){e.close({attribute:b.name,data:a.marker})}}],windowClass:"large-modal"}).result.then(function(b){a.product.attributes[b.attribute]=b.data},function(a){})},a.showSimpleMultipleModal=function(b,c){j.open({templateUrl:"views/attribute-simple-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","$uibModal",function(a,d,e,f,g){a.simpleAttribute=b,a.simpleAttr="",a.simpleValues=[],c.length&&(a.simpleValues=c),a.addMultipleValue=function(){a.simpleAttr&&(a.simpleValues.push(a.simpleAttr),a.simpleAttr="")},a.fillAttribute=function(){e.close({attribute:a.simpleAttribute.name,data:a.simpleValues})},a.deleteValue=function(b){a.simpleValues.splice(b,1)}}],windowClass:"large-modal"}).result.then(function(b){a.product.attributes[b.attribute]=b.data},function(a){})},a.showMixedForm=function(b,c){j.open({templateUrl:"views/attribute-mixed-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","Upload","$uibModal",function(a,d,e,g,h,i){a.mixedAttribute=b,a.multipleValues=[],a.uploaders={},a.mainAttr={},angular.forEach(a.mixedAttribute.schema.fields,function(b,c){a.mainAttr[c]="","boolean"==b.type&&(a.mainAttr[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1)}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.isEmpty(c)||(a.mixedAttribute.multiple?a.multipleValues=c:a.mainAttr=c),a.close=function(){e.close()},a.addFile=function(b,c,d,e){h.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(a.mainAttr[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})},a.fillAttribute=function(){e.close({attribute:a.mixedAttribute.name,data:a.mainAttr})},a.addMultipleValue=function(){a.multipleValues.push(a.mainAttr),a.mainAttr={},angular.forEach(a.mixedAttribute.schema.fields,function(b,c){a.mainAttr[c]="","boolean"==b.type&&(a.mainAttr[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1)})},a.fillMultipleAttribute=function(){e.close({attribute:a.mixedAttribute.name,data:a.multipleValues})},a.showMapForm=function(b,c){i.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,d,e,f,g){a.googleMapsUrl="https://maps.googleapis.com/ma
11ps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",g.getMap().then(function(b){a.map=b;var d=a.map.getCenter();c.coordinates&&c.coordinates.length&&(d={lat:c.coordinates[1],lng:c.coordinates[0]}),google.maps.event.trigger(a.map,"resize"),a.map.setCenter(d)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},c.coordinates&&c.coordinates.length&&(a.marker=c),a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){e.close({attribute:b.name,data:a.marker})}}],windowClass:"large-modal zindex-map"}).result.then(function(b){a.mainAttr[b.attribute]=b.data},function(a){})}}],windowClass:"large-modal"}).result.then(function(b){a.product.attributes[b.attribute]=b.data},function(a){})},a.addFile=function(b,c,d,e,h){i.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(h?a.product.attributes[h][e]=b.data.url:a.product.attributes[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})},a.addFiles=function(b,c,d){b&&i.upload({url:f.host+"/attachment/"+c+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[d]=!1,b.data.status&&a.product.attributes[d].push(b.data.url)},function(a){},function(b){a.uploaders[d]=!0})},a.deleteImage=function(b,c){a.product.attributes[c].splice(a.product.attributes[c].indexOf(b),1)}}]),angular.module("brnaiApp").controller("StoreProductsCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification","$state",function(a,b,c,d,e,f,g,h){window.location.href=window.location.origin+"/v2/bot/"+h.params.id+"/store/"+h.params.category+"/products",a.loading=!0,a.inProgress=!0,a.bot_id=h.params.id,a.tableHeader=[{title:"Products"},{title:"Add",link:"store.create_product({id: botNav.botInfo.bot_id, category: selectedCategory.name})"},{},{},{title:"Dictionaries",link:"store.category-attributes({id: botNav.botInfo.bot_id, category: selectedCategory.name})"}],a.options={limit:30,offset:0,page:0,lastPage:!1},a.swapFilter=function(){a.filters.isActive=!a.filters.isActive},a.filters={isActive:!1},a.products=[],a.selectedCategory={},a.visibleAttributes=[],a.filters={title:{type:"string",value:""}},h.activeId=h.params.category,a.goto=function(a,b){h.go("store-products",{id:a,category:b}),h.activeId=b},a.check=function(a){return h.activeId==a},a.categoriesMenu=[],c.getCategories(h.params.id).then(function(b){a.categoriesMenu=b.categories,!h.params.category&&a.categoriesMenu.length>0&&a.goto(a.bot_id,a.categoriesMenu[0].name)},function(b){a.categoriesMenu=[]}),c.getCategory(d.id,d.category).then(function(b){if(a.selectedCategory=b,!a.isEmpty(a.selectedCategory.attributes)){angular.forEach(a.selectedCategory.attributes,function(b,c){b.visible&&(a.filters[c]={type:b.type,value:null},a.visibleAttributes.push(b))});var c=a.visibleAttributes.length+2;if(c>a.tableHeader.length)for(var d=c-a.tableHeader.length,e=1;e<=d;e++)a.tableHeader.push({})}a.inProgress=!1},function(b){a.selectedCategory={}}),c.getProducts(d.id,d.category,a.options).then(function(b){a.products=b.products,a.inProgress=!1,console.log(a.products)},function(b){a.products=[]}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.deleteProduct=function(b){confirm("Are you sure, you want to delete product?")&&c.deleteProduct(b.product_id).then(function(c){c.data.status&&(a.products.splice(a.products.indexOf(b),1),g.success({ 12message:"Product "+b.name+" successfully deleted"}))})},a.deleteCategory=function(b){confirm("Are you sure, you want to delete category?")&&c.deleteCategory(b.category_id).then(function(c){c.data.status&&(a.categoriesMenu.splice(a.categoriesMenu.indexOf(b),1),g.success({message:"Category "+b.title+" successfully deleted"}))})},a.filterProducts=function(){setTimeout(function(){var b={};angular.forEach(a.filters,function(a,c){a.value&&(b[c]=a.value,"number"==a.type&&(b[c]="eq"+a.value))}),a.options={limit:30,offset:0,page:0,lastPage:!1},c.getProducts(d.id,d.category,a.options,b).then(function(b){a.products=b.products,a.inProgress=!1},function(b){a.products=[]})},100)},a.loadMore=function(){if(!a.inProgress&&!a.options.lastPage){a.options.page++,a.inProgress=!0;var b={};angular.forEach(a.filters,function(a,c){a.value&&(b[c]=a.value,"number"==a.type&&(b[c]="eq"+a.value))}),c.getProducts(d.id,d.category,a.options,b).then(function(b){b.products.length?angular.forEach(b.products,function(b,c){a.products.push(b)}):a.options.lastPage=!0,a.loading=!1,a.inProgress=!1},function(a){})}}}]),angular.module("brnaiApp").controller("ProductDetailCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","Upload","$uibModal",function(a,b,c,d,e,f,g,h,i,j){a.categories=[],a.selectedCategory={},a.options={limit:1e3,offset:0,page:0,lastPage:!1},a.attributes={},a.rows=[],a.multipleImages=[],a.multipleImagesModels={},a.uploaders={},b.getCategories(g.id).then(function(b){a.categories=b.categories},function(b){a.categories=[]}),b.getProduct(g.id,g.product).then(function(c){a.product=c,b.getCategory(g.id,g.category).then(function(b){a.selectedCategory=b,a.isEmpty(a.selectedCategory.attributes)||angular.forEach(a.selectedCategory.attributes,function(b,c){a.attributes[c]=b,"file"!=b.type&&"image"!=b.type||!b.multiple||(a.multipleImagesModels[c]="",a.multipleImages.push(b),a.uploaders[c]=!1)});var c=1,d={},e=!1,f=Object.keys(a.attributes).length;angular.forEach(a.attributes,function(b,g){e&&(a.rows.push(d),d={},e=!1),c%1==0&&(e=!0),d[g]=b,c==f&&a.rows.push(d),c++}),a.product.category_id=a.selectedCategory.category_id},function(b){a.selectedCategory={}})},function(b){a.product={}}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.updateProduct=function(){b.updateProduct(a.product).then(function(b){b.status&&(h.success({message:'Product "'+a.product.name+'" was successfully updated'}),d.go("store-products",{id:g.id,category:a.selectedCategory.name}))},function(a){})},a.showMapForm=function(b,c){j.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,d,e,f,g){a.googleMapsUrl="https://maps.googleapis.com/ma
12ps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",g.getMap().then(function(b){a.map=b;var d=a.map.getCenter();c.coordinates&&c.coordinates.length&&(d={lat:c.coordinates[1],lng:c.coordinates[0]}),google.maps.event.trigger(a.map,"resize"),a.map.setCenter(d)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},c.coordinates&&c.coordinates.length&&(a.marker=c),a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){e.close({attribute:b.name,data:a.marker})}}],windowClass:"large-modal"}).result.then(function(b){a.product.attributes[b.attribute]=b.data},function(a){})},a.showSimpleMultipleModal=function(b,c){j.open({templateUrl:"views/attribute-simple-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","$uibModal",function(a,d,e,f,g){a.simpleAttribute=b,a.simpleAttr="",a.simpleValues=[],c.length&&(a.simpleValues=c),a.addMultipleValue=function(){a.simpleAttr&&(a.simpleValues.push(a.simpleAttr),a.simpleAttr="")},a.fillAttribute=function(){e.close({attribute:a.simpleAttribute.name,data:a.simpleValues})},a.deleteValue=function(b){a.simpleValues.splice(b,1)}}],windowClass:"large-modal"}).result.then(function(b){a.product.attributes[b.attribute]=b.data},function(a){})},a.showMixedForm=function(b,c){j.open({templateUrl:"views/attribute-mixed-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","Upload",function(a,d,e,g,h){a.mixedAttribute=b,a.uploaders={},a.mainAttr=c.attributes[b.name],a.multipleValues=[],a.mixedAttribute.multiple&&(a.mainAttr={},a.multipleValues=c.attributes[b.name]||[],angular.forEach(a.mixedAttribute.schema.fields,function(b,c){a.mainAttr[c]="","boolean"==b.type&&(a.mainAttr[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1)})),angular.forEach(a.mixedAttribute.schema.fields,function(b,c){"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1)}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.close=function(){e.close()},a.addFile=function(b,c,d,e){h.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(a.mainAttr[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})},a.fillAttribute=function(){e.close({attribute:a.mixedAttribute.name,data:a.mainAttr})},a.addMultipleValue=function(){console.log(a.mainAttr),a.multipleValues.push(a.mainAttr),a.mainAttr={},angular.forEach(a.mixedAttribute.schema.fields,function(b,c){a.mainAttr[c]="","boolean"==b.type&&(a.mainAttr[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1)})},a.fillMultipleAttribute=function(){e.close({attribute:a.mixedAttribute.name,data:a.multipleValues})},a.showMapForm=function(b,c){j.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,d,e,f,g){a.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",g.getMap().then(function(b){a.map=b;var d=a.map.getCenter();c.coordinates&&c.coordinates.length&&(d={lat:c.coordinates[1],lng:c.coordinates[0]}),google.maps.event.trigger(a.map,"resize"),a.map.setCenter(d)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},c.coordinates&&c.coordinates.length&&(a.marker=c),a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){e.close({attribute:b.name,data:a.marker})}}],windowClass:"large-modal zindex-map"}).result.then(function(b){a.mainAttr[b.attribute]=b.data},function(a){})}}],windowClass:"large-modal"}).result.then(function(b){a.product.attributes[b.attribute]=b.data,console.log(a.product)},function(a){})},a.addFile=function(b,c,d,e,h){i.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(h?a.product.attributes[h][e]=b.data.url:a.product.attributes[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})},a.addFiles=function(b,c,d){b&&i.upload({url:f.host+"/attachment/"+c+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[d]=!1,b.data.status&&a.product.attributes[d].push(b.data.url)},function(a){},function(b){a.uploaders[d]=!0})},a.deleteImage=function(b,c){a.product.attributes[c].splice(a.product.attributes[c].indexOf(b),1)}}]),angular.module("brnaiApp").controller("CreateOrderCtrl",["$scope","$http","$state","domain","getDomainData","Auth","storingservice","$stateParams","Notification",function(a,b,c,d,e,f,g,h,i){a.order={client_id:"",products:[],order_status:"new"},a.orderStatuses=g.getOrderStatuses(),a.products=[],a.clients=[],a.options={limit:1e3,offset:0,page:0,lastPage:!1},g.getClients(h.id).then(function(b){a.clients=b.clients},function(b){a.clients=[]}),g.getProducts(h.id,a.options).then(function(b){a.products=b.products},function(b){a.products=[]}),a.createOrder=function(){g.createOrder(a.order).then(function(a){a.status&&(i.success({message:"Order added successfully"}),c.go("store-orders",{id:h.id}))},function(b){a.order={client_id:f.getUser().account_id,products:[],order_status:"new"}})}}]),angular.module("brnaiApp").controller("StoreOrdersCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification","$uibModal","$location",function(a,b,c,d,e,f,g,h,i){function j(){a.inProgress||(a.inProgress=!0,c.getOrders(d.id,a.options,k()).then(function(b){b.orders.length?angular.forEach(b.orders,function(b,c){a.orders.push(b)}):a.options.lastPage=!0,a.inProgress=!1,a.loading=!1},function(b){a.orders=[],a.inProgress=!1,a.loading=!1}))}function k(){var b={};for(var c in a.filters)if(a.filters.hasOwnProperty(c)){if("isActive"==c||!a.filters[c].value)continue;b[c]=a.filters[c].value}return b}a.loading=!0,a.inProgress=!1,a.options={limit:30,offset:0,page:0,lastPage:!1},a.filterAttributes=[{name:"order_id",label:"Order ID",active:!0},{name:"status",label:"Status",active:!0},{name:"date",label:"Date",active:!0},{name:"customer.name",label:"Client",active:!0},{name:"product.name",label:"Products",active:!0},{name:"Price",label:"Products",active:!1},{name:"affiliate_id",label:"Affiliate ID",active:!1}],a.swapFilter=function(){if(a.filters.isActive=!a.filters.isActive,!a.filters.isActive){for(var b in a.filters)if(a.filters.hasOwnProperty(b)){if("isActive"==b||!a.filters[b].value)continue;delete a.filters[b]}a.filterOrders()}},a.filters={isActive:!1},a.notes=[],f.getObject("order_filters")&&(a.filters=f.getObject("order_filters"),setTimeout(function(){i.path("/bot/"+d.id+"/store/orders").search(k()),a.options={limit:30,offset:0,page:0,lastPage:!1},a.orders=[],j()},1e3)),a.filterOrders=function(){var b=new Date,c=new Date(b.getTime()+864e7);f.putObject("order_filters",a.filters,{expires:c}),setTimeout(function(){i.path("/bot/"+d.id+"/store/orders").search(k()),a.options={limit:30,offset:0,page:0,lastPage:!1},a.orders=[],j()},100)},a.orderStatuses=c.getOrderStatusesView(),c.getOrders(d.id,a.options).then(function(b){a.orders=b.orders,angular.forEach(a.orders,function(a,b){a.total_price=0,a.files=[],a.images=[],a.imagesRows=[],a.products.length&&angular.forEach(a.products,function(b,c){b.price&&b.count&&(a.total_price+=b.price*b.count)}),a.attachments.length&&angular.forEach(a.attachments,function(b,c){"file"==b.type&&a.files.push(b),"image"==b.type&&a.images.push(b)});var c=1,d=[],e=!1,f=a.images.length;angular.forEach(a.images,function(b,g){e&&(a.imagesRows.push(d),d=[],e=!1),c%2==0&&(e=!0),d.push(b),c==f&&a.imagesRows.push(d),c++})}),a.inProgress=!1},function(b){a.orders=[]}
12),a.loadMore=function(){a.inProgress||a.options.lastPage||(a.options.page++,a.inProgress=!0,b.get(e.host+"/orders/"+d.id+"?limit="+a.options.limit+"&offset="+a.options.page*a.options.limit).then(function(b){b.data&&b.data.orders.length?(b.data.orders.forEach(function(b){a.orders.push(b)}),a.loading=!1,a.inProgress=!1):(a.inProgress=!1,a.loading=!1,a.options.lastPage=!0)}))},a.changeOrderStatus=function(a,b){a.order_status=b.name,c.updateOrder(a)},a.openAttachments=function(a){h.open({templateUrl:"views/order-attachments.html",controller:["$scope","storingservice","$uibModalInstance",function(b,c,d){b.order=a,console.log(b.order)}],windowClass:"large-modal"}).result.then(function(a){},function(a){})},a.deleteOrder=function(b){confirm("Are you sure, you want to delete order?")&&c.deleteOrder(b.order_id).then(function(c){c.data.status&&(a.orders.splice(a.orders.indexOf(b),1),g.success({message:"Order "+b.order_id+" successfully deleted"}))})},b.get(e.host+"/orders/notes/"+d.id).then(function(b){b.data&&b.data.status&&(a.notes=b.data.notes,a.loading=!1,a.inProgress=!1)})}]),angular.module("brnaiApp").controller("OrderDetailCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","Auth",function(a,b,c,d,e,f,g,h,i){a.clients=[],a.orderStatuses=b.getOrderStatuses(),a.products=[],a.clients=[],a.options={limit:1e3,offset:0,page:0,lastPage:!1},b.getClients(g.id).then(function(b){a.clients=b.clients},function(b){a.clients=[]}),b.getProducts(g.id,a.options).then(function(b){a.products=b.products},function(b){a.products=[]}),b.getOrder(g.order).then(function(b){a.order=b,console.log(a.order)},function(b){a.order={}}),a.updateOrder=function(){b.updateOrder(a.order).then(function(a){a.status&&(h.success({message:"Order updated successfully"}),d.go("store-orders",{id:g.id}))},function(a){})}}]),angular.module("brnaiApp").controller("UploadIpfsCtrl",["$scope","Upload",function(a,b){a.addFile=function(c){c&&b.upload({url:"https://api.sonftapp.com/sonft/file/ipfs/upload",data:{file:c}}).then(function(b){a.uploader=!1,b.data.status&&(a.file=b.data.result[0].cid)},function(){},function(){a.uploader=!0})}}]),angular.module("brnaiApp").controller("UploadMinioCtrl",["$scope","Upload",function(a,b){a.addFile=function(b){a.file=b},a.upload=function(){a.file&&b.upload({url:"https://api.sonftapp.com/sonft/file/minio/upload",data:{input:a.file,artist:a.artist,album:a.album}}).then(function(b){a.uploader=!1,b.data.status&&(a.result=b.data.result)},function(){},function(){a.uploader=!0})}}]),angular.module("brnaiApp").controller("MindCtrl",["$scope","$http","getDomainData","Auth","$state",function(a,b,c,d,e){a.goBack=function(){e.goBack()}}]),angular.module("brnaiApp").controller("MindIntentsCtrl",["learningService","$http","$stateParams","$scope","Notification","$state","getDomainData",function(a,b,c,d,e,f,g){function h(){d.inProgress=!0,b.get(g.host+"/mind/"+c.id).then(function(a){a&&(d.mind=a.data,d.newIntent.category=d.mind.categories[0].name,d.categoryFilters=d.mind.categories,d.categoryFilters.unshift({name:"",title:"All"})),d.inProgress=!1})}function i(b){delete b.new_expression,a.updateIntent(b.intent_id,b).then(function(a){a&&e.success({message:"Intent successfully updated"}),j(d.filters.searchKeyword)},function(a){e.error({delay:6e4,message:a.error})})}function j(b){a.getSystemIntents(b,c.id,d.filters.category?d.filters.category:"").then(function(a){d.intents=a},function(a){d.intents=[]})}d.intents=[],d.mind={},d.inProgress=!1,d.newIntent={type:"system",mind_id:c.id,category:"",name:"",expressions:[]},d.categoryFilters=[],d.filters={searchKeyword:"",category:"",isActive:!1},d.$watch("filters.searchKeyword",function(a){(a.length>1||0==a.length)&&j(a)}),d.$watch("filters.category",function(a){j(d.filters.searchKeyword)}),d.swapFilter=function(){d.filters.isActive=!d.filters.isActive},d.deleteIntent=function(b){confirm("Are you sure, you want to delete intent?")&&a.deleteIntent(b.intent_id).then(function(a){a.data.status&&(d.intents.splice(d.intents.indexOf(b),1),e.success({message:"Intent "+b.name+" successfully deleted"}))})},d.addExpression=function(b){var c=b.new_expression;if(delete b.new_expression,c.length)return b.intent_id?void a.insertExpressionToIntent({expression:c},b.intent_id).then(function(a){a.status?(e.success({message:'Expression "'+c+'" added to intent'}),j(d.filters.searchKeyword)):e.error({delay:6e4,message:'Expression "'+c+"\" wasn't add to intent"})}):(b.expressions.push({text:c}
12),d.createIntent(),void(c=""))},d.deleteExpression=function(a,b){a.expressions.splice(b,1),i(a)},d.createIntent=function(){if(!d.newIntent.name)return e.error({delay:6e4,message:"Intent name cannot be empty"}),!1;delete d.newIntent.new_expression;var b=$("#addIntentModal");a.createIntent(d.newIntent).then(function(a){j(d.filters.searchKeyword),d.newIntent={type:"system",mind_id:c.id,category:d.mind.categories[0].name,name:"",expressions:[]},b.modal("hide")})},d.updateIntent=function(a){i(a)},d.categoryChange=function(a){a.intent_id?i(a):d.createIntent()},j(""),h()}]),angular.module("brnaiApp").controller("LearningMindCtrl",["learningService","$http","$stateParams","$scope","Notification","$state","getDomainData","$location",function(a,b,c,d,e,f,g,h){function i(a,b,c,d){var e=!1;return a.response.replies.forEach(function(a,f){a===b&&(c?e=!0:d!=f&&(e=!0))}),e}function j(){d.inProgress||("system"==d.filters.selectedReplies.filter?d.filters.reply=!1:"custom"==d.filters.selectedReplies.filter?d.filters.reply=!0:d.filters.reply=null,d.inProgress=!0,a.getIntents(c.id,d.filters).then(function(a){d.intents=a,d.inProgress=!1},function(a){d.intents=[],d.inProgress=!1}))}function k(){b.get(g.host+"/minds").then(function(a){d.minds=a.data.minds,d.mindFilters=[{mind_id:"",title:"All",categoryFilters:[]}],d.minds.forEach(function(a){var b={mind_id:a.mind_id,title:a.title,categoryFilters:a.categories};b.categoryFilters.unshift({name:"",title:"All"}),d.mindFilters.push(b),d.selectedMindId&&a.mind_id==d.selectedMindId&&(d.filters.selectedMind=b,d.filters.isActive=!0,h.search().category?d.filters.selectedMind.categoryFilters.forEach(function(a,b){a.name==h.search().category&&(d.filters.selectedCategory=d.filters.selectedMind.categoryFilters[b])}):d.filters.selectedCategory=null,d.categoryFilters=d.filters.selectedMind.categoryFilters)}),j()})}function l(){var a={};return d.filters.searchKeyword&&(a.search=d.filters.searchKeyword),d.filters.selectedMind&&d.filters.selectedMind.mind_id&&(a.mind=d.filters.selectedMind.mind_id||d.selectedMindId),d.filters.selectedReplies&&"All"!==d.filters.selectedReplies.filter&&(a.reply=d.filters.selectedReplies.filter),d.filters.selectedCategory&&""!==d.filters.selectedCategory.name&&(a.category=d.filters.selectedCategory.name),a}d.intents=[],d.minds=[],d.reply="",d.inProgress=!1,d.repliesFilters=[{filter:"All",name:"All"},{filter:"system",name:"Need responses"},{filter:"custom",name:"With responses"}],d.mindFilters=[{mind_id:"",title:"All",categoryFilters:[]}],d.selectedMindId=h.search().mind||"",d.filters={selectedReplies:d.repliesFilters[0],selectedMind:d.mindFilters[0],selectedCategory:null,isActive:!1,searchKeyword:h.search().search||"",reply:!1,isSystem:!0,limit:500,page:0,lastPage:!1},h.search().reply&&d.repliesFilters.forEach(function(a,b){a.filter==h.search().reply&&(d.filters.selectedReplies=d.repliesFilters[b],d.filters.isActive=!0)}),d.swapFilter=function(){d.filters.isActive=!d.filters.isActive},d.categoryFilters=[],d.filterMinds=function(a){setTimeout(function(){h.path("/bot/"+c.id+"/learning/mind").search(l()),"mind"==a&&(d.filters.selectedCategory=null,d.categoryFilters=d.filters.selectedMind.categoryFilters),j()},100)},d.addIntent=function(b){if(b.new_reply){var d={bot_id:c.id,name:b.name,expressions:b.expressions,parent_id:b.intent_id,response:{replies:[b.new_reply],type:"reply"}};a.createIntent(d).then(function(a){j()})}},d.updateIntent=function(b,c,d,f){return d.length?i(b,d,f,c)?(e.error({delay:6e4,message:"This response is created"}),void j()):void("reply"===b.response.type&&(f?b.response.replies.push(d):b.response.replies[c]=d,a.updateIntent(b.intent_id,b).then(function(a){j()}))):(e.error({delay:6e4,message:"Replie cannot be empty"}),void j())},d.deleteReply=function(b,c){b.response.replies.splice(c,1),a.updateIntent(b.intent_id,b).then(function(a){j()})},k()}]),angular.module("brnaiApp").directive("nextOnEnter",function(){return{restrict:"A",link:function(a,b,c){b.bind("keyup",function(a){13===(a.keyCode||a.which)&&(a.preventDefault(),setTimeout(function(){for(var b=document.querySelectorAll("input"),c=!1,d=b.length,e=0;e<d;e++){var f=b[e];if(c){if("none"!==f.style.display){f.focus();break}}else f.id===a.currentTarget.id&&(c=!0)}},1e3))})}}}),angular.module("brnaiApp").controller("GrowthGeneralCtrl",["$scope","$http","getDomainData","Auth","$state",function(a,b,c,d,e){a.isFBConnection=!1,a.connection={},a.isInstagramConnection=!1,a.instagramConnection={},a.comments={active:!1,answer:"",keywords:[],post:null},a.activeLink=e.current.name,a.botId="",a.getConnectionsFB=function(d){b.get(c.host+"/connection/"+d+"/messenger/",{notification:!1}).then(function(b){b&&b.data.status?(a.isFBConnection=b.data.status,a.connection=b.data,b.data.provider_data.comments&&(a.comments=b.data.provider_data.comments,a.comments.keywords||(a.comments.keywords=[]))):a.isFBConnection=!1},function(b){a.isFBConnection=!1})},a.getConnectionsInstagram=function(d,e){b.get(c.host+"/connection/"+d+"/instagram/",{notification:!1}).then(function(b){b&&b.data.status?(a.isInstagramConnection=b.data.status,a.instagramConnection=b.data,e&&a.main.isAdmin&&a.goto("bot-settings.growth-instagram-task",d)):a.isInstagramConnection=!1},function(b){a.isInstagramConnection=!1})};var f=!0;
12a.$watch("botId",function(a){f=!1}),a.check=function(b){return a.activeLink==b},a.goto=function(b,c){e.go(b,{id:c}),a.activeLink=b},a.createConectionInstagram=function(){e.go("bot-settings.settings-connections",{id:a.botId}),setTimeout(function(){$(document).find(".instagram span").trigger("click")},1e3)}}]),angular.module("brnaiApp").controller("GrowthFbCommentsCtrl",["getDomainData","$http","$stateParams","$scope","Notification","$state","$uibModal","facebookService",function(a,b,c,d,e,f,g,h){function i(){d.posts=h.getPosts(d.page_id,d.connection.provider_data.access_token).then(function(a){d.posts=a.data.data},function(a){d.posts=[]})}d.newKeyword={keyword:""},d.$parent.botId=c.id,d.getConnectionsFB(c.id),d.saveConnections=function(){d.connection.provider_data.comments=d.comments,b.put(a.host+"/connection/messenger/"+c.id,d.connection).then(function(a){a.data.status?(e.success({message:"Comments successfully updated"}),d.getConnectionsFB(c.id)):e.error({delay:6e4,message:a.data.error})},function(a){e.error({delay:6e4,message:a.message})})},d.addKeyword=function(){if(!d.newKeyword.keyword)return void e.error({delay:6e4,message:"Keyword can't be empty"});for(var a=0;a<d.comments.keywords.length;a++)if(d.comments.keywords[a]===d.newKeyword.keyword)return void e.error({delay:6e4,message:"Such keyword already exist"});d.comments.keywords.push(angular.copy(d.newKeyword.keyword)),d.newKeyword.keyword=""},d.deleteKeyword=function(a){d.comments.keywords.splice(a,1)},d.createConection=function(){f.go("bot-settings.settings-connections",{id:c.id}),setTimeout(function(){$(document).find(".messenger span").trigger("click")},1e3)},d.$watch("connection",function(a){a&&a.provider_data&&(d.page_id=a.provider_data.page_id,i())}),d.posts=[],d.page_id=null}]),angular.module("brnaiApp").controller("MindSettingsCtrl",["getDomainData","$state","$scope","$http","$uibModal","Notification","portalService",function(a,b,c,d,e,f,g){function h(){g.getPortalsList().then(function(a){c.portals=a,c.main.isAdmin&&c.portals.length>0?(c.filters.selectedPortal=c.portals[0].portal_id,i(c.filters.selectedPortal)):i()})}function i(b){c.loader=!0;var e="";b&&(e="?portal_id="+b),c.minds=[],d.get(a.host+"/minds"+e).then(function(a){c.minds=a.data.minds,c.loader=!1})}c.minds=[],c.loader=!0,c.portals=[],c.filters={selectedPortal:""},c.openModal=function(){e.open({templateUrl:"views/addmind.html",controller:"AddmindCtrl",windowClass:"large-modal no-border-modal"}).result.then(function(a){a.data.status&&b.go("mind-detail",{id:a.data.mind.mind_id})},function(){})},c.filterChanges=function(){i(c.filters.selectedPortal)},h()}]),angular.module("brnaiApp").controller("MindDetailCtrl",["$scope","$state","Notification","getDomainData","Upload","$stateParams","$http","$window","$rootScope",function(a,b,c,d,e,f,g,h,i){function j(){g.put(d.host+"/mind/"+f.id,{title:a.mind.title,categories:a.mind.categories}).then(function(a){a&&c.success({message:"Mind successfully updated"}),k()},function(a){c.error({delay:6e4,message:a.error})})}function k(){a.inProgress=!0,g.get(d.host+"/mind/"+f.id).then(function(b){b&&(a.mind=b.data),a.inProgress=!1})}function l(a,b){return""===a.name?(b&&c.error({delay:6e4,message:"Category name cannot be empty"}),!1):""!==a.title||(b&&c.error({delay:6e4,message:"Category title cannot be empty"}),!1)}a.mind={},a.importName="",a.newCategory={name:"",title:""},a.inProgress=!1,a.uploadFile=function(b){b&&e.upload({url:d.host+"/mind/image/"+f.id,data:{file:b,name:b.name}}).then(function(b){a.mind.logo=b.data.image},function(a){})},a.importMind=function(b){b&&e.upload({url:d.host+"/mind/import/"+f.id,data:{file:b,name:b.name}}).then(function(d){a.importName=b.name,c.success({message:"File successfully imported"})},function(a){c.error({delay:6e4,message:"Can't import file"})})},a.exportMind=function(){g.get(d.host+"/mind/export/"+f.id).then(function(a){a?i.popupWindow=h.open(a.data.file,"_blank"):c.error({delay:6e4,message:"Can't export mind"})})},a.onSubmit=function(){j()},a.updateCategory=function(a){l(a,!0)&&j()},a.deleteCategory=function(b){if(a.mind.categories.length<=1)return void c.error({delay:6e4,message:"must be at least one category"});a.mind.categories.splice(b,1),j()},a.addCategory=function(b){l(a.newCategory,b)&&(a.mind.categories.push(a.newCategory),j(),a.newCategory={name:"",title:""},$("#createMind").modal("hide"))},a.deleteMind=function(){confirm("Are you sure, you want to delete portal?")&&g.delete(d.host+"/mind/"+f.id).then(function(a){a?(c.success({message:"Mind successfully deleted"}),b.go("mind-settings")):c.error({delay:6e4,message:"Can't delete mind"})})},k()}]),angular.module("brnaiApp").controller("AddmindCtrl",["getDomainData","$http","$uibModalInstance","$scope","Notification",function(a,b,c,d,e){d.newMind={title:"",categories:[{name:"general",title:"Default category"}]},d.onSubmit=function(){b.post(a.host+"/mind",d.newMind).then(function(a){a?(e.success({message:"Mind "+d.newMind.title+" successfully created"}),d.newMind.title="",c.close(a)):e.error({delay:6e4,message:"Can't create mind"})})},d.closeModal=function(){d.newMind.title="",c.close()}}]),angular.module("brnaiApp").directive("focusOnEnter",function(){return{restrict:"A",link:function(a,b,c){b.bind("keyup",function(a){13===(a.keyCode||a.which)&&(a.preventDefault(),setTimeout(function(){for(var b=document.querySelectorAll("input"),c=b.length,d=0;d<c;d++){var e=b[d];if(e.id===a.currentTarget.id){e.focus();break}}},1e3))})}}}),angular.module("brnaiApp").directive("testWidget",[function(){return{templateUrl:"views/test-widget.html",restrict:"E",scope:{isShow:"="},controllerAs:"vm",controller:["$scope","$stateParams","$http","getDomainData","$cookies","Auth","storage",function(a,b,c,d,e,f,g){function h(){for(var a="",b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",c=0;c<15;c++)a+=b.charAt(Math.floor(Math.random()*b.length));return a}
12a.voice=null,a.debugMessages=[],a.speechMessages=[],a.testtest=[{name:"asd",type:"text"},{name:"asd",type:"card"},{name:"asd",type:"card"},{name:"asd",type:"slider"}],a.widget_token="",a.messages=[],a.message={text:""};var i=g.getItem("authData"),j=new Faye.Client(d.faye,{timeout:20,retry:5});new Faye.Client(d.faye,{timeout:20,retry:5}).subscribe("/messages_"+f.getUser().account_id,function(b){a.messages.push(b),a.$digest()}),j.subscribe("/log_"+b.id,function(b){b.messages.forEach(function(b){a.debugMessages.push(b)}),a.$digest()}),a.newDialog=function(){var e=h();c.get(d.host+"/widget/messages/"+b.id+"/"+e).then(function(b){a.messages=[]},function(a){})},a.changeShow=function(){a.isShow=!a.isShow},a.sendMessage=function(){c.post(d.host+"/message/debug",{user_id:f.getUser().account_id,type:"text",content:{text:a.message.text},bot_id:b.id},{headers:{"X-Access-Token":i.access_token}}).then(function(b){a.message.text=""},function(a){})},e.getObject("user_widget_token_test")?a.widget_token=e.getObject("user_widget_token_test"):(e.putObject("user_widget_token_test",h()),a.widget_token=e.getObject("user_widget_token_test")),c.get(d.host+"/widget/messages/"+b.id+"/"+a.widget_token).then(function(b){b.data.messages&&b.data.messages&&(a.messages=b.data.messages)},function(a){}),c.get(d.host+"/bot/"+b.id).then(function(b){1==b.data.status&&(a.bot=b.data)},function(a){})}]}}]),angular.module("brnaiApp").controller("StoreAttributeValuesCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","Upload",function(a,b,c,d,e,f,g,h,i){a.values=[],a.newValue={},a.fields=[],a.valueToAdd={},a.uploaders={},b.getCategory(g.id,g.category).then(function(b){a.category=b,a.attribute=a.category.attributes[g.attribute],a.attribute.selectable||d.go("store-categories",{id:g.id}),"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1),a.fields.push(c)}):("file"!=a.attribute.type&&"image"!=a.attribute.type||(a.uploaders[a.attribute.name]=!1),a.newValue={value:""}),a.values=a.attribute.values},function(b){a.category={},a.values=[]}),a.createValue=function(){if("mixed"!=a.attribute.type&&~a.values.indexOf(a.newValue.value))return void h.error({delay:6e4,message:'Value "'+a.newValue.value+'" already exist'});if("mixed"==a.attribute.type){var c=!1;
12if(angular.forEach(a.newValue,function(b,c){"number"==a.attribute.schema.fields[c].type&&(a.newValue[c]=parseFloat(b))}),angular.forEach(a.values,function(b,d){b[a.attribute.schema.key]==a.newValue[a.attribute.schema.key]&&(c=!0)}),c)return void h.error({delay:6e4,message:'Value "'+a.newValue[a.attribute.schema.key]+'" already exist'})}"number"==a.attribute.type&&(a.newValue.value=parseFloat(a.newValue.value)),b.createCategoryAttributeValue(g.category,g.attribute,a.newValue).then(function(b){b.status&&(h.success({message:"Value added successfully"}),"mixed"==a.attribute.type?(a.valueToAdd=Object.assign({},a.newValue),a.values.push(a.valueToAdd),angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1)})):(a.values.push(a.newValue.value),a.newValue={value:""}))},function(b){a.category={}})},a.deleteValue=function(c){if(confirm("Are you sure, you want to delete value?")&&("mixed"!=a.attribute.type&&b.deleteCategoryAttributeValue(g.category,g.attribute,c).then(function(b){b.status&&(a.values.splice(a.values.indexOf(c),1),h.success({message:'Value "'+c+'" was successfully deleted'}))}),"mixed"==a.attribute.type)){var d=c[a.attribute.schema.key];b.deleteCategoryAttributeValue(g.category,g.attribute,d).then(function(b){b.status&&(a.values.splice(a.values.indexOf(c),1),h.success({message:'Value "'+d+'" was successfully deleted'}))})}},a.addFile=function(b,c,d,e){i.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(a.newValue[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})}}]),angular.module("brnaiApp").controller("ClientdetailCtrl",["$scope","$http","$stateParams","getDomainData","Notification",function(a,b,c,d,e){function f(){b.get(d.host+"/client/"+c.client_id).then(function(b){a.client=b.data,a.mode="auto"==b.data.mode,a.client.role?a.selected.role=a.client.role:a.selected.role=null,k(),0==a.tags.length&&h()})}function g(){b.get(d.host+"/roles/"+c.id).then(function(b){b.status&&(a.rolesFilters=b.data.roles)})}function h(){b.get(d.host+"/clients/filters/"+a.client.bot_id).then(function(b){a.tags=b.data.filters.tags})}function i(a){b.post(d.host+"/clients/tag/add/",{tag_id:a.tag_id,client_ids:[c.client_id]}).then(function(a){a&&(f(),e.success({message:"Tag added"}))},function(a){e.error({delay:6e4,message:a.message})})}function j(a){try{var b=JSON.parse(a);if(b&&"object"==typeof b)return b}catch(a){}return!1}function k(){a.isVarible=!!a.client.variables&&Object.keys(a.client.variables).length>0}a.client={},a.jsoneditor={mode:"tree"},a.botId=c.id,a.mode=!0,a.tagOption="new",a.newTag={name:"",tag_id:""},a.tags=[],a.selected={role:null},a.rolesFilters=[],a.isVarible=!1,a.editorLoaded=function(a){a.expandAll()},a.Save=function(){var f=j(a.client.variables);f&&(a.client.variables=f),a.selected.role?a.client.role=a.selected.role:a.client.role=null,b.put(d.host+"/client/"+c.client_id,a.client).then(function(a){a&&e.success({message:"Changes successfully saved"})},function(a){e.error({delay:6e4,message:a.message})})},a.changeMode=function(){a.client.mode=a.mode?"auto":"manual"},a.removeTag=function(a){b.post(d.host+"/clients/tag/remove/",{tag_id:a.tag_id,client_ids:[c.client_id]}).then(function(a){f(),e.success({message:"Tag removed"})},function(a){e.error({delay:6e4,message:a.message})})},a.setTag=function(){ 13if(""!=a.newTag.tag_id)return i(a.newTag),void(a.newTag.tag_id="");b.post(d.host+"/tag",{name:a.newTag.name,bot_id:a.client.bot_id}).then(function(b){b.data.tag_id&&(i(b.data),a.newTag.tag_id="",a.newTag.name="",h(),$("#addTag").modal("hide"))},function(a){e.error({delay:6e4,message:a.message})})},g(),f()}]),function(){var module=angular.module("brnaiApp");module.directive("ngJsoneditor",["$compile","$q","$http","$templateCache","getDomainData",function($compile,$q,$http,$templateCache,getDomainData){function getTemplatePromise(a){if(a){return $q.when('<div style="margin-left: {{20*(collapsedLevel-1)*(-1)}}px;"><div style="{{collapsedLevel!= \'1\'?\' margin-left: 7px;\':\'\'}}" class="jsoneditor_add" data-toggle="modal" data-target="#add_item{{collapsedLevel}}{{parentName}}"><i class="material-icons add-icon">add</i>Add item</div><i ng-if="node.isCollapsed && utils.wrap.middle(node)!=\'no data\' && collapsedLevel != \'1\'" class="jsoneditor_arrow fa fa-arrow-down" ng-click="utils.clickNode(node)"></i><span ng-if="!node.isCollapsed && utils.wrap.middle(node)!=\'no data\' && collapsedLevel != \'1\'"><i class="jsoneditor_arrow fa fa-arrow-up" ng-click="utils.clickNode(node)"></i> {{parentName}}</span><span class="jsoneditor_close_text" ng-if="utils.wrap.middle(node)==\'no data\'">{{parentName}} is empty </span> <span ng-if="utils.wrap.middle(node)!=\'no data\' && collapsedLevel != \'1\'" class="jsoneditor_close_text" ng-bind="node.isCollapsed ? utils.wrap.middle(node) : \' \'" ng-click="utils.clickNode(node)"></span><ul class="jsoneditor_contener" ng-if="!node.isCollapsed" style="{{collapsedLevel!= \'1\'?\'width: calc(100% + 4px);left: 20px;position: relative;\':\'\'}}"><li ng-repeat="key in utils.keys(json) track by key"><div draggable style="display: inline-flex; width: 100%;"><span class="jsoneditor_obj" ng-hide="childs[key].isObject()"><div class="jsoneditor_fields mb20"><div ng-if="childs[key].type() === \'date\'"><custom-input placeholder="{{ key }}" ng-model="json[key]" ng-click="isDatetime = !isDatetime" title="{{ key }}" is-back-placeholder="true"> </custom-input><datetimepicker ng-show="isDatetime" ng-model="json[key]" ng-change="isDatetime = false; datatimeChange(json[key], key)" data-datetimepicker-config="{ dropdownSelector: \'.dropdown-toggle-date\' }"></datetimepicker></div><div class="card-checker" ng-if="childs[key].type() === \'boolean\'"><input type="checkbox" ng-model="json[key]" id="modeSwitcer" class="ng-pristine ng-untouched ng-valid"><label for="modeSwitcer"><span class="checker-ico"></span> {{ key }}</label></div><custom-input placeholder="{{ key }}" ng-if="childs[key].type() === \'number\'" type-input="number" ng-model="json[key]" title="{{ key }}" is-back-placeholder="true"> </custom-input><custom-input placeholder="{{ key }}" ng-if="childs[key].type() === \'function\'" ng-model="jsonFn[key]" type-input="textarea" title="{{ key }}" is-back-placeholder="true"> </custom-input><custom-input placeholder="{{ key }}" ng-if="childs[key].type() !== \'number\' && childs[key].type() !== \'date\' && childs[key].type() !== \'function\'" ng-model="json[key]" type-input="text" ng-change="utils.validateNode(key)" title="{{ key }}" is-back-placeholder="true"> </custom-input></div></span><ng-jsoneditor style="width: 100%;" is-full-edit="true" json="json[key]" parent-name="{{key}}" edit-level="{{editLevel}}
13" collapsed-level="{{+collapsedLevel - 1}}" node="childs[key]" timeout="{{timeout}}" ng-show="childs[key].isObject()"></ng-jsoneditor><i class="material-icons close-icon jsoneditor_remove" ng-click="utils.removeNode(key)" ng-show="node.isHighEditLevel">close</i></div></li></ul><div id="add_item{{collapsedLevel}}{{parentName}}" class="modal fade" role="dialog"><div class="modal-dialog"><div class="flex-row create-bot flex-row-centered"><div class="flex-col-small"><div class="create-bot-wrap"><div><div class="bots-list-item-name"><i class="material-icons close-icon "style="margin-left: -30px; margin-right: 5px; top: 7px;"data-dismiss="modal">close</i> Add new Item</div><div class="mb-title"><div class="mb10" ng-if="!isArray(json)"><custom-input placeholder="Name" ng-model="newItem.name" title="Name "is-back-placeholder="true" style="width: 100%;"></custom-input></div><div class="mb10"><custom-dropdown ng-model="newItem.type" opt-value="value" opt-description="name" style="width: 100%;" title="Type" placeholder="" is-back-placeholder="true"is-model-init="true" array="[{name:\'string\',value:\'string\'},{name:\'array\',value:\'array\'},{name:\'object\',value:\'object\'}]"></custom-dropdown></div></div><button type="button" class="brn-btn brn-primary" ng-click="addFeald()" data-dismiss="modal">Add</button></div></div></div></div></div></div></div >')}return $q.when('<i ng-if="node.isCollapsed && utils.wrap.middle(node)!=\'no data\' && collapsedLevel != \'1\'" class="jsoneditor_arrow fa fa-arrow-down" ng-click="utils.clickNode(node)"></i><i ng-if="!node.isCollapsed && utils.wrap.middle(node)!=\'no data\' && collapsedLevel != \'1\'" class="jsoneditor_arrow fa fa-arrow-up" ng-click="utils.clickNode(node)"></i><span class="jsoneditor_close_text" ng-if="utils.wrap.middle(node)==\'no data\'">this object or array is empty</span><span ng-if="utils.wrap.middle(node)!=\'no data\' && collapsedLevel != \'1\'" class="jsoneditor_close_text" ng-bind="node.isCollapsed ? utils.wrap.middle(node) : \' \'" ng-click="utils.clickNode(node)"></span><ul class="jsoneditor_contener" ng-if="!node.isCollapsed"><li ng-repeat="key in utils.keys(json) track by key"><div draggable style="display: inline-flex; width: 100%;"><span class="jsoneditor_obj" ng-hide="childs[key].isObject()"><div class="jsoneditor_fields"><div ng-if="childs[key].type() === \'date\'"><custom-input placeholder="{{ key }}" ng-model="json[key]" ng-click="isDatetime = !isDatetime" title="{{ key }}" is-back-placeholder="true"> </custom-input><datetimepicker ng-show="isDatetime" ng-model="json[key]" ng-change="isDatetime = false; datatimeChange(json[key], key)" data-datetimepicker-config="{ dropdownSelector: \'.dropdown-toggle-date\' }"></datetimepicker></div><div class="card-checker" ng-if="childs[key].type() === \'boolean\'"><input type="checkbox" ng-model="json[key]" id="modeSwitcer" class="ng-pristine ng-untouched ng-valid"><label for="modeSwitcer"><span class="checker-ico"></span> {{ key }}</label></div><custom-input placeholder="{{ key }}" ng-if="childs[key].type() === \'number\'" type-input="number" ng-model="json[key]" title="{{ key }}" is-back-placeholder="true"> </custom-input><custom-input placeholder="{{ key }}" ng-if="childs[key].type() === \'function\'" ng-model="jsonFn[key]" type-input="textarea" title="{{ key }}" is-back-placeholder="true"> </custom-input><custom-input placeholder="{{ key }}" ng-if="childs[key].type() !== \'number\' && childs[key].type() !== \'date\' && childs[key].type() !== \'function\'" ng-model="json[key]" type-input="text" ng-change="utils.validateNode(key)" title="{{ key }}" is-back-placeholder="true"> </custom-input></div></span><ng-jsoneditor style="width: 100%;" json="json[key]" edit-level="{{editLevel}}" collapsed-level="{{+collapsedLevel - 1}}" node="childs[key]" timeout="{{timeout}}" ng-show="childs[key].isObject()"></ng-jsoneditor><i class="material-icons close-icon jsoneditor_remove" ng-click="utils.removeNode(key)" ng-show="node.isHighEditLevel">close</i></div></li></ul>')}return{restrict:"EA",scope:{json:"=",node:"=?",childs:"=?",editLevel:"@",collapsedLevel:"@",timeout:"@",timeoutInit:"@",isFullEdit:"=?",parentName:"@"},controller:["$scope",function($scope){$scope.parentName=$scope.parentName?$scope.parentName:"",$scope.childs={},$scope.isVarible=!1,$scope.jsonFn={},$scope.newItem={name:"",type:"string"},$scope.isArray=function(a){return Array.isArray(a)},$scope.addFeald=function(){if(Array.isArray($scope.json))switch($scope.newItem.type){case"string":$scope.json.push("");break;case"array":$scope.json.push([]);break;case"object":$scope.json.push({})}else switch($scope.newItem.type){case"string":$scope.json[$scope.newItem.name]="";break;case"array":$scope.json[$scope.newItem.name]=[];break;case"object":$scope.json[$scope.newItem.name]={}}$scope.newItem={name:"",type:"string"}}
13,$scope.utils={wrap:{middle:function(a){if(void 0===a||null===a)return"";if(a.length()<1)return"no data";if($scope.isFullEdit)switch(a.type()){case"array":return $scope.parentName+" data [...]";case"object":return $scope.parentName+" data {...}";default:return $scope.parentName}else switch(a.type()){case"array":return"array data [...]";case"object":return"object data {...}";default:return""}}},clickNode:function(a){a.isCollapsed=!a.isCollapsed},removeNode:function(a){"object"===$scope.node.type()?delete $scope.json[a]:"array"===$scope.node.type()&&$scope.json.splice(a,1),$scope.refresh()},validateNode:function(a){if(null===$scope.json[a]);else if(void 0===$scope.json[a]||""===$scope.json[a])$scope.json[a]=null;else if(!isNaN(+$scope.json[a])&&isFinite($scope.json[a]))$scope.json[a]=+$scope.json[a];else if($scope.utils.tryGetFunction($scope.json[a]))$scope.json[a]=$scope.utils.tryGetFunction($scope.json[a]),$scope.utils.textarea.init(a);else if($scope.node.isHighEditLevel)try{var b=JSON.parse($scope.json[a]);$scope.json[a]=b,$scope.refresh()}catch(a){}else"true"!==$scope.json[a]&&"false"!==$scope.json[a]||($scope.json[a]=JSON.parse($scope.json[a]),$scope.refresh())},moveNode:function(a,b){if("object"===$scope.node.type()){var c={},d=Object.keys($scope.json),e=d[a],f=d[b];angular.forEach($scope.json,function(d,g){g==f?b>a?(c[f]=$scope.json[f],c[e]=$scope.json[e]):(c[e]=$scope.json[e],c[f]=$scope.json[f]):g!=e&&(c[g]=d)}),$scope.json=c}else if("array"===$scope.node.type()){var g=$scope.json[a];$scope.json.splice(a,1),$scope.json.splice(b,0,g),$scope.$apply($scope.refresh())}},textarea:{init:function(a){null!==$scope.json[a]&&($scope.jsonFn[a]=$scope.json[a].toString().trim())},validate:function(a){$scope.utils.tryGetFunction($scope.jsonFn[a])?angular.element($scope.utils.textarea.element).removeClass("invalid").addClass("valid"):angular.element($scope.utils.textarea.element).removeClass("valid").addClass("invalid")},onFocus:function(a,b){$scope.utils.textarea.valueBeforeEditing=angular.copy($scope.jsonFn[b]),$scope.utils.textarea.element=a.currentTarget,$scope.utils.textarea.validate(b)},onChange:function(a){$scope.utils.textarea.validate(a)},onBlur:function(a){if($scope.utils.textarea.valueBeforeEditing!==$scope.jsonFn[a]){$scope.$emit("onFunctionChanged");var b=$scope.utils.tryGetFunction($scope.jsonFn[a]);b?$scope.json[a]=b:($scope.json[a]=$scope.jsonFn[a],delete $scope.jsonFn[a],$scope.utils.validateNode(a))}}},tryGetFunction:function(str){if("function"===str.trim().substring(0,8))try{var func=eval("("+str.trim()+")");return func}catch(a){}},keys:function(a){return a instanceof Object?Object.keys(a):[]},getType:function(a){return null===a?"null":void 0===a?"undefined":a.constructor===Array?"array":a.constructor===Object?"object":a.constructor===String?"Invalid Date"===new Date(a)||isNaN(new Date(a))?"string":"date":a.constructor===Date?"date":a.constructor===Number?"number":a.constructor===Boolean?"boolean":a.constructor===Function?"function":"object"}},$scope.datatimeChange=function(a,b){a.constructor===Date&&($scope.json[b]=a.toISOString())},$scope.node={isCollapsed:!$scope.collapsedLevel||!+$scope.collapsedLevel||+$scope.collapsedLevel<=0,isHighEditLevel:"low"!==$scope.editLevel,dragChildKey:null,dragElements:{},isObject:function(){return angular.isObject($scope.json)},type:function(){return $scope.utils.getType($scope.json)},length:function(){return $scope.json instanceof Object?Object.keys($scope.json).length:0},refresh:function(){$scope.refresh()}}}],link:function(a,b,c){var d=a.$new(),e=getTemplatePromise(a.isFullEdit);a.build=function(c){a.node.isObject()&&e.then(function(a){b.html("").append($compile(a)(c))})},a.refresh=function(){d.$destroy(),d=a.$new(),a.build(d)},a.timeoutInit?setTimeout(function(){a.build(d)},a.timeoutInit):a.timeout&&+a.timeout>=0?setTimeout(function(){a.build(d)},a.timeout):a.build(d)}}}]).directive("draggable",["$document",function(a){return{link:function(b,c,d){function e(a){var c,d,e=i(b.node.dragElements[b.key]()[0]);d=p>=o.length-1?1/0:i(b.node.dragElements[o[p+1]]()[0]).meanY,c=p<=0?-1/0:i(b.node.dragElements[o[p-1]]()[0]).meanY,e.top+e.height>d+1?(h(p,p+1),b.node.dragElements[o[p]]().parent().append(n),p+=1):e.top<c-1&&(h(p,p-1),b.node.dragElements[o[p]]().parent().prepend(n),p-=1),g(j,a.pageY-m)}function f(){b.utils.moveNode(b.$index,p),b.$apply(),c.removeClass("drag"),g(j,k),n.remove(),a.unbind("mousemove",e),a.unbind("mouseup",f)}function g(a,b){c.css({top:b+"px",left:a+"px"})}function h(a,b){var c=o[a];o[a]=o[b],o[b]=c}function i(a){var b=a.getBoundingClientRect(),c=Math.round(b.top+window.pageYOffset),d=Math.round(b.left+window.pageXOffset),e=void 0===a.offsetHeight?0:a.offsetHeight;return{top:c,left:d,height:e,width:void 0===a.offsetWidth?0:a.offsetWidth,meanY:c+e/2}}var j,k,l,m,n,o,p;b.node.dragElements[b.key]=function(){return c},c.on("mousedown",function(d){if(d.ctrlKey||d.shiftKey){b.node.dragChildKey=b.key;var h=i(b.node.dragElements[b.key]()[0]);null==b.childs[b.key].dragChildKey&&(d.preventDefault(),j=h.left,k=h.top,l=d.pageX-j,m=d.pageY-k,c.addClass("drag"),c.css({width:h.width+"px"}),g(j,k),n=angular.element("<div class='empty'></div>"),n.css({height:h.height-2+"px",width:h.width-2+"px"}),c.after(n),o=Object.keys(b.json),p=b.$index,a.on("mousemove",e),a.on("mouseup",f))}}),c.on("mouseup",function(a){b.node.dragChildKey=null})}}}])}(),angular.module("brnaiApp").controller("SettingsRolesCtrl",["$http","$scope","getDomainData","Notification","$stateParams",function(a,b,c,d,e){function f(a){return""===a.name?(d.error({delay:6e4,message:"Name cannot be empty"}),!1):""!==a.title||(d.error({delay:6e4,message:"Title cannot be empty"}),!1)}function g(){b.inProgress=!0,a.get(c.host+"/roles/"+e.id).then(function(a){a.status&&(b.roles=a.data.roles),b.inProgress=!1})}b.roles=[],b.inProgress=!1,b.newRole={name:"",title:""},b.updateRole=function(b){f(b)&&a.put(c.host+"/role/"+e.id,b).then(function(a){g()})},b.createRole=function(){f(b.newRole)&&a.post(c.host+"/role/"+e.id,b.newRole).then(function(a){a&&(b.newRole.name="",b.newRole.title="",g(),$("#addRole").modal("hide"))})},b.deleteRole=function(b){f(b)&&a.delete(c.host+"/role/"+e.id+"?name="+b.name).then(function(a){g()})},g()}]),angular.module("brnaiApp").controller("SettingsStoreCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification",function(a,b,c,d,e,f,g){a.loading=!0,a.inProgress=!0,a.options={limit:30,offset:0,page:0,lastPage:!1},a.categories=[],c.getCategories(d.id).then(function(b){a.categories=b.categories,a.inProgress=!1},function(b){a.categories=[]}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}
13,a.deleteCategory=function(b){confirm("Are you sure, you want to delete category?")&&c.deleteCategory(b.category_id).then(function(c){c.data.status&&(a.categories.splice(a.categories.indexOf(b),1),g.success({message:"Category "+b.title+" successfully deleted"}))})}}]),angular.module("brnaiApp").controller("StoreDashboardCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification",function(a,b,c,d,e,f,g){}]),angular.module("brnaiApp").controller("CategoryAttributesCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification",function(a,b,c,d,e,f,g,h){a.category={},a.attributes=[],b.getCategory(g.id,g.category).then(function(b){a.category=b,angular.forEach(a.category.attributes,function(b,c){b.selectable&&a.attributes.push(b)})},function(b){a.category={}})}]),angular.module("brnaiApp").directive("customInput",function(){return{restrict:"EA",require:"ngModel",templateUrl:"views/custom-input.html",replace:!0,transclude:!0,scope:{text:"=ngModel",title:"@title",placeholder:"@placeholder",isBackPlaceholder:"=",isDisabled:"=?ngDisabled",enter:"&",onBlur:"&?ngBlur",onFocus:"&?ngFocus",isReadonly:"=?isReadonly",isInput:"=?isInput",isRequired:"=?isRequired",showError:"=?showError",showHint:"=?showHint",hintPlacement:"=?hintPlacement",typeInput:"@",validator:"=?validator",onChange:"&ngChange",disableCounter:"=disableCounter",isBackPlaceholderShow:"=?"},link:function(a,b,c){a.showError=void 0===a.showError||a.showError,a.typeInput=a.typeInput?a.typeInput:"text",a.transcluding=$(b).find(".custom-input-container")[0].children[0].children.length>0,a.isTextExist=null!==a.text&&void 0!==a.text&&""!==a.text,a.isTextExist=a.isTextExist,a.isActive=a.isBackPlaceholder&&a.isTextExist,a.isFocused=!1,a.invalide=!1;var d=!1;a.isBackPlaceholderShow=void 0!==a.isBackPlaceholderShow&&a.isBackPlaceholderShow,a.onChange=a.onChange||function(){};var e={};setTimeout(function(){(e=b.find("input")[0])||(e=b.find("textarea")[0])},0),a.$watch("text",function(b,c){setTimeout(function(){a.isTextExist=void 0!==b&&null!==b&&""!==b||e&&void 0!==e.value&&null!==e.value&&""!==e.value,a.isActive=a.isTextExist||a.isFocused,(a.isRequired||""!=a.typeInput&&"text"!=a.typeInput&&"number"!=a.typeInput)&&(d=!b),a.$apply()},0)}),a.clickEnter=function(){a.enter()},a.blurInput=function(){a.isDisabled||(d=!!(a.isRequired||""!=a.typeInput&&"text"!=a.typeInput&&"number"!=a.typeInput)&&!a.text,a.isFocused=!1,a.isTextExist=void 0!==a.text&&null!==a.text&&""!==a.text||e&&void 0!==e.value&&null!==e.value&&""!==e.value,a.isActive=a.isBackPlaceholder&&a.isTextExist,d&&(a.invalide=$(e).hasClass("ng-invalid")),a.onBlur&&a.onBlur())},a.focusInput=function(){a.isDisabled||(a.isActive=a.isBackPlaceholder&&!0,a.invalide=!1,a.isFocused=!0,a.onFocus&&a.onFocus())}}}}),angular.module("brnaiApp").directive("customDropdown",["$compile",function(a){return{restrict:"E",require:"ngModel",templateUrl:"views/custom-dropdown.html",replace:!0,scope:{model:"=ngModel",init:"=?ngInit",array:"=",icon:"=",placeholder:"@placeholder",optValue:"@",optDescription:"@",optItems:"@",hasCategories:"@",cronNumeralFilter:"=?",cronMonthNameFilter:"=?",cronDayNameFilter:"=?",title:"@title",isBackPlaceholder:"=?",isBackPlaceholderActive:"=?",isDisabled:"=?ngDisabled",onChange:"&ngChange",onInit:"&onInit",setError:"&",isModelInit:"=?",inactivePlaceholder:"=?",isLocationObject:"=?",require:"=",errorMsg:"=?",errorRequireText:"=?",isReset:"=?isReset"},link:function(a,b,c){function d(){a.require&&!a.model?a.errorMsg=a.errorRequireText?a.errorRequireText:"Do not leave empty fields":a.errorMsg="",a.setError()}function e(b,c){if(a.isPlaceholder=!a.model,!a.isPlaceholder&&a.model[a.optDescription]&&(a.selectedValue=a.model[a.optDescription]),(void 0===b||null===b)&&!a.isModelInit&&a.placeholder)return void(a.selectedValue=a.placeholder);if(void 0!==b&&null!=b&&a.isModelInit&&a.array)for(var d=null,e=0;e<a.array.length;e++)if(a.hasCategories)angular.forEach(a.array[e][a.optItems],function(c){return d=c,d.coordinates&&b.coordinates&&JSON.stringify(d.coordinates)==JSON.stringify(b.coordinates)?void(a.selectedValue=d):d==b||d[a.optValue]==b?(a.selectedValue=a.optDescription?d[a.optDescription]?d[a.optDescription]:"":d,a.cronNumeralFilter&&(a.selectedValue=f(a.selectedValue)),a.cronMonthNameFilter&&(a.selectedValue=g(a.selectedValue)),void(a.cronDayNameFilter&&(a.selectedValue=h(a.selectedValue)))):void 0});else{if(d=a.array[e],d.coordinates&&b.coordinates&&JSON.stringify(d.coordinates)==JSON.stringify(b.coordinates))return void(a.selectedValue=d);if(d==b||d[a.optValue]==b)return a.selectedValue=a.optDescription?d[a.optDescription]?d[a.optDescription]:"":d,a.cronNumeralFilter&&(a.selectedValue=f(a.selectedValue)),a.cronMonthNameFilter&&(a.selectedValue=g(a.selectedValue)),void(a.cronDayNameFilter&&(a.selectedValue=h(a.selectedValue)))}""===a.selectedValue&&a.placeholder?a.selectedValue=a.placeholder:void 0!==b&&null!=b&&a.isModelInit&&""===a.selectedValue&&(a.selectedValue=b[a.optDescription]?b[a.optDescription]:"string"==typeof b||"number"==typeof b?b:""),!b&&!a.placeholder&&a.array&&a.array.length>0&&(a.model=a.optValue&&void 0!==a.array[0][a.optValue]?a.array[0][a.optValue]:a.array[0])}function f(a){switch(a){case 1:return"1st";case 2:return"2nd";case 3:return"3rd";case 21:return"21st";case 22:return"22nd";case 23:return"23rd";case 31:return"31st";case null:return null;default:return a+"th"}}
13function g(a){var b={1:"January",2:"February",3:"March",4:"April",5:"May",6:"June",7:"July",8:"August",9:"September",10:"October",11:"November",12:"December"};return null!==a&&angular.isDefined(b[a])?b[a]:null}function h(a){var b;return b={0:"Sunday",1:"Monday",2:"Tuesday",3:"Wednesday",4:"Thursday",5:"Friday",6:"Saturday"},null!==a&&angular.isDefined(b[a])?b[a]:null}a.isActive=!1,a.isPlaceholder=!1,a.firsEnter=!1,a.selectedValue="",a.isFilter=a.cronMonthNameFilter||a.cronDayNameFilter||a.cronNumeralFilter,a.config={autoHideScrollbar:!0,axis:"y",theme:"minimal",advanced:{updateOnContentResize:!0},scrollInertia:0},d();var i=!1;a.pressDropdown=function(){i=!1},a.upDropdown=function(){i=!0},a.toogleDropdown=function(){setTimeout(function(){a.isDisabled||(a.isActive=!a.isActive,a.isActive&&(b.find(".select").focus(),a.firsEnter||(a.firsEnter=!0)),a.$apply())},10)},a.blurDropdown=function(){!a.isDisabled&&i&&(a.isActive=!1)},a.getDescription=function(b){return b[a.optDescription]},a.toogleSubDropdown=function(){b.find(".select").focus()},a.selectItemCategory=function(b,c){a.isDisabled||(a.isActive=!1,-1==c&&a.placeholder?a.inactivePlaceholder||(a.model=null,a.selectedValue=a.placeholder):(a.model=a.optValue?a.array[b][a.optItems][c][a.optValue]:a.array[b][a.optItems][c],a.selectedValue=a.optDescription?a.array[b][a.optItems][c][a.optDescription]:a.array[b][a.optItems][c]),setTimeout(function(){a.onChange(),d(),a.$apply()},0))},a.selectItem=function(b,c){a.isDisabled||(a.isActive=!1,-1==b&&a.placeholder?a.inactivePlaceholder||(a.model=null,a.selectedValue=a.placeholder):(a.hasCategories?(a.model=a.optValue?a.array[a.optItems][b][a.optValue]:a.array[b][a.optItems],a.selectedValue=a.optDescription?a.array[optItems][b][a.optDescription]:a.array[b][a.optItems]):(a.model=a.optValue?a.array[b][a.optValue]:a.array[b],a.selectedValue=a.optDescription?a.array[b][a.optDescription]:a.array[b]),a.cronNumeralFilter&&(a.selectedValue=f(a.selectedValue)),a.cronMonthNameFilter&&(a.selectedValue=g(a.selectedValue)),a.cronDayNameFilter&&(a.selectedValue=h(a.selectedValue))),setTimeout(function(){a.onChange(),d(),a.$apply()},0))},!1!==a.isReset&&!0!==a.isReset||a.$watch("isReset",function(b,c){b&&a.selectItem(-1)}),a.$watch("placeholder",function(b,c){!b||""!==a.selectedValue||a.init||a.isModelInit||(a.selectedValue=b)},!0),a.$watch("array",function(b,c){b&&b!=c&&e(a.model,a.model)},!0),a.$watch("model",e,!0),a.$watch("init",function(b,c){b&&""===a.selectedValue&&(a.selectedValue=b[a.optDescription]?b[a.optDescription]:"",a.model=a.optValue?b[a.optValue]?b[a.optValue]:null:b,setTimeout(function(){a.onInit()},0))},!0);var j=function(c){a.isActive&&27===c.keyCode&&b.find(".select").blur()};$(document).on("keyup",j),a.$on("$destroy",function(){$(document).off("keyup",j)})}}}]),angular.module("brnaiApp").directive("customScroller",function(){return{restrict:"EA",templateUrl:"views/custom-scroller.html",replace:!0,transclude:!0,scope:{isShadow:"=?isShadow",axis:"@",paddings:"@",width:"@",height:"@",visibleScrols:"=?visibleScrols",isTable:"=?isTable",isAutoTableBtnPadding:"=?isAutoTableBtnPadding",isDisableFilters:"=?isDisableFilters",onScrolledDown:"&?onScrolledDown",isResizeOnly:"="},link:function(a,b,c){function d(){setTimeout(function(){e(),a.isTable&&(h(b[0].clientWidth),r||(r=b.find(".control-fixed")[1]),r&&k(r.clientWidth),a.$watch(function(){b.find(".dropdown.open").length?b.find(".mCSB_container")[0].style.minHeight="400px":b.find(".mCSB_container")[0].style.minHeight="0px"})),"y"==a.axis&&void 0!=a.onScrolledDown&&(o||(o=b.find(".mCSB_container"),o=o[0]),o&&f(o.style.top)),s=!1},10,!1)}function e(){a.isShadow&&"y"==a.axis&&(p||(p=b.find(".mCSB_scrollTools_vertical"),p=p[p.length-1])),a.isTable&&"x"==a.axis&&(q||(q=b.find(".mCSB_scrollTools_horizontal"),q=q[q.length-1]),q&&(n(),g(q.style.display)))}function f(c){c&&(t||(t=b.find(".mCustomScrollBox ")[0]),u||(u=b.find(".mCSB_container ")[0]),u.clientHeight+parseInt(c)-t.clientHeight==0&&a.onScrolledDown())}function g(a){a&&j()}function h(c){if(c&&"x"==a.axis&&a.isTable){var d=b.find("table")[0];d&&c<d.clientWidth&&j()}}function j(){var c=b.find("table")[0];if(c){var d=b.find(".dropdown-filters")[0],e=parseInt(b.find(".mCSB_container")[0].style.left);e=c.clientWidth+e-b[0].clientWidth,e=e>
130?e:0,d&&!a.isDisableFilters&&(d.style.right=e+"px");var f=b.find(".control-fixed");if(f&&0!=f.length)for(i=1;i<f.length;i++)if(f[i].style.right=e+"px",f[i].dataset.left&&(f[i].style.right="initial",f[i].style.left=-1*parseInt(b.find(".mCSB_container")[0].style.left)+"px"),a.isAutoTableBtnPadding){var g=$(f[i].parentElement)[0].clientHeight;g/=2,g=1==i?g-8:g-13,f[i].style.paddingTop=g+"px"}}}function k(a){a&&(b.find(".control-fixed")[0].style.width=a+"px")}function l(){a.style={width:a.width,height:a.height},a.paddingStyle={padding:a.paddings},a.isTable?a.style.overflowX="auto":a.style.position="relative"}function m(a){setTimeout(function(){j()},0)}function n(){var a=b.find(".mCSB_container");a[0]&&(a.unbind("mousewheel"),a.bind("mousewheel",m),b.unbind("mousemove"),b.bind("mousemove",m))}a.axis=c.axis||"y",a.isShadow=a.isShadow||!1,a.paddings=c.paddings||"0px",a.width=c.width||"100%",a.height=c.height||"100%",a.visibleScrols=a.visibleScrols||!1,a.isTable=a.isTable||!1,a.isAutoTableBtnPadding=a.isAutoTableBtnPadding||!1,a.isDisableFilters=a.isDisableFilters||!1,a.config={autoHideScrollbar:!0,axis:a.axis,theme:"minimal",advanced:{updateOnContentResize:!0},scrollInertia:0};var o=null,p=null,q=null,r=null,s=!1;a.isResizeOnly?a.$watch("windowWidth",function(a){e()},!0):a.$watch(function(){if(s)return null;s=!0,d()});var t=null,u=null;a.$watch("padding",function(a){l()}),a.$watch("width",function(a){l()}),a.$watch("height",function(a){l()}),l()}}});angular.module("brnaiApp").controller("StoreCustomersCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification","$location",function(a,b,c,d,e,f,g,h){function i(){a.inProgress||(a.inProgress=!0,c.getCustomers(d.id,a.options,j()).then(function(b){b.customers.length?angular.forEach(b.customers,function(b,c){a.customers.push(b)}):a.options.lastPage=!0,a.inProgress=!1,a.loading=!1},function(b){a.customers=[],a.inProgress=!1,a.loading=!1}))}function j(){var b={};for(var c in a.filters)if(a.filters.hasOwnProperty(c)){if("isActive"==c||!a.filters[c].value)continue;b[c]=a.filters[c].value}return b}a.loading=!0,a.inProgress=!0,a.tableHeader=[{title:"Clients"},{title:"Edit mask",link:"store-customer-mask({id: botNav.botInfo.bot_id})"},{}],a.options={limit:30,offset:0,page:0,lastPage:!1},a.customers=[],a.visibleAttributes=[],a.swapFilter=function(){if(a.filters.isActive=!a.filters.isActive,!a.filters.isActive){for(var b in a.filters)if(a.filters.hasOwnProperty(b)){if("isActive"==b||!a.filters[b].value)continue;delete a.filters[b]}a.filterCustomers()}},a.filters={isActive:!1},a.filterCustomers=function(b){setTimeout(function(){h.path("/bot/"+d.id+"/store/customers").search(j()),a.options={limit:30,offset:0,page:0,lastPage:!1},a.customers=[],i()},100)},c.getStore(d.id).then(function(b){if(a.customer=b.customer,!a.isEmpty(a.customer.schema)){var c=h.search();angular.forEach(a.customer.schema,function(b,d){b.visible&&(a.visibleAttributes.push(b),c[b.name]&&(a.filters[b.name]={value:c[b.name]}))});var d=a.visibleAttributes.length+2;if(d>a.tableHeader.length)for(var e=d-a.tableHeader.length,f=1;f<=e;f++)a.tableHeader.push({})}a.inProgress=!1,i()},function(b){a.customer={}}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.deleteCustomer=function(b){confirm("Are you sure, you want to delete customer?")&&c.deleteCustomer(b.customer_id).then(function(c){c.data.status&&(a.customers.splice(a.customers.indexOf(b),1),g.success({message:"Customer "+b.name+" successfully deleted"}))})},a.loadMore=function(){a.inProgress||a.options.lastPage||(a.options.page++,i())}}]),angular.module("brnaiApp").controller("CreateCustomerCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","Upload",function(a,b,c,d,e,f,g,h,i){a.categories=[],a.selectedCategory={},a.options={limit:1e3,offset:0,page:0,lastPage:!1},a.attributes={__productMainName:{type:"productMainName"}},a.rows=[],a.uploaders={},a.multipleImages=[],a.multipleImagesModels={},a.product={bot_id:g.id,category_id:"",name:"",attributes:{}},b.getCategory(g.id,g.category).then(function(b){a.selectedCategory=b,a.isEmpty(a.selectedCategory.attributes)||angular.forEach(a.selectedCategory.attributes,function(b,c){"mixed"!=b.type||b.selectable?(a.attributes[c]=b,a.product.attributes[c]="","file"!=b.type&&"image"!=b.type||!b.multiple||(a.multipleImagesModels[c]="",a.multipleImages.push(b),a.product.attributes[c]=[],a.uploaders[c]=!1)):(a.product.attributes[c]={},a.uploaders[c]={},angular.forEach(b.schema.fields,function(b,d){a.attributes[d]=b,a.attributes[d].mainAttrName=c,a.product.attributes[c][d]="","file"!=b.type&&"image"!=b.type||(a.uploaders[c][d]=!1)}))});var c=1,d={},e=!1,f=Object.keys(a.attributes).length;angular.forEach(a.attributes,function(b,g){e&&(a.rows.push(d),d={},e=!1),c%2==0&&(e=!0),d[g]=b,c==f&&a.rows.push(d),c++}),a.product.category_id=a.selectedCategory.category_id},function(b){a.selectedCategory={}}),b.getCategories(g.id).then(function(b){a.categories=b.categories},function(b){a.categories=[]}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.createProduct=function(){b.createProduct(a.product).then(function(b){b.status&&(h.success({message:'Product "'+a.product.name+'" added successfully'}),d.go("store-products",{id:g.id,category:a.selectedCategory.name}))},function(a){})},a.addFile=function(b,c,d,e,h){i.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(h?a.product.attributes[h][e]=b.data.url:a.product.attributes[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})},a.addFiles=function(b,c,d){b&&i.upload({url:f.host+"/attachment/"+c+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[d]=!1,b.data.status&&a.product.attributes[d].push(b.data.url)},function(a){},function(b){a.uploaders[d]=!0})},a.deleteImage=function(b,c){a.product.attributes[c].splice(a.product.attributes[c].indexOf(b),1)}}]),angular.module("brnaiApp").controller("StoreEditCustomerMaskCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","$uibModal",function(a,b,c,d,e,f,g,h,i){b.getStore(g.id).then(function(b){a.customer_mask=b},function(b){a.customer_mask={}}),a.schemaKeys=[],a.schemaKey="",a.attributeTypes=b.getAttributesTypes(),a.schemaTypes=b.getSchemaTypes(),a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}},a.newSchemaAttr={name:"",label:"",type:"",show:!1},a.clearSchemaAttribute=function(){a.newSchemaAttr={name:"",label:"",type:"",show:!1}},a.showSchemaAttribute=function(){a.newSchemaAttr.show=!0},a.handleChangeType=function(){"mixed"!=a.newAttr.type&&(a.newAttr.schema={fields:{},key:null},a.schemaKeys=[],a.schemaKey="")},a.handleChangeKey=function(){a.newAttr.schema.key=a.schemaKey},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.addSchemaAttribute=function(){a.newSchemaAttr.type&&a.newSchemaAttr.name.length&&(a.newSchemaAttr.name=b.getSlug(a.newSchemaAttr.name),a.newAttr.schema.fields[a.newSchemaAttr.name]=a.newSchemaAttr, 14"string"!=a.newSchemaAttr.type&&"number"!=a.newSchemaAttr.type&&"date"!=a.newSchemaAttr.type&&"boolean"!=a.newSchemaAttr.type||a.schemaKeys.push({name:a.newSchemaAttr.name}),a.newSchemaAttr={name:"",label:"",type:"",show:!1})},a.deleteSchemaAttribute=function(b){delete a.newAttr.schema.fields[b],angular.forEach(a.schemaKeys,function(c,d){c.name==b&&a.schemaKeys.splice([d],1)})},a.addAttribute=function(){return a.newAttr.type?a.newAttr.name.length?"mixed"!=a.newAttr.type||!a.newAttr.selectable||null!=a.newAttr.schema.key&&""!=a.newAttr.schema.key?(a.newAttr.name=b.getSlug(a.newAttr.name),a.isEmpty(a.newAttr.schema)||angular.forEach(a.newAttr.schema.fields,function(b,c){c!=b.name&&(a.newAttr.schema.fields[b.n
14ame]=b,delete a.newAttr.schema.fields[c])}),a.customer_mask.customer.schema[a.newAttr.name]=a.newAttr,void b.updateStore(g.id,a.customer_mask).then(function(b){h.success({message:'Field "'+a.newAttr.name+'" was successfully added'}),d.go("store-customer-mask",{id:g.id}),a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}},a.oldIndex=null,a.schemaKeys=[],a.schemaKey=""},function(b){delete a.customer_mask.customer.schema[a.newAttr.name]})):void h.error({delay:6e4,message:"You must set key field for schema"}):void h.error({delay:6e4,message:"You must set attribute name"}):void h.error({delay:6e4,message:"You must set attribute type"})},a.deleteValue=function(b){confirm("Are you sure, you want to delete value?")&&a.newAttr.values.splice(a.newAttr.values.indexOf(b),1)},a.addValue=function(b){i.open({templateUrl:"views/create-customer-schema-value.html",scope:a,controller:["storingservice","$uibModalInstance","$stateParams","Upload",function(b,c,d,e){a.values=[],a.newValue={},a.fields=[],a.valueToAdd={},a.uploaders={},a.attribute=a.newAttr,"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1),a.fields.push(c)}):("file"!=a.attribute.type&&"image"!=a.attribute.type||(a.uploaders[a.attribute.name]=!1),a.newValue={value:""}),a.values=a.attribute.values,a.createValue=function(){if("mixed"!=a.attribute.type&&~a.values.indexOf(a.newValue.value))return void h.error({delay:6e4,message:'Value "'+a.newValue.value+'" already exist'});if("mixed"==a.attribute.type){var b=!1;
14if(angular.forEach(a.newValue,function(b,c){"number"==a.attribute.schema.fields[c].type&&(a.newValue[c]=parseFloat(b))}),angular.forEach(a.values,function(c,d){c[a.attribute.schema.key]==a.newValue[a.attribute.schema.key]&&(b=!0)}),b)return void h.error({delay:6e4,message:'Value "'+a.newValue[a.attribute.schema.key]+'" already exist'})}"number"==a.attribute.type&&(a.newValue.value=parseFloat(a.newValue.value)),a.valueToAdd=Object.assign({},a.newValue),c.close({newValue:a.valueToAdd}),"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1)}):a.newValue={value:""}},a.close=function(){c.close()},a.addFile=function(b,c,g,h){e.upload({url:f.host+"/attachment/"+g+"/"+d.id,data:{file:b}}).then(function(b){a.uploaders[h]=!1,b.data.status&&(a.newValue[h]=b.data.url)},function(a){},function(b){a.uploaders[h]=!0})}}],windowClass:"large-modal no-border-modal"}).result.then(function(b){"mixed"==a.newAttr.type?a.newAttr.values.push(b.newValue):a.newAttr.values.push(b.newValue.value)},function(a){})}}]),angular.module("brnaiApp").controller("ClientMaskAttributesCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","$uibModal",function(a,b,c,d,e,f,g,h,i){a.attributes={},a.disabledTemplate=!1,b.getStore(g.id).then(function(b){a.customer_mask=b,a.attributes=a.customer_mask.customer.schema,a.customer_mask.customer.template.name&&(a.disabledTemplate=!0)},function(b){a.customer_mask={}}),a.deleteAttribute=function(c){confirm("Are you sure, you want to delete field?")&&(delete a.attributes[c],a.customer_mask.customer.schema=a.attributes,b.updateStore(g.id,a.customer_mask).then(function(a){a.status&&h.success({message:'Field "'+c+'" was successfully deleted'})}))},a.updateCustomer=function(){a.customer_mask.customer.schema=a.attributes,b.updateStore(g.id,a.customer_mask)}}]),angular.module("brnaiApp").controller("EditCustomerFieldCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","$uibModal",function(a,b,c,d,e,f,g,h,i){a.schemaKeys=[],a.schemaKey="",a.values=[],a.fields=[],b.getStore(g.id).then(function(b){a.customer_mask=b,g.field&&(a.newAttr=a.customer_mask.customer.schema[g.field],a.oldIndex=a.newAttr.name,"mixed"==a.customer_mask.customer.schema[g.field].type&&(a.schemaKeys=[],angular.forEach(a.customer_mask.customer.schema[g.field].schema.fields,function(b,c){a.schemaKeys.push({name:b.name}),a.fields.push(c)}),a.schemaKey=a.customer_mask.customer.schema[g.field].schema.key),a.values=a.newAttr.values)},function(b){a.customer_mask={}}),a.attributeTypes=b.getAttributesTypes(),a.schemaTypes=b.getSchemaTypes(),a.newSchemaAttr={name:"",label:"",type:"",show:!1},a.clearSchemaAttribute=function(){a.newSchemaAttr={name:"",label:"",type:"",show:!1}},a.showSchemaAttribute=function(){a.newSchemaAttr.show=!0},a.handleChangeType=function(){"mixed"!=a.newAttr.type&&(a.newAttr.schema={fields:{},key:null},a.schemaKeys=[],a.schemaKey="")},a.handleChangeKey=function(){a.newAttr.schema.key=a.schemaKey},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.addSchemaAttribute=function(){a.newSchemaAttr.type&&a.newSchemaAttr.name.length&&(a.newSchemaAttr.name=b.getSlug(a.newSchemaAttr.name),a.newAttr.schema.fields[a.newSchemaAttr.name]=a.newSchemaAttr,"string"!=a.newSchemaAttr.type&&"number"!=a.newSchemaAttr.type&&"date"!=a.newSchemaAttr.type&&"boolean"!=a.newSchemaAttr.type||a.schemaKeys.push({name:a.newSchemaAttr.name}),a.newSchemaAttr={name:"",label:"",type:"",show:!1})},a.deleteSchemaAttribute=function(b){delete a.newAttr.schema.fields[b],angular.forEach(a.schemaKeys,function(c,d){c.name==b&&a.schemaKeys.splice([d],1)})},a.addAttribute=function(){return a.newAttr.type?a.newAttr.name.length?"mixed"!=a.newAttr.type||!a.newAttr.selectable||null!=a.newAttr.schema.key&&""!=a.newAttr.schema.key?(a.newAttr.name=b.getSlug(a.newAttr.name),a.isEmpty(a.newAttr.schema)||angular.forEach(a.newAttr.schema.fields,function(b,c){c!=b.name&&(a.newAttr.schema.fields[b.n
14ame]=b,delete a.newAttr.schema.fields[c])}),a.customer_mask.customer.schema[a.newAttr.name]=a.newAttr,void b.updateStore(g.id,a.customer_mask).then(function(b){h.success({message:'Field "'+a.newAttr.name+'" was successfully edited'}),d.go("store-customer-mask",{id:g.id}),a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}},a.oldIndex=null,a.schemaKeys=[],a.schemaKey=""},function(b){delete a.customer_mask.customer.schema[a.newAttr.name]})):void h.error({delay:6e4,message:"You must set key field for schema"}):void h.error({delay:6e4,message:"You must set attribute name"}):void h.error({delay:6e4,message:"You must set attribute type"})},a.deleteValue=function(b){confirm("Are you sure, you want to delete value?")&&a.customer_mask.customer.schema[g.field].values.splice(a.customer_mask.customer.schema[g.field].values.indexOf(b),1)},a.addValue=function(b){i.open({templateUrl:"views/create-customer-schema-value.html",scope:a,controller:["storingservice","$uibModalInstance","$stateParams","Upload",function(b,c,d,e){a.values=[],a.newValue={},a.fields=[],a.valueToAdd={},a.uploaders={},a.attribute=a.customer_mask.customer.schema[d.field],"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1),a.fields.push(c)}):("file"!=a.attribute.type&&"image"!=a.attribute.type||(a.uploaders[a.attribute.name]=!1),"location"==a.attribute.type&&(a.newValue={value:{type:"Point",coordinates:[]}})),a.values=a.attribute.values,a.createValue=function(){if("mixed"!=a.attribute.type&&~a.values.indexOf(a.newValue.value))return void h.error({delay:6e4,message:'Value "'+a.newValue.value+'" already exist'});if("mixed"==a.attribute.type){var b=!1;
14if(angular.forEach(a.newValue,function(b,c){"number"==a.attribute.schema.fields[c].type&&(a.newValue[c]=parseFloat(b))}),angular.forEach(a.values,function(c,d){c[a.attribute.schema.key]==a.newValue[a.attribute.schema.key]&&(b=!0)}),b)return void h.error({delay:6e4,message:'Value "'+a.newValue[a.attribute.schema.key]+'" already exist'})}"number"==a.attribute.type&&(a.newValue.value=parseFloat(a.newValue.value)),a.valueToAdd=Object.assign({},a.newValue),c.close({newValue:a.valueToAdd}),"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1)}):a.newValue={value:""}},a.close=function(){c.close()},a.showMapForm=function(b){i.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,c,d,e,f){a.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",f.getMap().then(function(b){a.map=b;var c=a.map.getCenter();google.maps.event.trigger(a.map,"resize"),a.map.setCenter(c)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){d.close({attribute:b,data:a.marker})}}],windowClass:"large-modal zindex-map"}).result.then(function(b){a.newValue[b.attribute]=b.data},function(a){})},a.addFile=function(b,c,g,h){e.upload({url:f.host+"/attachment/"+g+"/"+d.id,data:{file:b}}).then(function(b){a.uploaders[h]=!1,b.data.status&&(a.newValue[h]=b.data.url)},function(a){},function(b){a.uploaders[h]=!0})}}],windowClass:"large-modal no-border-modal"}).result.then(function(b){"mixed"==a.newAttr.type?a.newAttr.values.push(b.newValue):a.newAttr.values.push(b.newValue.value)},function(a){})},a.addMapValue=function(a){i.open({templateUrl:"views/add-selectable-location-markers.html",controller:["$scope","storingservice","$uibModalInstance","NgMap",function(b,c,d,e){b.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",b.values=a.values,e.getMap().then(function(a){b.map=a;var c=b.map.getCenter();google.maps.event.trigger(b.map,"resize"),b.map.setCenter(c)}),b.placeMarker=function(a){b.values.push({type:"Point",coordinates:[a.latLng.lng().toFixed(5)/1,a.latLng.lat().toFixed(5)/1]})},b.deletePlace=function(a,c){b.values.splice(c,1)},b.close=function(){d.close({values:b.values})}}],windowClass:"large-modal no-border-modal"}).result.then(function(a){},function(a){})}}]),angular.module("brnaiApp").controller("CustomerDetailCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","Upload","$uibModal",function(a,b,c,d,e,f,g,h,i,j){a.clientShema={},a.attributes={},a.rows=[],a.multipleImages=[],a.multipleImagesModels={},a.uploaders={},a.customer={},b.getCustomer(g.customer).then(function(c){a.customer=c,b.getStore(g.id).then(function(b){a.clientShema=b.customer,a.isEmpty(a.clientShema.schema)||angular.forEach(a.clientShema.schema,function(b,c){"mixed"!=b.type||b.selectable?("file"!=b.type&&"image"!=b.type||!b.multiple||(a.uploaders[c]=!1,a.multipleImagesModels[c]="",a.multipleImages.push(b)),"location"==b.type&&a.isEmpty(a.customer.profile[c])&&(a.customer.profile[c]={},a.customer.profile[c].type="Point",a.customer.profile[c].coordinates=[])):(a.uploaders[c]={},angular.forEach(b.schema.fields,function(b,d){"file"!=b.type&&"image"!=b.type||(a.uploaders[c][d]=!1)})),a.attributes[c]=b});var c=1,d={},e=!1,f=Object.keys(a.attributes).length;angular.forEach(a.attributes,function(b,g){e&&(a.rows.push(d),d={},e=!1),c%2==0&&(e=!0),d[g]=b,c==f&&a.rows.push(d),c++})})},function(b){a.customer={}}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.showMapForm=function(b,c){j.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,d,e,f,g){a.googleMapsUrl="https://maps.googleapis.com/ma
14ps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",g.getMap().then(function(b){a.map=b;var d=a.map.getCenter();c.coordinates&&c.coordinates.length&&(d={lat:c.coordinates[1],lng:c.coordinates[0]}),google.maps.event.trigger(a.map,"resize"),a.map.setCenter(d)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},c.coordinates&&c.coordinates.length&&(a.marker=c),a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){e.close({attribute:b.name,data:a.marker})}}],windowClass:"large-modal"}).result.then(function(b){a.customer.profile[b.attribute]=b.data},function(a){})},a.showMixedForm=function(b,c){j.open({templateUrl:"views/attribute-mixed-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","Upload","$uibModal",function(a,d,e,g,h,i){a.mixedAttribute=b,a.uploaders={},a.mainAttr={},angular.forEach(a.mixedAttribute.schema.fields,function(b,c){a.mainAttr[c]="","boolean"==b.type&&(a.mainAttr[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1)}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.isEmpty(c)||(a.mainAttr=c),a.close=function(){e.close()},a.addFile=function(b,c,d,e){h.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(a.mainAttr[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})},a.fillAttribute=function(){e.close({attribute:a.mixedAttribute.name,data:a.mainAttr})},a.showMapForm=function(b,c){i.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,d,e,f,g){a.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",g.getMap().then(function(b){a.map=b;var d=a.map.getCenter();c.coordinates&&c.coordinates.length&&(d={lat:c.coordinates[1],lng:c.coordinates[0]}),google.maps.event.trigger(a.map,"resize"),a.map.setCenter(d)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},null!==c&&c.coordinates&&c.coordinates.length&&(a.marker=c),a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){e.close({attribute:b.name,data:a.marker})}}],windowClass:"large-modal zindex-map"}).result.then(function(b){a.mainAttr[b.attribute]=b.data},function(a){})}}],windowClass:"large-modal"}).result.then(function(b){a.customer.profile[b.attribute]=b.data},function(a){})},a.updateCustomer=function(){b.updateCustomer(a.customer.customer_id,a.customer).then(function(b){b.status&&(h.success({message:'Customer "'+a.customer.name+'" was successfully updated'}),d.go("store-customers",{id:g.id}))},function(a){})},a.addFile=function(b,c,d,e,h){i.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(h?a.customer.profile[h][e]=b.data.url:a.customer.profile[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})},a.addFiles=function(b,c,d){b&&i.upload({url:f.host+"/attachment/"+c+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[d]=!1,b.data.status&&a.customer.profile[d].push(b.data.url)},function(a){},function(b){a.uploaders[d]=!0})},a.deleteImage=function(b,c){a.customer.profile[c].splice(a.customer.profile[c].indexOf(b),1)}}]),angular.module("brnaiApp").controller("SettingsConnectionsCtrl",["$http","$scope","getDomainData","Notification","Upload","$uibModal","$stateParams","uploadCoverService","$timeout","botData","Auth","storage","$filter","$state","botService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(){a.get(c.host+"/bot/team/"+g.id).then(function(a){if(a.data.status){b.botCreator=a.data.creator.name,b.botCreatorAvatar=a.data.creator.avatar,b.botCreatorId=a.data.creator.id;var c=a.data.team;if(c.length>0)for(var d=0;d<c.length;d++){var e=c[d].name,f=e.split(" ");c[d].name=f[0]?f[0]:"",c[d].name+=f[1]?" "+f[1][0]+".":""}b.team=c,b.userInfo=k.getUser()}},function(a){})}function q(){j.get(g.id).then(function(a){b.bot=a.data})}function r(){a.get(c.host+"/connections/"+g.id).then(function(a){for(var c in b.botSocials)b.botSocials[
14c].isActivated=!1;a.data.connections.length&&a.data.connections.forEach(function(a){b.botSocials[a.provider].isActivated=!0}),b.widgetsLoading=!1},function(a){}),a.get(c.host+"/service/"+g.id+"/shopify",{notification:!1}).then(function(a){a.data.status&&(b.botSocials.shopify.isActivated=!0)})}b.bot={},b.isAdmin=k.isAdmin(),b.botSocials={telegram:{name:"telegram",isActivated:!1},widget:{name:"widget",isActivated:!1},messenger:{name:"messenger",isActivated:!1},kik:{name:"kik",isActivated:!1},slack:{name:"slack",isActivated:!1},skype:{name:"skype",isActivated:!1},line:{name:"line",isActivated:!1},wechat:{name:"wechat",isActivated:!1},viber:{name:"viber",isActivated:!1},twitter:{name:"twitter",isActivated:!1},instagram:{name:"instagram",isActivated:!1},email:{name:"email",isActivated:!1},linkedin:{name:"linkedin",isActivated:!1},reddit:{name:"reddit",isActivated:!1},pinterest:{name:"pinterest",isActivated:!1},twilio:{name:"twilio",isActivated:!1},shopify:{name:"shopify",isActivated:!1}},b.selected={},b.search_users=[],b.addMember=function(d){b.selected.user.id&&a.post(c.host+"/bots/team/add",{user_id:b.selected.user.id,bot_id:g.id}).then(function(a){p(),b.selected.user=""},function(a){console.error(a)})},b.removeMember=function(b){a.post(c.host+"/bots/team/remove",{user_id:b,bot_id:g.id}).then(function(a){p()},function(a){console.error(a)})},b.activateWidget=function(){f.open({templateUrl:"views/provider.html",controller:"ProviderCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateTelegram=function(){f.open({templateUrl:"views/telegram.html",controller:"TelegramCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateFacebook=function(){f.open({templateUrl:"views/facebook.html",controller:"FacebookCtrl",windowClass:"large-modal no-border-modal facebook-pages",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateKik=function(){f.open({templateUrl:"views/kik.html",controller:"KikCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateSlack=function(){f.open({templateUrl:"views/slack.html",controller:"SlackCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateLine=function(){f.open({templateUrl:"views/line.html",controller:"LineCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateSkype=function(){f.open({templateUrl:"views/skype.html",controller:"SkypeCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateWechat=function(){f.open({templateUrl:"views/wechat.html",controller:"WechatCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateViber=function(){f.open({templateUrl:"views/viber.html",controller:"ViberCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateInstagram=function(){f.open({templateUrl:"views/instagram.html",controller:"InstagramCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateTwitter=function(){f.open({templateUrl:"views/twitter.html",controller:"TwitterCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateEmail=function(){f.open({templateUrl:"views/email.html",controller:"EmailCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateLinkedin=function(){f.open({templateUrl:"views/linkedin.html",controller:"LinkedinCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateReddit=function(){f.open({templateUrl:"views/reddit.html",controller:"RedditCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activatePinterest=function(){f.open({templateUrl:"views/pinterest.html",controller:"PinterestCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateTwilio=function(){f.open({templateUrl:"views/twilio.html",controller:"TwilioCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.activateShopify=function(){f.open({templateUrl:"views/shopify.html",controller:"ShopifyCtrl",windowClass:"large-modal no-border-modal",resolve:{translations:b.main.translations}}).result.then(function(a){r()},function(a){r()})},b.getSearchUsers=function(b){return a.get(c.host+"/users/search?limit=8&name="+b).then(function(a){if
14(a.data.status)return a.data.users})},q(),p(),r()}]),angular.module("brnaiApp").controller("SettingsCatalogCtrl",["$http","$scope","getDomainData","Notification","Upload","$stateParams","uploadCoverService","$timeout","botData","Auth","$filter","$state","uploadScreenshot",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){i.get(f.id).then(function(a){b.bot=a.data})}function o(){a.get(c.host+"/screenshots/"+f.id).then(function(a){a.data.status&&(b.screenshots=a.data.screenshots)})}function p(){a.get(c.host+"/bots/categories").then(function(a){a.data.status&&(b.categories=a.data.categories)})}b.bot={},b.isAdmin=j.isAdmin(),b.screenshots=[],b.categories=[],b.updateBot=function(){a.put(c.host+"/bot/"+f.id,b.bot).then(function(a){n(),d.success({message:"Succesfuly saved"})},function(a){d.error({delay:6e4,message:"Something went wrong"})})},b.addFile=function(a,c,d){g.upload(a,c,f.id).then(function(a){b.bot.cover_image=a.data.image},function(a){},function(a){})},b.addInCatalog=function(){a.put(c.host+"/bot/"+f.id,b.bot)},b.progress=0,b.uploadScreenshot=function(a){m.upload(a,f.id).then(function(a){o()},function(a){},function(a){b.progress=parseInt(100*a.loaded/a.total)})},b.removeScreenshot=function(b){a.delete(c.host+"/screenshots/"+f.id+"?name="+b).then(function(a){a.data&&a.data.status&&1==a.data.status?o():alert("Something goes wrong...")},function(a){})},p(),o(),n()}]),angular.module("brnaiApp").directive("customDateRange",["dateCharts",function(a){return{restrict:"EA",require:"ngModel",templateUrl:"views/custom-date-range.html",replace:!0,transclude:!0,scope:{date:"=ngModel",isDisabled:"=ngDisabled",rangeOption:"=?rangeOption",datePicker:"="},link:function(b,c,d){b.rangeOption=b.rangeOption?b.rangeOption:{singleDatePicker:!0},b.startDate=b.date?moment(b.date.startDate).format("YYYY-MM-DD"):"",b.endDate=b.date?moment(b.date.endDate).format("YYYY-MM-DD"):"",b.isToActive=!1,b.isFromActive=!1,b.rangeOption=b.rangeOption?b.rangeOption:{},b.rangeOption.eventHandlers=b.rangeOption.eventHandlers?b.rangeOption.eventHandlers:{},b.rangeOption.eventHandlers["hide.daterangepicker"]=function(){setTimeout(function(){b.isToActive=!1,b.isFromActive=!1},0)},b.$watch("date",function(a,c){a?(console.log(a),b.startDate=moment(a.startDate).format("YYYY-MM-DD"),b.endDate=moment(a.endDate).format("YYYY-MM-DD")):(b.startDate="",b.endDate="")},!0),b.enterDate=function(){if(b.datePicker){var c=moment(b.startDate)._d,d=moment(b.endD
14ate)._d;"Invalid Date"==c&&(c=moment(Date.now())._d),"Invalid Date"==d&&(d=moment(Date.now())._d),b.datePicker.startDate=c,b.datePicker.endDate=d,a.setDate(c,d),b.datePicker.date=a.getDate(),b.date=b.datePicker.date}else{var c=moment(b.startDate)._d,d=moment(b.endDate)._d;"Invalid Date"==c&&(c=moment(Date.now())._d),"Invalid Date"==d&&(d=moment(Date.now())._d),a.setDate(c,d),b.date=a.getDate()}setTimeout(function(){b.isToActive=!1,b.isFromActive=!1},0),b.hidePickers()},b.hidePickers=function(){$(".daterangepicker").removeClass("show-calendar")},b.clickRange=function(a){"to"==a&&(c.find(".hidden-data-range")[0].style.height="90px",b.isToActive=!0),"from"==a&&(c.find(".hidden-data-range")[0].style.height="45px",b.isFromActive=!0),setTimeout(function(){$(c.find(".hidden-data-range")[0]).trigger(jQuery.Event("click",null)),$(c.find(".hidden-data-range")[0]).trigger(jQuery.Event("touchstart",null))},0)}}}}]),angular.module("brnaiApp").controller("BotTokensCtrl",["$scope","$http","$stateParams","$uibModal","$state","getDomainData","getDateArray",function(a,b,c,d,e,f,g){function h(){a.inProgress=!0,b.get(f.host+"/transactions/"+c.id).then(function(b){a.transactions=b.data.transactions,a.inProgress=!1})}function i(){b.get(f.host+"/report/"+c.id+"/token/price").then(function(b){b.data&&(a.priceHistory.data[0].data=b.data.data)}),b.get(f.host+"/report/"+c.id+"/token/volume").then(function(b){b.data&&(a.bottomTable.data[0].data=b.data.data)}),b.get(f.host+"/report/"+c.id+"/token/market").then(function(b){b.data&&2==b.data.data.length&&(a.marketDepth.data[0].data=b.data.data[0]),a.marketDepth.data[1].data=b.data.data[1]}),b.get(f.host+"/blockchain/"+c.id).then(function(b){b.data&&(a.summary.currentSupply=b.data.blockchain.token.summary.current_supply),a.summary.marketCap=b.data.blockchain.token.summary.market_cap,a.summary.reserve=b.data.blockchain.token.summary.reserve,a.summary.crr=b.data.blockchain.token.summary.crr+"%"})}a.isBuyToken=!0,a.summary={currentSupply:0,marketCap:0,reserve:0,crr:"0%"},a.inProgress=!1,a.tokenToTransfer=null,a.cashToTransfer=null,a.transactions=[],a.marketDepth={data:[{data:[],pointStart:.3,pointInterval:.02,color:"#f6aeb0",name:" "},{data:[],pointStart:.3,pointInterval:.02,color:"#b7e0af",name:" "}]},a.priceHistory={data:[{data:[],color:"#abc4dc",name:" ",pointStart:Date.UTC(2017,25,9),pointInterval:432e5}],type:"datetime",YRight:!0,isXAxis:!1,height:340},a.bottomTable={data:[{data:[],color:"#abc4dc",name:" ",pointStart:Date.UTC(2017,25,9),pointInterval:432e5}],type:"datetime"},i(),h()}]),angular.module("brnaiApp").directive("basicArea",function(){return{restrict:"E",scope:{data:"="},link:function(a,b,c,d){a.$watch("data",function(a,c){Highcharts.chart(b[0],{title:{text:a.text,x:-20},credits:{enabled:!1},chart:{type:"area",height:a.height},xAxis:{allowDecimals:!0,categories:a.date,type:a.type||null,visible:a.isXAxis},plotOptions:{area:{marker:{enabled:!1,states:{hover:{enabled:!1}}}}},yAxis:{title:{text:" "},opposite:a.YRight},legend:{enabled:!1},series:a.data})},!0)}}}),angular.module("brnaiApp").directive("basicColumn",function(){return{restrict:"E",scope:{data:"="},link:function(a,b,c,d){a.$watch("data",function(a,c){Highcharts.chart(b[0],{title:{text:null,x:-20},chart:{type:"column",height:100},credits:{enabled:!1},xAxis:{allowDecimals:!0,categories:a.date,type:a.type||null},plotOptions:{area:{marker:{enabled:!1,states:{hover:{enabled:!1}}}}},yAxis:{title:{text:" "},opposite:!0},legend:{enabled:!1},series:a.data})},!0)}}}),angular.module("brnaiApp").controller("SettingsBlockchainCtrl",["$http","$scope","getDomainData","Notification","Upload","$uibModal","$stateParams","uploadCoverService","$timeout","botData","Auth","storage","$filter","$state","botService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(){j.get(g.id).then(function(a){b.bot=a.data})}b.bot={},b.isAdmin=k.isAdmin(),b.tokenTypes=[{name:"Eos",value:"eos"},{name:"Ethereum",value:"ethereum"},{name:"Steem",value:"steem"}],b.updateToken=function(){a.put(c.host+"/blockchain/"+g.id,{active:b.bot.blockchain.active,token:{name:b.bot.blockchain.token.name,symbol:b.bot.blockchain.token.symbol,type:b.bot.blockchain.token.type,price:b.bot.blockchain.token.price}}).then(function(a){a&&(d.success({message:"Succesfuly saved"}),b.$emit("getBot"))},function(a){d.error({delay:6e4,message:"Something went wrong"})})},p()}]),angular.module("brnaiApp").controller("BackNavbarCtrl",["$state","$scope",function(a,b){a.defStateName=null,a.defStateParam=null,b.goBack=function(){a.goBack(a.defStateName,a.defStateParam)}}]),angular.module("brnaiApp").directive("contactModal",["$http","Notification","getDomainData",function(a,b,c){return{restrict:"EA",templateUrl:"views/contact-modal.html",replace:!0,scope:{userEmail:"@",message:"@"},link:function(a,c,d){function e(){a.email=a.userEmail?a.userEmail:"",a.isReadOnly=!!a.userEmail,a.message=a.message?a.message:a.$parent.main.menu_contact_message,setTimeout(function(){f||(f=!0,g=$("#contactModal"),a.setFbMessage(),FB.Event.subscribe("send_to_messenger",function(a){"opt_in"==a.event&&"contact_modal_fb_btn"==a.pluginID&&(b.success({message:"We've got your message and will contact you on Messenger soon!"}),g.modal("hide"),"undefined"!=typeof yaCounter48721346&&yaCounter48721346.reachGoal("StartCooperation"),ga(["_trackEvent","StartCooperation","StartCooperation"]))}))},1100),a.isEmailValide=!0,a.isFirstKey=!0,a.isActive=!0,a.isFocus=!1}a.intervalUsers=null,a.setFbMessage=function(){a.fbMessage=a.message?h(a.message).substring(0,238).replace(/ /g,"_"):"",a.fbMessage=a.fbMessage.replace(/[^A-Za-z0-9_]+/gi,"_");for(var b=document.getElementById("fb-messenger_button_container");b.firstChild;)b.removeChild(b.firstChild);$("#fb-messenger_button_container").html("<div class='fb-send-to-messenger' class='fb-send-to-messenger'messenger_app_id='279474245766642' page_id='1237860396355276' data-ref='_"+a.fbMessage+"' size='xlarge' color='blue' pluginID='contact_modal_fb_btn'> </div>"),FB.XFBML.parse(b)};var f=!1;e();var g=null;c.on("hidden.bs.modal",function(){e()}),c.find("textarea").bind("input",function(b){a.isFirstKey&&setTimeout(function(){a.message=b.originalEvent.data,a.isFirstKey=!1,a.$apply()},0)}),a.$watch("message",function(b,c){f&&(clearTimeout(a.intervalUsers),a.intervalUsers=setTimeout(function(){a.setFbMessage()},400)),setTimeout(function(){a.isActive=null!==b&&void 0!==b&&""!==b||a.isFocus,a.$apply()},0)},!0),c.find("textarea").bind("blur",function(b){setTimeout(function(){a.isActive=null!==a.message&&void 0!==a.message&&""!==a.message,a.isFocus=!1,a.$apply()},0)}),c.find("textarea").bind("focus",function(b){setTimeout(function(){a.isActive=!0,a.isFocus=!0,a.$apply()},0)});var h=function(a){ 15return a=a.replace(/\u0401/g,"YO").replace(/\u0419/g,"I").replace(/\u0426/g,"TS").replace(/\u0423/g,"U").replace(/\u041A/g,"K").replace(/\u0415/g,"E").replace(/\u041D/g,"N").replace(/\u0413/g,"G").replace(/\u0428/g,"SH").replace(/\u0429/g,"SCH").replace(/\u0417/g,"Z").replace(/\u0425/g,"H").replace(/\u042A/g,"").replace(/\u0451/g,"yo").replace(/\u0439/g,"i").replace(/\u0446/g,"ts").replace(/\u0443/g,"u").replace(/\u043A/g,"k").replace(/\u0435/g,"e").replace(/\u043D/g,"n").replace(/\u0433/g,"g").replace(/\u0448/g,"sh").replace(/\u0449/g,"sch").replace(/\u0437/g,"z").replace(/\u0445/g,"h").replace(/\u044A/g,"'").replace(/\u0424/g,"F").replace(/\u042B/g,"I").replace(/\u0412/g,"V").replace(/\u0410/g,"a").replace(/\u041F/g,"P").replace(/\u0420/g,"R").replace(/\u041E/g,"O").replace(/\u041B/g,"L").replace(/\u0414/g,"D").replace(/\u0416/g,"ZH").replace(/\u042D/g,"E").replace(/\u0444/g,"f").replace(/\u044B/g,"i").replace(/\u0432/g,"v").replace(/\u0430/g,"a").replace(/\u043F/g,"p").replace(/\u0440/g,"r").replace(/\u043E/g,"o").replace(/\u043B/g,"l").replace(/\u0434/g,"d").replace(/\u0436/g,"zh").replace(/\u044D/g,"e").replace(/\u042F/g,"Ya").replace(/\u0427/g,"CH").replace(/\u0421/g,"S").replace(/\u041C/g,"M").replace(/\u0418/g,"I").replace(/\u0422/g,"T").replace(/\u042C/g,"'").replace(/\u0411/g,"B").replace(/\u042E/g,"YU").replace(/\u044F/g,"ya").replace(/\u0447/g,"ch").replace(/\u0441/g,"s").replace(/\u043C/g,"m").replace(/\u0438/g,"i").replace(/\u0442/g,"t").replace(/\u044C/g,"'").replace(/\u0431/g,"b").replace(/\u044E/g,"yu")}}}}]),angular.module("brnaiApp").controller("CreateCategoryAttributeCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","$uibModal",function(a,b,c,d,e,f,g,h,i){a.category={},b.getCategory(g.id,g.category).then(function(b){a.category=b},function(b){a.category={}}),a.schemaKeys=[],a.schemaKey="",a.oldIndex=null,a.attributeTypes=b.getAttributesTypes(),a.schemaTypes=b.getSchemaTypes(),a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}},a.newSchemaAttr={name:"",label:"",type:"",show:!1},a.handleChangeType=function(){"mixed"!=a.newAttr.type&&(a.newAttr.schema={fields:{},key:null},a.schemaKeys=[],a.schemaKey="")},a.handleChangeKey=function(){a.newAttr.schema.key=a.schemaKey},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.clearSchemaAttribute=function(){a.newSchemaAttr={name:"",label:"",type:"",show:!1}},a.showSchemaAttribute=function(){a.newSchemaAttr.show=!0},a.addSchemaAttribute=function(){a.newSchemaAttr.type&&a.newSchemaAttr.name.length&&(a.newSchemaAttr.name=b.getSlug(a.newSchemaAttr.name),a.newAttr.schema.fields[a.newSchemaAttr.name]=a.newSchemaAttr,"string"!=a.newSchemaAttr.type&&"number"!=a.newSchemaAttr.type&&"date"!=a.newSchemaAttr.type&&"boolean"!=a.newSchemaAttr.type||a.schemaKeys.push({name:a.newSchemaAttr.name}),a.newSchemaAttr={name:"",label:"",type:""})},a.deleteSchemaAttribute=function(b){delete a.newAttr.schema.fields[b],angular.forEach(a.schemaKeys,function(c,d){c.name==b&&a.schemaKeys.splice([d],1)})},a.addCategoryAttribute=function(){return a.newAttr.type?a.newAttr.name.length?"mixed"!=a.newAttr.type||!a.newAttr.selectable||null!=a.newAttr.schema.key&&""!=a.newAttr.schema.key?(a.newAttr.name=b.getSlug(a.newAttr.name),a.isEmpty(a.newAttr.schema)||angular.forEach(a.newAttr.schema.fields,function(b,c){c!=b.name&&(a.newAttr.schema.fields[b.n
15ame]=b,delete a.newAttr.schema.fields[c])}),a.category.attributes[a.newAttr.name]=a.newAttr,void b.updateCategory(a.category).then(function(b){b&&b.status&&(h.success({message:'Attribute "'+a.newAttr.label+'" was successfully added'}),d.go("store.category-detail",{id:g.id,category:a.category.name}))},function(b){a.schemaKeys=[],a.schemaKey="",a.oldIndex=null,a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}}})):void h.error({delay:6e4,message:"You must set key field for schema"}):void h.error({delay:6e4,message:"You must set attribute name"}):void h.error({delay:6e4,message:"You must set attribute type"})}}]),angular.module("brnaiApp").controller("EditCategoryAttributeCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","$uibModal",function(a,b,c,d,e,f,g,h,i){a.category={},a.schemaKeys=[],a.values=[],a.schemaKey="",a.fields=[],a.oldIndex=null,b.getCategory(g.id,g.category).then(function(b){a.category=b,a.attribute=a.category.attributes[g.attribute],a.attribute&&("mixed"==a.attribute.type&&(a.schemaKeys=[],angular.forEach(a.attribute.schema.fields,function(b,c){"string"!=b.type&&"number"!=b.type&&"date"!=b.type&&"boolean"!=b.type||a.schemaKeys.push({name:b.name}),a.fields.push(c)}),a.schemaKey=a.attribute.schema.key),a.values=a.attribute.values)},function(b){a.category={}}),a.attributeTypes=b.getAttributesTypes(),a.schemaTypes=b.getSchemaTypes(),a.newSchemaAttr={name:"",label:"",type:"",show:!1},a.handleChangeType=function(){a.attribute.schema={fields:{},key:null},a.schemaKeys=[],a.schemaKey=""},a.handleChangeKey=function(){a.attribute.schema.key=a.schemaKey},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.clearSchemaAttribute=function(){a.newSchemaAttr={name:"",label:"",type:"",show:!1}},a.showSchemaAttribute=function(){a.newSchemaAttr.show=!0},a.addSchemaAttribute=function(){a.newSchemaAttr.type&&a.newSchemaAttr.name.length&&(a.newSchemaAttr.name=b.getSlug(a.newSchemaAttr.name),a.attribute.schema.fields[a.newSchemaAttr.name]=a.newSchemaAttr,"string"!=a.newSchemaAttr.type&&"number"!=a.newSchemaAttr.type&&"date"!=a.newSchemaAttr.type&&"boolean"!=a.newSchemaAttr.type||a.schemaKeys.push({name:a.newSchemaAttr.name}),a.newSchemaAttr={name:"",label:"",type:"",show:!1})},a.deleteSchemaAttribute=function(b){delete a.attribute.schema.fields[b],angular.forEach(a.schemaKeys,function(c,d){c.name==b&&a.schemaKeys.splice([d],1)})},a.addMapValue=function(a,b){i.open({templateUrl:"views/add-selectable-location-markers.html",controller:["$scope","storingservice","$uibModalInstance","NgMap",function(a,c,d,e){a.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",a.values=b.values,e.getMap().then(function(b){a.map=b;var c=a.map.getCenter();google.maps.event.trigger(a.map,"resize"),a.map.setCenter(c)}),a.placeMarker=function(b){a.values.push({type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]})},a.deletePlace=function(b,c){a.values.splice(c,1)},a.close=function(){d.close({values:a.values})}}],windowClass:"large-modal no-border-modal"}).result.then(function(a){},function(a){})},a.addValue=function(b,c){i.open({templateUrl:"views/create-category-attribute-value.html",controller:["$scope","storingservice","$uibModalInstance","Upload",function(a,d,e,j){a.values=[],a.newValue={},a.valueToAdd={},a.uploaders={},a.attribute=c,"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1)}):("file"!=a.attribute.type&&"image"!=a.attribute.type||(a.uploaders[a.attribute.name]=!1),a.newValue={value:""}),a.values=a.attribute.values,a.createValue=function(){if("mixed"!=a.attribute.type){if(~a.values.indexOf(a.newValue.value))return void h.error({delay:6e4,message:'Value "'+a.newValue.value+'" already exist'});if(!a.newValue.value)return void h.error({delay:6e4,message:"Value can not be empty"})}if("mixed"==a.attribute.type){var c=!1;
15if(angular.forEach(a.newValue,function(b,c){"number"==a.attribute.schema.fields[c].type&&(a.newValue[c]=parseFloat(b))}),angular.forEach(a.values,function(b,d){b[a.attribute.schema.key]==a.newValue[a.attribute.schema.key]&&(c=!0)}),c)return void h.error({delay:6e4,message:'Value "'+a.newValue[a.attribute.schema.key]+'" already exist'})}"number"==a.attribute.type&&(a.newValue.value=parseFloat(a.newValue.value)),d.createCategoryAttributeValue(b.category_id,g.attribute,a.newValue).then(function(b){b.status&&(h.success({message:"Value added successfully"}),"mixed"==a.attribute.type?(a.valueToAdd=Object.assign({},a.newValue),a.values.push(a.valueToAdd),angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1)})):(a.values.push(a.newValue.value),a.newValue={value:""}),e.close())},function(b){a.category={}})},a.close=function(){e.close()},a.showMapForm=function(b){i.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,c,d,e,f){a.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",f.getMap().then(function(b){a.map=b;var c=a.map.getCenter();google.maps.event.trigger(a.map,"resize"),a.map.setCenter(c)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){d.close({attribute:b,data:a.marker})}}],windowClass:"large-modal zindex-map"}).result.then(function(b){a.newValue[b.attribute]=b.data},function(a){})},a.addFile=function(b,c,d,e){b&&j.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(a.newValue[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})}}],windowClass:"large-modal no-border-modal"}).result.then(function(b){console.log(a.attribute)},function(a){})},a.deleteValue=function(c){if(confirm("Are you sure, you want to delete value?")){if("location"==a.attribute.type)return void b.deleteCategoryAttributeValue(a.category.category_id,g.attribute,c,a.attribute.type).then(function(b){b.status&&(a.attribute.values.splice(a.values.indexOf(c),1),h.success({message:"Value with coordinates: lat - "+c.coordinates[1]+" and lng - "+c.coordinates[0]+" was successfully deleted"}))});if("mixed"!=a.attribute.type&&b.deleteCategoryAttributeValue(a.category.category_id,g.attribute,c).then(function(b){b.status&&(a.attribute.values.splice(a.values.indexOf(c),1),h.success({message:'Value "'+c+'" was successfully deleted'}))}),"mixed"==a.attribute.type){var d=c[a.attribute.schema.key];b.deleteCategoryAttributeValue(a.category.category_id,g.attribute,d).then(function(b){b.status&&(a.attribute.values.splice(a.values.indexOf(c),1),h.success({message:'Value "'+d+'" was successfully deleted'}))})}}},a.addCategoryAttribute=function(){return a.attribute.type?a.attribute.name&&a.attribute.name.length?"mixed"!=a.attribute.type||!a.attribute.selectable||null!=a.attribute.schema.key&&""!=a.attribute.schema.key?(a.attribute.name=b.getSlug(a.attribute.name),a.isEmpty(a.attribute.schema)||angular.forEach(a.attribute.schema.fields,function(b,c){c!=b.name&&(a.attribute.schema.fields[b.name]=b,delete a.attribute.schema.fields[c])}),a.category.attributes[a.attribute.name]=a.attribute,void b.updateCategory(a.category).then(function(b){b&&b.status&&(h.success({message:'Attribute "'+a.attribute.label+'" was successfully added'}),d.go("store.category-detail",{id:g.id,category:a.category.name}))},function(b){a.schemaKeys=[],a.schemaKey="",a.oldIndex=null})):void h.error({delay:6e4,message:"You must set key field for schema"}):void h.error({delay:6e4,message:"You must set attribute name"}):void h.error({delay:6e4,message:"You must set attribute type"})}}]),angular.module("brnaiApp").controller("ScenarioAbstractCtrl",["$scope","$http","getDomainData","Auth","$state","$location","$uibModal","Notification","$cookies",function(a,b,c,d,e,f,g,h,i){function j(d){b.get(c.host+"/scenario/"+d+"?visual
15=true").then(function(b){a.scenarios=b.data,a.scenarios.steps.forEach(function(b){0!=Object.keys(b.action).length&&b.action||(b.action={next:null}),a.newStepIndex.push(!1)}),0===a.scenarios.keywords.length&&a.scenarios.keywords.push(""),b.data.status||(h.error({delay:6e4,message:b.data.error}),e.go("bots")),delete a.scenarios.status},function(a){console.error(a)})}function k(b){var c=!1;return a.scenarios.roles.forEach(function(a){if(a===b)return c=!0}),c}function l(b){if($("input").each(function(){$(this).trigger("blur")}),$(".ng-invalid").length>0){if(!b){var c=$(".section-bottom-toogle").not(".active"),d=$(".section-container").not(".active"),e=$(".dropdown").not(".open");setTimeout(function(){d.each(function(){$(this).find(".ng-invalid").length>0&&($(this.parentElement.children[0]).trigger("click"),$(this.parentElement.children[0]).trigger("touchstart"))}),c.each(function(){$($(this)[0].parentElement).find(".section-bottom .ng-invalid").length>0&&($($(this)[0].children[0]).trigger("click"),$($(this)[0].children[0]).trigger("touchstart"))}),e.each(function(){$(this).find(".ng-invalid").length>0&&($(this).trigger("click"),$(this).trigger("touchstart"))}),setTimeout(function(){$($(".ng-invalid")[0]).trigger("focus"),a.$apply()},400)},0),h.error({delay:6e4,message:"Some required fields are empty"})}return!1}return!0}function m(){b.get(c.host+"/scenarios/"+a.bot_id).then(function(b){if(b.data&&b.data.status){var c=[];a.scenariosList=[],b.data.scenarios.forEach(function(b){a.stepsList[b.scenario_id]=b.steps,a.editRoute&&a.scenarios.name==b.name&&(a.curentScenario.keywords=b.keywords.join()),a.scenariosList.push({name:b.name,value:b.scenario_id,checked:a.scenario_id===b.scenario_id}),b.scenario_id==a.scenario_id&&b.steps.forEach(function(a){c.push({name:a.name,value:a.id,type:"step"})})}),a.isScenariosList=!0,setTimeout(function(){a.isStepsList=!0},0)}})}function n(){b.get(c.host+"/mails/"+a.bot_id).then(function(b){b.data.status&&b.data.mails.forEach(function(b){"custom"==b.type&&a.mailList.push(b)}),a.inProgress=!1})}function o(){b.get(c.host+"/roles/"+a.bot_id).then(function(b){b.status&&(a.roles=b.data.roles)})}a.bot_id="",a.gui=null,a.bot=a.botNav.botInfo,a.cronTest="",a.scenarios={bot_id:a.bot_id,account_id:d.getUser().account_id,name:"",keywords:[""],intents:[],steps:[],roles:[]},a.scenario_id="",a.editRoute=!!a.scenario_id,a.selected={role:null},a.roles=[],a.isShowTest=!1,a.stepsList=[],a.isStepsList=!1,a.activeIndex=-1,a.activeSelectIndex=-1,a.newStepIndex=[],a.scenariosList=[],a.isScenariosList=!1,a.mailList=[],a.advanced={isAdvanced:!1,functions_mode:"simple"},a.curentScenario={keywords:""},i.getObject("functions_autosave")||i.putObject("functions_autosave","false"),a.isAutosave=!0,a.changeAutosave=function(b){b?i.putObject("functions_autosave","true"):i.putObject("functions_autosave","false"),a.isAutosave=b},a.$watch("advanced.functions_mode",function(b){setTimeout(function(){a.advanced.isAdvanced="simple"!=b,a.$apply()},10)}),a.changeAdvanced=function(b){a.advanced.isAdvanced=b,b?(a.gui||(a.scenario_id?e.go("edit-scenarios",{id:a.bot_id,scenario:a.scenario_id}):e.go("create-scenarios",{id:a.bot_id})),j(a.scenario_id)):a.scenario_id?e.go("edit-scenarios-old",{id:a.bot_id,scenario:a.scenario_id}):e.go("create-scenarios-old",{id:a.bot_id})},a.findScenarioIdByName=function(b){for(var c=0;c<a.scenariosList.length;c++)if(a.scenariosList[c].name===b)return a.scenariosList[c].value;return b},a.findStepIdByName=function(b,c){if(!b||!c)return b;for(var d=0;d<a.stepsList[c].length;d++)if(a.stepsList[c][d].name===b)return a.stepsList[c][d].id;return b},a.saveModel=function(){a.scenarios.template="visual",b.put(c.host+"/scenario/"+a.scenario_id,a.scenarios)},a.openStep=function(b){b&&g.open({templateUrl:"views/guimodal.html",controller:"GuimodalCtrl",windowClass:"large-modal no-border-modal",size:"lg",resolve:{translations:a.main.translations,scenario:function(){return a.scenarios},step:function(){return b}}}).result.then(function(b){switch(b.step.isNewStep&&(delete b.step.isNewStep,a.scenarios.steps.push(b.step),a.$broadcast("newStepCreated",b.step)),b.status){case"delete":
15a.scenarios.steps.splice(b.index,1),a.$broadcast("stepDeleted",b.step);break;default:a.scenarios.steps.forEach(function(c,d){c.id===b.step.id&&(a.scenarios.steps[d]=b.step)}),a.$broadcast("componentDataChanged",b.step,b.oldStep)}a.saveModel()})},a.$watch("botNav.botInfo",function(b){b&&(a.bot_id=b.bot_id,a.editRoute||(a.scenarios.bot_id=a.bot_id))}),a.$watch("scenario_id",function(b){a.editRoute=!!b,b&&j(b),setTimeout(function(){o(),m(),n()},100)}),a.TestWidget=function(){a.isShowTest=!a.isShowTest},a.addScenario=function(){if(l()){var d=a.scenarios;a.advanced.isAdvanced||a.gui?(d.template="visual",a.scenarios.template="visual"):(d.template="simple",a.scenarios.template="simple"),b.post(c.host+"/scenario",d).then(function(b){b.data.status?(a.$emit("getBot"),h.success({message:"Function "+a.scenarios.name+" successfully created"}),e.go("bot-abstract.bot-functions",{id:a.bot_id})):h.error({delay:6e4,message:b.data.error.message})},function(a){h.error({delay:6e4,message:a.message})})}},a.editScenario=function(d){if(l(d)){var e=angular.copy(a.scenarios);delete e.scenario_id,delete e.status,a.advanced.isAdvanced||a.gui?(e.template="visual",a.scenarios.template="visual"):(e.template="simple",a.scenarios.template="simple"),b.put(c.host+"/scenario/"+a.scenario_id,e).then(function(b){b.data.status?(a.$emit("getBot"),d||h.success({message:"Function "+a.scenarios.name+" successfully updated"})):d||h.error({delay:6e4,message:b.data.error.message})},function(a){h.error({delay:6e4,message:a.message})})}},a.deleteScenario=function(){var d=angular.copy(a.scenarios);delete d.bot_id,delete d.scenario_id,delete d.status,b.delete(c.host+"/scenario/"+a.scenario_id).then(function(b){b.data.status?(a.$emit("getBot"),e.go("bot-abstract.bot-functions",{id:a.bot_id})):alert("Can't delete these scenario")},function(a){h.error({delay:6e4,message:a.message})})},a.getMailVariables=function(b){if(!b||!a.mailList.length)return[];for(var c=0;c<a.mailList.length;c++)if(a.mailList[c].name==b)return a.mailList[c].variables?a.mailList[c].variables:[]},a.deleteMailVariables=function(a){delete a.properties.scope},a.addRole=function(){a.selected.role&&(k(a.selected.role)||a.scenarios.roles.push(a.selected.role),a.selected.role="",a.$apply())},a.removeRole=function(b){a.scenarios.roles.splice(b,1)}}]),angular.module("brnaiApp").directive("customDateRangeSingle",function(){return{restrict:"EA",require:"ngModel",templateUrl:"views/custom-date.html",replace:!0,transclude:!0,scope:{date:"=ngModel",isDisabled:"=ngDisabled",title:"@",timepicker:"=",dateClasses:"@",dateFormat:"@",icon:"@"},link:function(a,b,c){var d="YYYY-MM-DD";a.timepicker&&(d+=" - HH:mm"),a.isActive=!1,a.dateFormat?d=a.dateFormat.replace(/hh/g,"HH").replace(/ii/g,"mm"):(a.dateFormat="yyyy-mm-dd",a.timepicker&&(a.dateFormat+=" hh:ii")),a.$watch("date",function(c,e){b.find(".custom-input input");c&&(a.dateInput=a.date?moment(a.date).format(d):"")},!0),a.onBlur=function(){a.isActive=!1},setTimeout(function(){var c="de";a.$parent&&a.$parent.main&&a.$parent.main.currentLang&&(c=a.$parent.main.currentLang),b.find(".custom-input input").datepicker({language:c,timepicker:a.timepicker,dateFormat:a.dateFormat,classes:a.dateClasses}).on("selectDate",function(b,c){a.date=c})},0),a.clickRange=function(){a.isDisabled||(a.isActive=!0)}}}}),function(){function a(a){function b(b,d){function e(){function a(){d.textarea||(c=document.createElement("div"),c.id="simulate-clipboard-container",c.setAttribute("style",["position: fixed;","left: 0px;","top: 0px;","width: 0px;","height: 0px;","z-index: 100;","opacity: 0;","display: block;"].join("")),document.body.appendChild(c),b=document.createElement("textarea"),b.setAttribute("style",["width: 1px;","height: 1px;","padding: 0px;"].join("")),b.id="simulate-clipboard",d.textarea=b,c.appendChild(b))}var b,c,d=this;a()}e.prototype.copy=function(){this.textarea.innerHTML="",this.textarea.appendChild(document.createTextNode(b.textToCopy)),this.textarea.focus(),this.textarea.select(),setTimeout(function(){document.execCommand("copy")&&a.success({message:"Copied to clipboard"})},20)},c=new e,d[0].addEventListener("click",function(){c.copy()})}var c;return{restrict:"A",link:b,scope:{textToCopy:"="}}}angular.module("brnaiApp").directive("copyToClipboard",a),a.$inject=["Notification"]}(),angular.module("brnaiApp").directive("customColorpicker",function(){return{restrict:"EA",require:"ngModel",templateUrl:"views/custom-colorpicker.html",replace:!0,transclude:!0,scope:{data:"=ngModel",title:"@"},link:function(a,b,c){a.isActive=!1,a.dateInput="",a.onBlur=function(){a.isActive=!1},a.clickRange=function(){a.isDisabled||(a.isActive=!0,setTimeout(function(){$(b.find(".hidden-data-range")[0]).trigger(jQuery.Event("click",null)),$(b.find(".hidden-data-range")[0]).trigger(jQuery.Event("touchstart",null))},0))}}}}),angular.module("brnaiApp").controller("InstagramCtrl",["$scope","$http","domain","$stateParams","getDomainData","Auth","$uibModalInstance","Notification","Facebook",function(a,b,c,d,e,f,g,h,i){function j(){i.getLoginStatus(function(a){"connected"===a.status?(i.logout(),k()):k()})}function k(){a.isProgres=!0,i.login(function(b){"connected"==b.status?(a.instagramOfficial.provider_data.user_token=b.authResponse.accessToken,l(),a.fbAuthDone=!0):(a.isProgres=!1,h.error({delay:5e3,message:"Facebook authentication error."}),g.close())},{scope:"instagram_basic,instagram_manage_messages,pages_manage_metadata,instagram_manage_comments"})}function l(){i.api("/me/accounts?limit=300",{fields:"name, access_token"},function(b){a.isProgres=!1,0==b.data.length?h.error({delay:1e4,message:"Sorry, but you have no Facebook pages to select."}):a.connectedFacebookPages=b.data})}function m(c){a.isProgres=!0,b.get(e.host+"/connection/"+d.id+"/instagram",{notification:!1}).then(function(b){b.data.status&&(a.exist=!0,b.data.provider_data.official?o(b):n(b,c)),a.isProgres=!1},function(b){a.isProgres=!1}).catch(function(){a.advancedPermissions||a.selectConnectionType("official"),a.isProgres=!1})}function n(b,c){a.instagram.account_id=f.getUser().account_id,a.instagram.provider_data=b.data.provider_data,a.isCustomProxy=!b.data.provider_data.is_custom_proxy,a.isCode=!!(b.data.provider_data&&b.data.provider_data.challenge&&b.data.provider_data.challenge.required),c&&(a.instagram.provider_data.password=c),a.selectConnectionType("unofficial")}function o(b){a.instagramOfficial.account_id=f.getUser().account_id,a.instagramOfficial.provider_data.page_id=b.data.provider_data.page_id,a.connectedPageName=b.data.provider_data.page_name,a.instagramOfficial.provider_data.unofficial_fallback=b.data.provider_data.unofficial_fallback,a.instagramOfficial.provider_data.username=b.data.provider_data.username,a.instagramOfficial.provider_data.password=b.data.provider_data.password,a.instagramOfficial.provider_data.proxy=b.data.provider_data.proxy,a.selectConnectionType("official")}a.instagram={account_id:f.getUser().account_id,provider_data:{username:"",password:"",proxy:"",official:!1,process_media:!1,feed_check_interval:300,realtime_mode:"web"}},a.instagramOfficial={account_id:f.getUser().account_id,provider_data:{user_token:"",page_id:"",official:!0,unofficial_fallback:!1,username:"",password:"",proxy:""}},a.exist=!1,a.isCode=!1,a.isProgres=!1,a.isCustomProxy=!1,a.realtimeModes=["web","android"],a.connectedFacebookPages=[],a.fbAuthDone=!1,a.connectedPageName="",a.connectionType="",a.advancedPermissions=f.getUser().permissions.bot.advanced_connections,a.selectConnectionType=function(b){a.connectionType=b},a.isOfficial=function(){return"official"===a.connectionType},a.isUnofficial=function(){return"unofficial"===a.connectionType},a.initFbAuth=function(){"RTYP57CWRTY5BOF"===f.getUser().account_id&&FB.init({appId:"2588016001344408",version:"v2.0"}),j()}
15,a.checkCheckbox=function(){a.isCustomProxy=!a.isCustomProxy},m(),a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();var c;a.isUnofficial()?c=a.instagram:a.isOfficial&&(c=a.instagramOfficial),b.put(e.host+"/connection/instagram/"+d.id,c).then(function(b){if(a.isProgres=!1,b.data.status)g.close("ok");else{if(b.data.challenge){m(angular.copy(a.instagram.provider_data.password))}h.error({delay:6e4,message:b.data.error||a.$resolve.translations.settings_conections_instagramModalText})}},function(a){})}},a.addConnection=function(){var c;a.isUnofficial()?c=a.instagram:a.isOfficial&&(c=a.instagramOfficial),b.post(e.host+"/connection/instagram/"+d.id,c).then(function(b){if(a.isProgres=!1,b.data.status)g.close("ok");else{if(b.data.challenge){m(angular.copy(a.instagram.provider_data.password))}h.error({delay:6e4,message:b.data.error||a.$resolve.translations.settings_conections_instagramModalText})}},function(a){})},a.close=function(){g.close("ok")},a.deleteConnection=function(){b.delete(e.host+"/connection/instagram/"+d.id).then(function(b){b.data.status?g.close("ok"):h.error({delay:6e4,message:b.data.error||a.$resolve.translations.settings_conections_instagramModalText})},function(a){})}}]),function(a,b,c){!function(){var d,e,f,g="2.2.3",h="datepicker",i=".datepicker-here",j=!1,k='<div class="datepicker"><i class="datepicker--pointer"></i><nav class="datepicker--nav"></nav><div class="datepicker--content"></div></div>',l={classes:"",inline:!1,language:"en",startDate:new Date,firstDay:"",weekends:[5,0],dateFormat:"",altField:"",altFieldDateFormat:"@",toggleSelected:!0,keyboardNav:!0,position:"bottom left",offset:12,view:"days",minView:"days",showOtherMonths:!0,selectOtherMonths:!0,moveToOtherMonthsOnSelect:!0,showOtherYears:!0,selectOtherYears:!0,moveToOtherYearsOnSelect:!0,minDate:"",maxDate:"",disableNavWhenOutOfRange:!0,multipleDates:!1,multipleDatesSeparator:",",range:!1,todayButton:!1,clearButton:!1,showEvent:"focus",autoClose:!1,monthsField:"monthsShort",prevHtml:'<svg><path d="M 17,12 l -5,5 l 5,5"></path></svg>',nextHtml:'<svg><path d="M 14,12 l 5,5 l -5,5"></path></svg>',navTitles:{days:"MM <i>yyyy</i>",months:"yyyy",years:"yyyy1 - yyyy2"},timepicker:!1,onlyTimepicker:!1,dateTimeSeparator:" ",timeFormat:"",minHours:0,maxHours:24,minMinutes:0,maxMinutes:59,hoursStep:1,minutesStep:1,onSelect:"",onShow:"",onHide:"",onChangeMonth:"",onChangeYear:"",onChangeDecade:"",onChangeView:"",onRenderCell:""},m={ctrlRight:[17,39],ctrlUp:[17,38],ctrlLeft:[17,37],ctrlDown:[17,40],shiftRight:[16,39],shiftUp:[16,38],shiftLeft:[16,37],shiftDown:[16,40],altUp:[18,38],altRight:[18,39],altLeft:[18,37],altDown:[18,40],ctrlShiftUp:[16,17,38]},n=function(a,e){this.el=a,this.$el=b(a),this.opts=b.extend(!0,{},l,e,this.$el.data()),d==c&&(d=b("body")),this.opts.startDate||(this.opts.startDate=new Date),"INPUT"==this.el.nodeName&&(this.elIsInput=!0),this.opts.altField&&(this.$altField="string"==typeof this.opts.altField?b(this.opts.altField):this.opts.altField),this.inited=!1,this.visible=!1,this.silent=!1,this.currentDate=this.opts.startDate,this.currentView=this.opts.view,this._createShortCuts(),this.selectedDates=[],this.views={},this.keys=[],this.minRange="",this.maxRange="",this._prevOnSelectValue="",this.init()};f=n,f.prototype={VERSION:g,viewIndexes:["days","months","years"],init:function(){j||this.opts.inline||!this.elIsInput||this._buildDatepickersContainer(),this._buildBaseHtml(),this._defineLocale(this.opts.language),this._syncWithMinMaxDates(),this.elIsInput&&(this.opts.inline||(this._setPositionClasses(this.opts.position),this._bindEvents()),this.opts.keyboardNav&&!this.opts.onlyTimepicker&&this._bindKeyboardEvents(),this.$datepicker.on("mousedown",this._onMouseDownDatepicker.bind(this)),this.$datepicker.on("mouseup",this._onMouseUpDatepicker.bind(this))),this.opts.classes&&this.$datepicker.addClass(this.opts.classes),this.opts.timepicker&&(this.timepicker=new b.fn.datepicker.Timepicker(this,this.opts),this._bindTimepickerEvents()),this.opts.onlyTimepicker&&this.$datepicker.addClass("-only-timepicker-"),this.views[this.currentView]=new b.fn.datepicker.Body(this,this.currentView,this.opts),this.views[this.currentView].show(),this.nav=new b.fn.datepicker.Navigation(this,this.opts),this.view=this.currentView,this.$el.on("clickCell.adp",this._onClickCell.bind(this)),this.$datepicker.on("mouseenter",".datepicker--cell",this._onMouseEnterCell.bind(this)),this.$datepicker.on("mouseleave",".datepicker--cell",this._onMouseLeaveCell.bind(this)),this.inited=!0},_createShortCuts:function(){this.minDate=this.opts.minDate?this.opts.minDate:new Date(-86399999136e5),this.maxDate=this.opts.maxDate?this.opts.maxDate:new Date(86399999136e5)},_bindEvents:function(){this.$el.on(this.opts.showEvent+".adp",this._onShowEvent.bind(this)),this.$el.on("mouseup.adp",this._onMouseUpEl.b
15ind(this)),this.$el.on("blur.adp",this._onBlur.bind(this)),this.$el.on("keyup.adp",this._onKeyUpGeneral.bind(this)),b(a).on("resize.adp",this._onResize.bind(this)),b("body").on("mouseup.adp",this._onMouseUpBody.bind(this))},_bindKeyboardEvents:function(){this.$el.on("keydown.adp",this._onKeyDown.bind(this)),this.$el.on("keyup.adp",this._onKeyUp.bind(this)),this.$el.on("hotKey.adp",this._onHotKey.bind(this))},_bindTimepickerEvents:function(){this.$el.on("timeChange.adp",this._onTimeChange.bind(this))},isWeekend:function(a){return-1!==this.opts.weekends.indexOf(a)},_defineLocale:function(a){"string"==typeof a?(this.loc=b.fn.datepicker.language[a],this.loc||(console.warn("Can't find language \""+a+'" in Datepicker.language, will use "ru" instead'),this.loc=b.extend(!0,{},b.fn.datepicker.language.ru)),this.loc=b.extend(!0,{},b.fn.datepicker.language.ru,b.fn.datepicker.language[a])):this.loc=b.extend(!0,{},b.fn.datepicker.language.ru,a),this.opts.dateFormat&&(this.loc.dateFormat=this.opts.dateFormat),this.opts.timeFormat&&(this.loc.timeFormat=this.opts.timeFormat),""!==this.opts.firstDay&&(this.loc.firstDay=this.opts.firstDay),this.opts.timepicker&&(this.loc.dateFormat=[this.loc.dateFormat,this.loc.timeFormat].join(this.opts.dateTimeSeparator)),this.opts.onlyTimepicker&&(this.loc.dateFormat=this.loc.timeFormat);var c=this._getWordBoundaryRegExp;(this.loc.timeFormat.match(c("aa"))||this.loc.timeFormat.match(c("AA")))&&(this.ampm=!0)},_buildDatepickersContainer:function(){j=!0,d.append('<div class="datepickers-container" id="datepickers-container"></div>'),e=b("#datepickers-container")},_buildBaseHtml:function(){var a,c=b('<div class="datepicker-inline">');a="INPUT"==this.el.nodeName?this.opts.inline?c.insertAfter(this.$el):e:c.appendTo(this.$el),this.$datepicker=b(k).appendTo(a),this.$content=b(".datepicker--content",this.$datepicker),this.$nav=b(".datepicker--nav",this.$datepicker)},_triggerOnChange:function(){if(!this.selectedDates.length){if(""===this._prevOnSelectValue)return;return this._prevOnSelectValue="",this.opts.onSelect("","",this)}var a,b=this.selectedDates,c=f.getParsedDate(b[0]),d=this,e=new Date(c.year,c.month,c.date,c.hours,c.minutes);a=b.map(function(a){return d.formatDate(d.loc.dateFormat,a)}).join(this.opts.multipleDatesSeparator),(this.opts.multipleDates||this.opts.range)&&(e=b.map(function(a){var b=f.getParsedDate(a);return new Date(b.year,b.month,b.date,b.hours,b.minutes)})),this._prevOnSelectValue=a,this.opts.onSelect(a,e,this)},next:function(){var a=this.parsedDate,b=this.opts;switch(this.view){case"days":this.date=new Date(a.year,a.month+1,1),b.onChangeMonth&&b.onChangeMonth(this.parsedDate.month,this.parsedDate.year);break;case"months":this.date=new Date(a.year+1,a.month,1),b.onChangeYear&&b.onChangeYear(this.parsedDate.year);break;case"years":this.date=new Date(a.year+10,0,1),b.onChangeDecade&&b.onChangeDecade(this.curDecade)}},prev:function(){var a=this.parsedDate,b=this.opts;switch(this.view){case"days":this.date=new Date(a.year,a.month-1,1),b.onChangeMonth&&b.onChangeMonth(this.parsedDate.month,this.parsedDate.year);break;case"months":this.date=new Date(a.year-1,a.month,1),b.onChangeYear&&b.onChangeYear(this.parsedDate.year);break;case"years":this.date=new Date(a.year-10,0,1),b.onChangeDecade&&b.onChangeDecade(this.curDecade)}},formatDate:function(a,b){b=b||this.date 16;var c,d=a,e=this._getWordBoundaryRegExp,g=this.loc,h=f.getLeadingZeroNum,i=f.getDecade(b),j=f.getParsedDate(b),k=j.fullHours,l=j.hours,m=a.match(e("aa"))||a.match(e("AA")),n="am",o=this._replacer;switch(this.opts.timepicker&&this.timepicker&&m&&(c=this.timepicker._getValidHoursFromDate(b,m),k=h(c.hours),l=c.hours,n=c.dayPeriod),!0){case/@/.test(d):d=d.replace(/@/,b.getTime());case/aa/.test(d):d=o(d,e("aa"),n);case/AA/.test(d):d=o(d,e("AA"),n.toUpperCase());case/dd/.test(d):d=o(d,e("dd"),j.fullDate);case/d/.test(d):d=o(d,e("d"),j.date);case/DD/.test(d):d=o(d,e("DD"),g.days[j.day]);case/D/.test(d):d=o(d,e("D"),g.daysShort[j.day]);case/mm/.test(d):d=o(d,e("mm"),j.fullMonth);case/m/.test(d):d=o(d,e("m"),j.month+1);case/MM/.test(d):d=o(d,e("MM"),this.loc.months[j.month]);case/M/.test(d):d=o(d,e("M"),g.monthsShort[j.month]);case/ii/.test(d):d=o(d,e("ii"),j.fullMinutes);case/i/.test(d):d=o(d,e("i"),j.minutes);case/hh/.test(d):d=o(d,e("hh"),k);case/h/.test(d):d=o(d,e("h"),l);case/yyyy/.test(d):d=o(d,e("yyyy"),j.year);case/yyyy1/.test(d):d=o(d,e("yyyy1"),i[0]);case/yyyy2/.test(d):d=o(d,e("yyyy2"),i[1]);case/yy/.test(d):d=o(d,e("yy"),j.year.toString().slice(-2))}return d},_replacer:function(a,b,c){return a.replace(b,function(a,b,d,e){return b+c+e})},_getWordBoundaryRegExp:function(a){var b="\\s|\\.|-|/|\\\\|,|\\$|\\!|\\?|:|;";return new RegExp("(^|>|"+b+")("+a+")($|<|"+b+")","g")},selectDate:function(a){var b=this,c=b.opts,d=b.parsedDate,e=b.selectedDates,g=e.length,h="";if(Array.isArray(a))return void a.forEach(function(a){b.selectDate(a)});if(a instanceof Date){if(this.lastSelectedDate=a,this.timepicker&&this.timepicker._setTime(a),b._trigger("selectDate",a),this.timepicker&&(a.setHours(this.timepicker.hours),a.setMinutes(this.timepicker.minutes)),"days"==b.view&&a.getMonth()!=d.month&&c.moveToOtherMonthsOnSelect&&(h=new Date(a.getFullYear(),a.getMonth(),1)),"years"==b.view&&a.getFullYear()!=d.year&&c.moveToOtherYearsOnSelect&&(h=new Date(a.getFullYear(),0,1)),h&&(b.silent=!0,b.date=h,b.silent=!1,b.nav._render()),c.multipleDates&&!c.range){if(g===c.multipleDates)return;b._isSelected(a)||b.selectedDates.push(a)}else c.range?2==g?(b.selectedDates=[a],b.minRange=a,b.maxRange=""):1==g?(b.selectedDates.push(a),b.maxRange?b.minRange=a:b.maxRange=a,f.bigger(b.maxRange,b.minRange)&&(b.maxRange=b.minRange,b.minRange=a),b.selectedDates=[b.minRange,b.maxRange]):(b.selectedDates=[a],b.minRange=a):b.selectedDates=[a];b._setInputValue(),c.onSelect&&b._triggerOnChange(),c.autoClose&&!this.timepickerIsActive&&(c.multipleDates||c.range?c.range&&2==b.selectedDates.length&&b.hide():b.hide()),b.views[this.currentView]._render()}},removeDate:function(a){var b=this.selectedDates,c=this;if(a instanceof Date)return b.some(function(d,e){if(f.isSame(d,a))return b.splice(e,1),c.selectedDates.length?c.lastSelectedDate=c.selectedDates[c.selectedDates.length-1]:(c.minRange="",c.maxRange="",c.lastSelectedDate=""),c.views[c.currentView]._render(),c._setInputValue(),c.opts.onSelect&&c._triggerOnChange(),!0})},today:function(){this.silent=!0,this.view=this.opts.minView,this.silent=!1,this.date=new Date,this.opts.todayButton instanceof Date&&this.selectDate(this.opts.todayButton)},clear:function(){this.selectedDates=[],this.minRange="",this.maxRange="",this.views[this.currentView]._render(),this._setInputValue(),this.opts.onSelect&&this._triggerOnChange()},update:function(a,c){var d=arguments.length,e=this.lastSelectedDate;return 2==d?this.opts[a]=c:1==d&&"object"==typeof a&&(this.opts=b.extend(!0,this.opts,a)),this._createShortCuts(),this._syncWithMinMaxDates(),this._defineLocale(this.opts.language),this.nav._addButtonsIfNeed(),this.opts.onlyTimepicker||this.nav._render(),this.views[this.currentView]._render(),this.elIsInput&&!this.opts.inline&&(this._setPositionClasses(this.opts.position),this.visible&&this.setPosition(this.opts.position)),this.opts.classes&&this.$datepicker.addClass(this.opts.classes),this.opts.onlyTimepicker&&this.$datepicker.addClass("-only-timepicker-"),this.opts.timepicker&&(e&&this.timepicker._handleDate(e),this.timepicker._updateRanges(),this.timepicker._updateCurrentTime(),e&&(e.setHours(this.timepicker.hours),e.setMinutes(this.timepicker.minutes))),this._setInputValue(),this},_syncWithMinMaxDates:function(){var a=this.date.getTime();this.silent=!0,this.minTime>a&&(this.date=this.minDate),this.maxTime<a&&(this.date=this.maxDate),this.silent=!1},_isSelected:function(a,b){var c=!1;return this.selectedDates.some(function(d){if(f.isSame(d,a,b))return c=d,!0}),c},_setInputValue:function(){var a,b=this,c=b.opts,d=b.loc.dateFormat,e=c.altFieldDateFormat,f=b.selectedDates.map(function(a){return b.formatDate(d,a)});c.altField&&b.$altField.length&&(a=this.selectedDates.map(function(a){return b.formatDate(e,a)}),a=a.join(this.opts.multipleDatesSeparator),this.$altField.val(a)),f=f.join(this.opts.multipleDatesSeparator),this.$el.val(f)},_isInRange:function(a,b){var c=a.getTime(),d=f.getParsedDate(a),e=f.getParsedDate(this.minDate),g=f.getParsedDate(this.maxDate),h=new Date(d.year,d.month,e.date).getTime(),i=new Date(d.year,d.month,g.date).getTime(),j={day:c>=this.minTime&&c<=this.maxTime,month:h>=this.minTime&&i<=this.maxTime,year:d.year>=e.year&&d.year<=g.year};return b?j[b]:j.day},_getDimensions:function(a){var b=a.offset();
16return{width:a.outerWidth(),height:a.outerHeight(),left:b.left,top:b.top}},_getDateFromCell:function(a){var b=this.parsedDate,d=a.data("year")||b.year,e=a.data("month")==c?b.month:a.data("month"),f=a.data("date")||1;return new Date(d,e,f)},_setPositionClasses:function(a){a=a.split(" ");var b=a[0],c=a[1],d="datepicker -"+b+"-"+c+"- -from-"+b+"-";this.visible&&(d+=" active"),this.$datepicker.removeAttr("class").addClass(d)},setPosition:function(a){a=a||this.opts.position;var b,c,d=this._getDimensions(this.$el),e=this._getDimensions(this.$datepicker),f=a.split(" "),g=this.opts.offset,h=f[0],i=f[1];switch(h){case"top":b=d.top-e.height-g;break;case"right":c=d.left+d.width+g;break;case"bottom":b=d.top+d.height+g;break;case"left":c=d.left-e.width-g}switch(i){case"top":b=d.top;break;case"right":c=d.left+d.width-e.width;break;case"bottom":b=d.top+d.height-e.height;break;case"left":c=d.left;break;case"center":/left|right/.test(h)?b=d.top+d.height/2-e.height/2:c=d.left+d.width/2-e.width/2}this.$datepicker.css({left:c,top:b})},show:function(){var a=this.opts.onShow;this.setPosition(this.opts.position),this.$datepicker.addClass("active"),this.visible=!0,a&&this._bindVisionEvents(a)},hide:function(){var a=this.opts.onHide;this.$datepicker.removeClass("active").css({left:"-100000px"}),this.focused="",this.keys=[],this.inFocus=!1,this.visible=!1,this.$el.blur(),a&&this._bindVisionEvents(a)},down:function(a){this._changeView(a,"down")},up:function(a){this._changeView(a,"up")},_bindVisionEvents:function(a){this.$datepicker.off("transitionend.dp"),a(this,!1),this.$datepicker.one("transitionend.dp",a.bind(this,this,!0))},_changeView:function(a,b){a=a||this.focused||this.date;var c="up"==b?this.viewIndex+1:this.viewIndex-1;c>2&&(c=2),c<0&&(c=0),this.silent=!0,this.date=new Date(a.getFullYear(),a.getMonth(),1),this.silent=!1,this.view=this.viewIndexes[c]},_handleHotKey:function(a){var b,c,d,e=f.getParsedDate(this._getFocusedDate()),g=this.opts,h=!1,i=!1,j=!1,k=e.year,l=e.month,m=e.date;switch(a){case"ctrlRight":case"ctrlUp":l+=1,h=!0;break;case"ctrlLeft":case"ctrlDown":l-=1,h=!0;break;case"shiftRight":case"shiftUp":i=!0,k+=1;break;case"shiftLeft":case"shiftDown":i=!0,k-=1;break;case"altRight":case"altUp":j=!0,k+=10;break;case"altLeft":case"altDown":j=!0,k-=10;break;case"ctrlShiftUp":this.up()}d=f.getDaysCount(new Date(k,l)),c=new Date(k,l,m),d<m&&(m=d),c.getTime()<this.minTime?c=this.minDate:c.getTime()>this.maxTime&&(c=this.maxDate),this.focused=c,b=f.getParsedDate(c),h&&g.onChangeMonth&&g.onChangeMonth(b.month,b.year),i&&g.onChangeYear&&g.onChangeYear(b.year),j&&g.onChangeDecade&&g.onChangeDecade(this.curDecade)},_registerKey:function(a){this.keys.some(function(b){return b==a})||this.keys.push(a)},_unRegisterKey:function(a){var b=this.keys.indexOf(a);this.keys.splice(b,1)},_isHotKeyPressed:function(){var a,b=!1,c=this,d=this.keys.sort();for(var e in m)a=m[e],d.length==a.length&&a.every(function(a,b){return a==d[b]})&&(c._trigger("hotKey",e),b=!0);return b},_trigger:function(a,b){this.$el.trigger(a,b)},_focusNextCell:function(a,b){b=b||this.cellType;var c=f.getParsedDate(this._getFocusedDate()),d=c.year,e=c.month,g=c.date;if(!this._isHotKeyPressed()){switch(a){case 37:"day"==b&&(g-=1),"month"==b&&(e-=1),"year"==b&&(d-=1);break;case 38:"day"==b&&(g-=7),"month"==b&&(e-=3),"year"==b&&(d-=4);break;case 39:"day"==b&&(g+=1),"month"==b&&(e+=1),"year"==b&&(d+=1);break;case 40:"day"==b&&(g+=7),"month"==b&&(e+=3),"year"==b&&(d+=4)}var h=new Date(d,e,g);h.getTime()<this.minTime?h=this.minDate:h.getTime()>this.maxTime&&(h=this.maxDate),this.focused=h}},_getFocusedDate:function(){var a=this.focused||this.selectedDates[this.selectedDates.length-1],b=this.parsedDate;if(!a)switch(this.view){case"days":a=new Date(b.year,b.month,(new Date).getDate());break;case"months":a=new Date(b.year,b.month,1);break;case"years":a=new Date(b.year,0,1)}return a},_getCell:function(a,c){c=c||this.cellType;var d,e=f.getParsedDate(a),g='.datepicker--cell[data-year="'+e.year+'"]';switch(c){case"month":g='[data-month="'+e.month+'"]';break;case"day":g+='[data-month="'+e.month+'"][data-date="'+e.date+'"]'}return d=this.views[this.currentView].$el.find(g),d.length?d:b("")},destroy:function(){var a=this;a.$el.off(".adp").data("datepicker",""),a.selectedDates=[],a.focused="",a.views={},a.keys=[],a.minRange="",a.maxRange="",a.opts.inline||!a.elIsInput?a.$datepicker.closest(".datepicker-inline").remove():a.$datepicker.remove()},_handleAlreadySelectedDates:function(a,b){this.opts.range?this.opts.toggleSelected?this.removeDate(b):2!=this.selectedDates.length&&this._trigger("clickCell",b):this.opts.toggleSelected&&this.removeDate(b),this.opts.toggleSelected||(this.lastSelectedDate=a,this.opts.timepicker&&(this.timepicker._setTime(a),this.timepicker.update(
16)))},_onShowEvent:function(a){this.visible||this.show()},_onBlur:function(){!this.inFocus&&this.visible&&this.hide()},_onMouseDownDatepicker:function(a){this.inFocus=!0},_onMouseUpDatepicker:function(a){this.inFocus=!1,a.originalEvent.inFocus=!0,a.originalEvent.timepickerFocus||this.$el.focus()},_onKeyUpGeneral:function(a){this.$el.val()||this.clear()},_onResize:function(){this.visible&&this.setPosition()},_onMouseUpBody:function(a){a.originalEvent.inFocus||this.visible&&!this.inFocus&&this.hide()},_onMouseUpEl:function(a){a.originalEvent.inFocus=!0,setTimeout(this._onKeyUpGeneral.bind(this),4)},_onKeyDown:function(a){var b=a.which;if(this._registerKey(b),b>=37&&b<=40&&(a.preventDefault(),this._focusNextCell(b)),13==b&&this.focused){if(this._getCell(this.focused).hasClass("-disabled-"))return;if(this.view!=this.opts.minView)this.down();else{var c=this._isSelected(this.focused,this.cellType);if(!c)return this.timepicker&&(this.focused.setHours(this.timepicker.hours),this.focused.setMinutes(this.timepicker.minutes)),void this.selectDate(this.focused);this._handleAlreadySelectedDates(c,this.focused)}}27==b&&this.hide()},_onKeyUp:function(a){var b=a.which;this._unRegisterKey(b)},_onHotKey:function(a,b){this._handleHotKey(b)},_onMouseEnterCell:function(a){var c=b(a.target).closest(".datepicker--cell"),d=this._getDateFromCell(c);this.silent=!0,this.focused&&(this.focused=""),c.addClass("-focus-"),this.focused=d,this.silent=!1,this.opts.range&&1==this.selectedDates.length&&(this.minRange=this.selectedDates[0],this.maxRange="",f.less(this.minRange,this.focused)&&(this.maxRange=this.minRange,this.minRange=""),this.views[this.currentView]._update())},_onMouseLeaveCell:function(a){b(a.target).closest(".datepicker--cell").removeClass("-focus-"),this.silent=!0,this.focused="",this.silent=!1},_onTimeChange:function(a,b,c){var d=new Date,e=this.selectedDates,f=!1;e.length&&(f=!0,d=this.lastSelectedDate),d.setHours(b),d.setMinutes(c),f||this._getCell(d).hasClass("-disabled-")?(this._setInputValue(),this.opts.onSelect&&this._triggerOnChange()):this.selectDate(d)},_onClickCell:function(a,b){this.timepicker&&(b.setHours(this.timepicker.hours),b.setMinutes(this.timepicker.minutes)),this.selectDate(b)},set focused(a){if(!a&&this.focused){var b=this._getCell(this.focused);b.length&&b.removeClass("-focus-")}this._focused=a,this.opts.range&&1==this.selectedDates.length&&(this.minRange=this.selectedDates[0],this.maxRange="",f.less(this.minRange,this._focused)&&(this.maxRange=this.minRange,this.minRange="")),this.silent||(this.date=a)},get focused(){return this._focused},get parsedDate(){return f.getParsedDate(this.date)},set date(a){if(a instanceof Date)return this.currentDate=a,this.inited&&!this.silent&&(this.views[this.view]._render(),this.nav._render(),this.visible&&this.elIsInput&&this.setPosition()),a},get date(){return this.currentDate},set view(a){if(this.viewIndex=this.viewIndexes.indexOf(a),!(this.viewIndex<0))return this.prevView=this.currentView,this.currentView=a,this.inited&&(this.views[a]?this.views[a]._render():this.views[a]=new b.fn.datepicker.Body(this,a,this.opts),this.views[this.prevView].hide(),this.views[a].show(),this.nav._render(),this.opts.onChangeView&&this.opts.onChangeView(a),this.elIsInput&&this.visible&&this.setPosition()),a},get view(){return this.currentView},get cellType(){return this.view.substring(0,this.view.length-1)},get minTime(){var a=f.getParsedDate(this.minDate);return new Date(a.year,a.month,a.date).getTime()},get maxTime(){var a=f.getParsedDate(this.maxDate);return new Date(a.year,a.month,a.date).getTime()},get curDecade(){return f.getDecade(this.date)}},f.getDaysCount=function(a){return new Date(a.getFullYear(),a.getMonth()+1,0).getDate()},f.getParsedDate=function(a){return{year:a.getFullYear(),month:a.getMonth(),fullMonth:a.getMonth()+1<10?"0"+(a.getMonth()+1):a.getMonth()+1,date:a.getDate(),fullDate:a.getDate()<10?"0"+a.getDate():a.getDate(),day:a.getDay(),hours:a.getHours(),fullHours:a.getHours()<10?"0"+a.getHours():a.getHours(),minutes:a.getMinutes(),fullMinutes:a.getMinutes()<10?"0"+a.getMinutes():a.getMinutes()}},f.getDecade=function(a){var b=10*Math.floor(a.getFullYear()/10);return[b,b+9]},f.template=function(a,b){return a.replace(/#\{([\w]+)\}/g,function(a,c){if(b[c]||0===b[c])return b[c]})},f.isSame=function(a,b,c){if(!a||!b)return!1;var d=f.getParsedDate(a),e=f.getParsedDate(b),g=c||"day";return{day:d.date==e.date&&d.month==e.month&&d.year==e.year,month:d.month==e.month&&d.year==e.year,year:d.year==e.year}[g]},f.less=function(a,b,c){return!(!a||!b)&&b.getTime()<a.getTime()},f.bigger=function(a,b,c){return!(!a||!b)&&b.getTime()>a.getTime()},f.getLeadingZeroNum=function(a){return parseInt(a)<10?"0"+a:a}
16,f.resetTime=function(a){if("object"==typeof a)return a=f.getParsedDate(a),new Date(a.year,a.month,a.date)},b.fn.datepicker=function(a){return this.each(function(){if(b.data(this,h)){var c=b.data(this,h);c.opts=b.extend(!0,c.opts,a),c.update()}else b.data(this,h,new n(this,a))})},b.fn.datepicker.Constructor=n,b.fn.datepicker.language={ru:{days:["ÐоÑкÑеÑенÑе","ÐонеделÑник","ÐÑоÑник","СÑеда","ЧеÑвеÑг","ÐÑÑниÑа","СÑббоÑа"],daysShort:["ÐоÑ","Ðон","ÐÑо","СÑе","ЧеÑ","ÐÑÑ","СÑб"],daysMin:["ÐÑ","Ðн","ÐÑ","СÑ","ЧÑ","ÐÑ","Сб"],months:["ЯнваÑÑ","ФевÑалÑ","ÐаÑÑ","ÐпÑелÑ","Ðай","ÐÑнÑ","ÐÑлÑ","ÐвгÑÑÑ","СенÑÑбÑÑ","ÐкÑÑбÑÑ","ÐоÑбÑÑ","ÐекабÑÑ"],monthsShort:["Янв","Фев","ÐаÑ","ÐпÑ","Ðай","ÐÑн","ÐÑл","Ðвг","Сен","ÐкÑ","ÐоÑ","Ðек"],today:"СегоднÑ",clear:"ÐÑиÑÑиÑÑ",dateFormat:"dd.mm.yyyy",timeFormat:"hh:ii",firstDay:1}},b(function(){b(i).datepicker()})}(),function(){var a={days:'<div class="datepicker--days datepicker--body"><div class="datepicker--days-names"></div><div class="datepicker--cells datepicker--cells-days"></div></div>',months:'<div class="datepicker--months datepicker--body"><div class="datepicker--cells datepicker--cells-months"></div></div>',years:'<div class="datepicker--years datepicker--body"><div class="datepicker--cells datepicker--cells-years"></div></div>'},d=b.fn.datepicker,e=d.Constructor;d.Body=function(a,c,d){this.d=a,this.type=c,this.opts=d,this.$el=b(""),this.opts.onlyTimepicker||this.init()},d.Body.prototype={init:function(){this._buildBaseHtml(),this._render(),this._bindEvents()},_bindEvents:function(){this.$el.on("click touchstart",".datepicker--cell",b.proxy(this._onClickCell,this))},_buildBaseHtml:function(){this.$el=b(a[this.type]).appendTo(this.d.$content),this.$names=b(".datepicker--days-names",this.$el),this.$cells=b(".datepicker--cells",this.$el)},_getDayNamesHtml:function(a,b,d,e){return b=b!=c?b:a,d=d||"",(e=e!=c?e:0)>7?d:7==b?this._getDayNamesHtml(a,0,d,++e):(d+='<div class="datepicker--day-name'+(this.d.isWeekend(b)?" -weekend-":"")+'">'+this.d.loc.daysMin[b]+"</div>",this._getDayNamesHtml(a,++b,d,++e))},_getCellContents:function(a,b){var c="datepicker--cell datepicker--cell-"+b,d=new Date,f=this.d,g=e.resetTime(f.minRange),h=e.resetTime(f.maxRange),i=f.opts,j=e.getParsedDate(a),k={},l=j.date;switch(b){case"day":f.isWeekend(j.day)&&(c+=" -weekend-"),j.month!=this.d.parsedDate.month&&(c+=" -other-month-",i.selectOtherMonths||(c+=" -disabled-"),i.showOtherMonths||(l=""));break;case"month":l=f.loc[f.opts.monthsField][j.month];break;case"year":var m=f.curDecade;l=j.year,(j.year<m[0]||j.year>m[1])&&(c+=" -other-decade-",i.selectOtherYears||(c+=" -disabled-"),i.showOtherYears||(l=""))}return i.onRenderCell&&(k=i.onRenderCell(a,b)||{},l=k.html?k.html:l,c+=k.classes?" "+k.classes:""),i.range&&(e.isSame(g,a,b)&&(c+=" -range-from-"),e.isSame(h,a,b)&&(c+=" -range-to-"),1==f.selectedDates.length&&f.focused?((e.bigger(g,a)&&e.less(f.focused,a)||e.less(h,a)&&e.bigger(f.focused,a))&&(c+=" -in-range-"),e.less(h,a)&&e.isSame(f.focused,a)&&(c+=" -range-from-"),e.bigger(g,a)&&e.isSame(f.focused,a)&&(c+=" -range-to-")):2==f.selectedDates.length&&e.bigger(g,a)&&e.less(h,a)&&(c+=" -in-range-")),e.isSame(d,a,b)&&(c+=" -current-"),f.focused&&e.isSame(a,f.focused,b)&&(c+=" -focus-"),f._isSelected(a,b)&&(c+=" -selected-"),f._isInRange(a,b)&&!k.disabled||(c+=" -disabled-"),{html:l,classes:c}},_getDaysHtml:function(a){var b=e.getDaysCount(a),c=new Date(a.getFullYear(),a.getMonth(),1).getDay(),d=new Date(a.getFullYear(),a.getMonth(),b).getDay(),f=c-this.d.loc.firstDay,g=6-d+this.d.loc.firstDay;f=f<0?f+7:f,g=g>6?g-7:g;for(var h,i,j=1-f,k="",l=j,m=b+g;l<=m;l++)i=a.getFullYear(),h=a.getMonth(),k+=this._getDayHtml(new Date(i,h,l));return k},_getDayHtml:function(a){var b=this._getCellContents(a,"day");return'<div class="'+b.classes+'" data-date="'+a.getDate()+'" data-month="'+a.getMonth()+'" data-year="'+a.getFullYear()+'">'+b.html+"</div>"},_getMonthsHtml:function(a){for(var b="",c=e.getParsedDate(a),d=0;d<12;)b+=this._getMonthHtml(new Date(c.year,d)),d++;return b},_getMonthHtml:function(a){var b=this._getCellContents(a,"month");return'<div class="'+b.classes+'" data-month="'+a.getMonth()+'">'+b.html+"</div>"},_getYearsHtml:function(a){var b=(e.getParsedDate(a),e.getDecade(a)),c=b[0]-1,d="",f=c;for(f;f<=b[1]+1;f++)d+=this._getYearHtml(new Date(f,0));return d},_getYearHtml:function(a){var b=this._getCellContents(a,"year");return'<div class="'+b.classes+'" data-year="'+a.getFullYear()+'">'+b.html+"</div>"},_renderTypes:{days:function(){var a=this._getDayNamesHtml(this.d.loc.firstDay),b=this._getDaysHtml(this.d.currentDate);this.$cells.html(b),this.$names.html(a)},months:function(){var a=this._getMonthsHtml(this.d.currentDate);this.$cells.html(a)},years:function(){var a=this._getYearsHtml(this.d.currentDate);this.$cells.html(a)}},_render:function(){this.opts.onlyTimepicker||this._renderTypes[this.type].bind(this)()},_update:function(){var a,c,d,e=b(".datepicker--cell",this.$cells),f=this;e.each(function(e,g){c=b(this),d=f.d._getDateFromCell(b(this)),a=f._getCellContents(d,f.d.cellType),c.attr("class",a.classes)})},show:function(){this.opts.onlyTimepicker||(this.$el.addClass("active"),this.acitve=!0)},hide:function(){this.$el.removeClass("active"),this.active=!1},_handleClick:function(a){var b=a.data("date")||1,c=a.data("month")||0,d=a.data("year")||this.d.parsedDate.year,e=this.d;if(e.view!=this.opts.minView)return void e.down(new Date(d,c,b));var f=new Date(d,c,b),g=this.d._isSelected(f,this.d.cellType);if(!g)return void e._trigger("clickCell",f);e._handleAlreadySelectedDates.bind(e,g,f)()},_onClickCell:function(a){var c=b(a.target).closest(".datepicker--cell");c.hasClass("-disabled-")||this._handleClick.bind(this)(c)}}}(),function(){var a=b.fn.datepicker,c=a.Constructor;a.Navigation=function(a,b){this.d=a,this.opts=b,this.$buttonsContainer="",this.init()},a.Navigation.prototype={init:function(){this._buildBaseHtml(),this._bindEvents()},_bindEvents:function(){this.d.$nav.on("click touchstart",".datepicker--nav-action",b.proxy(this._onClickNavButton,this)),this.d.$nav.on("click touchstart",".datepicker--nav-title",b.proxy(this._onClickNavTitle,this)),this.d.$datepicker.on("click touchstart",".datepicker--button",b.proxy(this._onClickNavButton,this))},_buildBaseHtml:function(){this.opts.onlyTimepicker||this._render(),this._addButtonsIfNeed()},_addButtonsIfNeed:function(){this.opts.todayButton&&this._addButton("today"),this.opts.clearButton&&this._addButton("clear")},_render:function(){var a=this._getTitle(this.d.currentDate),d=c.template('<div class="datepicker--nav-action" data-action="prev">#{prevHtml}</div><div class="datepicker--nav-title">#{title}</div><div class="datepicker--nav-action" data-action="next">#{nextHtml}</div>',b.extend({title:a},this.opts));this.d.$nav.html(d),"years"==this.d.view&&b(".datepicker--nav-title",this.d.$nav).addClass("-disabled-"),this.setNavStatus()},_getTitle:function(a){return this.d.formatDate(this.opts.navTitles[this.d.view],a)},_addButton:function(a){this.$buttonsContainer.length||this._addButtonsContainer();var d={action:a,label:this.d.loc[a]},e=c.template('<span class="datepicker--button" data-action="#{action}">#{label}</span>',d);b("[data-action="+a+"]",this.$buttonsContainer).length||this.$buttonsContainer.append(e)},_addButtonsContainer:function(){this.d.$datepicker.append('<div class="datepicker--buttons"></div>'),this.$buttonsContainer=b(".datepicker--buttons",this.d.$datepicker)},setNavStatus:function(){if((this.opts.minDate||this.opts.maxDate)&&this.opts.disableNavWhenOutOfRange){var a=this.d.parsedDate,b=a.month,d=a.year,e=a.date;switch(this.d.view){case"days":this.d._isInRange(new Date(d,b-1,1),"month")||this._disableNav("prev"),this.d._isInRange(new Date(d,b+1,1),"month")||this._disableNav("next");break;case"months":this.d._isInRange(new Date(d-1,b,e),"year")||this._disableNav("prev"),this.d._isInRange(new Date(d+1,b,e),"year")||this._disableNav("next");break;case"years":var f=c.getDecade(this.d.date);this.d._isInRange(new Date(f[0]-1,0,1),"year")||this._disableNav("prev"),this.d._isInRange(new Date(f[1]+1,0,1),"year")||this._disableNav("next")}}},_disableNav:function(a){b('[data-action="'+a+'"]',this.d.$nav).addClass("-disabled-")},_activateNav:function(a){b('[data-action="'+a+'"]',this.d.$nav).removeClass("-disabled-")},_onClickNavButton:function(a){var c=b(a.target).closest("[data-action]"),d=c.data("action");this.d[d]()}
16,_onClickNavTitle:function(a){if(!b(a.target).hasClass("-disabled-"))return"days"==this.d.view?this.d.view="months":void(this.d.view="years")}}}(),function(){var a=b.fn.datepicker,c=a.Constructor;a.Timepicker=function(a,b){this.d=a,this.opts=b,this.init()},a.Timepicker.prototype={init:function(){var a="input";this._setTime(this.d.date),this._buildHTML(),navigator.userAgent.match(/trident/gi)&&(a="change"),this.d.$el.on("selectDate",this._onSelectDate.bind(this)),this.$ranges.on(a,this._onChangeRange.bind(this)),this.$ranges.on("mouseup",this._onMouseUpRange.bind(this)),this.$ranges.on("mousemove focus ",this._onMouseEnterRange.bind(this)),this.$ranges.on("mouseout blur",this._onMouseOutRange.bind(this))},_setTime:function(a){var b=c.getParsedDate(a);this._handleDate(a),this.hours=b.hours<this.minHours?this.minHours:b.hours,this.minutes=b.minutes<this.minMinutes?this.minMinutes:b.minutes},_setMinTimeFromDate:function(a){this.minHours=a.getHours(),this.minMinutes=a.getMinutes(),this.d.lastSelectedDate&&this.d.lastSelectedDate.getHours()>a.getHours()&&(this.minMinutes=this.opts.minMinutes)},_setMaxTimeFromDate:function(a){this.maxHours=a.getHours(),this.maxMinutes=a.getMinutes(),this.d.lastSelectedDate&&this.d.lastSelectedDate.getHours()<a.getHours()&&(this.maxMinutes=this.opts.maxMinutes)},_setDefaultMinMaxTime:function(){var a=23,b=59,c=this.opts;this.minHours=c.minHours<0||c.minHours>a?0:c.minHours,this.minMinutes=c.minMinutes<0||c.minMinutes>b?0:c.minMinutes,this.maxHours=c.maxHours<0||c.maxHours>a?a:c.maxHours,this.maxMinutes=c.maxMinutes<0||c.maxMinutes>b?b:c.maxMinutes},_validateHoursMinutes:function(a){this.hours<this.minHours?this.hours=this.minHours:this.hours>this.maxHours&&(this.hours=this.maxHours),this.minutes<this.minMinutes?this.minutes=this.minMinutes:this.minutes>this.maxMinutes&&(this.minutes=this.maxMinutes)},_buildHTML:function(){var a=c.getLeadingZeroNum,d={hourMin:this.minHours,hourMax:a(this.maxHours),hourStep:this.opts.hoursStep,hourValue:this.hours,hourVisible:a(this.displayHours),minMin:this.minMinutes,minMax:a(this.maxMinutes),minStep:this.opts.minutesStep,minValue:a(this.minutes)},e=c.template('<div class="datepicker--time"><div class="datepicker--time-current"> <span class="datepicker--time-current-hours">#{hourVisible}</span> <span class="datepicker--time-current-colon">:</span> <span class="datepicker--time-current-minutes">#{minValue}</span></div><div class="datepicker--time-sliders"> <div class="datepicker--time-row"> <input type="range" name="hours" value="#{hourValue}" min="#{hourMin}" max="#{hourMax}" step="#{hourStep}"/> </div> <div class="datepicker--time-row"> <input type="range" name="minutes" value="#{minValue}" min="#{minMin}" max="#{minMax}" step="#{minStep}"/> </div></div></div>',d);this.$timepicker=b(e).appendTo(this.d.$datepicker),this.$ranges=b('[type="range"]',this.$timepicker),this.$hours=b('[name="hours"]',this.$timepicker),this.$minutes=b('[name="minutes"]',this.$timepicker),this.$hoursText=b(".datepicker--time-current-hours",this.$timepicker),this.$minutesText=b(".datepicker--time-current-minutes",this.$timepicker),this.d.ampm&&(this.$ampm=b('<span class="datepicker--time-current-ampm">').appendTo(b(".datepicker--time-current",this.$timepicker)).html(this.dayPeriod),this.$timepicker.addClass("-am-pm-"))},_updateCurrentTime:function(){var a=c.getLeadingZeroNum(this.displayHours),b=c.getLeadingZeroNum(this.minutes);this.$hoursText.html(a),this.$minutesText.html(b),this.d.ampm&&this.$ampm.html(this.dayPeriod)},_updateRanges:function(){this.$hours.attr({min:this.minHours,max:this.maxHours}).val(this.hours),this.$minutes.attr({min:this.minMinutes,max:this.maxMinutes}).val(this.minutes)},_handleDate:function(a){this._setDefaultMinMaxTime(),a&&(c.isSame(a,this.d.opts.minDate)?this._setMinTimeFromDate(this.d.opts.minDate):c.isSame(a,this.d.opts.maxDate)&&this._setMaxTimeFromDate(this.d.opts.maxDate)),this._validateHoursMinutes(a)},update:function(){this._updateRanges(),this._updateCurrentTime()},_getValidHoursFromDate:function(a,b){var d=a,e=a;a instanceof Date&&(d=c.getParsedDate(a),e=d.hours);var f=b||this.d.ampm,g="am";if(f)switch(!0){case 0==e:e=12;break;case 12==e:g="pm";break;case e>11:e-=12,g="pm"}return{hours:e,dayPeriod:g}},set hours(a){this._hours=a;var b=this._getValidHoursFromDate(a);this.displayHours=b.hours,this.dayPeriod=b.dayPeriod},get hours(){return this._hours},_onChangeRange:function(a){var c=b(a.target),d=c.attr("name");this.d.timepickerIsActive=!0,this[d]=c.val(),this._updateCurrentTime(),this.d._trigger("timeChange",[this.hours,this.minutes]),this._handleDate(this.d.lastSelectedDate),this.update()},_onSelectDate:function(a,b){this._handleDate(b),this.update()},_onMouseEnterRange:function(a){var c=b(a.target).attr("name");b(".datepicker--time-current-"+c,this.$timepicker).addClass("-focus-")},_onMouseOutRange:function(a){var c=b(a.target).attr("name");this.d.inFocus||b(".datepicker--time-current-"+c,this.$timepicker).removeClass("-focus-")},_onMouseUpRange:function(a){this.d.timepickerIsActive=!1}}}()}(window,jQuery),function(a){a.fn.datepicker.language.de={days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],daysShort:["Son","Mon","Die","Mit","Don","Fre","Sam"],daysMin:["So","Mo","Di","Mi","Do","Fr","Sa"],months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",clear:"Aufräumen",dateFormat:"dd.mm.yyyy",timeFormat:"hh:ii",firstDay:1}}(jQuery),function(a){a.fn.datepicker.language.en={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Frid
16ay","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",clear:'<i class="material-icons">keyboard_arrow_up</i>',dateFormat:"mm/dd/yyyy",timeFormat:"hh:ii aa",firstDay:0}}(jQuery),angular.module("brnaiApp").controller("CreateMerchantCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","Upload","$uibModal",function(a,b,c,d,e,f,g,h,i,j){a.clientShema={},a.attributes={},a.rows=[],a.multipleImages=[],a.multipleImagesModels={},a.uploaders={},a.merchant={login:"",password:"",profile:{}},b.getStore(g.id).then(function(b){a.clientShema=b.merchant,a.isEmpty(a.clientShema.schema)||angular.forEach(a.clientShema.schema,function(b,c){"mixed"!=b.type||b.selectable?("file"!=b.type&&"image"!=b.type||!b.multiple||(a.uploaders[c]=!1,a.multipleImagesModels[c]="",a.multipleImages.push(b)),"location"==b.type&&a.isEmpty(a.merchant.profile[c])&&(a.merchant.profile[c]={},a.merchant.profile[c].type="Point",a.merchant.profile[c].coordinates=[])):(a.uploaders[c]={},angular.forEach(b.schema.fields,function(b,d){"file"!=b.type&&"image"!=b.type||(a.uploaders[c][d]=!1)})),a.attributes[c]=b});var c=1,d={},e=!1,f=Object.keys(a.attributes).length;angular.forEach(a.attributes,function(b,g){e&&(a.rows.push(d),d={},e=!1),c%2==0&&(e=!0),d[g]=b,c==f&&a.rows.push(d),c++})}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.showMapForm=function(b,c){j.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,d,e,f,g){a.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",g.getMap().then(function(b){a.map=b;var d=a.map.getCenter();c.coordinates&&c.coordinates.length&&(d={lat:c.coordinates[1],lng:c.coordinates[0]}),google.maps.event.trigger(a.map,"resize"),a.map.setCenter(d)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},c.coordinates&&c.coordinates.length&&(a.marker=c),a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){e.close({attribute:b.name,data:a.marker})}}],windowClass:"large-modal"}).result.then(function(b){a.merchant.profile[b.attribute]=b.data},function(a){})},a.showSimpleMultipleModal=function(b,c){j.open({templateUrl:"views/attribute-simple-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","$uibModal",function(a,d,e,f,g){a.simpleAttribute=b,a.simpleAttr="",a.simpleValues=[],c&&c.length&&(a.simpleValues=c),a.addMultipleValue=function(){a.simpleAttr&&(a.simpleValues.push(a.simpleAttr),a.simpleAttr="")},a.fillAttribute=function(){e.close({attribute:a.simpleAttribute.name, 17data:a.simpleValues})},a.deleteValue=function(b){a.simpleValues.splice(b,1)}}],windowClass:"large-modal"}).result.then(function(b){a.merchant.profile[b.attribute]=b.data},function(a){})},a.showMixedForm=function(b,c){j.open({templateUrl:"views/attribute-mixed-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","Upload","$uibModal",function(a,d,e,g,h,i){a.mixedAttribute=b,a.multipleValues=[],a.uploaders={},a.mainAttr={},angular.forEach(a.mixedAttribute.schema.fields,function(b,c){a.mainAttr[c]="","boolean"==b.type&&(a.mainAttr[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1)}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.isEmpty(c)||(a.mixedAttribute.multiple?a.multipleValues=c:a.mainAttr=c),a.delMultipleVal=function(b){a.multipleValues.splice(b,1)},a.close=function(){e.close()},a.addFile=function(b,c,d,e){h.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(a.mainAttr[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})},a.fillAttribute=function(){e.close({attribute:a.mixedAttribute.name,data:a.mainAttr})},a.addMultipleValue=function(){a.multipleValues.push(a.mainAttr),a.mainAttr={},angular.forEach(a.mixedAttribute.schema.fields,function(b,c){a.mainAttr[c]="","boolean"==b.type&&(a.mainAttr[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1)})},a.fillMultipleAttribute=function(){e.close({attribute:a.mixedAttribute.name,data:a.multipleValues})},a.showMapForm=function(b,c){i.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,d,e,f,g){a.googleMapsUrl="https://maps.googleapis.com/ma
17ps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",g.getMap().then(function(b){a.map=b;var d=a.map.getCenter();c.coordinates&&c.coordinates.length&&(d={lat:c.coordinates[1],lng:c.coordinates[0]}),google.maps.event.trigger(a.map,"resize"),a.map.setCenter(d)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},c.coordinates&&c.coordinates.length&&(a.marker=c),a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){e.close({attribute:b.name,data:a.marker})}}],windowClass:"large-modal zindex-map"}).result.then(function(b){a.mainAttr[b.attribute]=b.data},function(a){})}}],windowClass:"large-modal"}).result.then(function(b){a.merchant.profile[b.attribute]=b.data},function(a){})},a.createMerchant=function(){b.createMerchant(g.id,a.merchant).then(function(b){b.status&&(h.success({message:'merchant "'+a.merchant.name+'" was successfully added'}),d.go("store-merchants",{id:g.id}))},function(a){})},a.addFile=function(b,c,d,e,h){i.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(h?a.merchant.profile[h][e]=b.data.url:a.merchant.profile[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})},a.addFiles=function(b,c,d){b&&i.upload({url:f.host+"/attachment/"+c+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[d]=!1,b.data.status&&a.merchant.profile[d].push(b.data.url)},function(a){},function(b){a.uploaders[d]=!0})},a.deleteImage=function(b,c){a.merchant.profile[c].splice(a.merchant.profile[c].indexOf(b),1)}}]),angular.module("brnaiApp").controller("StoreMerchantsCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification","$location",function(a,b,c,d,e,f,g,h){function i(){a.inProgress||(a.inProgress=!0,c.getMerchants(d.id,a.options,j()).then(function(b){b.merchants.length?angular.forEach(b.merchants,function(b,c){a.merchants.push(b)}):a.options.lastPage=!0,a.inProgress=!1,a.loading=!1},function(b){a.merchants=[],a.inProgress=!1,a.loading=!1}))}function j(){var b={};for(var c in a.filters)if(a.filters.hasOwnProperty(c)){if("isActive"==c||!a.filters[c].value)continue;b[c]=a.filters[c].value}return b}a.loading=!0,a.inProgress=!0,a.tableHeader=[{title:"Merchants"},{title:"Edit mask",link:"store-merchant-mask({id: botNav.botInfo.bot_id})"},{}],a.options={limit:30,offset:0,page:0,lastPage:!1},a.merchants=[],a.visibleAttributes=[],a.swapFilter=function(){if(a.filters.isActive=!a.filters.isActive,!a.filters.isActive){for(var b in a.filters)if(a.filters.hasOwnProperty(b)){if("isActive"==b||!a.filters[b].value)continue;delete a.filters[b]}a.filterMerchants()}},a.filters={isActive:!1},a.filterMerchants=function(b){setTimeout(function(){h.path("/bot/"+d.id+"/store/merchants").search(j()),a.options={limit:30,offset:0,page:0,lastPage:!1},a.merchants=[],i()},100)},c.getStore(d.id).then(function(b){if(a.merchant=b.merchant,!a.isEmpty(a.merchant.schema)){var c=h.search();angular.forEach(a.merchant.schema,function(b,d){b.visible&&(a.visibleAttributes.push(b),c[b.name]&&(a.filters[b.name]={value:c[b.name]}))});var d=a.visibleAttributes.length+2;if(d>a.tableHeader.length)for(var e=d-a.tableHeader.length,f=1;f<=e;f++)a.tableHeader.push({})}a.inProgress=!1,i()},function(b){a.merchant={}}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.deleteMerchant=function(b){confirm("Are you sure, you want to delete merchant?")&&c.deleteMerchant(b.merchant_id).then(function(c){c.data.status&&(a.merchants.splice(a.merchants.indexOf(b),1),g.success({message:"Merchant "+b.login+" successfully deleted"}))})},a.loadMore=function(){a.inProgress||a.options.lastPage||(a.options.page++,i())}}]),angular.module("brnaiApp").controller("MerchantDetailCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","Upload","$uibModal",function(a,b,c,d,e,f,g,h,i,j){a.clientShema={},a.attributes={},a.rows=[],a.multipleImages=[],a.multipleImagesModels={},a.uploaders={},a.merchant={},b.getMerchant(g.merchant).then(function(c){a.merchant=c,b.getStore(g.id).then(function(b){a.clientShema=b.merchant,a.isEmpty(a.clientShema.schema)||angular.forEach(a.clientShema.schema,function(b,c){"mixed"!=b.type||b.selectable?("file"!=b.type&&"image"!=b.type||!b.multiple||(a.uploaders[c]=!1,a.multipleImagesModels[c]="",a.multipleImages.push(b)),"location"==b.type&&a.isEmpty(a.merchant.profile[c])&&(a.merchant.profile[c]={},a.merchant.profile[c].type="Point",a.merchant.profile[c].coordinates=[])):(a.uploaders[c]={},angular.forEach(b.schema.fields,function(b,d){"file"!=b.type&&"image"!=b.type||(a.uploaders[c][d]=!1)})),a.attributes[c]=b});var c=1,d={},e=!1,f=Object.keys(a.attributes).length;angular.forEach(a.attributes,function(b,g){e&&(a.rows.push(d),d={},e=!1),c%2==0&&(e=!0),d[g]=b,c==f&&a.rows.push(d),c++})})},function(b){a.merchant={}}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.showSimpleMultipleModal=function(b,c){j.open({templateUrl:"views/attribute-simple-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","$uibModal",function(a,d,e,f,g){a.simpleAttribute=b,a.simpleAttr="",a.simpleValues=[],c&&c.length&&(a.simpleValues=c),a.addMultipleValue=function(){a.simpleAttr&&(a.simpleValues.push(a.simpleAttr),a.simpleAttr="")},a.fillAttribute=function(){e.close({attribute:a.simpleAttribute.name,data:a.simpleValues})},a.deleteValue=function(b){a.simpleValues.splice(b,1)}}],windowClass:"large-modal"}).result.then(function(b){a.merchant.profile[b.attribute]=b.data},function(a){})},a.showMapForm=function(b,c){j.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,d,e,f,g){a.googleMapsUrl="https://maps.googleapis.com/ma
17ps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",g.getMap().then(function(b){a.map=b;var d=a.map.getCenter();c.coordinates&&c.coordinates.length&&(d={lat:c.coordinates[1],lng:c.coordinates[0]}),google.maps.event.trigger(a.map,"resize"),a.map.setCenter(d)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},c.coordinates&&c.coordinates.length&&(a.marker=c),a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){e.close({attribute:b.name,data:a.marker})}}],windowClass:"large-modal"}).result.then(function(b){a.merchant.profile[b.attribute]=b.data},function(a){})},a.showMixedForm=function(b,c){j.open({templateUrl:"views/attribute-mixed-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","Upload","$uibModal",function(a,d,e,g,h,i){a.mixedAttribute=b,a.multipleValues=[],a.uploaders={},a.mainAttr={},angular.forEach(a.mixedAttribute.schema.fields,function(b,c){a.mainAttr[c]="","boolean"==b.type&&(a.mainAttr[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1)}),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.delMultipleVal=function(b){a.multipleValues.splice(b,1)},a.isEmpty(c)||(a.mixedAttribute.multiple?a.multipleValues=c:a.mainAttr=c),a.close=function(){e.close()},a.addFile=function(b,c,d,e){h.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(a.mainAttr[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})},a.fillAttribute=function(){e.close({attribute:a.mixedAttribute.name,data:a.mainAttr})},a.addMultipleValue=function(){a.multipleValues.push(a.mainAttr),a.mainAttr={},angular.forEach(a.mixedAttribute.schema.fields,function(b,c){a.mainAttr[c]="","boolean"==b.type&&(a.mainAttr[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1)})},a.fillMultipleAttribute=function(){e.close({attribute:a.mixedAttribute.name,data:a.multipleValues})},a.showMapForm=function(b,c){i.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,d,e,f,g){a.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",g.getMap().then(function(b){a.map=b;var d=a.map.getCenter();c.coordinates&&c.coordinates.length&&(d={lat:c.coordinates[1],lng:c.coordinates[0]}),google.maps.event.trigger(a.map,"resize"),a.map.setCenter(d)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},null!==c&&c.coordinates&&c.coordinates.length&&(a.marker=c),a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){e.close({attribute:b.name,data:a.marker})}}],windowClass:"large-modal zindex-map"}).result.then(function(b){a.mainAttr[b.attribute]=b.data},function(a){})}}],windowClass:"large-modal"}).result.then(function(b){a.merchant.profile[b.attribute]=b.data},function(a){})},a.updateMerchant=function(){b.updateMerchant(a.merchant.merchant_id,a.merchant).then(function(b){b.status&&(h.success({message:'merchant "'+a.merchant.name+'" was successfully updated'}),d.go("store-merchants",{id:g.id}))},function(a){})},a.addFile=function(b,c,d,e,h){i.upload({url:f.host+"/attachment/"+d+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[e]=!1,b.data.status&&(h?a.merchant.profile[h][e]=b.data.url:a.merchant.profile[e]=b.data.url)},function(a){},function(b){a.uploaders[e]=!0})},a.addFiles=function(b,c,d){b&&i.upload({url:f.host+"/attachment/"+c+"/"+g.id,data:{file:b}}).then(function(b){a.uploaders[d]=!1,b.data.status&&a.merchant.profile[d].push(b.data.url)},function(a){},function(b){a.uploaders[d]=!0})},a.deleteImage=function(b,c){a.merchant.profile[c].splice(a.merchant.profile[c].indexOf(b),1)}}]),angular.module("brnaiApp").controller("PagesCtrl",["$scope","$http","$sce","$stateParams","$state",function(a,b,c,d,e){a.page={},a.loaded=!1,b.get("https://api.brn.ai/page/"+d.name+"/"+d.lang+"?portal_id=RYGK019SCZ").then(function(b){b?(a.page=c.trustAsHtml(b.data.content),a.loaded=!0):e.go("notfound")})}]),angular.module("brnaiApp").controller("MailsAdminCtrl",["$http","$scope","getDomainData","Notification","$state","portalService",function(a,b,c,d,e,f){function g(){f.getPortalsList().then(function(a){b.portals=a,b.main.isAdmin&&b.portals.length>0?(b.filters.selectedPortal=b.portals[0].portal_id,h(b.filters.selectedPortal)):h()})}function h(d){b.inProgress=!0;var e="";d&&(e="?portal_id="+d),a.get(c.host+"/mails"+e).then(function(a){a.data.status&&(b.mails=a.data.mails),b.inProgress=!1})}b.selectedMail={template:"",title:""},b.filters={selectedPortal:""},b.selectedMailName="",b.isBotPage=!1,b.mails=[],b.inProgress=!1,b.helperMessage="",b.portals=[];var i=null;b.selectForEditMail=function(a){b.selectedMail.template=a.template,b.selectedMail.title=a.title,b.selectedMailName=a.name,i=a.portal_id,b.helperMessage="You can use variables: ",a.variables.forEac
17h(function(a){b.helperMessage+="{{"+a+"}} "})},b.editMail=function(){var e="";b.main.isAdmin&&i&&(e="?portal_id="+i),a.put(c.host+"/mail/"+b.selectedMailName+e,b.selectedMail).then(function(a){a.data.status?(d.success({message:"Template successfully updated"}),b.selectedMail={template:"",title:""},b.selectedMailName="",i=null):d.error({delay:6e4,message:a.data.error}),b.main.isAdmin?h(b.filters.selectedPortal):h()})},b.setNameColumn=function(a){return a.replace(/\_/g," ")},b.filterChanges=function(){b.selectedMail={template:"",title:""},b.selectedMailName="",h(b.filters.selectedPortal)},g()}]),angular.module("brnaiApp").controller("MailsCtrl",["$http","$scope","getDomainData","Notification","$stateParams",function(a,b,c,d,e){function f(){b.inProgress=!0,a.get(c.host+"/mails/"+e.id).then(function(a){a.data.status&&(b.mails=a.data.mails),b.inProgress=!1})}b.selectedMail={template:"",title:""},b.selectedMailName="",b.isBotPage=!0,b.mails=[],b.isNewMail=!1,b.inProgress=!1,b.helperMessage="You can use any {{variables}} you want. They will be automatically imported to your scenarios component âSend emailâ",b.selectForEditMail=function(a){b.isNewMail=!1,b.selectedMail.template=a.template,b.selectedMail.title=a.title,b.selectedMailName=a.name,"system"===a.type?(b.helperMessage="You can use variables: ",a.variables.forEac
17h(function(a){b.helperMessage+="{{"+a+"}} "})):b.helperMessage="You can use any {{variables}} you want. They will be automatically imported to your scenarios component âSend emailâ"},b.addMail=function(){b.isNewMail=!0,b.helperMessage="You can use any {{variables}} you want. They will be automatically imported to your scenarios component âSend emailâ",b.selectedMail={template:"",title:""}},b.setNameColumn=function(a){return a.replace(/\_/g," ")},b.editMail=function(){a.put(c.host+"/mail/"+e.id+"/"+b.selectedMailName,b.selectedMail).then(function(a){a.data.status?(d.success({message:"Template successfully updated"}),b.selectedMail={template:"",title:""},b.selectedMailName=""):d.error({delay:6e4,message:a.data.error}),f()})},b.createMail=function(){a.post(c.host+"/mail/"+e.id,b.selectedMail).then(function(a){a.data.status?(d.success({message:"Template successfully created"}),b.isNewMail=!1,b.selectedMail={template:"",title:""},b.selectedMailName=""):d.error({delay:6e4,message:a.data.error}),f()})},b.deleteMail=function(b){a.delete(c.host+"/mail/"+e.id+"/"+b.name).then(function(a){a.data.status?d.success({message:"Template successfully deleted"}):d.error({delay:6e4,message:a.data.error}),f()})},f()}]),angular.module("brnaiApp").directive("mailTemplateEditor",function(){return{restrict:"EA",require:"ngModel",templateUrl:"views/mail-template-editor.html",replace:!0,transclude:!0,scope:{text:"=ngModel",isBackPlaceholder:"=",title:"@title",helperMessage:"@helperMessage",placeholder:"@placeholder"},link:function(a,b,c){function d(b){a.text=f(g.childNodes),h=e(a.text)}function e(a){return a.replace(/({{.*?}})/gi,'<span style="color:#969696">$1</span>').replace(/\n/g,"<br>")}function f(a){for(var b,c="",d=0;a[d];d++)b=a[d],3!==b.nodeType&&4!==b.nodeType||(c+=b.nodeValue),"BR"!==b.nodeName&&"DIV"!==b.nodeName&&"P"!==b.nodeName||(c+="\n"),8!==b.nodeType&&(c+=f(b.childNodes));return c}a.isTextExist=null!==a.text&&void 0!==a.text&&""!==a.text,a.isTextExist=a.isTextExist,a.isActive=a.isBackPlaceholder&&a.isTextExist,a.isFocused=!1,a.isShowHelper=!1;var g={},h="";setTimeout(function(){g=b.find("#contentbox")[0],g.onkeyup=d,h=e(a.text),g.innerHTML=h},0),a.$watch("text",function(b,c){a.isTextExist=void 0!==b&&null!==b&&""!==b||g&&void 0!==g.textContent&&null!==g.textContent&&""!==g.textContent,a.isActive=a.isTextExist||a.isFocused,a.isFocused||(h=e(b),g.innerHTML=h)}),a.blurInput=function(){a.isDisabled||(a.isFocused=!1,a.isTextExist=void 0!==a.text&&null!==a.text&&""!==a.text||g&&void 0!==g.textContent&&null!==g.textContent&&""!==g.textContent,a.isActive=a.isBackPlaceholder&&a.isTextExist,g.innerHTML=h,a.isShowHelper=!1)},a.focusInput=function(){a.isDisabled||(a.isActive=a.isBackPlaceholder&&!0,a.isFocused=!0,a.isShowHelper=!0)}}}}),angular.module("brnaiApp").controller("TranslationAdminCtrl",["$http","$scope","getDomainData","Notification","$stateParams","$state","portalService",function(a,b,c,d,e,f,g){function h(){a.get(c.host+"/languages").then(function(a){b.langs=a.data.languages,i()})}function i(){b.filterAtt=[],b.isAllPages&&b.filterAtt.push({name:"category",label:"Category",type:"text"}),b.filterAtt.push({name:"text",label:"Name",type:"text"}),b.filterAtt.push({name:"selectedPortal",label:"Portal",type:"portal"}
17),b.langs.forEach(function(a){b.filterAtt.push({name:a.code,label:a.name,type:"translations"})})}function j(a){if(!a.portal_id)return a}function k(a){if(a.portal_id==b.filters.selectedPortal)return a}function l(){g.getPortalsList().then(function(a){b.portals=a,b.portals.unshift({portal_id:"default",name:"Default"})})}function m(){var d=b.isAllPages?"":e.page;a.get(c.host+"/translations?category="+d).then(function(a){b.elements=a.data.translations,o=a.data.translations})}function n(){a.get(c.host+"/translations/categories").then(function(a){if(b.pages=a.data.categories,b.pages.unshift("all"),b.pages.length){for(var c=0;c<b.pages.length;c++)if(b.pages[c]==e.page)return;f.go("manage-translation",{page:b.pages[0]})}})}b.pages=[],b.langs=[],b.elements=[];var o=[];b.selectedElement={},b.isNewTranslations=!1,b.isAllPages="all"==e.page,b.newCategoryName="",b.elementsFilter={text:"",translations:{}},b.filterAtt=[],b.filters={isActive:!1,selectedPortal:"",elementState:[{name:"Edit",value:"edit"},{name:"New",value:"new"}]},b.editWindow={elementPortal:"default",type:"edit"},b.selectTranslations=function(a){b.selectedElement=angular.copy(a),b.isNewTranslations=!1},b.swapFilter=function(){b.filters.isActive=!b.filters.isActive},b.savelang=function(b){var e={active:b.active};a.put(c.host+"/language/"+b.code,e).then(function(a){a.data.status&&d.success({message:"Language succesfuly changed"})})},b.deleteTranslations=function(e){var f="";b.main.isAdmin&&e.portal_id&&(f="?portal_id="+e.portal_id),a.delete(c.host+"/translation/"+e.text+f).then(function(a){a.data.status&&(d.success({message:"Succesfuly deleted"}),m(),n())})},b.newTranslations=function(){b.selectedElement={text:"",translations:{}}
17,b.langs.forEach(function(a){b.selectedElement.translations[a.code]=""}),b.isNewTranslations=!0},b.saveTranslations=function(){var e=$("#editTranslations");a.put(c.host+"/translation/"+b.selectedElement.text,b.selectedElement).then(function(a){a.data.status&&(b.selectedElement={},e.modal("hide"),d.success({message:"Succesfuly saved"}),m())})},b.createTranslations=function(){var f=$("#editTranslations");b.selectedElement.category=e.page,a.post(c.host+"/translation",b.selectedElement).then(function(a){a.data.status&&(b.selectedElement={},f.modal("hide"),d.success({message:"Succesfuly saved"}),m())})},b.createCategory=function(){var e=$("#createCategory");b.newTranslations(),b.selectedElement.category=b.newCategoryName,b.selectedElement.text=b.newCategoryName,a.post(c.host+"/translation",b.selectedElement).then(function(a){a.data.status&&(b.selectedElement={},e.modal("hide"),d.success({message:"Succesfuly saved"}),n(),m())})},b.goto=function(a){f.go("manage-translation",{page:a})},b.check=function(a){return a==e.page},b.checkTranslationFilter=function(a){setTimeout(function(){""==b.elementsFilter.translations[a]&&(delete b.elementsFilter.translations[a],b.$apply())},0)},b.getPortalName=function(a){if(!a)return"Default";for(var c=0;c<b.portals.length;c++)if(a==b.portals[c].portal_id)return b.portals[c].name},b.filterChanges=function(){b.filters.selectedPortal?"default"==b.filters.selectedPortal?b.elements=o.filter(j):b.elements=o.filter(k):b.elements=o},b.elementPortalChanges=function(){"default"==b.editWindow.elementPortal?b.selectedElement.portal_id=null:b.selectedElement.portal_id=b.editWindow.elementPortal},h(),n(),m(),l(),$("#editTranslations").on("hidden.bs.modal",function(){b.editWindow.elementPortal="default",b.editWindow.type="edit"})}]),angular.module("brnaiApp").controller("SettingsLanguagesCtrl",["$http","$scope","getDomainData","Notification","$stateParams",function(a,b,c,d,e){function f(){a.get(c.host+"/languages/"+e.id).then(function(a){if(b.langsContainer=[],a.data.languages.length){for(var c=a.data.languages[0].name[0],d=[],e=0;e<a.data.languages.length;e++)c==a.data.languages[e].name[0]?d.push(a.data.languages[e]):(c=a.data.languages[e].name[0],b.langsContainer.push(d),d=[],d.push(a.data.languages[e]));b.langsContainer.push(d)}})}b.langsContainer=[],b.savelang=function(b){var f={active:b.active};a.put(c.host+"/language/"+e.id+"/"+b.code,f).then(function(a){a.data.status&&d.success({message:"Language succesfuly changed"})})},f()}]),angular.module("brnaiApp").controller("EditscenarioSimpleCtrl",["$scope","$http","$stateParams","getDomainData","getComponent","$uibModal","Upload","scenariosInitData","$timeout","Notification","$cookies",function(a,b,c,d,e,f,g,h,i,j,k){function l(){return{buttons:[],image:"",title:"",text:""}}function m(a){for(var b="",c="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",d=0;d<a;d++)b+=c.charAt(Math.floor(Math.random()*c.length));return b}a.$parent.bot_id=c.id,a.$parent.gui=null,a.$parent.scenario_id=c.scenario,a.cronTest="",a.loader=!0,a.modalBtnVisible=!0,a.categoryId={},a.quickRepliesTypes=h.quickRepliesTypes,a.staticItem=h.staticItem,a.variableItem=h.variableItem,a.dateOperators=h.dateOperators,a.outputFormat=h.outputFormat,a.newHeader=h.newHeader,a.types=h.types,a.attachments=h.attachments,a.scopes=h.scopes,a.scopesSystem=h.scopesSystem,a.conditions=h.conditions,a.authArray=h.authArray,a.fields=h.fields,a.methods=h.methods,a.saveTypes=h.saveTypes,a.dataRest=h.dataRest,a.commands=h.commands,a.elasticTypes=h.elasticTypes,a.dataCommands=h.dataCommands,a.cardTempalteType=h.cardTempalteType,a.topElement=h.topElement,a.subscriptionCommands=h.subscriptionCommands,a.testOptions={},k.putObject("functions_mode","simple"),k.getObject("functions_mode")&&(a.$parent.advanced.functions_mode=k.getObject("functions_mode"));var n=["text","attachment","delay","input","card","offer"];a.isAvialible=function(a){for(var b=0;b<n.length;b++)if(n[b]==a)return!0;return!1},a.dndMoved=function(b){a.scenarios.steps.splice(b,1),a.autosave(),a.clerWidget()},a.dropdownClick=function(a){return a.preventDefault(),a.stopPropagation(),!1};var o=!1;a.autosave=function(){o||(o=!0,c.scenario&&a.$parent.isAutosave&&a.$parent.editScenario(!0),setTimeout(function(){o=!1}
17,1e3))},a.clerWidget=function(){a.testOptions.clearData()},a.deleteComponent=function(b){a.scenarios.steps.splice(b,1),a.autosave(),a.clerWidget()},a.addComponent=function(b,c){var d=e.getC(b),f=m(5),g={name:c.toUpperCase()+" "+f,component:b,id:f,properties:d};switch(void 0!=a.scenarios.template&&(g.action={next:null}),c){case"audio":g.properties.type="audio";break;case"video":g.properties.type="video";break;case"file":g.properties.type="file";break;case"card":delete g.properties,g.properties={elements:[],type:"static",quick_replies:[]},g.properties.elements.push(l());break;case"gallery":delete g.properties,g.properties={elements:[],type:"static",quick_replies:[]},g.properties.elements.push(l()),g.properties.elements.push(l())}a.scenarios.steps.push(new Object(g)),a.autosave(),a.clerWidget()}}]),angular.module("brnaiApp").controller("EditscenarioSimple2Ctrl",["$scope","$http","$stateParams","getDomainData","getComponent","botService","storingservice","$uibModal","Upload","scenariosInitData","$timeout","Notification","$cookies","$sce",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(){a.lastScenario=null,a.lastScenarioName="";for(var b=a.scenarios.steps.length-1;b>=0;b--)if("scenario"==a.scenarios.steps[b].component){if(a.isLastScenario=!0,b<a.scenarios.steps.length-1){var c=angular.copy(a.scenarios.steps[b]);a.scenarios.steps.splice(b,1),a.scenarios.steps.push(c)}a.lastScenario=a.scenarios.steps[a.scenarios.steps.length-1];for(var d=0;d<a.scenariosList.length;d++)if(a.scenariosList[d].value==a.lastScenario.properties.scenario)return void(a.lastScenarioName=a.scenariosList[d].name);return}a.isLastScenario=!1}function p(a,b){if(window.ActiveXObject){if(window.ActiveXObject&&document.execCommand){var c=window.open(a,"_blank");c.document.close(),c.document.execCommand("SaveAs",!0,b||a),c.close()}}else{var d=document.createElement("a");d.href=a,d.target="_blank";var e=a.substring(a.lastIndexOf("/")+1);if(d.download=b||e,navigator.userAgent.toLowerCase().match(/(ipad|iphone|safari)/)&&navigator.userAgent.
17search("Chrome")<0)document.location=d.href;else{var f=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});d.dispatchEvent(f),(window.URL||window.webkitURL).revokeObjectURL(d.href)}}}function q(){return{buttons:[],image:"",title:"",text:""}}function r(a){for(var b="",c="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",d=0;d<a;d++)b+=c.charAt(Math.floor(Math.random()*c.length));return b}function s(a){A=a.clientY,B=parseInt(document.defaultView.getComputedStyle(y).height,10),document.documentElement.addEventListener("mousemove",t,!1),document.documentElement.addEventListener("mouseup",u,!1)}function t(a){y.style.height=B-a.clientY+A+"px"}function u(a){document.documentElement.removeEventListener("mousemove",t,!1),document.documentElement.removeEventListener("mouseup",u,!1)}a.$parent.bot_id=c.id,a.$parent.scenario_id=c.scenario,a.cronTest="",a.loader=!0,a.modalBtnVisible=!0,a.categoryId={},a.quickRepliesTypes=j.quickRepliesTypes,a.staticItem=j.staticItem,a.variableItem=j.variableItem,a.dateOperators=j.dateOperators,a.outputFormat=j.outputFormat,a.newHeader=j.newHeader,a.types=j.types,a.attachments=j.attachments,a.scopes=j.scopes,a.scopesSystem=j.scopesSystem,a.conditions=j.conditions,a.authArray=j.authArray,a.fields=j.fields,a.methods=j.methods,a.saveTypes=j.saveTypes,a.dataRest=j.dataRest,a.commands=j.commands,a.elasticTypes=j.elasticTypes,a.dataCommands=j.dataCommands,a.cardTempalteType=j.cardTempalteType,a.topElement=j.topElement,a.subscriptionCommands=j.subscriptionCommands,a.testOptions={},a.isLastScenario=!1,a.lastScenarioName="",a.isIgScenario=!0,a.product={},a.slickConfig={infinite:!1,slidesToShow:1,centerMode:!0,variableWidth:!0,arrows:!1,dots:!1,method:{}},a.slickDataLoad=!1;var v=["text","attachment","delay","input","card","offer","store","tag"];a.lastScenario=null,a.isAvialible=function(a){for(var b=0;b<v.length;b++)if(v[b]==a)return!0;return!1},a.dndMoved=function(b){a.scenarios.steps.splice(b,1),a.autosave(),a.clerWidget()},a.dropdownClick=function(a){return a.preventDefault(),a.stopPropagation(),!1};var w=!1;a.autosave=function(){w||(w=!0,o(),c.scenario&&a.$parent.isAutosave&&a.$parent.editScenario(!0),setTimeout(function(){w=!1},1e3))},a.reinitSlider=function(a){console.log("reinit"),a.isSliderLoaded=!0,setTimeout(function(){a.isSliderLoaded=!1},0)},a.clerWidget=function(){a.testOptions.clearData()},a.deleteComponent=function(b){a.scenarios.steps.splice(b,1),setTimeout(function(){a.autosave(),a.clerWidget()},100)},a.getProduct=function(){g.getProducts(c.id,"",{offset:0,page:0,lastPage:!1}).then(function(b){1==b.products.length&&(a.product=b.products[0]),console.log(a.product)},function(a){})},a.getProduct();var x=!1;a.addComponent=function(b,c,d){if(a.isLastScenario&&a.deleteComponentScenario(),!x){x=!0;var f=e.getC(b),g=r(5),h={name:g,component:b,id:g,properties:f};switch(void 0!==d&&(h.category=d),void 0!=a.scenarios.template&&(h.action={next:null}),c){case"audio":h.properties.type="audio";break;case"file":h.properties.type="file";break;case"card":case"gallery":delete h.properties,h.properties={elements:[],type:"static",quick_replies:[]},h.properties.elements.push(q());break;case"store":delete h.properties,h.properties={elements:[],type:"static",quick_replies:[]};break;case"media":h.properties.type="";break;case"menu":h.properties.question="",h.properties.reply_type="action",h.properties.image="",h.properties.retry_message="Choose one of the options",delete h.properties.save,h.properties.quick_replies||(h.properties.quick_replies=[]),h.properties.quick_replies.push({type:"text",title:"",content:"",action:{type:"",scenario:""}}),h.properties.quick_replies_error=!0;break;case"input":delete h.properties.save;break;case"scenario":break;case"offer":a.product.product_id&&(h.properties.product_id=a.product.product_id,h.properties.text=a.product.attributes.text,h.properties.button_title="Buy now for $"+a.product.price,h.properties.image=a.product.image,h.properties.name=a.product.name);break;case"tag":h.properties={tag:"",command:"add"}}"scenario"!=b?a.scenarios.steps.push(new Object(h)):a.isLastScenario||a.scenarios.steps.push(new Object(h)),a.autosave(),a.clerWidget(),setTimeout(function(){x=!1},100)}},a.deleteComponentScenario=function(){var b=a.scenarios.steps.length-1;
17"scenario"==a.scenarios.steps[b].component&&(a.scenarios.steps.splice(b,1),setTimeout(function(){a.autosave(),a.clerWidget()},100))},a.switchMenuStepScenario=function(b){a.lastScenario.properties.scenario=b.value,a.lastScenario.properties.step=a.stepsList[b.value][0].id,a.lastScenarioName=b.name,a.autosave(),a.clerWidget()},a.$watch("isScenarioLoad",function(b){b&&setTimeout(function(){o(),a.$apply()},100)}),a.trustSrc=function(a){return n.trustAsResourceUrl(a)},a.trustSrcName=function(a){return n.trustAsResourceUrl(a).toString().split("/").pop()},a.downloadFile=function(a){p(a,a.toString().split("/").pop())};var y=null,z=null;setTimeout(function(){y=document.querySelector("#simple_test_widget_container"),z=document.querySelector("#simple_test_widget_resizer"),z.addEventListener("mousedown",s,!1)},1500);var A,B;a.lastAvatarStepIndex=-1,a.$watch("scenarios.steps.length",function(b){for(var c=a.scenarios.steps.length-1;c>=0;c--)if("text"==a.scenarios.steps[c].component||"attachment"==a.scenarios.steps[c].component||"input"==a.scenarios.steps[c].component||"input"==a.scenarios.steps[c].component||"offer"==a.scenarios.steps[c].component||"card"==a.scenarios.steps[c].component)return void(a.lastAvatarStepIndex=c)}),a.botSocials={telegram:{name:"telegram",isActivated:!1},widget:{name:"widget",isActivated:!1},messenger:{name:"messenger",isActivated:!1},kik:{name:"kik",isActivated:!1},slack:{name:"slack",isActivated:!1},skype:{name:"skype",isActivated:!1},line:{name:"line",isActivated:!1},wechat:{name:"wechat",isActivated:!1},viber:{name:"viber",isActivated:!1},twitter:{name:"twitter",isActivated:!1},instagram:{name:"instagram",isActivated:!1}}}]),angular.module("brnaiApp").directive("resizeInput",function(){return{restrict:"EA",require:"ngModel",templateUrl:"views/resize-input.html",replace:!0,transclude:!0,scope:{text:"=ngModel",placeholder:"@placeholder",isDisabled:"=?ngDisabled",enter:"&",onBlur:"&?ngBlur",onFocus:"&?ngFocus",isReadonly:"=?isReadonly",isRequired:"=?isRequired",onChange:"&ngChange",type:"@",multiline:"=?"},link:function(a,b,c){function d(c){function d(){var d=c.value?c.value:a.placeholder;"text"==a.type&&(d+=" ");var e=b.find(".resize-input-hidden")[0];e&&(e.innerHTML=d.replace(/ /g," "));var f="text"==a.type?0:20;if(a.multiline){f+=10;var g=10+e.offsetHeight;c.style.height=g+"px"} 18c.style.width=e?e.offsetWidth+f+"px":"auto"}var e="keyup,keypress,change".split(",");for(var f in e)c.addEventListener(e[f],d,!1);d()}a.type=a.type?a.type:"text",a.isFocused=!1,a.invalide=!1,a.onChange=a.onChange||function(){},a.multiline=!!a.multiline&&a.multiline,setTimeout(function(){d(a.multiline?b.find(".textarea-select-element")[0]:b.find(".input-select-element")[0])},0),a.blurInput=function(){a.isDisabled||(a.isFocused=!1,a.onBlur&&a.onBlur())},a.focusInput=function(){a.isDisabled||(a.isFocused=!0,a.onFocus&&a.onFocus())}}}}),angular.module("brnaiApp").directive("resizeInput2",function(){return{restrict:"EA",require:"ngModel",templateUrl:"views/resize-input2.html",replace:!0,transclude:!0,scope:{text:"=ngModel",placeholder:"@placeholder",isDisabled:"=?ngDisabled",enter:"&",onBlur:"&?ngBlur",onFocus:"&?ngFocus",isReadonly:"=?isReadonly",isRequired:"=?isRequired",onChange:"&ngChange",type:"@",multiline:"=?",maxWidth:"=?",settings:"=?",isPercent:"=?isPercent",require:"=",errorRequireText:"=?",regexp:"=",errorRegexpText:"=?",errorMsg:"=?",setError:"&"},link:function(a,b,c){function d(){a.errorMsg="",a.require&&e(),!a.errorMsg&&a.regexp&&f(),a.setError()}function e(){a.text||(a.errorMsg=a.errorRequireText?a.errorRequireText:"Do not leave empty field.")}function f(){var b=new RegExp(a.regexp);a.text&&!b.test(a.text)&&(a.errorMsg=a.errorRegexpText?a.errorRegexpText:"The field value is invalid.")}a.type=a.type?a.type:"text",a.isFocused=!1,a.invalide=!1,a.onChange=a.onChange||function(){},a.multiline=!!a.multiline&&a.multiline;var g;setTimeout(function(){g=a.multiline?b.find(".textarea-select-element")[0]:b.find(".input-select-element")[0],a.resize()},0),a.resize=function(){if(g){var c=g.value?g.value:a.placeholder;"text"==a.type&&(c+=" ");var d=b.find(".resize-input-hidden")[0];d&&(a.multiline?d.innerHTML=c:d.innerHTML=c.replace(/ /g," "));var e="text"==a.type?0:20;a.multiline&&(e+=10),a.maxWidth?g.style.width="100%":g.style.width=d?d.offsetWidth+e+"px":"auto",a.multiline&&(g.style.height="auto",g.style.height=g.scrollHeight+"px")}},a.$watch("text",a.resize),a.$watch("placeholder",a.resize),a.blurInput=function(){a.isDisabled||(a.isFocused=!1,a.onBlur&&a.onBlur(),d())}
18,d(),a.focusInput=function(){a.isDisabled||(a.isFocused=!0,a.onFocus&&a.onFocus())}}}}),angular.module("brnaiApp").directive("tagInput",["$http","getDomainData","$stateParams",function(a,b,c){return{restrict:"EA",require:"ngModel",templateUrl:"views/tag-input.html",replace:!0,transclude:!0,scope:{tags:"=ngModel",additionalTags:"=additionalTags",tagId:"=tagId",editable:"=",allTags:"=allTags",placeholder:"@placeholder",isDisabled:"=?ngDisabled",onlyExist:"=?onlyExist",enter:"&",onBlur:"&?ngBlur",onFocus:"&?ngFocus",isReadonly:"=?isReadonly",isRequired:"=?isRequired",onChange:"&ngChange",type:"@",multiline:"=?",maxWidth:"=?",settings:"=?"},link:function(d,e,f){function g(d,e,f){var g={bot_id:c.id,name:e,color:f};return a.put(b.host+"/tag/"+d+"/",g).then(function(a){return a},function(a){Notification.error({delay:6e4,message:a.message})})}function h(a){var b=!1;return void 0===d.tags&&(d.tags=[]),void 0===d.additionalTags&&(d.additionalTags=[]),d.tags.concat(d.additionalTags).forEach(function(c){a===c.name&&(b=!0)}),b}d.matchListOpened=!1,d.notMatchListOpened=!1,d.editingTag=null,d.editingTagId=null,d.tagColors=["#94cc25","#f5a623","#d0021b","#9013fe","#4a90e2","#969696"];var i=function(a){e[0].contains(a.target)||(d.editingTag=null,d.editingTagId=null,d.closeAutocomplete(),d.$apply())};d.init=function(){setTimeout(function(){$(document).on("click",i)},100)},d.editTagInTagGroup=function(a){d.matchListOpened=!1,d.notMatchListOpened=!1,d.closeAutocomplete(),d.editingTagId=a.tag_id,d.editingTag=a},d.isTagEditing=function(a){return d.editingTagId===a},d.isColorSelected=function(a,b){return d.editingTag.color===b},d.hasNotAddedTags=function(){return(d.allTags?d.allTags.length:0)!==(d.tags?d.tags.length:0)+(d.additionalTags?d.additionalTags.length:0)},d.hasFilterTag=function(){return!!(d.filterTag&&d.filterTag.length>0)},d.setTagColor=function(a,b){d.editingTag.color=b,g(d.editingTag.tag_id,d.editingTag.name,d.editingTag.color),d.editingTag=null,d.editingTagId=null},d.removeTag=function(a){d.tags.splice(d.tags.indexOf(a),1),d.editingTag=null,d.editingTagId=null,d.onBlur()},d.addTag=function(){if(""!==d.text&&void 0!==d.text){""!==d.tags&&void 0!==d.tags||(d.tags=[]);var a="";d.allTags.forEach(function(b){b.name===d.text&&(a=b)}),""===a?d.onlyExist||(h(d.text)||d.tags.push({name:d.text,color:"#969696"}),d.text=""):(h(a.name)||d.tags.push(a),d.text="")}},d.keyup=function(a){"Enter"===a.key?(d.addTag(),d.onBlur()):d.complete(d.text)},d.complete=function(a){if(""===a||void 0===a)d.completeAll();else{var b=[];angular.forEach(d.allTags,function(c){c.name.toLowerCase().indexOf(a.toLowerCase())>=0&&(h(c.name)||b.push(c))}),d.editingTag=null,d.editingTagId=null,d.filterTag=b}},d.completeAll=function(){var a=[];angular.forEach(d.allTags,function(b){h(b.name)||a.push(b)}),d.editingTag=null,d.editingTagId=null,d.filterTag=a},d.closeAutocomplete=function(){d.filterTag=[]},d.fillTextbox=function(a){d.text=a,d.filterTag=null,d.addTag(),d.onBlur()},d.init()}}}]),angular.module("brnaiApp").directive("simpleStep",["Upload","getDomainData","$sce","$http",function(a,b,c,d){return{restrict:"EA",require:"ngModel",template:'<div class="simple-step" ng-include="wmType" ></div>',replace:!0,scope:{step:"=ngModel",isAvialible:"=isAvialible",translations:"=translations",scopes:"=",deleteComponent:"&",autosave:"&",clerWidget:"&"},link:function(e,f,g){e.wmType=e.isAvialible?"views/simple/"+e.step.component+".html":"views/simple/advanced.html",e.selectedProduct={},e.step.properties.product_id&&d.get(b.host+"/product/"+e.$parent.bot_id+"/"+e.step.properties.product_id).then(function(a){a.data.status&&(e.selectedProduct={name:a.data.name,id:a.data.product_id})},function(a){}),e.isAvialible&&"card"==e.step.component&&("static"==e.step.properties.type?(e.activeCardId=0,e.activeCardElement=e.step.properties.elements[e.activeCardId],e.$watch("activeCardId",function(a){e.activeCardElement=e.step.properties.elements[a]})):e.wmType="views/simple/advanced.html"),e.fileFields={},e.cardBtnTypes=[{name:"Suggest",value:"suggest"},{name:"Link",value:"link"}],e.replyTypes=[{name:"Date",value:"date"},{name:"Number",value:"number"},{name:"Email",value:"email"},{name:"Url",value:"url"},{name:"Attachment",value:"attachment"},{name:"Image",value:"image"},{name:"Audio",value:"audio"},{name:"Video",value:"video"},{name:"File",value:"file"},{name:"Text",value:"text"}],e.activeReplieIndex=0,e.activeBtnIndex=0,e.activeCardBtnIndex=0,e.dndDragstartReplie=function(a){e.activeReplieIndex=a,e.$apply()},e.dropCallbackSimple=function(a,b,c,d){"replie"==d&&e.activeReplieIndex>=0&&e.activeReplieIndex!=a&&a-e.activeReplieIndex!=1&&(a>e.activeReplieIndex&&a--,e.step.properties.quick_replies.splice(e.activeReplieIndex,1),e.step.properties.quick_replies.splice(a,0,b)),"button"==d&&e.activeBtnIndex>=0&&e.activeBtnIndex!=a&&a-e.activeBtnIndex!=1&&(a>e.activeBtnIndex&&a--,e.step.properties.buttons.splice(e.activeBtnIndex,1),e.step.properties.buttons.splice(a,0,b)),"cardBtn"==d&&e.activeCardBtnIndex>=0&&e.activeCardBtnIndex!=a&&a-e.activeCardBtnIndex!=1&&(a>e.activeCardBtnIndex&&a--,e.step.properties.elements[e.activeCardId].buttons.splice(e.activeCardBtnIndex,1),e.step.properties.elements[e.activeCardId].buttons.splice(a,0,b)),e.$apply(),e.autosave()},e.dndDragstartBtn=function(a){e.activeBtnIndex=a,e.$apply()},e.dndDragstartCardBtn=function(a){e.activeCardBtnIndex=a,e.$apply()},e.fixTextBtn=function(){void 0==e.step.properties.buttons&&(e.step.properties.buttons=[]),void 0==e.step.properties.phrases&&(e.step.properties.phrases=[])},e.uploadFile=function(c,d){if(delete e.fileFields.progress,c){var f=c.name,g=d?"image":e.step.properties.type;a.upload({url:b.host+"/attachment/"+g+"/"+e.$parent.bot_id,data:{file:c}}
18).then(function(a){if(!a)return void delete e.fileFields.progress;a.data.status&&(d?e.activeCardElement.image=a.data.url:(e.step.properties.url=a.data.url,"file"==e.step.properties.type&&(e.step.properties.name=f))),delete e.fileFields.progress,e.autosave(),e.clerWidget()},function(a){delete e.fileFields.progress,e.fileFields.error=a.message},function(a){e.fileFields.progress=parseInt(100*a.loaded/a.total)})}},e.trustSrc=function(a){return c.trustAsResourceUrl(a)},e.changeWebview=function(a,b){b?void 0!=e.activeCardElement.buttons[a].webview&&(e.activeCardElement.buttons[a].webview=!e.activeCardElement.buttons[a].webview):void 0!=e.step.properties.buttons[a].webview&&(e.step.properties.buttons[a].webview=!e.step.properties.buttons[a].webview),e.autosave(),e.clerWidget()},e.switchCardBtnTypes=function(a){"link"==e.step.properties.buttons[a].type?e.step.properties.buttons[a].webview=!1:delete e.step.properties.buttons[a].webview},e.addReplies=function(){e.step.properties.quick_replies||(e.step.properties.quick_replies=[]),e.step.properties.quick_replies.push({type:"text",title:"",content:"",url:""}),e.autosave(),e.clerWidget()},e.searchProducts=function(a){return d.get(b.host+"/products/"+e.$parent.bot_id+"?name="+a).then(function(a){if(a.data.status)return a.data.products.map(function(a){return{name:a.name,id:a.product_id}})},function(a){})},e.offerProductSelect=function(a,b,c){e.step.properties.product_id=a.id},e.addBtn=function(){e.step.properties.buttons.push(new Object({type:"suggest",title:"",content:{value:"",params:[]}})),e.autosave(),e.clerWidget()},e.removeBtn=function(a){e.step.properties.buttons.splice(a,1),e.autosave(),e.clerWidget()},e.removeBtnCard=function(a){setTimeout(function(){var b="#"+e.step.id+"btn_"+a;$(b).click()},0),e.activeCardElement.buttons.splice(a,1),e.autosave(),e.clerWidget()},e.addBtnCard=function(){e.activeCardElement.buttons.push(new Object({type:"suggest",title:"",url:""})),e.autosave(),e.clerWidget()},e.switchBtnCard=function(a,b){"suggest"==b?(delete e.activeCardElement.buttons[a].url,e.activeCardElement.buttons[a].content="",delete e.activeCardElement.buttons[a].webview):(delete e.activeCardElement.buttons[a].content,e.activeCardElement.buttons[a].url="",e.activeCardElement.buttons[a].webview=""),e.autosave(),e.clerWidget()},e.switchCard=function(a){e.activeCardId=a},e.addCard=function(){12!=e.step.properties.elements.length&&(e.step.properties.elements.push({buttons:[],image:"",title:"",text:""}),e.autosave(),e.clerWidget())},e.removeCard=function(){if(e.step.properties.elements.length<=1)return void e.deleteComponent();e.step.properties.elements.splice(e.activeCardId,1),e.activeCardId===e.step.properties.elements.length?e.activeCardId--:e.activeCardElement=e.step.properties.elements[e.activeCardId],e.autosave(),e.clerWidget()},e.dropdownClick=function(a){return a.preventDefault(),a.stopPropagation(),!1}}}}]),angular.module("brnaiApp").directive("simpleStep2",["Upload","getDomainData","$sce","$rootScope","storingservice","crmService","$stateParams",function(a,b,c,d,e,f,g){return{restrict:"EA",require:"ngModel",template:'<div class="simple-step" ng-include="wmType" ></div>',replace:!0,scope:{step:"=ngModel",isAvialible:"=isAvialible",translations:"=translations",scopes:"=",scenariosList:"=",deleteComponent:"&",autosave:"&",clerWidget:"&",reinitSlider:"&"},link:function(d,h,i){function j(a,b){if(window.ActiveXObject){if(window.ActiveXObject&&document.execCommand){var c=window.open(a,"_blank");c.document.close(),c.document.execCommand("SaveAs",!0,b||a),c.close()}}else{var d=document.createElement("a");d.href=a,d.target="_blank";var e=a.substring(a.lastIndexOf("/")+1);if(d.download=b||e,navigator.userAgent.toLowerCase().match(/(ipad|iphone|safari)/)&&navigator.userAgent.
18search("Chrome")<0)document.location=d.href;else{var f=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});d.dispatchEvent(f),(window.URL||window.webkitURL).revokeObjectURL(d.href)}}}"offer"!=d.step.component&&"card"!=d.step.component||(d.product_options={limit:30,offset:0,page:0,lastPage:!1},d.options={category:"",product:""},d.slickDataLoad=!0,d.categoriesMenu=[],d.products=[],e.getCategories(g.id).then(function(a){d.categoriesMenu=a.categories,1==d.categoriesMenu.length&&(d.step.properties.category=d.categoriesMenu[0].title)},function(a){d.categoriesMenu=[]}),e.getProducts(g.id,d.step.properties.category,d.product_options).then(function(a){d.products=a.products},function(a){d.products=[]}),d.removeProduct=function(a){d.deleteComponent(),d.autosave(),d.clerWidget()},d.selectCat=function(){e.getProducts(g.id,d.step.properties.category,d.product_options).then(function(a){d.products=a.products,d.step.properties.elements=[],d.products.forEach(function(a){d.step.properties.elements.push({buttons:[],image:a.image,title:a.name,text:"$"+a.price})}),d.slickDataLoad=!1,setTimeout(function(){d.slickDataLoad=!0},0),d.reinitSlider(d.step),d.autosave(),d.clerWidget()},function(a){d.products=[]})},d.selectProduct=function(){e.getProduct(g.id,d.step.properties.product_id).then(function(a){d.step.properties.text=a.attributes.text,d.step.properties.button_title="Buy now for $"+a.price,d.step.properties.image=a.image,d.step.properties.name=a.name},function(a){})},d.selectCategory=function(){e.getProducts(g.id,d.step.properties.category,d.product_options).then(function(a){d.products=a.products,d.autosave(),d.clerWidget()},function(a){d.products=[]})}),"tag"==d.step.component&&(d.tags=[],f.getBotTags(g.id).then(function(a){d.tags=a.data.tags},function(a){d.tags=[]}),d.selectCommand=function(a){d.step.properties.command=a,d.autosave(),d.clerWidget()}),d.wmType=d.isAvialible?"views/simple2/"+d.step.component+".html":"views/simple2/advanced.html",d.isAvialible&&"input"==d.step.component&&("action"==d.step.properties.reply_type?d.wmType="views/simple2/input-menu.html":d.wmType="views/simple2/input.html"),d.isAvialible&&"card"==d.step.component&&("static"==d.step.properties.type?(d.activeCardId=0,d.activeCardElement=d.step.properties.elements[d.activeCardId],d.$watch("activeCardId",function(a){d.activeCardElement=d.step.properties.elements[a]})):d.wmType="views/simple/advanced.html"),d.fileFields={},d.cardBtnTypes=[{name:"Suggest",value:"suggest"},{name:"Link",value:"link"}],d.replyTypes=[{name:"Text",value:"text"},{name:"Number",value:"number"},{name:"Email",value:"email"},{name:"Url",value:"url"},{name:"File",value:"file"},{name:"Quick reply",value:"quick_reply"}],d.operators=[{name:">",value:"gt"},{name:">=",value:"gte"},{name:"<",value:"lt"},{name:"<=",value:"lte"}],d.carouselIndex=0,d.activeReplieIndex=0,d.activeBtnIndex=0,d.activeCardBtnIndex=0,d.Math=window.Math,d.currentSlideIndex=0,d.slickConfig={infinite:!1,slidesToShow:1,centerMode:!0,variableWidth:!0,arrows:!1,dots:!1,method:{},event:{afterChange:function(a,b,c,e){d.currentSlideIndex=c},init:function(a,b){b.slickSetOption("speed",0),b.slickGoTo(d.currentSlideIndex),b.slickSetOption("speed",300)}}},d.dndDragstartReplie=function(a){d.activeReplieIndex=a,d.$apply()},d.dndDragstartBtn=function(a){d.activeBtnIndex=a,d.$apply()},d.dndDragstartCardBtn=function(a){d.activeCardBtnIndex=a,d.$apply()},d.dropCallbackSimple=function(a,b,c,e){"replie"==e&&d.activeReplieIndex>=0&&d.activeReplieIndex!=a&&a-d.activeReplieIndex!=1&&(a>d.activeReplieIndex&&a--,d.step.properties.quick_replies.splice(d.activeReplieIndex,1),d.step.properties.quick_replies.splice(a,0,b)),"button"==e&&d.activeBtnIndex>=0&&d.activeBtnIndex!=a&&a-d.activeBtnIndex!=1&&(a>d.activeBtnIndex&&a--,d.step.properties.buttons.splice(d.activeBtnIndex,1),d.step.properties.buttons.splice(a,0,b)),"cardBtn"==e&&d.activeCardBtnIndex>=0&&d.activeCardBtnIndex!=a&&a-d.activeCardBtnIndex!=1&&(a>d.activeCardBtnIndex&&a--,d.step.properties.elements[d.activeCardId].buttons.splice(d.activeCardBtnIndex,1),d.step.properties.elements[d.activeCardId].buttons.splice(a,0,b)),d.$apply(),d.autosave()},d.dndDragstartBtn=function(a){d.activeBtnIndex=a,d.$apply()},d.fixTextBtn=function(){void 0==d.step.properties.buttons&&(d.step.properties.buttons=[]),void 0==d.step.properties.phrases&&(d.step.properties.phrases=[])},d.uploadFile=function(c,e,f){if(delete d.fileFields.progress,c){var g=c.name,h=e?"image":c.type.split("/")[0];"application"==h&&(h="file"),e||(d.step.properties.type=h),a.upload({url:b.host+"/attachment/"+h+"/"+d.$parent.bot_id,data:{file:c}}
18).then(function(a){if(!a)return void delete d.fileFields.progress;a.data.status&&(e?d.step.properties.image=a.data.url:(d.step.properties.url=a.data.url,"file"==d.step.properties.type&&(d.step.properties.name=g)),void 0!==f&&(d.step.properties.elements[f].image=a.data.url)),delete d.fileFields.progress,d.autosave(),d.clerWidget()},function(a){delete d.fileFields.progress,d.fileFields.error=a.message},function(a){d.fileFields.progress=parseInt(100*a.loaded/a.total)})}},d.trustSrc=function(a){return c.trustAsResourceUrl(a)},d.trustSrcName=function(a){return c.trustAsResourceUrl(a).toString().split("/").pop()},d.downloadFile=function(a){j(a,a.toString().split("/").pop())},d.changeWebview=function(a){void 0!=d.step.properties.buttons[a].webview&&(d.step.properties.buttons[a].webview=!d.step.properties.buttons[a].webview),d.autosave(),d.clerWidget()},d.switchCardBtnTypes=function(a){"link"==d.step.properties.buttons[a].type?d.step.properties.buttons[a].webview=!1:delete d.step.properties.buttons[a].webview},d.switchMenuStep=function(a,b){b?(d.step.properties.quick_replies[a].action.type="scenario",d.step.properties.quick_replies[a].action.scenario=b.value,d.step.properties.quick_replies[a].title=b.name,d.step.properties.quick_replies[a].content=b.name,delete d.step.properties.quick_replies_error):(delete d.step.properties.quick_replies[a].action.type,delete d.step.properties.quick_replies[a].action.scenario,d.step.properties.quick_replies[a].title="",d.step.properties.quick_replies[a].content="",d.step.properties.quick_replies_error=!0),d.autosave(),d.clerWidget()},d.addRepliesMenu=function(){d.step.properties.quick_replies||(d.step.properties.quick_replies=[]),d.step.properties.quick_replies.push({type:"text",title:"",content:"",action:{type:"",step:""}}),d.step.properties.quick_replies_error=!0,d.autosave(),d.clerWidget()},d.addReplies=function(){d.step.properties.quick_replies||(d.step.properties.quick_replies=[]),d.step.properties.quick_replies.push({type:"text",title:"",content:"",url:""}),d.autosave(),d.clerWidget()},d.addBtn=function(){d.step.properties.buttons.push(new Object({type:"suggest",title:"",content:{value:"",params:[]}})),d.autosave(),d.clerWidget()},d.removeBtn=function(a){d.step.properties.buttons.splice(a,1),d.autosave(),d.clerWidget()},d.removeBtnCard=function(a,b){b.buttons.splice(a,1),d.autosave(),d.clerWidget()},d.addBtnCard=function(a){a.buttons.push(new Object({type:"suggest",title:"",url:""})),d.autosave(),d.clerWidget()},d.dropdownClick=function(a){return a.preventDefault(),a.stopPropagation(),!1},d.switchCard=function(a){d.activeCardId=a},d.addCard=function(a,b){12!=d.step.properties.elements.length&&(d.currentSlideIndex=d.step.properties.elements.length,d.reinitSlider(d.step),d.step.properties.elements.push({buttons:[],image:"",title:"",text:""}),d.carouselIndex=d.step.properties.elements.length-1,d.slickDataLoad=!1,setTimeout(function(){d.slickDataLoad=!0},0),d.autosave(),d.clerWidget())},d.removeCard=function(a){if(d.step.properties.elements.length<=1)return void d.deleteComponent();d.reinitSlider(d.step),d.step.properties.elements.splice(a,1),d.slickDataLoad=!1,setTimeout(function(){d.slickDataLoad=!0},0),d.index===d.step.properties.elements.length?d.index--:d.activeCardElement=d.step.properties.elements[d.activeCardId],d.autosave(),d.clerWidget()}}}}]),angular.module("brnaiApp").directive("simpleTestWidget",[function(){return{templateUrl:"views/simple-test-widget.html",restrict:"E",scope:{options:"=?",isNewScenario:"="},controllerAs:"vm",controller:["$scope","$stateParams","$http","getDomainData","$cookies","Auth","storage",function(a,b,c,d,e,f,g){function h(){for(var a="",b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",c=0;c<15;c++)a+=b.charAt(Math.floor(Math.random()*b.length));return a}a.voice=null,a.debugMessages=[],a.widget_token="",a.messages=[],a.message={text:""},a.isConsole=!1,a.options=a.options?a.options:{},angular.extend(a.options,{clearData:function(){a.messages=[]}});var i=g.getItem("authData"),j=new Faye.Client(d.faye,{timeout:20,retry:5});new Faye.Client(d.faye,{timeout:20,retry:5}).subscribe("/messages_"+f.getUser().account_id,function(b){a.messages.push(b),a.$digest()}
18),j.subscribe("/log_"+b.id,function(b){b.messages.forEach(function(b){a.debugMessages.push(b)}),a.$digest()}),a.toogleConsole=function(){a.isConsole=!a.isConsole},a.sendMessage=function(){c.post(d.host+"/message/debug",{user_id:f.getUser().account_id,type:"text",content:{text:a.message.text},bot_id:b.id},{headers:{"X-Access-Token":i.access_token}}).then(function(b){a.message.text=""},function(a){})},e.getObject("user_widget_token_test")?a.widget_token=e.getObject("user_widget_token_test"):(e.putObject("user_widget_token_test",h()),a.widget_token=e.getObject("user_widget_token_test")),c.get(d.host+"/widget/messages/"+b.id+"/"+a.widget_token).then(function(b){b.data.messages&&b.data.messages&&(a.messages=b.data.messages)},function(a){}),c.get(d.host+"/bot/"+b.id).then(function(b){1==b.data.status&&(a.bot=b.data)},function(a){})}]}}]),angular.module("brnaiApp").controller("TemplatescatalogCtrl",["$scope","$http","getDomainData","Auth","$state","$stateParams","$window",function(a,b,c,d,e,f,g){function h(){b.get(c.host+"/bots/categories?empty=false").then(function(b){b.data.status&&b.data.categories.forEach(function(b){a.categories.push(b)})})}a.isLogin=angular.isDefined(d.getUser()),a.authUrl="http://brain.tfid.me?redirect_url="+window.location.origin+"/auth",a.bot_id=f.id,a.categories=[{name:"all",title:"All"}],b.get(c.host+"/bots/templates/").then(function(b){b.data.status&&(console.log(b),a.templates=b.data.bots,console.log(a.templates))},function(a){}),a.duplicateBot=function(f){a.isLogin?b.post(c.host+"/bot",{account_id:d.getUser().account_id,name:"",template:"duplicate",template_data:{bot_id:f}}).then(function(a){a.data.status?e.go("bots"):Notification.error({delay:6e4,message:"Something goes wrong..."})},function(a){}):g.location.href=a.authUrl},a.catChange=function(b){console.log("Fired "+b),a.searchCategory="all"!=b?b:""},h()}]),angular.module("brnaiApp").controller("TemplatesviewCtrl",["$scope","$http","getDomainData","$stateParams","Auth","$state","$window",function(a,b,c,d,e,f,g){a.isLogin=angular.isDefined(e.getUser()),a.authUrl="http://brain.tfid.me?redirect_url="+window.location.origin+"/auth",b.get(c.host+"/bot/resolve/"+d.id).then(function(b){b.data.status&&(a.template=b.data,console.log(a.template))},function(a){}),a.duplicateBot=function(d){a.isLogin?b.post(c.host+"/bot",{account_id:e.getUser().account_id,name:"",template:"duplicate",template_data:{bot_id:d}}).then(function(a){a.data.status?f.go("bots"):Notification.error({delay:6e4,message:"Something goes wrong..."})},function(a){}):g.location.href=a.authUrl}}]),angular.module("brnaiApp").directive("customNotification",function(){return{restrict:"EA",templateUrl:"views/custom-notification.html",replace:!0,transclude:!0,scope:{message:"@",messageTitle:"@",clickEvent:"&",isNotification:"="},link:function(a,b,c){a.isNotification=void 0!==a.isNotification&&a.isNotification,a.$watch("isNotification",function(b){b&&setTimeout(function(){a.kill()},4e4)}),a.kill=function(c){c&&c.stopPropagation(),b.addClass("killed"),setTimeout(function(){a.isNotification=!1,a.$apply()},1e3)}}}}),angular.module("brnaiApp").controller("BotPreviewWidgetCtrl",["$scope","$stateParams","getDomainData","$window","$state","$http",function(a,b,c,d,e,f){function g(a,b){function d(){var d=e.createElement("script"),g='<chat-widget bot="'+a+'" token="'+b+'" custom="demo"></chat-widget>';d.type="text/javascript",d.async=!0,d.id="testqwerty",d.src=-1==c.host.search(/api-dev/i)?"https://test-widget.bots.work/widget/widget.js":"https://test-widget.bots.work/dev/widget.js",f.appendChild(d),f.insertAdjacentHTML("beforeend",g)}var e=document,f=e.getElementById("botPreview");d()}function h(){if(!a.isProgress){a.isProgress=!0;var d=b.name;"partnerschat"==e.current.name&&(d="brain-whitelabel-partnership"),f.get(c.host+"/bot/resolve/"+d).then(function(b){a.data=b.data,b.data.links.widget&&g(b.data.bot_id,b.data.settings.token)})}}h()}]),angular.module("brnaiApp").directive("footerRegistration",["$http","getDomainData","Notification",function(a,b,c){return{restrict:"EA",templateUrl:"views/footer-registration.html",replace:!0,scope:{translations:"=",isContactUsPanel:"=",isHomePage:"=",sourceName:"@",isWhiteLabelBtn:"=",isRegistrationPanel:"="},link:function(d,e,f){d.email="",d.name="",d.send=function(){if(!d.email)return void c.error({delay:6e4,message:d.translations.menu_rightPanel_errorMessag});a.post(b.host+"/contact",{email:d.email,message:"PARTNER REGISTRATION",name:d.name,template:"whitelabel_reply",source:d.sourceName}).then(function(a){a&&(c.success({message:d.translations.menu_rightPanel_sucsesMessag}),d.email="",d.name="","undefined"!=typeof yaCounter48721346&&yaCounter48721346.reachGoal("MORE_DETAILS_FORM2"),ga(["_trackEvent","MORE_DETAILS_FORM2","MORE_DETAILS_FORM2"]))},function(a){c.error({delay:6e4,message:a.message})})}}}}]),angular.module("brnaiApp").directive("scenarioHelperComponent",["componentsModal",function(a){return{restrict:"EA",template:'<div class="scenario-wrapper"><div class="simple-scenario-wrapper"><div class="simple-step" ng-include="wmType"> </div></div></div>',replace:!0,scope:{options:"=",translations:"="},link:function(b,c,d){d.$observe("component",function(a){var c=JSON.parse(a);b.step=c,b.wmType=g(c.component)?"views/scenario-helper/"+c.component+".html":"views/scenario-helper/advanced.html"}),b.componentsModal=a,b.actions=[];var e=["text","attachment","delay","input","condition","existence","switch","rest","blockchain","transaction"];b.conditions=[{value:"==",name:"equal"},{value:"!=",name:"not equal"},{value:">",name:"greater then"},{value:"<",name:"less than"},{value:"Match regex pattern",name:"match"},{value:"Containe element",name:"contains"}
18],b.condition="",b.initFindCondition=function(){b.$watch("step.properties.operator",function(a){f(a)})};var f=function(a){b.condition="";for(var c=0;c<b.conditions.length;c++)if(b.conditions[c].name==a)return void(b.condition=b.conditions[c].value)},g=function(a){for(var b=0;b<e.length;b++)if(e[b]==a)return!0;return!1},h=!1,i=function(){h||(h=!0,setTimeout(function(){b.actions=[];for(var a=0;a<Object.values(b.step.action).length;a++){var c=b.options.findStepById(Object.values(b.step.action)[a]);b.actions.push(c)}h=!1,b.$apply()},200))};b.searchActionsInit=function(){b.$watchCollection("$parent.scenarios.steps",function(a){i()});for(var a=Object.keys(b.step.action),c=0;c<a.length;c++)b.$watch("step.action."+a[c],function(a){i()})},b.getIcon=function(b){for(var c=0;c<Object.values(a).length;c++)for(var d=0;d<Object.values(a)[c].length;d++)if(Object.values(a)[c][d].value==b)return Object.values(a)[c][d].icon;return"cached"}}}}]),angular.module("brnaiApp").controller("StoreMerchantMaskCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","$uibModal",function(a,b,c,d,e,f,g,h,i){a.attributes={},a.disabledTemplate=!1,b.getStore(g.id).then(function(b){a.merchant_mask=b,a.attributes=a.merchant_mask.merchant.schema,a.merchant_mask.merchant.template.name&&(a.disabledTemplate=!0)},function(b){a.merchant_mask={}}),a.deleteAttribute=function(c){confirm("Are you sure, you want to delete field?")&&(delete a.attributes[c],a.merchant_mask.merchant.schema=a.attributes,b.updateStore(g.id,a.merchant_mask).then(function(a){a.status&&h.success({message:'Field "'+c+'" was successfully deleted'})}))},a.updateMerchant=function(){a.merchant_mask.merchant.schema=a.attributes,b.updateStore(g.id,a.merchant_mask)}}]),angular.module("brnaiApp").controller("StoreEditMerchantMaskCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","$uibModal",function(a,b,c,d,e,f,g,h,i){b.getStore(g.id).then(function(b){a.merchant_mask=b},function(b){a.merchant_mask={}}),a.schemaKeys=[],a.schemaKey="",a.attributeTypes=b.getAttributesTypes(),a.schemaTypes=b.getSchemaTypes(),a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}},a.newSchemaAttr={name:"",label:"",type:"",show:!1},a.clearSchemaAttribute=function(){a.newSchemaAttr={name:"",label:"",type:"",show:!1}},a.showSchemaAttribute=function(){a.newSchemaAttr.show=!0},a.handleChangeType=function(){"mixed"!=a.newAttr.type&&(a.newAttr.schema={fields:{},key:null},a.schemaKeys=[],a.schemaKey="")},a.handleChangeKey=function(){a.newAttr.schema.key=a.schemaKey},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.addSchemaAttribute=function(){a.newSchemaAttr.type&&a.newSchemaAttr.name.length&&(a.newSchemaAttr.name=b.getSlug(a.newSchemaAttr.name),a.newAttr.schema.fields[a.newSchemaAttr.name]=a.newSchemaAttr,"string"!=a.newSchemaAttr.type&&"number"!=a.newSchemaAttr.type&&"date"!=a.newSchemaAttr.type&&"boolean"!=a.newSchemaAttr.type||a.schemaKeys.push({name:a.newSchemaAttr.name}),a.newSchemaAttr={name:"",label:"",type:"",show:!1})},a.deleteSchemaAttribute=function(b){delete a.newAttr.schema.fields[b],angular.forEach(a.schemaKeys,function(c,d){c.name==b&&a.schemaKeys.splice([d],1)})},a.addAttribute=function(){return a.newAttr.type?a.newAttr.name.length?"mixed"!=a.newAttr.type||!a.newAttr.selectable||null!=a.newAttr.schema.key&&""!=a.newAttr.schema.key?(a.newAttr.name=b.getSlug(a.newAttr.name),a.isEmpty(a.newAttr.schema)||angular.forEach(a.newAttr.schema.fields,function(b,c){c!=b.name&&(a.newAttr.schema.fields[b.name]=b,delete a.newAttr.schema.fields[c])}),a.merchant_mask.merchant.schema[a.newAttr.name]=a.newAttr,void b.updateStore(g.id,a.merchant_mask).then(function(b){h.success({message:'Field "'+a.newAttr.name+'" was successfully added'}),d.go("store-merchant-mask",{id:g.id}),a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}},a.oldIndex=null,a.schemaKeys=[],a.schemaKey=""},function(b){delete a.merchant_mask.merchant.schema[a.newAttr.name]})):void h.error({delay:6e4,message:"You must set key field for schema"}):void h.error({delay:6e4,message:"You must set attribute name"}):void h.error({delay:6e4,message:"You must set attribute type"})},a.deleteValue=function(b){confirm("Are you sure, you want to delete value?")&&a.newAttr.values.splice(a.newAttr.values.indexOf(b),1)},a.addValue=function(b){i.open({templateUrl:"views/create-merchant-schema-value.html",scope:a,controller:["storingservice","$uibModalInstance","$stateParams","Upload",function(b,c,d,e){a.values=[],a.newValue={},a.fields=[],a.valueToAdd={},a.uploaders={},a.attribute=a.newAttr,"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1),a.fields.push(c)}):("file"!=a.attribute.type&&"image"!=a.attribute.type||(a.uploaders[a.attribute.name]=!1),a.newValue={value:""}),a.values=a.attribute.values,a.createValue=function(){if("mixed"!=a.attribute.type&&~a.values.indexOf(a.newValue.value))return void h.error({delay:6e4,message:'Value "'+a.newValue.value+'" already exist'});if("mixed"==a.attribute.type){var b=!1;
18if(angular.forEach(a.newValue,function(b,c){"number"==a.attribute.schema.fields[c].type&&(a.newValue[c]=parseFloat(b))}),angular.forEach(a.values,function(c,d){c[a.attribute.schema.key]==a.newValue[a.attribute.schema.key]&&(b=!0)}),b)return void h.error({delay:6e4,message:'Value "'+a.newValue[a.attribute.schema.key]+'" already exist'})}"number"==a.attribute.type&&(a.newValue.value=parseFloat(a.newValue.value)), 19a.valueToAdd=Object.assign({},a.newValue),c.close({newValue:a.valueToAdd}),"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1)}):a.newValue={value:""}},a.close=function(){c.close()},a.addFile=function(b,c,g,h){e.upload({url:f.host+"/attachment/"+g+"/"+d.id,data:{file:b}}).then(function(b){a.uploaders[h]=!1,b.data.status&&(a.newValue[h]=b.data.url)},function(a){},function(b){a.uploaders[h]=!0})}}],windowClass:"large-modal no-border-modal"}).result.then(function(b){"mixed"==a.newAttr.type?a.newAttr.values.push(b.newValue):a.newAttr.values.push(b.newValue.value)},function(a){})}}]),angular.module("brnaiApp").controller("EditMerchantFieldCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","$uibModal",function(a,b,c,d,e,f,g,h,i){a.schemaKeys=[],a.schemaKey="",a.values=[],a.fields=[],b.getStore(g.id).then(function(b){a.merchant_mask=b,g.field&&(a.newAttr=a.merchant_mask.merchant.schema[g.field],a.oldIndex=a.newAttr.name,"mixed"==a.merchant_mask.merchant.schema[g.field].type&&(a.schemaKeys=[],angular.forEach(a.merchant_mask.merchant.schema[g.field].schema.fields,function(b,c){a.schemaKeys.push({name:b.name}),a.fields.push(c)}),a.schemaKey=a.merchant_mask.merchant.schema[g.field].schema.key),a.values=a.newAttr.values)},function(b){a.merchant_mask={}}),a.attributeTypes=b.getAttributesTypes(),a.schemaTypes=b.getSchemaTypes(),a.newSchemaAttr={name:"",label:"",type:"",show:!1},a.clearSchemaAttribute=function(){a.newSchemaAttr={name:"",label:"",type:"",show:!1}},a.showSchemaAttribute=function(){a.newSchemaAttr.show=!0},a.handleChangeType=function(){"mixed"!=a.newAttr.type&&(a.newAttr.schema={fields:{},key:null},a.schemaKeys=[],a.schemaKey="")},a.handleChangeKey=function(){a.newAttr.schema.key=a.schemaKey},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.addSchemaAttribute=function(){a.newSchemaAttr.type&&a.newSchemaAttr.name.length&&(a.newSchemaAttr.name=b.getSlug(a.newSchemaAttr.name),a.newAttr.schema.fields[a.newSchemaAttr.name]=a.newSchemaAttr,"string"!=a.newSchemaAttr.type&&"number"!=a.newSchemaAttr.type&&"date"!=a.newSchemaAttr.type&&"boolean"!=a.newSchemaAttr.type||a.schemaKeys.push({name:a.newSchemaAttr.name}),a.newSchemaAttr={name:"",label:"",type:"",show:!1})},a.deleteSchemaAttribute=function(b){delete a.newAttr.schema.fields[b],angular.forEach(a.schemaKeys,function(c,d){c.name==b&&a.schemaKeys.splice([d],1)})},a.addAttribute=function(){return a.newAttr.type?a.newAttr.name.length?"mixed"!=a.newAttr.type||!a.newAttr.selectable||null!=a.newAttr.schema.key&&""!=a.newAttr.schema.key?(a.newAttr.name=b.getSlug(a.newAttr.name),a.isEmpty(a.newAttr.schema)||angular.forEach(a.newAttr.schema.fields,function(b,c){c!=b.name&&(a.newAttr.schema.fields[b.name]=b,delete a.newAttr.schema.fields[c])}),a.merchant_mask.merchant.schema[a.newAttr.name]=a.newAttr,void b.updateStore(g.id,a.merchant_mask).then(function(b){h.success({message:'Field "'+a.newAttr.name+'" was successfully edited'}),d.go("store-merchant-mask",{id:g.id}),a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}},a.oldIndex=null,a.schemaKeys=[],a.schemaKey=""},function(b){delete a.merchant_mask.merchant.schema[a.newAttr.name]})):void h.error({delay:6e4,message:"You must set key field for schema"}):void h.error({delay:6e4,message:"You must set attribute name"}):void h.error({delay:6e4,message:"You must set attribute type"})},a.deleteValue=function(b){confirm("Are you sure, you want to delete value?")&&a.merchant_mask.merchant.schema[g.field].values.splice(a.merchant_mask.merchant.schema[g.field].values.indexOf(b),1)},a.addValue=function(b){i.open({templateUrl:"views/create-merchant-schema-value.html",scope:a,controller:["storingservice","$uibModalInstance","$stateParams","Upload",function(b,c,d,e){a.values=[],a.newValue={},a.fields=[],a.valueToAdd={},a.uploaders={},a.attribute=a.merchant_mask.merchant.schema[d.field],"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1),a.fields.push(c)}):("file"!=a.attribute.type&&"image"!=a.attribute.type||(a.uploaders[a.attribute.name]=!1),"location"==a.attribute.type&&(a.newValue={value:{type:"Point",coordinates:[]}})),a.values=a.attribute.values,a.createValue=function(){if("mixed"!=a.attribute.type&&~a.values.indexOf(a.newValue.value))return void h.error({delay:6e4,message:'Value "'+a.newValue.value+'" already exist'});if("mixed"==a.attribute.type){var b=!1;
19if(angular.forEach(a.newValue,function(b,c){"number"==a.attribute.schema.fields[c].type&&(a.newValue[c]=parseFloat(b))}),angular.forEach(a.values,function(c,d){c[a.attribute.schema.key]==a.newValue[a.attribute.schema.key]&&(b=!0)}),b)return void h.error({delay:6e4,message:'Value "'+a.newValue[a.attribute.schema.key]+'" already exist'})}"number"==a.attribute.type&&(a.newValue.value=parseFloat(a.newValue.value)),a.valueToAdd=Object.assign({},a.newValue),c.close({newValue:a.valueToAdd}),"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1)}):a.newValue={value:""}},a.close=function(){c.close()},a.showMapForm=function(b){i.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,c,d,e,f){a.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",f.getMap().then(function(b){a.map=b;var c=a.map.getCenter();google.maps.event.trigger(a.map,"resize"),a.map.setCenter(c)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){d.close({attribute:b,data:a.marker})}}],windowClass:"large-modal zindex-map"}).result.then(function(b){a.newValue[b.attribute]=b.data},function(a){})},a.addFile=function(b,c,g,h){e.upload({url:f.host+"/attachment/"+g+"/"+d.id,data:{file:b}}).then(function(b){a.uploaders[h]=!1,b.data.status&&(a.newValue[h]=b.data.url)},function(a){},function(b){a.uploaders[h]=!0})}}],windowClass:"large-modal no-border-modal"}).result.then(function(b){"mixed"==a.newAttr.type?a.newAttr.values.push(b.newValue):a.newAttr.values.push(b.newValue.value)},function(a){})},a.addMapValue=function(a){i.open({templateUrl:"views/add-selectable-location-markers.html",controller:["$scope","storingservice","$uibModalInstance","NgMap",function(b,c,d,e){b.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",b.values=a.values,e.getMap().then(function(a){b.map=a;var c=b.map.getCenter();google.maps.event.trigger(b.map,"resize"),b.map.setCenter(c)}),b.placeMarker=function(a){b.values.push({type:"Point",coordinates:[a.latLng.lng().toFixed(5)/1,a.latLng.lat().toFixed(5)/1]})},b.deletePlace=function(a,c){b.values.splice(c,1)},b.close=function(){d.close({values:b.values})}}],windowClass:"large-modal no-border-modal"}).result.then(function(a){},function(a){})}}]),angular.module("brnaiApp").controller("GrowthInstagramTaskCtrl",["getDomainData","$http","$stateParams","$scope","Notification","$state","$uibModal","facebookService",function(a,b,c,d,e,f,g,h){function i(){b.get(a.host+"/tool/"+c.id+"/instagram-follower").then(function(a){if(a&&a.data.status){d.isActions=!0,d.insagramActions.properties=a.data.tool.properties;for(var b="",c=0;c<d.insagramActions.properties.tags.length;c++)b+=d.insagramActions.properties.tags[c],c<d.insagramActions.properties.tags.length-1&&(b+="\n");d.insagramActionsDefaut.hashtags=b}})}function j(a,b){var c=[];return angular.forEach(a,function(a,d){-1==b.indexOf(a)&&c.push(a)}),c}d.$parent.botId=c.id,d.getConnectionsInstagram(c.id),d.add_tag="",d.isHashtagsActive=!1,d.isHashTagsLastActive=!1,d.isLocationActive=!1,d.isTaggedUsersActive=!1,d.isFollowedByActive=!1,d.isCommentedPostActive=!1,d.searchLocationKeyword="",d.searchLocations=[],d.flagResult=!1,d.insagramActions={properties:{tags:[],comments:[],actions:{likes:!1,follows:!1,unfollows:!1},comments_per_day:200}},d.growData={id:null,active:!0,properties:{}},d.isActions=!1,d.postPeriod=7,d.insagramActionsDefaut={hashtags:""},d.datatimes=[],d.prepareTags=function(){var a=document.getElementById("textarea").value.split("\n"),b=a.length;d.growData.properties.tags=[];for(var c=0;c<b;c++)d.growData.properties.tags.push(a[c])},d.hide_error=!1;var k=!1,l=!1;d.getTool=function(){b.get(a.host+"/tool/"+f.params.id+"/instagram-growth/list",{notification:!1}).then(function(a){void 0!==a&&a.data.status?a.data.task?(l=!0,d.growData.id=a.data.task.id,d.growData.properties.post_url=a.data.task.properties.post_url||"",d.growData.properties.user_id=a.data.task.properties.user_id||"",d.growData.properties.tag=a.data.task.properties.tag||"",d.growData.properties.tags=a.data.task.properties.tags||[],d.growData.properties.comments=a.data.task.properties.messages||[],d.growData.properties.locations=a.data.task.properties.locations||[],d.growData.properties.comments_per_day=a.data.task.properties.comments_per_day||150,d.growData.properties.use_random_messages=!0,d.isHashtagsActive=!1,d.isLocationActive=!1,d.isHashTagsLastActive="hash_tags"==a.data.task.type,d.isCommentedPostActive="commentators"==a.data.task.type,d.isFollowedByActive="followers"==a.data.task.type,d.isTaggedUsersActive="photo_tagged"==a.data.task.type,d.add_tag=d.growData.properties.tags.join("\n")):(a.data.tool&&(k=!0),d.growData.id=a.data.tool._id,d.growData.properties.tags=a.data.tool.properties.tags||[],d.growData.properties.comments=a.data.tool.properties.comments||[],d.growData.properties.comments_per_day=a.data.tool.properties.comments_per_day,d.growData.properties.mode=a.data.tool.properties.mode,d.growData.properties.locations=a.data.tool.properties.locations||[],d.isCommentedPostActive=!1,d.isFollowedByActive=!1,d.isTaggedUsersActive=!1,d.isHashTagsLastActive=!1,d.isHashtagsActive="tags"==d.growData.properties.mode,d.isLocationActive="locations"==d.growData.properties.mode,d.add_tag=d.growData.properties.tags.join("\n")):d.growData.properties={use_random_messages:!0,tags:[],comments:[],mode:"tags",locations:[]}},function(a){d.hide_error=!0}
19).catch(function(a){console.log(a)})},d.getTool(),d.addMoreTimer=function(){d.datatimes.push(new Date)},d.DeleteTimer=function(a){d.datatimes.splice(a,1)},d.tumbLike=function(){d.insagramActions.properties.actions.likes=!d.insagramActions.properties.actions.likes},d.tumbFollow=function(){d.insagramActions.properties.actions.follows=!d.insagramActions.properties.actions.follows},d.tumbUnfollow=function(){d.insagramActions.properties.actions.unfollows=!d.insagramActions.properties.actions.unfollows},d.tumbComments=function(){0==d.insagramActions.properties.comments.length&&d.insagramActions.properties.comments.push("")},d.addComments=function(){d.insagramActions.properties.comments.push("")},d.removeComments=function(a){d.insagramActions.properties.comments.splice(a,1)},d.saveActions=function(){if(d.insagramActions.properties.tags=d.insagramActionsDefaut.hashtags.split("\n"),d.isHashtagsActive||d.isHashTagsLastActive||d.isLocationActive||d.isTaggedUsersActive||d.isFollowedByActive||d.isCommentedPostActive){var f=a.host+"/tool/"+d.botId,g={};d.isCommentedPostActive||d.isFollowedByActive||d.isTaggedUsersActive||d.isHashTagsLastActive?(g.id=d.growData.id,g.bot_id=d.botId,g.action="comment",g.properties={comments_per_day:d.growData.properties.comments_per_day},d.isCommentedPostActive&&(g.type="commentators",g.properties.post_url=d.growData.properties.post_url),d.isHashTagsLastActive&&(g.type="hash_tags",g.properties.tags=d.growData.properties.tags),d.isFollowedByActive&&(g.type="followers",g.properties.user_id=d.growData.properties.user_id),d.isTaggedUsersActive&&(g.type="photo_tagged",g.properties.tag=d.growData.properties.tag)):(g=d.growData,d.isActions=!0),k&&(d.isHashtagsActive||d.isLocationActive)||l&&(d.isHashTagsLastActive||d.isCommentedPostActive||d.isFollowedByActive||d.isTaggedUsersActive)?b.put(f+"/instagram-growth/update",g).then(function(a){a.data.status?e.success({message:"Actions successfully updated"}):e.error({delay:6e4,message:a.data.error})},function(a){console.log(a)}):b.post(f+"/instagram-growth/create",g).then(function(a){a.data.status?e.success({message:"Actions successfully created"}):e.error({delay:6e4,message:a.data.error})},function(a){console.log(a)})}d.isActions?b.put(a.host+"/tool/"+c.id+"/instagram-follower",d.insagramActions).then(function(a){a.data.status?e.success({message:"Actions successfully updated"}):e.error({delay:6e4,message:a.data.error})}):b.post(a.host+"/tool/"+c.id+"/instagram-follower",d.insagramActions).then(function(a){a.data.status?e.success({message:"Actions successfully created"}):e.error({delay:6e4,message:a.data.error})})},i(),d.filter=function(a){d.isHashtagsActive=!1,d.isLocationActive=!1,d.isTaggedUsersActive=!1,d.isFollowedByActive=!1,d.isCommentedPostActive=!1,d.isHashTagsLastActive=!1,"hashtags"==a&&(d.isHashtagsActive?d.isHashtagsActive=!1:(d.isHashtagsActive=!0,d.growData.properties.mode="tags")),"hash_tags"==a&&(d.isHashTagsLastActive?d.isHashTagsLastActive=!1:(d.isHashTagsLastActive=!0,d.growData.properties.mode="tags")),"location"==a&&(d.isLocationActive?d.isLocationActive=!1:(d.isLocationActive=!0,d.growData.properties.mode="locations")),"tagged_users"==a&&(d.isTaggedUsersActive?d.isTaggedUsersActive=!1:d.isTaggedUsersActive=!0),"followed_by"==a&&(d.isFollowedByActive?d.isFollowedByActive=!1:d.isFollowedByActive=!0),"commented_post"==a&&(d.isCommentedPostActive?d.isCommentedPostActive=!1:d.isCommentedPostActive=!0)};var m=[];d.clearSearchLocation=function(){clearTimeout(n),d.searchLocations=[],m=[],d.searchLocationKeyword=""},d.searchLocation=function(){if(!d.searchLocationKeyword)return void d.clearSearchLocation();d.searchLocations=[],b.get(a.host+"/tool/"+f.params.id+"/instagram-follower/locations?query="+d.searchLocationKeyword).then(function(a){m=a.data.locations,d.searchLocations=j(m,d.growData.properties.locations)})},d.addLocation=function(a){if("object"!=typeof d.searchLocationKeyword)return void d.searchLocation();d.growData.properties.locations.push(d.searchLocationKeyword),d.searchLocations=j(m,d.growData.properties.locations),d.searchLocationKeyword=null},d.addAllLocation=function(){angular.forEach(d.searchLocations,function(a,b){d.growData.properties.locations.push(a)}),d.searchLocations=j(m,d.growData.properties.locations)},d.deleteLocation=function(a){d.growData.properties.locations.splice(a,1),d.searchLocations=j(m,d.growData.properties.locations)},d.deleteAllLocation=function(){d.growData.properties.locations=[],d.searchLocations=j(m,d.growData.properties.locations)};var n;d.$watch("searchLocationKeyword",function(a){a||(d.searchLocations=[],m=[])},!0)}]),angular.module("brnaiApp").controller("GrowthInstagramPostCtrl",["getDomainData","$http","$stateParams","$scope","Notification","$state","$uibModal","facebookService","Upload",function(a,b,c,d,e,f,g,h,i){d.$parent.botId=c.id,d.getConnectionsInstagram(c.id),d.insagramActions={properties:{tags:[],actions:{post:!1},post:{type:"image",content:{url:"",width:"800",height:"800"}}}},d.disabledImg=!1,d.disabledBtnCreate=!1,d.insagramActionsDefaut={hashtags:""},d.tumbPost=function(){d.insagramActions.properties.actions.post=!d.insagramActions.properties.actions.post},d.addPost=function(){d.insagramActions.properties.actions.post=!0},d.addFile=function(b,e,f,g){i.upload({url:a.host+"/attachment/"+f+"/"+c.id,data:{file:b}}).then(function(a){d.disabledImg=!1,a.data.status&&(d.insagramActions.properties.post.content.url=a.data.url)},function(a){},function(a){d.disabledImg=!0})},d.saveActions=function(){d.insagramActions.properties.post.content.userTags=d.insagramActionsDefaut.hashtags.split("\n"),d.disabledBtnCreate=!0,b.post(a.host+"/tool/"+c.id+"/instagram-posts/add",d.insagramActions.properties).then(function(a){d.disabledBtnCreate=!1,a.data.status?e.success({message:"Post successfully added!"}):e.error({delay:6e4,message:a.data.error})})}}]),angular.module("brnaiApp").controller("GrowthInstagramSettingsCtrl",["getDomainData","$http","$stateParams","$scope",function(a,b,c,d){d.botId=c.id,d.autochallenge=!0,b.get(a.host+"/bot/"+d.botId).then(function(a){a.data.status&&(d.autochallenge=!a.data.settings.instagram.disable_autochallenge)},function(a){d.autochallenge=!1}),d.disableBotAutoChallenge=function(c){b.post(a.host+"/bot/settings/"+c,{instagram:{disable_autochallenge:!0}}).then(function(a){a.data.status&&(d.autochallenge=!1)},function(a){d.autochallenge=!0})},d.enableBotAutoChallenge=function(c){b.post(a.host+"/bot/settings/"+c,{instagram:{disable_autochallenge:!1}}).then(function(a){a.data.status&&(d.autochallenge=!0)},function(a){d.autochallenge=!1})}}]),angular.module("brnaiApp").controller("ImprintCtrl",["$scope","$http","$sce","getDomainData","
19storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get("https://api.brn.ai/page/imprint/en?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0})}a.page={},j()}]),angular.module("brnaiApp").controller("ArdMomaCtrl",function(){var a=document.querySelector("link[rel*='icon']")||document.createElement("link");a.type="image/x-icon",a.href="images/ard_moma/favicon.ico",document.getElementsByTagName("head")[0].appendChild(a),document.title="ard moma bot"}),angular.module("brnaiApp").controller("UserDetailCtrl",["usersService","$scope","$stateParams","Upload","getDomainData","Notification","$state","$uibModal",function(a,b,c,d,e,f,g,h){function i(){b.inProgressTransactions=!0,a.getTransactions(c.id,b.filterTransactions).then(function(a){b.inProgressTransactions=!1,a.length?b.transactions.push.apply(b.transactions,a):b.filterTransactions.lastPage=!0})}b.user={},b.search_portals=[],b.transactions=[],b.groups=[],b.uploaders={avatar:!1},b.inProgressTransactions=!1,b.filterTransactions={limit:20,page:0,lastPage:!1},b.roles=a.getRoles(),a.getFilters().then(function(a){b.groups=a.groups}),a.getPortals().then(function(a){b.search_portals=a}),a.getUser(c.id).then(function(a){b.user=a,b.user.portal_id=b.user.portal.portal_id}),i(),b.loadMoreTransactions=function(){b.inProgressTransactions||b.filterTransactions.lastPage||(b.filterTransactions.page++,i())},b.addFile=function(a,c,f,g){d.upload({url:e.host+"/message/attachment/"+f,data:{file:a}}).then(function(a){b.uploaders[g]=!1,a.data.status&&(b.user[g]=a.data.url)},function(a){},function(a){b.uploaders[g]=!0})},b.updateUser=function(){a.updateUser(b.user).then(function(a){a.status&&(f.success({message:'User "'+b.user.name+'" was successfully updated'}),g.go("manage-users",{id:c.id}))},function(a){})},b.getBalance=function(){return b.user.plan.balance<0?"- $"+Math.abs(b.user.plan.balance):b.user.plan.balance>0?"$"+Math.abs(b.user.plan.balance):0},b.showChangePlanModal=function(){h.open({templateUrl:"views/change-plan-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","$uibModal",function(a,b,c,d,e){a.plans=[{title:"Default plan",name:"default"},{title:"Free plan",name:"free"},{title:"Stopped",name:"stopped"}],a.plan=null,a.changePlan=function(){c.close({plan:a.plan})}}],windowClass:"edit-modal-window create"}).result.then(function(d){d.plan&&a.changePlan(b.user.id,d.plan).then(function(d){d.status&&a.getUser(c.id).then(function(a){b.user=a,b.user.portal_id=b.user.portal.portal_id})})},function(a){})}}]),angular.module("brnaiApp").controller("VivacruisesWidgetCtrl",["$scope","$stateParams","getDomainData","$window","$state","$http",function(a,b,c,d,e,f){function g(b,c){function d(){var a=f.createElement("script");a.type="text/javascript",a.async=!0,a.id="testqwerty",a.src="https://api.brn.ai/js/widget/launcher.js";var b=f.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b)}window.brnSettings={bot_id:b,env:"live",token:c,url:"https://widget.brn.ai/#",position:"right",btn:"false",open:"0",welcome_text:"Herzlich willkommen. Sie wollen weitere Informationen über den Viva Cruises Service"};var e=window,f=(e.TechFunder,document);d(),document.addEventListener("widgetFrameCreated",function(b){$($(f).find("#tf-widget > #tf-iframe")).on("load",function(){$(this)[0];a.isWidget=!0,setTimeout(function(){},500),a.$apply()})},!1)}function h(){a.isProgress||(a.isProgress=!0,f.get(c.host+"/bot/resolve/viva-cruises").then(function(b){a.data=b.data,b.data.links.widget&&(0==$($(document).find("#tf-widget > #tf-iframe")).length?g(b.data.bot_id,b.data.settings.token):setTimeout(function(){},1e3))}))}h(),$(d).on("message",function(a){a.originalEvent.data})}]),angular.module("brnaiApp").controller("AdminBotsCtrl",["$http","botService","$scope","getDomainData","$uibModal","$location",function(a,b,c,d,e,f){function g(){c.inProgress=!0,b.getAdminBots(c.filter).then(function(a){c.inProgress=!1,a.bots.length?(c.bots.push.apply(c.bots,a.bots),c.total=a.total):c.filter.lastPage=!0})}function h(a){c.loading=!0,b.getAdminBots(c.filter).then(function(a){c.loading=!1,c.inProgress=!1,a.bots.length?(c.bots.push.apply(c.bots,a.bots),c.total=a.total):c.filter.lastPage=!0})}function i(){a.get(d.host+"/users/search?limit=10000").then(function(a){a.data.status&&(c.search_users=a.data.users)},function(a){})}function j(){b.getFilters().then(function(a){c.filters=a})}function k(){c.collectionImages=b.getConnectionsImages()}function l(){var a={};return c.filter.name&&(a.name=c.filter.name),c.filter.provider&&(a.provider=c.filter.provider),c.filter.portal&&(a.portal=c.filter.portal),c.filter.active&&(a.active=c.filter.active),a}c.inProgress=!0,c.loading=!0,c.bots=[],c.filters={},c.total=0,c.selected={},c.selectedBots=[],c.botActions=[{value:"delete",title:"Delete",color:"#fd6a6a",icon:"delete"},{value:"deactivate",title:"Deactivate",color:"#989898",icon:"block"},{value:"activate",title:"Activate",color:"#94cc01",icon:"sync"}],c.filter={name:f.search().name||"",provider:f.search().provider||"",portal:f.search().portal||"",active:f.search().active||"",limit:50,page:0,lastPage:!1,sort:"-created_at"},c.collectionImages={},c.search_users=[],c.changeSort=function(){c.filter.sort="created_at"===c.filter.sort?"-created_at":"created_at",c.filter.page=0,c.filter.lastPage=!1,
19c.loading=!0,c.bots=[],h()},c.changeOwner=function(a,b){e.open({templateUrl:"views/admin-bot-change-owner.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","$http","getDomainData",function(c,d,e,f,g,h){c.selected={},c.search_users=b,c.bot=a,c.addMember=function(b){c.selected.user.id&&(console.log(c.selected.user),c.bot.account_id=c.selected.user.id,c.bot.user={account_id:c.selected.user.id,email:c.selected.user.email,name:c.selected.user.name},g.put(h.host+"/bot/"+c.bot.bot_id,c.bot).then(function(b){1==b.data.status&&e.close({bot:c.bot,oldBot:a})},function(a){}))},c.close=function(){e.close({bot:c.bot})},c.getSearchUsers=function(a){return g.get(h.host+"/users/search?limit=8&name="+a).then(function(a){if(a.data.status)return a.data.users})}}],windowClass:"large-modal"}).result.then(function(a){var b=c.bots.indexOf(a.oldBot);c.bots[b]=a.bot},function(a){})},k(),h(),j(),i(),c.loadMore=function(){c.inProgress||c.filter.lastPage||(c.filter.page++,g())},c.selectBots=function(a){c.selected[a]?(c.selectedBots.push(a),c.selectedBots.length==c.bots.length&&(c.selected.all=!0)):(c.selectedBots.splice(c.selectedBots.indexOf(a),1),c.selected.all=!1)},c.selectAllBots=function(){c.selected.all?angular.forEach(c.bots,function(a,b){c.selected[a.bot_id]=!0,c.selectedBots.push(a.bot_id)}):(angular.forEach(c.bots,function(a,b){c.selected[a.bot_id]=!1}),c.selectedBots=[])},c.filterBots=function(){f.path("/admin/bots").search(l()),c.filter.page=0,c.filter.lastPage=!1,c.loading=!0,b.getAdminBots(c.filter).then(function(a){c.loading=!1,c.bots=a.bots,c.total=a.total,a.bots.length||(c.filter.lastPage=!0)})},c.searchBots=function(a){13===a.keyCode&&(f.path("/admin/bots").search(l()),c.filter.page=0,c.filter.lastPage=!1,c.loading=!0,b.getAdminBots(c.filter).then(function(a){c.loading=!1,c.bots=a.bots,c.total=a.total,a.bots.length||(c.filter.lastPage=!0)}))},c.massAction=function(a){switch(a.value){case"delete":c.selectedBots.length&&b.massDelete(c.selectedBots).then(function(a){a.status&&angular.forEach(c.bots,function(b,d){if(a.results[b.bot_id]&&"OK"==a.results[b.bot_id]){var e=c.bots[d];c.selectedBots.splice(c.selectedBots.indexOf(b.bot_id),1),c.selected[b.bot_id]=!1,c.bots.splice(d,1),c.total--,angular.forEach(c.filters.active,function(a,b){e.active===a.value&&a.count--}),angular.forEach(c.filters.portals,function(a,b){e.portal.portal_id===a.value&&a.count--})}})});break;case"deactivate":c.selectedBots.length&&b.massDeactivate(c.selectedBots).then(function(a){a.status&&angular.forEach(c.bots,function(b,d){a.results[b.bot_id]&&"OK"==a.results[b.bot_id]&&(b.active=!1,c.selectedBots.splice(c.selectedBots.indexOf(b.bot_id),1),c.selected[b.bot_id]=!1,angular.forEach(c.filters.active,function(a,b){!1===a.value?a.count++:a.count--}))})});break;case"activate":c.selectedBots.length&&b.massActivate(c.selectedBots).then(function(a){a.status&&angular.forEach(c.bots,function(b,d){a.results[b.bot_id]&&"OK"==a.results[b.bot_id]&&(b.active=!0,c.selectedBots.splice(c.selectedBots.indexOf(b.bot_id),1),c.selected[b.bot_id]=!1,angular.forEach(c.filters.active,function(a,b){!0===a.value?a.count++:a.count--}))})})}}}]),angular.module("brnaiApp").controller("AdminBotsUserCtrl",["botService","$scope","$stateParams","getDomainData","$uibModal","$http","$location",function(a,b,c,d,e,f,g){function h(){b.inProgress=!0,a.getAdminBots(b.filter).then(function(a){b.inProgress=!1,a.bots.length?(b.bots.push.apply(b.bots,a.bots),b.total=a.total):b.filter.lastPage=!0})}function i(c){b.loading=!0,a.getAdminBots(b.filter).then(function(a){b.loading=!1,b.inProgress=!1,a.bots.length?(b.bots.push.apply(b.bots,a.bots),b.total=a.total):b.filter.lastPage=!0})}function j(){f.get(d.host+"/users/search?limit=10000").then(function(a){a.data.status&&(b.search_users=a.data.users)},function(a){})}function k(){a.getFilters().then(function(a){b.filters=a})}function l(){b.collectionImages=a.getConnectionsImages()}function m(){var a={};return b.filter.name&&(a.name=b.filter.name),b.filter.provider&&(a.provider=b.filter.provider),b.filter.portal&&(a.portal=b.filter.portal),b.filter.active&&(a.active=b.filter.active),a}b.inProgress=!0,b.loading=!0,b.bots=[],b.filters={},b.total=0,b.selected={},b.selectedBots=[],b.botActions=[{value:"delete",title:"Delete",color:"#fd6a6a",icon:"delete"},{value:"deactivate",title:"Deactivate",color:"#989898",icon:"block"},{value:"activate",title:"Activate",color:"#94cc01",icon:"sync"}
19],b.filter={name:g.search().name||"",provider:g.search().provider||"",portal:g.search().portal||"",active:g.search().active||"",user:c.user,limit:50,page:0,lastPage:!1,sort:"-created_at"},b.collectionImages={},b.search_users=[],b.changeSort=function(){b.filter.sort="created_at"===b.filter.sort?"-created_at":"created_at",b.filter.page=0,b.filter.lastPage=!1,b.loading=!0,b.bots=[],i()},b.changeOwner=function(a,c){e.open({templateUrl:"views/admin-bot-change-owner.html",controller:["$scope","$uibModalInstance","$stateParams","$http","getDomainData","usersService",function(b,d,e,f,g,h){b.selected={},b.search_users=c,b.bot=a,b.newUser={},b.addMember=function(c){b.selected.user.id&&(b.bot.account_id=b.selected.user.id,b.bot.user={account_id:b.selected.user.id,email:b.selected.user.email,name:b.selected.user.name},f.put(g.host+"/bot/"+b.bot.bot_id,b.bot).then(function(c){1==c.data.status&&d.close({bot:b.bot,oldBot:a})},function(a){}))},b.close=function(){d.close({bot:b.bot})},b.getSearchUsers=function(a){return f.get(g.host+"/users/search?limit=8&name="+a).then(function(a){if(a.data.status)return a.data.users})}}],windowClass:"large-modal"}).result.then(function(a){var c=b.bots.indexOf(a.oldBot);b.bots[c]=a.bot},function(a){})},l(),i(),k(),j(),b.loadMore=function(){b.inProgress||b.filter.lastPage||(b.filter.page++,h())},b.selectBots=function(a){b.selected[a]?(b.selectedBots.push(a),b.selectedBots.length==b.bots.length&&(b.selected.all=!0)):(b.selectedBots.splice(b.selectedBots.indexOf(a),1),b.selected.all=!1)},b.selectAllBots=function(){b.selected.all?angular.forEach(b.bots,function(a,c){b.selected[a.bot_id]=!0,b.selectedBots.push(a.bot_id)}):(angular.forEach(b.bots,function(a,c){b.selected[a.bot_id]=!1}),b.selectedBots=[])},b.filterBots=function(){g.path("/admin/bots/"+c.user).search(m()),b.filter.page=0,b.filter.lastPage=!1,b.loading=!0,a.getAdminBots(b.filter).then(function(a){b.loading=!1,b.bots=a.bots,b.total=a.total,a.bots.length||(b.filter.lastPage=!0)})},b.searchBots=function(d){13===d.keyCode&&(g.path("/admin/bots/"+c.user).search(m()),b.filter.page=0,b.filter.lastPage=!1,b.loading=!0,a.getAdminBots(b.filter).then(function(a){b.loading=!1,b.bots=a.bots,b.total=a.total,a.bots.length||(b.filter.lastPage=!0)}))},b.massAction=function(c){switch(c.value){case"delete":b.selectedBots.length&&a.massDelete(b.selectedBots).then(function(a){a.status&&angular.forEach(b.bots,function(c,d){if(a.results[c.bot_id]&&"OK"==a.results[c.bot_id]){var e=b.bots[d];b.selectedBots.splice(b.selectedBots.indexOf(c.bot_id),1),b.selected[c.bot_id]=!1,b.bots.splice(d,1),b.total--,angular.forEach(b.filters.active,function(a,b){e.active===a.value&&a.count--}),angular.forEach(b.filters.portals,function(a,b){e.portal.portal_id===a.value&&a.count--})}})});break;case"deactivate":b.selectedBots.length&&a.massDeactivate(b.selectedBots).then(function(a){a.status&&angular.forEach(b.bots,function(c,d){a.results[c.bot_id]&&"OK"==a.results[c.bot_id]&&(c.active=!1,b.selectedBots.splice(b.selectedBots.indexOf(c.bot_id),1),b.selected[c.bot_id]=!1,angular.forEach(b.filters.active,function(a,b){!1===a.value?a.count++:a.count--}))})});break;case"activate":b.selectedBots.length&&a.massActivate(b.selectedBots).then(function(a){a.status&&angular.forEach(b.bots,function(c,d){a.results[c.bot_id]&&"OK"==a.results[c.bot_id]&&(c.active=!0,b.selectedBots.splice(b.selectedBots.indexOf(c.bot_id),1),b.selected[c.bot_id]=!1,angular.forEach(b.filters.active,function(a,b){!0===a.value?a.count++:a.count--}))})})}}}]),angular.module("brnaiApp").controller("VariablesEditCtrl",["variablesService","$scope","$stateParams","$uibModal","Notification",function(a,b,c,d,e){b.variable={},b.loading=!0,b.isVarible=!1,a.getVariable(c.id,c.name).then(function(a){b.loading=!1,b.variable=a,b.isVarible=!!b.variable.value&&("string"!=typeof b.variable.value&&Object.keys(b.variable.value).length>0)}),b.updateVariable=function(){a.updateVariable(c.id,c.name,b.variable)}}]),angular.module("brnaiApp").controller("SubscriptionsCtrl",["$scope","$http","$stateParams","$state","getDomainData","Auth","storage","Notification","$rootScope",function(a,b,c,d,e,f,g,h,i){a.current_plan=[],a.plans=[],a.portal=[],a.isAdmin=f.isAdmin(),a.isAuthenticated=f.getUser(),a.isAuthenticated&&b.get(e.host+"/user/me").then(function(b){console.log(b),!0===b.data.status&&(a.current_plan=b.data.plan)},function(a){}),a.logOut=function(){f.logOut()},a.user=f.getUser(),b.get(e.host+"/subscription-plans/"+i.serviceName+"?active=1").then(function(b){!0===b.data.status&&(a.plans=b.data.plans)},function(a){});var j=document.createElement("script");j.src="https://checkout.stripe.com/checkout.js",document.body.appendChild(j),j.onload=function(){var c=StripeCheckout.configure({key:i.publishableKey,locale:"auto"});a.openS=function(f,g,j){a.isAuthenticated?a.current_plan.id!=j&&("active"==a.current_plan.status?b.post(e.host+"/subscription-plan/"+j+"/subscribe",{token:""}).then(function(a){console.log(a),a.data.status?(h.success({
20message:"Thank you. Your payment has been successfully received."}),d.go("bots")):h.error({message:"Payment error."})}):c.open({name:i.portalName,description:g+" Plan",amount:100*f,token:function(a){b.post(e.host+"/subscription-plan/"+j+"/subscribe",{token:a}).then(function(a){console.log(a),a.data.status?(h.success({message:"Thank you. Your payment has been successfully received."}),d.go("bots")):h.error({message:"Payment error."})})}})):window.location.href="http://"+i.serviceName+".tfid.me"}}}]),angular.module("brnaiApp").controller("InstaDirectCtrl",["$http","$scope",function(a,b){function c(){a.get("https://api.brn.ai/translations/language/en?portal_id=RYGK019SCZ").then(function(a){a.data.status&&(b.translations=a.data.translations)})}var d=document.querySelector("link[rel*='icon']")||document.createElement("link");d.type="image/x-icon",d.href="images/insta-direct/img/favicon.ico",document.getElementsByTagName("head")[0].appendChild(d),document.title="Instagram Chatbot - BRAIN (brn.ai)",b.translations={},c()}]),angular.module("brnaiApp").controller("HotelbotCtrl",["$http","$scope",function(a,b){function c(){a.get("https://api.brn.ai/translations/language/en?portal_id=RYGK019SCZ").then(function(a){a.data.status&&(b.translations=a.data.translations)})}document.querySelector("link[rel*='icon']")||document.createElement("link");document.title="Hotelbot",b.translations={},c()}]),angular.module("brnaiApp").controller("EmailCtrl",["$scope","$http","domain","$stateParams","getDomainData","Auth","$uibModalInstance","Notification",function(a,b,c,d,e,f,g,h){function i(c){b.get(e.host+"/connection/"+d.id+"/email",{notification:!1}).then(function(b){b.data.status&&(a.email.account_id=f.getUser().account_id,a.email.provider_data=b.data.provider_data,a.exist=!0,c&&(a.email.provider_data.password=c))},function(a){})}a.email={account_id:f.getUser().account_id,provider_data:{username:"",password:""}},a.exist=!1,a.isCode=!1,a.isProgres=!1,a.tls=[],a.tls[0]={value:!0,name:"Yes"},a.tls[1]={value:!1,name:"No"},i(),a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();b.put(e.host+"/connection/email/"+d.id,a.email).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):h.error({delay:6e4,message:b.data.error})},function(a){})}},a.addConnection=function(){b.post(e.host+"/connection/email/"+d.id,a.email).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):h.error({delay:6e4,message:b.data.error})},function(a){})},a.close=function(){g.close("ok")},a.deleteConnection=function(){b.delete(e.host+"/connection/email/"+d.id).then(function(a){a.data.status?g.close("ok"):h.error({delay:6e4,message:a.data.error})},function(a){})}}]),angular.module("brnaiApp").controller("LinkedinCtrl",["$scope","$http","domain","$stateParams","getDomainData","Auth","$uibModalInstance","Notification",function(a,b,c,d,e,f,g,h){function i(c){b.get(e.host+"/connection/"+d.id+"/linkedin",{notification:!1}).then(function(b){b.data.status&&(a.linkedin.account_id=f.getUser().account_id,a.linkedin.provider_data=b.data.provider_data,a.exist=!0,c&&(a.linkedin.provider_data.password=c))},function(a){})}a.linkedin={account_id:f.getUser().account_id,provider_data:{username:"",login:"",password:""}},a.exist=!1,a.isProgres=!1,i(),a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();b.put(e.host+"/connection/linkedin/"+d.id,a.linkedin).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):h.error({delay:6e4,message:b.data.error})},function(a){})}},a.addConnection=function(){b.post(e.host+"/connection/linkedin/"+d.id,a.linkedin).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):h.error({delay:6e4,message:b.data.error})},function(a){})},a.close=function(){g.close("ok")},a.deleteConnection=function(){b.delete(e.host+"/connection/linkedin/"+d.id).then(function(a){a.data.status?g.close("ok"):h.error({delay:6e4,message:a.data.error})},function(a){})}}]),angular.module("brnaiApp").controller("RedditCtrl",["$scope","$http","domain","$stateParams","getDomainData","Auth","$uibModalInstance","Notification",function(a,b,c,d,e,f,g,h){function i(c){b.get(e.host+"/connection/"+d.id+"/reddit",{notification:!1}).then(function(b){b.data.status&&(a.reddit.account_id=f.getUser().account_id,a.reddit.provider_data=b.data.provider_data,a.exist=!0,c&&(a.reddit.provider_data.password=c))},function(a){})}a.reddit={account_id:f.getUser().account_id,provider_data:{username:"",login:"",password:""}},a.exist=!1,a.isProgres=!1,i(),a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();b.put(e.host+"/connection/reddit/"+d.id,a.reddit).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):h.error({delay:6e4,message:b.data.error})},function(a){})}},a.addConnection=function(){b.post(e.host+"/connection/reddit/"+d.id,a.reddit).then(function(b){a.isProgres=!1,b.data.status?g.close("ok"):h.error({delay:6e4,message:b.data.error})},function(a){})},a.close=function(){g.close("ok")},a.deleteConnection=function(){b.delete(e.host+"/connection/reddit/"+d.id).then(function(a){a.data.status?g.close("ok"):h.error({delay:6e4,message:a.data.error})},function(a){})}}]),angular.module("brnaiApp").controller("PinterestCtrl",["$scope","$http","$stateParams","getDomainData","Auth","$uibModalInstance","Notification",function(a,b,c,d,e,f,g){function h(f){b.get(d.host+"/connection/"+c.id+"/pinterest",{notification:!1}).then(function(b){b.data.status&&(a.pinterest.account_id=e.getUser().account_id,a.pinterest.provider_data=b.data.provider_data,a.exist=!0,f&&(a.pinterest.provider_data.password=f))},function(a){})}a.pinterest={account_id:e.getUser().account_id,provider_data:{username:"",password:"",email:"",proxy:""}},a.exist=!1,a.isProgres=!1,h(),a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();b.put(d.host+"/connection/pinterest/"+c.id,a.pinterest).then(function(b){a.isProgres=!1,b.data.status?f.close("ok"):g.error({delay:6e4,message:b.data.error})},function(a){})}},a.addConnection=function(){b.post(d.host+"/connection/pinterest/"+c.id,a.pinterest).then(function(b){a.isProgres=!1,b.data.status?f.close("ok"):g.error({delay:6e4,message:b.data.error})},function(a){})},a.close=function(){f.close("ok")},a.deleteConnection=function(){b.delete(d.host+"/connection/pinterest/"+c.id).then(function(a){a.data.status?f.close("ok"):g.error({delay:6e4,message:a.data.error})},function(a){})}}]),angular.module("brnaiApp").controller("TwilioCtrl",["$scope","$http","$stateParams","getDomainData","Auth","$uibModalInstance","Notification",function(a,b,c,d,e,f,g){function h(){b.get(d.host+"/connection/"+c.id+"/twilio",{notification:!1}).then(function(b){b.data.status&&(a.twilio.account_id=e.getUser().account_id,a.twilio.provider_data=b.data.provider_data,a.exist=!0)},function(a){})}a.twilio={account_id:e.getUser().account_id,provider_data:{phone:"",sid:"",token:"",msid:""}},a.exist=!1,a.isProgres=!1,h(),a.updateConnection=function(){if(!a.isProgres){if(a.isProgres=!0,!a.exist)return void a.addConnection();b.put(d.host+"/connection/twilio/"+c.id,a.twilio).then(function(b){a.isProgres=!1,b.data.status?f.close("ok"):g.error({delay:6e4,message:b.data.error})},function(a){})}},a.addConnection=function(){b.post(d.host+"/connection/twilio/"+c.id,a.twilio).then(function(b){a.isProgres=!1,b.data.status?f.close("ok"):g.error({delay:6e4,message:b.data.error})},function(a){})},a.close=function(){f.close("ok")},a.deleteConnection=function(){b.delete(d.host+"/connection/twilio/"+c.id
20).then(function(a){a.data.status?f.close("ok"):g.error({delay:6e4,message:a.data.error})},function(a){})}}]),angular.module("brnaiApp").directive("mainMenuDirect",["$window",function(a){return{restrict:"EA",templateUrl:"views/modern/main-menu-direct.html",replace:!0,transclude:!0,scope:{translations:"=",authenticated:"=",userInfo:"=",isBotFabrik:"=?",isNotMain:"=?"},link:function(b,c,d){b.windowWidth=a.innerWidth,b.isNotMain=!!b.isNotMain&&b.isNotMain,$(window).resize(function(){b.windowWidth=window.innerWidth,b.$apply()}),b.subMenu={isOpen:!1},b.toggled=function(a){b.subMenu.isOpen=a}}}}]),angular.module("brnaiApp").controller("AdminContentCtrl",["$http","collectionsService","$scope","getDomainData","$uibModal","Notification","$location",function(a,b,c,d,e,f,g){function h(){c.inProgress=!0,b.getAdminCollections(c.filter).then(function(a){c.inProgress=!1,a.collections.length?(c.collections.push.apply(c.collections,a.collections),c.total=a.total):c.filter.lastPage=!0})}function i(){c.loading=!0,b.getAdminCollections(c.filter).then(function(a){c.loading=!1,c.inProgress=!1,a.collections.length?(c.collections=a.collections,c.total=a.total):c.filter.lastPage=!0})}function j(){b.getFilters().then(function(a){c.filters=a})}function k(){var a={};return c.filter.name&&(a.name=c.filter.name),c.filter.source&&(a.source=c.filter.source),c.filter.sort&&(a.sort=c.filter.sort),c.filter.active&&(a.active=c.filter.active),a}c.inProgress=!0,c.loading=!0,c.collections=[],c.filters={},c.total=0,c.filter={name:g.search().name||"",source:g.search().source||"",active:g.search().active||"",limit:50,page:0,lastPage:!1,sort:g.search().sort||"size"},i(),j(),c.changeSort=function(a){c.filter={name:g.search().name||"",source:g.search().source||"",active:g.search().active||"",limit:50,page:0,lastPage:!1,sort:a},g.path("/admin/content").search(k()),i()},c.loadMore=function(){c.inProgress||c.filter.lastPage||(c.filter.page++,h())},c.filterCollections=function(){g.path("/admin/content").search(k()),c.filter.page=0,c.filter.lastPage=!1,c.loading=!0,b.getAdminCollections(c.filter).then(function(a){c.loading=!1,c.collections=a.collections,c.total=a.total,a.collections.length||(c.filter.lastPage=!0)})},c.searchCollections=function(a){13===a.keyCode&&(g.path("/admin/content").search(k()),c.filter.page=0,c.filter.lastPage=!1,c.loading=!0,b.getAdminCollections(c.filter).then(function(a){c.loading=!1,c.collections=a.collections,c.total=a.total,a.collections.length||(c.filter.lastPage=!0)}))},c.clearCollection=function(a){var c=+prompt("This action will remove data from collection. How many last record you want to save?","0");b.clearCollection(a.id,c).then(function(a){a.status&&f.success("Successfully cleared")})}}]),angular.module("brnaiApp").controller("AdminProxiesCtrl",["$http","proxiesService","$scope","getDomainData","$uibModal","Notification","$location",function(a,b,c,d,e,f,g){function h(){a.get(d.host+"/users/search?limit=10000").then(function(a){a.data.status&&(c.search_users=a.data.users)},function(a){})}function i(){c.inProgress=!0,b.getProxies(c.filter).then(function(a){c.inProgress=!1,a.proxies.length?(c.proxies.push.apply(c.proxies,a.proxies),c.total=a.total):c.filter.lastPage=!0})}function j(){c.loading=!0,b.getProxies(c.filter).then(function(a){c.loading=!1,c.inProgress=!1,a.proxies.length?(c.proxies=a.proxies,c.total=a.total,c.coefficients=a.coefficients):c.filter.lastPage=!0})}function k(){b.getFilters().then(function(a){c.filters=a})}function l(){var a={};return c.filter.username&&(a.username=c.filter.username),c.filter.portal&&(a.portal=c.filter.portal),c.filter.provider&&(a.provider=c.filter.provider),c.filter.in_use&&(a.in_use=c.filter.in_use),c.filter.active&&(a.active=c.filter.active),a}c.inProgress=!0,c.loading=!0,c.proxies=[],c.filters={},c.total=0,c.coefficients={}
20,c.filter={username:g.search().username||"",provider:g.search().provider||"",portal:g.search().portal||"",in_use:g.search().in_use||"",active:g.search().active||"",limit:50,page:0,lastPage:!1},c.check=!1,c.search_users=[],j(),k(),c.loadMore=function(){c.inProgress||c.filter.lastPage||(c.filter.page++,i())},c.filterProxies=function(){g.path("/admin/proxies").search(l()),c.filter.page=0,c.filter.lastPage=!1,c.loading=!0,b.getProxies(c.filter).then(function(a){c.loading=!1,c.proxies=a.proxies,c.total=a.total,a.proxies.length||(c.filter.lastPage=!0)})},c.searchProxies=function(a){13===a.keyCode&&(g.path("/admin/proxies").search(l()),c.filter.page=0,c.filter.lastPage=!1,c.loading=!0,b.getProxies(c.filter).then(function(a){c.loading=!1,c.proxies=a.proxies,c.total=a.total,a.proxies.length||(c.filter.lastPage=!0)}))},c.openLog=function(a){e.open({templateUrl:"views/proxy-logs.html",controller:["$scope","$uibModalInstance",function(b,c){b.proxy=a}],windowClass:"large-modal"}).result.then(function(a){},function(a){})},c.openRating=function(a,b){e.open({templateUrl:"views/proxy-rating.html",controller:["$scope","$uibModalInstance",function(c,d){c.proxy=a,c.coefficients=b,c.days=parseInt((Date.now()-new Date(a.created_at).getTime())/864e5),c.close=function(){d.close("ok")}}],windowClass:"large-modal no-border-modal"}).result.then(function(a){},function(a){})},c.editProxy=function(a){e.open({templateUrl:"views/proxy-edit.html",controller:["$scope","$uibModalInstance","Notification","portalService",function(c,d,e,f){c.proxy=a,c.portals=[],c.close=function(){d.close("ok")},f.getPortalsList().then(function(a){c.portals=a}),c.saveProxy=function(){b.editProxy(c.proxy).then(function(b){b&&b.status&&(e.success({message:'Proxy "'+c.proxy.host+'" was successfully updated'}),d.close({proxy:c.proxy,oldProxy:a}))},function(a){})}}],windowClass:"large-modal no-border-modal"}).result.then(function(a){var b=c.proxies.indexOf(a.oldProxy);c.proxies[b]=a.proxy},function(a){})},h(),c.deleteProxy=function(a){confirm("Are you sure, you want to delete proxy?")&&b.deleteProxy(a.proxy_id).then(function(b){b.status&&(c.proxies.splice(c.proxies.indexOf(a),1),f.success({message:"Proxy "+a.host+" successfully deleted"}),c.total--)})},c.checkProxy=function(a){c.check=!0,b.checkProxy(a.proxy_id).then(function(b){c.check=!1,b&&b.data&&b.data.status?f.success({message:"Proxy "+a.host+" successfully checked. Response time: "+b.data.time}):b&&b.data&&!b.data.status&&f.error({message:"Proxy "+a.host+" was failed by check. Error: "+b.data.error})})}}]),angular.module("brnaiApp").service("proxiesService",["$http","getDomainData","$q",function(a,b,c){return{getFilters:function(){return a.get(b.host+"/proxies/filters").then(function(a){return a.data.status?a.data.filters:{active:[],in_use:[]}})},getProxies:function(c){var d="?limit="+c.limit+"&offset="+c.page*c.limit;return c.username&&(d+="&username="+c.username),c.portal&&(d+="&portal_id="+c.portal),c.provider&&(d+="&provider="+c.provider),c.in_use&&(d+="&in_use="+c.in_use),c.active&&(d+="&active="+c.active),a.get(b.host+"/proxies/search"+d).then(function(a){return a.data})},getProxy:function(c){return a.get(b.host+"/proxy/"+c).then(function(a){return a.data})},createProxy:function(c){return a.post(b.host+"/proxy",c).then(function(a){return a?a.data:a})},editProxy:function(c){return a.patch(b.host+"/proxy/"+c.proxy_id,c).then(function(a){return a.data})},deleteProxy:function(c){return a.delete(b.host+"/proxy/"+c).then(function(a){return a})},checkProxy:function(c){return a.post(b.host+"/proxy/"+c+"/check").then(function(a){return a})}}}]),angular.module("brnaiApp").directive("simpleVideo",["$sce",function(a){return{restrict:"EA",templateUrl:"views/simple-video.html",replace:!0,transclude:!0,scope:{srcUrl:"@",videoStyle:"@"},link:function(b,c,d){b.srcUrl=b.srcUrl?b.srcUrl:"",b.isPlay=!1,b.trustSrc=function(b){return a.trustAsResourceUrl(b)},b.togglePlay=function(){b.isPlay=!0}}}}]),angular.module("brnaiApp").controller("CreateProxyCtrl",["$scope","proxiesService","portalService","$http","$state","domain","getDomainData","$stateParams","Notification",function(a,b,c,d,e,f,g,h,i){a.portals=[],a.proxy={host:"",user:"",password:"",port:"",country:"",portal_id:"",active:!1,in_use:!1},a.createProxy=function(){b.createProxy(a.proxy).then(function(b){b&&b.status&&(i.success({message:'Proxy "'+a.proxy.host+'" added successfully'}),e.go("manage-proxies"))},function(a){})},c.getPortalsList().then(function(b){a.portals=b})}]),angular.module("brnaiApp").controller("EditProxyCtrl",["$scope","proxiesService","$http","$state","domain","getDomainData","$stateParams","Notification",function(a,b,c,d,e,f,g,h){function i(){c.get(f.host+"/users/search?limit=10000").then(function(b){b.data.status&&(a.search_users=b.data.users)},function(a){})}a.proxy={},a.search_users=[],a.selected_user=null,i(),b.getProxy(g.proxy_id).then(function(b){b&&b.status&&(a.proxy=b)},function(a){}),a.editProxy=function(){a.selected_user&&(a.proxy.user=a.selected_user.id),b.editProxy(a.proxy).then(function(b){b&&b.status&&(h.success({message:'Proxy "'+a.proxy.host+'" was successfully updated'}),d.go("manage-proxies"))},function(a){})}}]),angular.module("brnaiApp").controller("CardealerbotCtrl",["$http","$scope",function(a,b){function c(){a.get("https://api.brn.ai/translations/language/en?portal_id=RYGK019SCZ").then(function(a){a.data.status&&(b.translations=a.data.translations)})}document.querySelector("link[rel*='icon']")||document.createElement("link");document.title="Cardealerbot",b.translations={},c()}]),angular.module("brnaiApp").controller("BraincubatorCtrl",["$scope","$http","$sce","getDomainData","
20storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get(d.host+"/page/braincubator/en?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0})}a.page={},j()}]),angular.module("brnaiApp").controller("GoCtrl",["$scope","$http","$sce","getDomainData","storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get(d.host+"/page/go/en?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0})}a.page={},j()}]),angular.module("brnaiApp").controller("ShipbrainCtrl",["$scope","$http","$sce","getDomainData","storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get(d.host+"/page/shipbrain/en?portal_id=LRLRREX1WL").then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0})}a.page={},j()}]),angular.module("brnaiApp").controller("OfferCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification",function(a,b,c,d,e,f,g){a.loading=!0,a.inProgress=!1;const h="https://api.brn.ai";a.order_count=1,a.terms={accept:0},b.get(h+"/customer/guest/"+d.client_id+"?force=1").then(function(c){c.status&&(a.token=c.data.token,b.get(h+"/api/product/"+d.product_id+"?access_token="+c.data.token).then(function(c){c.status&&(a.product=c.data,b.get(h+"/store/"+c.data.bot_id+"/payments?access_token="+a.token).then(function(c){if(c.status){a.stripe_token=c.data.payments.stripe.publishable_key;var e=document.createElement("script");e.src="https://checkout.stripe.com/checkout.js",document.body.appendChild(e),e.onload=function(){var e=StripeCheckout.configure({key:c.data.payments.stripe.publishable_key,locale:"auto"});a.order=function(){if(console.log(a.terms.accept),!a.terms.accept)return g.error({message:"You must agree to the terms and conditions before order."}),!1;b.post(h+"/api/order?access_token="+a.token,{products:[{product_id:a.product.product_id,count:parseInt(a.order_count),price:a.product.price}]}).then(function(c){c.status&&e.open({name:a.product.name,description:a.product.name,amount:a.product.price*parseInt(a.order_count)*100,token:function(e){b.post(h+"/api/customer/payment/execute/stripe?access_token="+a.token,{token:e,order_id:c.data.order_id,client_id:d.client_id,amount:a.product.price*parseInt(a.order_count)}).then(function(b){console.log(b),b.data.status?a.payment_status=1:a.payment_status=2})}})})}}}}))}))}),a.change=function(){console.log(a.order_accept)}}]),angular.module("brnaiApp").controller("StorePaymentCtrl",["$scope","$http","getDomainData","Auth","$state",function(a,b,c,d,e){e.activeLink=e.current.name,a.check=function(a){return e.activeLink==a},a.goto=function(a,b){switch(a){case"stripe":e.go("store-payments-stripe",{id:b}),e.activeLink="store-payments-stripe"}}}]),angular.module("brnaiApp").controller("StorePaymentsStripeCtrl",["$scope","$http","getDomainData","Auth","$stateParams","storingservice","Notification",function(a,b,c,d,e,f,g){a.stripe={active:!1,secret_key:null,publishable_key:null},f.getStore(e.id).then(function(b){b.status&&(a.stripe=b.payments.stripe)}),a.addStripe=function(){f.createPayments(e.id,{payments:{stripe:a.stripe}}).then(function(a){a.status&&g.success("Successfully added")})}}]),angular.module("brnaiApp").controller("TermsCtrl",function(){this.awesomeThings=["HTML5 Boilerplate","AngularJS","Karma"]}),angular.module("brnaiApp").controller("AssistCtrl",["$scope","$http","$sce","getDomainData","storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get(d.host+"/page/assist/en?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0,setTimeout(function(){const a=document.getElementsByClassName("fb-send-to-messenger")[0];a.setAttribute("messenger_app_id","279474245766642"),a.setAttribute("data-ref","_tell_me_more_about_BRAIN_Leads"),a.setAttribute("page_id","1237860396355276"),a.setAttribute("size","xlarge"),FB.init({appId:"279474245766642",autoLogAppEvents:!0,xfbml:!0,version:"v3.2"}),function(a,b,c){var d,e=a.getElementsByTagName(b)[0];a.getElementById(c)||(d=a.createElement(b),d.id=c,d.src="https://connect.facebook.net/en_US/sdk.js",e.parentNode.insertBefore(d,e))}(document,"script","facebook-jssdk")},2e3)})}a.page={},j()}]),angular.module("brnaiApp").controller("RecruitCtrl",["$scope","$http","$sce","getDomainData","
20storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get(d.host+"/page/recruit/en?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0,setTimeout(function(){const a=document.getElementsByClassName("fb-send-to-messenger")[0];a.setAttribute("messenger_app_id","279474245766642"),a.setAttribute("data-ref","_tell_me_more_about_BRAIN_Leads"),a.setAttribute("page_id","1237860396355276"),a.setAttribute("size","xlarge"),FB.init({appId:"279474245766642",autoLogAppEvents:!0,xfbml:!0,version:"v3.2"}),function(a,b,c){var d,e=a.getElementsByTagName(b)[0];a.getElementById(c)||(d=a.createElement(b),d.id=c,d.src="https://connect.facebook.net/en_US/sdk.js",e.parentNode.insertBefore(d,e))}(document,"script","facebook-jssdk")},2e3)})}a.page={},j()}]),angular.module("brnaiApp").controller("EngageCtrl",["$scope","$http","$sce","getDomainData","storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get(d.host+"/page/engage/en?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0,setTimeout(function(){const a=document.getElementsByClassName("fb-send-to-messenger")[0];a.setAttribute("messenger_app_id","279474245766642"),a.setAttribute("data-ref","_tell_me_more_about_BRAIN_Leads"),a.setAttribute("page_id","1237860396355276"),a.setAttribute("size","xlarge"),FB.init({appId:"279474245766642",autoLogAppEvents:!0,xfbml:!0,version:"v3.2"}),function(a,b,c){var d,e=a.getElementsByTagName(b)[0];a.getElementById(c)||(d=a.createElement(b),d.id=c,d.src="https://connect.facebook.net/en_US/sdk.js",e.parentNode.insertBefore(d,e))}(document,"script","facebook-jssdk")},2e3)})}a.page={},j()}]),angular.module("brnaiApp").controller("LeadsCtrl",["$scope","$http","$sce","getDomainData","storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get(d.host+"/page/leads/en?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0,setTimeout(function(){const a=document.getElementsByClassName("fb-send-to-messenger")[0];a.setAttribute("messenger_app_id","279474245766642"),a.setAttribute("data-ref","_tell_me_more_about_BRAIN_Leads"),a.setAttribute("page_id","1237860396355276"),a.setAttribute("size","xlarge"),FB.init({appId:"279474245766642",autoLogAppEvents:!0,xfbml:!0,version:"v3.2"}),function(a,b,c){var d,e=a.getElementsByTagName(b)[0];a.getElementById(c)||(d=a.createElement(b),d.id=c,d.src="https://connect.facebook.net/en_US/sdk.js",e.parentNode.insertBefore(d,e))}(document,"script","facebook-jssdk")},2e3)})}a.page={},j()}]),angular.module("brnaiApp").controller("RealestateCtrl",["$scope","$http","$sce","getDomainData","storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get(d.host+"/page/estate/en?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0,setTimeout(function(){const a=document.getElementsByClassName("fb-send-to-messenger")[0];a.setAttribute("messenger_app_id","279474245766642"),a.setAttribute("data-ref","_tell_me_more_about_BRAIN_Leads"),a.setAttribute("page_id","1237860396355276"),a.setAttribute("size","xlarge"),FB.init({appId:"279474245766642",autoLogAppEvents:!0,xfbml:!0,version:"v3.2"}),function(a,b,c){var d,e=a.getElementsByTagName(b)[0];a.getElementById(c)||(d=a.createElement(b),d.id=c,d.src="https://connect.facebook.net/en_US/sdk.js",e.parentNode.insertBefore(d,e))}(document,"script","facebook-jssdk")},2e3)})}a.page={},j()}]),angular.module("brnaiApp").controller("SupportthebotCtrl",["$scope","$http","$sce","getDomainData","storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get(d.host+"/page/supportbot/en?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0,setTimeout(function(){const a=document.getElementsByClassName("fb-send-to-messenger")[0];a.setAttribute("messenger_app_id","279474245766642"),a.setAttribute("data-ref","_tell_me_more_about_BRAIN_Leads"),a.setAttribute("page_id","1237860396355276"),a.setAttribute("size","xlarge"),FB.init({appId:"279474245766642",autoLogAppEvents:!0,xfbml:!0,version:"v3.2"}),function(a,b,c){var d,e=a.getElementsByTagName(b)[0];a.getElementById(c)||(d=a.createElement(b),d.id=c,d.src="https://connect.facebook.net/en_US/sdk.js",e.parentNode.insertBefore(d,e))}(document,"script","facebook-jssdk")},2e3)})}a.page={},j()}]),angular.module("brnaiApp").controller("LeadCtrl",["$scope","$stateParams","$http","$sce","getDomainData","
20storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i,j){function k(){c.get(e.host+"/client/"+a.clientId).then(function(b){a.client=b.data,console.log(a.client),a.client.customer&&a.client.customer.customer_id&&a.getCustomer(a.client.customer.customer_id),a.client.lead.closed&&!0===a.client.lead.closed?a.client.role="Lead":a.client.role="User"})}a.botId=b.id,a.clientId=b.client_id,a.client={},a.products=[],a.favorites=[],a.viewed=[],a.categoryName="",a.tableState=[{name:"Orders",selected:!0},{name:"Favorites",selected:!1},{name:"Viewed",selected:!1},{name:"Lead data",selected:!1}],a.tableStateCurrent="Orders",a.inProgress=!1,a.filters={isActive:!1},a.orders=[],a.visibleAttributes=[],a.swapFilter=function(){a.filters.isActive=!a.filters.isActive},a.selectTable=function(b){b.selected||(angular.forEach(a.tableState,function(a){a.selected=!1}),b.selected=!0,a.tableStateCurrent=b.name)},a.getCustomer=function(b){a.inProgress=!0,c.get(e.host+"/customer/"+b).then(function(c){a.client.role="Customer",a.client.customer=c.data,a.getCustomerOrders(b),a.getCustomerFavorites(b),a.getCustomerViewed(b),console.log(a.client)})},a.getCustomerOrders=function(b){c.get(e.host+"/orders/"+a.botId,{params:{customer_id:b}}).then(function(b){console.log(b.data),angular.forEach(b.data.orders,function(b){angular.forEach(b.products,function(c){c.date=b.created_at,c.order_status=b.order_status,a.products.push(c)})}),a.inProgress=!1})},a.getCustomerFavorites=function(b){c.get(e.host+"/customer/favorites/"+a.botId+"/"+b).then(function(b){console.log(b.data),a.favorites=b.data.favorites,a.inProgress=!1})},a.getCustomerViewed=function(b){c.get(e.host+"/products/"+a.botId+"/views",{params:{customer_id:b}}).then(function(b){console.log(b.data),angular.forEach(b.data.views,function(b){console.log(b);var c=b.product;c.date=b.date,a.viewed.push(c)}),a.inProgress=!1})},k()}]),angular.module("brnaiApp").service("crmService",["$http","getDomainData",function(a,b){return{getFilters:function(c){return a.get(b.host+"/clients/filters/"+c)},getCustomerOrders:function(c,d){return a.get(b.host+"/orders/"+c,{params:{customer_id:d}})},getCustomerFavorites:function(c,d){return a.get(b.host+"/customer/favorites/"+c+"/"+d)},getCustomerViewed:function(c,d){return a.get(b.host+"/products/"+c+"/views",{params:{customer_id:d}})},updateClient:function(c,d){return a.put(b.host+"/client/"+c,d)},getBotTags:function(c){return a.get(b.host+"/tags/"+c)},createNewTag:function(c){return a.post(b.host+"/tag/",c)},updateTag:function(c,d){return a.put(b.host+"/tag/"+c,d)},deleteTag:function(c){return a.delete(b.host+"/tag/"+c)},addTagToClients:function(c){return a.post(b.host+"/clients/tag/add/",c)},removeTagFromClients:function(c,d){return a.post(b.host+"/clients/tag/remove/",d)},deleteClients:function(c){return a.post(b.host+"/clients/remove",c)},getClientMessages:function(c,d,e){return a.get(b.host+"/client/messages/"+c+"/"+d+"?offset="+e+"&detailed=1")},sendTextMessage:function(c,d){return a.post(b.host+"/message/send/"+c,d)},changeDialogMode:function(c,d){return a.post(b.host+"/client/mode/"+c,d)},callSuggest:function(c,d){return a.get(b.host+"/widget/suggestions/"+c+"?keyword="+d+"&type=response")},getBotTagGroups:function(c){return a.get(b.host+"/bot/"+c)},updateTagGroups:function(c,d){return a.post(b.host+"/bot/settings/"+c,d)},getScenarios:function(c){return a.get(b.host+"/scenarios/"+c)},runScenario:function(c,d){return a.post(b.host+"/client/"+c+"/run/scenario",{scenario_id:d})},getPersonsList:function(c,d,e){return a({url:b.host+"/persons/"+c,method:"POST",params:d,data:e})},mergePersons:function(c,d){return a.post(b.host+"/person/merge/"+c,d)},deletePersons:function(c){return a.post(b.host+"/persons/remove",c)},setPersonsTags:function(c,d){return a.post(b.host+"/person/tags/"+c,d)},getPersonsFilters:function(c){return a.get(b.host+"/persons/filters/"+c)},getPersonById:function(c){return a.get(b.host+"/person/"+c)},updatePersonById:function(c,d){return a.put(b.host+"/person/"+c,d)},deletePersonById:function(c){return a.delete(b.host+"/person/"+c)},getClientById:function(c){return a.get(b.host+"/client/"+c)},removeTagFromPerson:function(c,d){return a.post(b.host+"/person/tags/"+c,d)},addTagToPerson:function(c,d){return a.post(b.host+"/person/tags/"+c,d)}}}]),angular.module("brnaiApp").controller("SequencesCtrl",["$scope","$http","sequencesservice","$stateParams","getDomainData","$cookies","Notification","$state",function(a,b,c,d,e,f,g,h){a.loading=!0,a.inProgress=!0,a.bot_id=h.params.id,a.options={limit:30,offset:0,page:0,lastPage:!1},a.editedSequences={},a.newTitle={title:""},a.sequences=c.getSequences(),a.selectedSequence={},h.activeId=h.params.sequence,a.goto=function(a,b){h.go("sequences.sequence-detail",{id:a,sequence:b}),h.activeId=b},a.editTitle=function(b){a.editedSequences[b.name]=!0},a.editSubmit=function(b){if(""==a.newTitle.title)return void a.editDiscard(b);b.title=a.newTitle.title,a.newTitle.title="",a.editedSequences[b.name]=!1},a.editDiscard=function(b){a.editedSequences[b.name]=!1},a.check=function(a){return h.activeId==a},a.addSequence=function(){var b={name:"new_sequence_"+a.sequences.length,title:"New Sequence "+a.sequences.length};a.sequences.push(b),h.go("sequences.sequence-detail",{id:a.bot_id,sequence:b.name}),h.activeId=b.name}}]),angular.module("brnaiApp").service("sequencesservice",["$http","getDomainData",function(a,b){var c=[{id:1,name:"seq1",t
20itle:"Sequence title 1"},{id:2,name:"seq2",title:"Sequence title 2"}];return{getSequences:function(){return c},getSequence:function(a){return c.find(function(b){return b.name==a})}}}]),angular.module("brnaiApp").controller("SequenceCreateCtrl",function(){this.awesomeThings=["HTML5 Boilerplate","AngularJS","Karma"]}), 21angular.module("brnaiApp").controller("SequenceDetailCtrl",["$scope","$http","sequencesservice","$stateParams","getDomainData","$cookies","Notification","$state",function(a,b,c,d,e,f,g,h){function i(b){a.isTextWithDetail=b}function j(b){return a.newStep.action.action==b}a.bot_id=h.params.id,a.sequence=c.getSequence(h.params.sequence),a.isTextWithDetail=!1,a.actions=[{name:"select_card",title:"Select card"},{name:"pressed_button",title:"Pressed button"},{name:"follow_link",title:"Follow link"},{name:"ask_help",title:"Ask help"}],a.botActions=[{name:"start_scenario",title:"Start scenario"},{name:"send_broadcast",title:"Send broadcast"}],a.products=[{name:"iphone_x",title:"iPhone X"},{name:"samsung_s_10",title:"Samsung S 10"},{name:"iphone_xs",title:"iPhone XS"}],a.buttons=[{name:"detail",title:"Detail"},{name:"remove",title:"Remove"},{name:"post",title:"Post"}],a.withTitleList=[],a.newStep={action:{invert:!1,action:"",withTitle:""},botAction:{}},a.setWithTitle=function(){switch(!0){case j("select_card"):i(!1),a.withTitleList=a.products;break;case j("pressed_button"):i(!1),a.withTitleList=a.buttons;break;case j("follow_link"):case j("ask_help"):i(!0)}}}]),angular.module("brnaiApp").controller("SmsCtrl",["$scope","$http","$stateParams","$cookies","getDomainData","botService","Notification","$state",function(a,b,c,d,e,f,g,h){a.data={phone:"",message:""},a.send=function(){b.post(e.host+"/bot/"+c.id+"/sms",a.data).then(function(b){b?(g.success({message:"Sms successfully send"}),a.data.phone="",a.data.message=""):g.error({delay:6e4,message:"Can't create mind"})})}}]),angular.module("brnaiApp").controller("StoreTransactionsCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification","$uibModal",function(a,b,c,d,e,f,g,h){a.loading=!0,a.inProgress=!1,a.transactions=[],a.options={limit:30,offset:0,page:0,lastPage:!1},a.getUserAvatar=function(a){return a||"https://api.brn.ai/img/default-client-avatar.png"},c.getTransactions(d.id,a.options).then(function(b){a.transactions=b.transactions,a.inProgress=!1},function(b){console.log(b),a.transactions=[]}),a.loadMore=function(){a.inProgress||a.options.lastPage||(a.options.page++,a.inProgress=!0,c.getTransactions(d.id,a.options).then(function(b){b.transactions&&b.transactions.length?(a.transactions=a.transactions.concat(b.transactions),a.loading=!1,a.inProgress=!1,console.log(a.transactions)):(a.inProgress=!1,a.loading=!1,a.options.lastPage=!0)},function(a){console.log(a)}))}}]),angular.module("brnaiApp").controller("StoreOffersPublicCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification","$uibModal","$state",function(a,b,c,d,e,f,g,h,i){a.loading=!0,a.inProgress=!1,a.offers=[],a.options={limit:30,offset:0,page:0,lastPage:!1},a.isEmptyAttributes=function(a){return Object.keys(a).length},a.toDirect=function(){i.go("store-offers-direct",{id:i.params.id})},c.getPublicOffers(d.id,a.options).then(function(b){a.offers=b.offers,console.log(a.offers)},function(a){console.log(a)}),a.getUserAvatar=function(a){return a||"https://api.brn.ai/img/default-client-avatar.png"},c.getPublicOffers(d.id,a.options).then(function(b){a.offers=b.offers,a.inProgress=!1},function(b){console.log(b),a.offers=[]}),a.deleteOffer=function(b,d){confirm("Are you sure, you want to delete offer?")&&c.deleteOfferById(b.id).then(function(b){b.status&&(a.offers.splice(d,1),g.success({message:"Offer successfully deleted"}))},function(a){console.log(a)})},a.loadMore=function(){a.inProgress||a.options.lastPage||(a.options.page++,a.inProgress=!0,c.getPublicOffers(d.id,a.options).then(function(b){b.offers&&b.offers.length?(a.offers=a.offers.concat(b.offers),a.loading=!1,a.inProgress=!1):(a.inProgress=!1,a.loading=!1,a.options.lastPage=!0)},function(a){console.log(a)}))}}]),angular.module("brnaiApp").controller("StoreOffersDirectCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification","$uibModal","$state",function(a,b,c,d,e,f,g,h,i){a.loading=!0,a.inProgress=!1,a.offers=[],a.options={limit:30,offset:0,page:0,lastPage:!1},a.toPublic=function(){i.go("store-offers-public",{id:i.params.id})},c.getPublicOffers(d.id,a.options).then(function(b){a.offers=b.offers},function(a){console.log(a)}),a.getUserAvatar=function(a){return a||"https://api.brn.ai/img/default-client-avatar.png"},c.getDirectOffers(d.id,a.options).then(function(b){a.offers=b.offers,console.log(a.offers),a.inProgress=!1},function(b){console.log(b),a.offers=[]}),a.deleteOffer=function(b,d){confirm("Are you sure, you want to delete offer?")&&c.deleteOfferById(b.id).then(function(b){b.status&&(a.offers.splice(d,1),g.success({message:"Offer successfully deleted"}))},function(a){console.log(a)})}
21,a.loadMore=function(){a.inProgress||a.options.lastPage||(a.options.page++,a.inProgress=!0,c.getPublicOffers(d.id,a.options).then(function(b){b.offers&&b.offers.length?(a.offers=a.offers.concat(b.offers),a.loading=!1,a.inProgress=!1):(a.inProgress=!1,a.loading=!1,a.options.lastPage=!0)},function(a){console.log(a)}))}}]),angular.module("brnaiApp").controller("RealtystreetCtrl",["$scope","$http","$sce","getDomainData","storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get(d.host+"/page/realtystreet/en?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0,setTimeout(function(){const a=document.getElementsByClassName("fb-send-to-messenger")[0];a.setAttribute("messenger_app_id","279474245766642"),a.setAttribute("data-ref","_tell_me_more_about_brain"),a.setAttribute("page_id","173763546438082"),a.setAttribute("size","xlarge"),FB.init({appId:"279474245766642",autoLogAppEvents:!0,xfbml:!0,version:"v3.2"}),function(a,b,c){var d,e=a.getElementsByTagName(b)[0];a.getElementById(c)||(d=a.createElement(b),d.id=c,d.src="https://connect.facebook.net/en_US/sdk.js",e.parentNode.insertBefore(d,e))}(document,"script","facebook-jssdk")},2e3)})}a.page={},j()}]),angular.module("brnaiApp").controller("MavenslistCtrl",["$scope","$http","$sce","getDomainData","storage","$timeout","portalService","$state","$cookies",function(a,b,c,d,e,f,g,h,i){function j(){b.get(d.host+"/page/mavenslist/en?portal_id="+g.portalData.portal_id).then(function(b){a.page=c.trustAsHtml(b.data.content),a.loaded=!0,setTimeout(function(){const a=document.getElementsByClassName("fb-send-to-messenger")[0];a.setAttribute("messenger_app_id","279474245766642"),a.setAttribute("data-ref","_tell_me_more_about_brain"),a.setAttribute("page_id","173763546438082"),a.setAttribute("size","xlarge"),FB.init({appId:"279474245766642",autoLogAppEvents:!0,xfbml:!0,version:"v3.2"}),function(a,b,c){var d,e=a.getElementsByTagName(b)[0];a.getElementById(c)||(d=a.createElement(b),d.id=c,d.src="https://connect.facebook.net/en_US/sdk.js",e.parentNode.insertBefore(d,e))}(document,"script","facebook-jssdk")},2e3)})}a.page={},j()}]),angular.module("brnaiApp").controller("VisualEditorCtrl",["$scope","$http","getDomainData","$uibModal","$state","$stateParams","$cookies","getComponent","Auth","$location","Notification",function(a,b,c,d,e,f,g,h,i,j,k){function l(){b.get(c.host+"/scenarios/"+f.id).then(function(b){if(b.data.status){if(f.scenario){a.single=!0;var c=b.data.scenarios.findIndex(function(a){return a.scenario_id===f.scenario});a.scenarios=c>-1?b.data.scenarios.slice(c,c+1):[]}else a.single=!1,a.scenarios=b.data.scenarios.reverse();a.scenarios=a.scenarios.filter(function(a){return"visual"==a.template}),a.scenarios.forEach(function(b){a.scenariosErrors[b.scenario_id]=[],q(b,!0)}),s(),a.allScenarios=b.data.scenarios,a.loadTags(),a.loadLabels(),a.loadOperators(),a.loadCategories(),a.loadCollections(),a.loadEntities(),a.loadMails(),a.loadConnections(),a.scenarios.length&&(a.panelInfo.keywords=a.scenarios[0].keywords.join(", ")),angular.getTestability(B).whenStable(function(){var a=D.offsetHeight,b=a/2,c=B.clientHeight,d=c/2,e=b-d;C.css({opacity:1,top:e+"px"})})}else k.error({delay:6e4,message:b.data.error}),e.go("bots")},function(a){console.error(a)})}function m(b){return a.scenarios.find(function(a){return a.scenario_id===b})}function n(b){return a.scenarios.find(function(a){return a.name===b})}function o(a){for(var b="",c="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",d=0;d<a;d++)b+=c.charAt(Math.floor(Math.random()*c.length));return b}function p(b,c){switch(c.component.toLowerCase()){case"condition":c.action={true:null,false:null,next:null};break;case"existence":c.action={exists:null,nonexists:null,next:null};break;case"rest":c.action={success:null,fail:null,next:null};break;case"switch":c.action={default:null},c.properties.switch[0]&&(c.action[c.properties.switch[0].name]=null),c.action.next=null;break;case"decision":c.action={yes:null,no:null,next:null};break;case"schedule":c.action={delayed:null,next:null};break;case"tag":c.meta&&"check_tags"===c.meta.type?c.action={fallback:null,next:null}:c.action={next:null};break;case"label":c.meta&&"check"===c.meta.type?c.action={fallback:null,next:null}:c.action={next:null};break;default:a.getComponentGroup(b,c);c.action={next:null}}}function q(b,c){var d,e,f,g,i,j,k,l,m,n,p,q,s,t,v,w,x,z,C,D,E,F=[],G=[];if(c){for(G=b.steps.slice(),n=0;n<G.length;n++)switch(p=G[n],!p.action.fallback||"tag"===p.component&&p.meta&&"check_tags"===p.meta.type||"label"===p.component&&p.meta&&"check"===p.meta.type||(p.action.next=p.action.fallback,delete p.action.fallback),p.component){case"switch":if(v=angular.copy(p.action),p.properties.switch.forEac
21h(function(a){a.conditions.forEach(function(a){a.value&&a.value.hasOwnProperty("param")&&a.value.hasOwnProperty("scope")&&(a.value=a.value.scope+"."+a.value.param)})}),1===p.properties.switch.length&&(s=p.properties.switch[0],s.conditions.length>1&&!p.properties.hasOwnProperty("all_match")&&(p.properties.all_match=!0,s.operator="and")),p.properties.switch.length>1&&p.properties.switch.some(function(a){return a.conditions.length>1}))for(t=p.properties.switch.splice(1),s=p.properties.switch[0],w=s.name,z=h.makeId(5),D=!0,p.action={default:null,next:z},p.action[w]=v[w],p.properties.hasOwnProperty("all_match")||(p.properties.all_match=s.conditions.length>1);t.length;)x=t.pop(),D?D=!1:z=h.makeId(5),C={action:{default:t.length?null:v.default,next:t.length?z:v.next},component:"switch",id:z,name:z,position:angular.copy(p.position),properties:{switch:[x]}},w=x.name,C.action[w]=v[w],b.steps.splice(n+1,0,C);break;case"text":if(p.meta||(p.meta={}),p.properties.quick_replies&&p.properties.quick_replies.length){var H,I=p.properties.quick_replies.slice();for(e in I)H=I[e],"text"!=H.type||H.url||(p.properties.buttons||(p.properties.buttons=[]),p.properties.buttons.push({type:"suggest",title:H.title,content:{value:H.content,params:[]}}),p.properties.quick_replies.splice(p.properties.quick_replies.indexOf(H),1))}"content"!=p.meta.type&&"buttons"!=p.meta.type&&(p.properties.buttons&&p.properties.buttons.length?p.meta.type="buttons":p.meta.type="content");break;case"action":if(!p.meta||!p.meta.type)switch(p.meta||(p.meta={}),p.properties.action){case"ban":p.meta.type="ban";break;case"unban":p.meta.type="unban",p.properties.data||(p.properties.data={group_name:""});break;case"invite_link":p.meta.type="invite_link",p.properties.data||(p.properties.data={group_name:"",save:""});break;default:p.meta.type="like"}break;case"data":if(!p.meta||!p.meta.type){var J,K,L,M={save:p.properties.save?p.properties.save.slice():[],push:p.properties.push?p.properties.push.slice():[],pull:p.properties.pull?p.properties.pull.slice():[],set:p.properties.set?p.properties.set.slice():[],drop:p.properties.drop?p.properties.drop.slice():[]},N=p.properties.stringify,O=p.properties.join,P=p.properties.split,Q=b.steps.indexOf(p)+1;j=null,v=angular.copy(p.action),p.meta||(p.meta={}),p.properties.save=[],p.properties.push=[],p.properties.pull=[],p.properties.set=[],p.properties.drop=[],delete p.properties.stringify,delete p.properties.join,delete p.properties.split;for(e in M)for(J=M[e];J.length;){switch(K=J.shift(),j?(L=h.getC("data",e),z=o(5),k={name:z,component:"data",id:z,properties:L,position:angular.copy(p.position),meta:{type:e},action:{next:null}},b.steps.splice(Q,0,k),Q++,j.action.next=k.id):(k=p,k.meta.type=e),e){case"save":K.scope&&(K.key=K.scope?K.scope+"."+K.key:K.key,delete K.scope);break;case"push":case"pull":"object"==typeof K.array&&(K.array=K.array.scope?K.array.scope+"."+K.array.key:K.array.key),"object"==typeof K.value&&(K.value=K.value.scope?K.value.scope+"."+K.value.key:K.value.key);break;case"set":"object"==typeof K.from&&(K.from=K.from.scope?K.from.scope+"."+K.from.key:K.from.key),"object"==typeof K.to&&(K.to=K.to.scope?K.to.scope+"."+K.to.key:K.to.key);break;case"drop":"object"==typeof K&&(K=K.scope?K.scope+"."+K.key:K.key)}k.properties[e]=[K],j=k}N&&(N.value.key||N.data.key||N.template)&&(j?(L=h.getC("data","stringify"),z=o(5),k={name:z,component:"data",id:z,properties:L,position:angular.copy(p.position),meta:{type:"stringify"},action:{next:null}},b.steps.splice(Q,0,k),Q++,j.action.next=k.id):(k=p,k.meta.type="stringify"),"object"==typeof N.value&&(N.value=N.value.scope?N.value.scope+"."+N.value.key:N.value.key),"object"==typeof N.data&&(N.data=N.data.scope?N.data.scope+"."+N.data.key:N.data.key),k.properties.stringify=N,j=k),O&&(O.value.key||O.array.key||O.separator)&&(j?(L=h.getC("data","join"),z=o(5),k={name:z,component:"data",id:z,properties:L,position:angular.copy(p.position),meta:{type:"join"},action:{next:null}},b.steps.splice(Q,0,k),Q++,j.action.next=k.id):(k=p,k.meta.type="join"),"object"==typeof O.value&&(O.value=O.value.scope?O.value.scope+"."+O.value.key:O.value.key),"object"==typeof O.array&&(O.array=O.array.scope?O.array.scope+"."+O.array.key:O.array.key),k.properties.join=O,j=k),P&&(P.value.key||P.array.key||P.separator)&&(j?(L=h.getC("data","split"),z=o(5),k={name:z,component:"data",id:z,properties:L,position:angular.copy(p.position),meta:{type:"split"},action:{next:null}}
21,b.steps.splice(Q,0,k),Q++,j.action.next=k.id):(k=p,k.meta.type="split"),"object"==typeof P.value&&(P.value=P.value.scope?P.value.scope+"."+P.value.key:P.value.key),"object"==typeof P.array&&(P.array=P.array.scope?P.array.scope+"."+P.array.key:P.array.key),k.properties.split=P,j=k),k&&p!==k&&(p.action.next=null,k.action=v)}break;case"pattern":angular.forEach(p.properties.save,function(a,b,c){a&&a.hasOwnProperty("scope")&&a.hasOwnProperty("param")&&(c[b]=a.scope+"."+a.param)});break;case"output":p.properties.data&&p.properties.data.hasOwnProperty("scope")&&p.properties.data.hasOwnProperty("key")&&(p.properties.data=p.properties.data.scope+"."+p.properties.data.key);break;case"collection":p.properties.input?p.properties.input.hasOwnProperty("scope")&&p.properties.input.hasOwnProperty("key")&&(p.properties.input=p.properties.input.scope+"."+p.properties.input.key):p.properties.data&&p.properties.data.hasOwnProperty("scope")&&p.properties.data.hasOwnProperty("key")&&(p.properties.data=p.properties.data.scope+"."+p.properties.data.key);break;case"card":p.properties.data&&p.properties.data.hasOwnProperty("scope")&&p.properties.data.hasOwnProperty("key")&&(p.properties.data=p.properties.data.scope+"."+p.properties.data.key);break;case"condition":p.properties.value&&p.properties.value.hasOwnProperty("scope")&&p.properties.value.hasOwnProperty("param")&&(p.properties.value=p.properties.value.scope+"."+p.properties.value.param);break;case"expression":p.properties.save&&p.properties.save.hasOwnProperty("scope")&&p.properties.save.hasOwnProperty("key")&&(p.properties.save=p.properties.save.scope+"."+p.properties.save.key);break;case"entity":angular.forEach(p.properties.items,function(a){a.save&&a.save.hasOwnProperty("scope")&&a.save.hasOwnProperty("key")&&(a.save=a.save.scope+"."+a.save.key)});break;case"label":"add"==p.properties.command&&(p.properties.command="change",p.meta={type:"edit"},p.properties.add=[p.properties.label],delete p.properties.label),"edit"==p.properties.command&&(p.properties.command="change");break;case"date":p.properties.save&&p.properties.save.hasOwnProperty("scope")&&p.properties.save.hasOwnProperty("key")&&(p.properties.save=p.properties.save.scope+"."+p.properties.save.key),E=0;for(q in p.properties.date)if(p.properties.date.hasOwnProperty(q)&&p.properties.date[q]){if(E>2)break;E++}if(E>2)p.properties.hidden=!0;else{E=0;for(q in p.properties.date)if(p.properties.date.hasOwnProperty(q)&&p.properties.date[q]){switch(q){case"year":E+=365*Number(p.properties.date[q])*24*60;break;case"month":E+=30*Number(p.properties.date[q])*24*60;break;case"week":E+=7*Number(p.properties.date[q])*24*60;break;case"day":E+=24*Number(p.properties.date[q])*60;break;case"hour":E+=60*Number(p.properties.date[q]);break;case"minute":E+=Number(p.properties.date[q]);break;default:console.error("Undefined data field: "+q)}delete p.properties.date[q]}p.properties.date.minute=E}break;case"product":p.properties.filter&&p.properties.filter.hasOwnProperty("scope")&&p.properties.filter.hasOwnProperty("key")&&(p.properties.filter=p.properties.filter.scope+"."+p.properties.filter.key),p.properties.input&&p.properties.input.hasOwnProperty("scope")&&p.properties.input.hasOwnProperty("key")&&(p.properties.input=p.properties.input.scope+"."+p.properties.input.ke
21y);break;case"existence":for(e in p.properties.params)p.properties.params[e]&&p.properties.params[e].hasOwnProperty("scope")&&p.properties.params[e].hasOwnProperty("key")&&(p.properties.params[e]=p.properties.params[e].scope+"."+p.properties.params[e].key);p.properties.params.length>1&&(p.properties.params=[p.properties.params.join(", ")]);break;case"input":p.meta&&"collect"==p.meta.type&&delete p.meta.type,"object"==typeof p.properties.save&&(p.properties.save=p.properties.save.scope&&p.properties.save.param?p.properties.save.scope+"."+p.properties.save.param:"");break;case"person":p.properties.profile&&p.properties.profile.hasOwnProperty("scope")&&p.properties.profile.hasOwnProperty("param")&&(p.properties.profile=p.properties.profile.scope+"."+p.properties.profile.param),p.properties.attributes&&p.properties.attributes.hasOwnProperty("scope")&&p.properties.attributes.hasOwnProperty("param")&&(p.properties.attributes=p.properties.attributes.scope+"."+p.properties.attributes.param),p.properties.result&&p.properties.result.hasOwnProperty("scope")&&p.properties.result.hasOwnProperty("param")&&(p.properties.result=p.properties.result.scope+"."+p.properties.result.param),p.properties.person&&p.properties.person.hasOwnProperty("scope")&&p.properties.person.hasOwnProperty("param")&&(p.properties.person=p.properties.person.scope+"."+p.properties.person.param);break;case"rest":if(!p.meta||"promo"!=p.meta.type){"Bearer"===p.properties.authorization.type&&p.properties.authorization.data&&p.properties.authorization.data.hasOwnProperty("scope")&&p.properties.authorization.data.hasOwnProperty("key")&&(p.properties.authorization.data=p.properties.authorization.data.scope+"."+p.properties.authorization.data.key);for(var R in p.properties.data){var S=p.properties.data[R];"variable"===S.type&&S.hasOwnProperty("scope")&&S.hasOwnProperty("param")&&(S.param=S.scope+"."+S.param,delete S.scope)}if("save"!=p.save_type)p.properties.input&&p.properties.input.hasOwnProperty("scope")&&p.properties.input.hasOwnProperty("key")&&(p.properties.input=p.properties.input.scope+"."+p.properties.input.ke
21y);else for(var R in p.properties.save){var S=p.properties.save[R];S.hasOwnProperty("scope")&&S.hasOwnProperty("param")&&(S.param=S.scope+"."+S.param,delete S.scope)}}break;case"platform":p.component="switch",p.meta||(p.meta={}),p.meta.type="platform",p.properties.switch=[],delete p.properties.platforms,p.action={default:null,next:p.action.next}}b.validation||(b.validation={status:"ok",forced:!0}),angular.getTestability(B).whenStable(function(){a.scenariosErrors[b.scenario_id].length||"errored"!=b.validation.status||(b.validation.status="ok",a.autosave(b.scenario_id),u())})}if(a.scenariosSteps[b.scenario_id]=[],A[b.scenario_id]=[],a.selectedGroups[b.scenario_id]=[],b.steps.forEach(function(a){if(r(b,a),a.position&&void 0!==a.position.column&&void 0!==a.position.group){var c=a.position.column,e=a.position.group;F[c]||(F[c]=[]),F[c][e]||(F[c][e]=[]),F[c][e].push(a)}else d=!0;"platform"==a.component&&(A[b.scenario_id][a.id]=a)}),d)for(b.steps.forEach(function(a){a.position&&(delete a.position.column,delete a.position.group)}),G=b.steps.slice(),F=[];G.length;){f=G.shift(),f.position&&void 0!==f.position.column&&void 0!==f.position.group?(g=f.position.column,i=f.position.group):(g=F.length,i=0,f.position||(f.position={}),f.position.column=g,f.position.group=i,F[g]||(F[g]=[]),F[g][i]||(F[g][i]=[]),F[g][i].push(f));for(e in f.action)f.action[e]&&(k=G.find(function(a){return a.id===f.action[e]}))&&(k.position&&void 0!==k.position.column&&void 0!==k.position.group||(a.getComponentGroup(b,f),a.getComponentGroupName(b,f),a.getComponentGroupName(b,k),"next"==e?(l=g,m=i):(l=g+1,m=F[l]?F[l].length:0),k.position||(k.position={}),k.position.column=l,k.position.group=m,F[l]||(F[l]=[]),F[l][m]||(F[l][m]=[]),F[l][m].push(k)))}if(c){F=F.filter(function(){return!0});for(e in F)F[e]=F[e].filter(function(){return!0});for(e in F){g=F[e];for(n in g)i=g[n],i.forEach(function(a){a.position.column!==1*e&&(a.position.column=1*e),a.position.group!==1*n&&(a.position.group=1*n)})}}a.scenariosMap[b.scenario_id]=F,a.updateScenarioConnections(b),c&&y(b),a.scenariosErrors[b.scenario_id]=a.scenariosErrors[b.scenario_id].filter(function(c){return a.scenariosSteps[b.scenario_id][c]})}function r(b,c){var d=a.getStepComponentInfo(c);a.scenariosSteps[b.scenario_id][c.id]={step:c,connectionsIn:[],connectionsOut:[],jumpersIn:[],jumpersOut:[],component:d.component,componentGroup:d.componentGroup,componentGroupName:d.componentGroupName,platforms:[],availableComponents:a.availableComponents}}function s(){null!==P&&P<O.length-1&&O.splice(P+1,O.length-1-P),O.push({scenarioData:JSON.stringify(a.scenarios)}),P=null}function t(a){null!==P&&P<O.length-1&&O.splice(P+1,O.length-1-P),O.push({scenarioId:a.scenario_id,scenarioData:JSON.stringify(a)}),P=null}function u(){O.length&&(O[O.length-1]={scenarioData:JSON.stringify(a.scenarios)})}function v(){var b=O[P];if(b.scenarioId){var c=a.scenarios.findIndex(function(a){return a.scenario_id===b.scenarioId});c>-1&&(a.scenarios[c]=JSON.parse(b.scenarioData),0===c&&(a.panelInfo.keywords=a.scenarios[c].keywords.join(", ")),q(a.scenarios[c]),a.autosave(b.scenarioId),y(a.scenarios[c]))}else a.scenarios=JSON.parse(b.scenarioData),a.scenarios.forEach(function(b,c){0===c&&(a.panelInfo.keywords=b.keywords.join(", ")),q(b),a.autosave(b.scenario_id),y(b)})}function w(){R={content:JSON.parse(JSON.stringify(a.availableComponents.content))},R.content.components=R.content.components.filter(function(a){return"text"==a.component&&"content"==a.metaType}),S={content:JSON.parse(JSON.stringify(a.availableComponents.content))},T=JSON.parse(JSON.stringify(a.availableComponents)),T.condition.components=T.condition.components.filter(function(a){return"platform"!=a.component}),U=JSON.parse(JSON.stringify(a.availableComponents)),U.condition.components=U.condition.components.filter(function(a){return"platform"!=a.component}),U.content.components=U.content.components.filter(function(a){return"card"!=a.component}),U.store.components=U.store.components.filter(function(a){return"card"!=a.component||"category"!=a.metaType}),V=JSON.parse(JSON.stringify(a.availableComponents)),V.condition.components=V.condition.components.filter(function(a){return"platform"!=a.component}),V.content.components=V.content.components.filter(function(a){return"card"!=a.c
21omponent&&("text"!=a.component||"buttons"!=a.metaType)}),V.store.components=V.store.components.filter(function(a){return"card"!=a.component||"category"!=a.metaType})}function x(b){if(b.platforms.length){if(-1!==b.platforms.indexOf("twilio"))return R;if(-1!==b.platforms.indexOf("email"))return S;var c=T;for(var d in b.platforms){var e=b.platforms[d];if("messenger"!=e&&"telegram"!=e){if("viber"!=e&&"wechat"!=e){c=V;break}c=U}}return c}return a.availableComponents}function y(b){function c(a,b){var d=a.step;-1===e[d.id].platforms.indexOf(b)&&e[d.id].platforms.push(b);for(var g in d.action){var h=d.action[g];h&&e[h]&&c(e[h],b)}f[d.id]=e[d.id]}var d=b.scenario_id,e=a.scenariosSteps[d],f=[];for(var g in e)e[g].platforms=[],e[g].availableComponents=a.availableComponents;for(var h in A[d]){var i=A[d][h];for(var j in i.action)if("next"!=j){var k=i.action[j];k&&e[k]&&c(e[k],j)}}for(var g in f)f[g].availableComponents=x(f[g])}e.isHelpBtn=!1,a.availableComponents={trigger:{name:"Trigger",icon:"compare_arrows",className:"trigger",color:"#4a90e2",components:[{name:"Menu",icon:"format_list_numbered",component:"input",metaType:"menu",beginner:!0},{name:"Input",icon:"edit",component:"input"},{name:"Match",icon:"group_work",component:"condition"},{name:"Switch",icon:"invert_colors",component:"switch"},{name:"Check tags",icon:"loyalty",component:"tag",metaType:"check_tags"},{name:"Check labels",icon:"label",component:"label",metaType:"check"},{name:"Collection",icon:"class",component:"collection"},{name:"Date",icon:"today",component:"date"},{name:"Notification",icon:"notifications",component:"notification"}]},action:{name:"Action",icon:"done",className:"action",color:"#94cc25",components:[{name:"Instagram",components:[{name:"Like",component:"action",metaType:"like"}]},{name:"Telegram",components:[{name:"Ban",component:"action",metaType:"ban"},{name:"Unban",component:"action",metaType:"unban"},{name:"Invite link",component:"action",metaType:"invite_link"}]},{name:"Data",components:[{name:"Set variable value",component:"data",metaType:"save"},{name:"Push element to list",component:"data",metaType:"push"},{name:"Pull element from list",component:"data",metaType:"pull"},{name:"Set value to another variable",component:"data",metaType:"set"},{name:"Drop variable from storage",component:"data",metaType:"drop"},{name:"Stringify json using templater",component:"data",metaType:"stringify"},{name:"Join list elements to string",component:"data",metaType:"join"},{name:"Split string to list",component:"data",metaType:"split"}]},{name:"Service",components:[{name:"Ethereum",component:"service",metaType:"ethereum"}]},{name:"Edit tags",icon:"loyalty",component:"tag"},{name:"Edit labels",icon:"label",component:"label",metaType:"edit"},{name:"Switch to operator",icon:"device_hub",component:"mode"},{name:"Math",icon:"new_releases",component:"expression"},{name:"Pattern",icon:"layers",component:"pattern"},{name:"Person",icon:"face",component:"person"},{name:"Output",icon:"reply",component:"output"},{name:"Send email",icon:"email",component:"mail"},{name:"Subscription",icon:"next_week",component:"subscription"},{name:"Async event",icon:"calendar_today",component:"schedule"}]},condition:{name:"Condition",icon:"help_outline",className:"condition",color:"#f5a623",components:[{name:"Existence",icon:"lightbulb_outline",component:"existence"},{name:"Platform",icon:"share",component:"switch",metaType:"platform"}]},content:{name:"Content",icon:"photo_filter",className:"content",color:"#969696",components:[{name:"Delay",icon:"watch_later",component:"delay",beginner:!0},{name:"Text",icon:"format_align_left",component:"text",metaType:"content",beginner:!0},{name:"Media",icon:"video_library",component:"attachment",beginner:!0},{name:"File",icon:"insert_drive_file",component:"attachment",type:"file"},{name:"Buttons",icon:"format_bold",component:"text",metaType:"buttons",beginner:!0},{name:"Gallery",icon:"view_carousel",component:"card",beginner:!0}]},store:{name:"Store",icon:"attach_money",className:"store",color:"#d0021b",components:[{name:"Product",icon:"shopping_cart",component:"offer",beginner:!0}
21,{name:"Category",icon:"add_shopping_cart",component:"card",metaType:"category",beginner:!0},{name:"Auth",icon:"sentiment_satisfied",component:"customer"},{name:"Search",icon:"shopping_basket",component:"product"}]},other:{name:"Other",icon:"error_outline",className:"other",color:"#bd10e0",components:[{name:"Switch scenario",icon:"archive",component:"scenario"},{component:"nested",template:"scenario",hide:!0},{name:"Yes or no?",icon:"group_work",component:"decision",beginner:!0},{name:"Match intent",icon:"assignment_turned_in",component:"intent"},{name:"Match entity",icon:"assignment_ind",component:"entity"}]},pro:{name:"PRO",icon:"build",className:"pro",color:"#969696",components:[{name:"Rest",icon:"extension",component:"rest"}]}},a.scenarios=[],a.scenariosMap=[],a.scenariosSteps=[],a.allScenarios=[],a.activeSteps=[],a.selectedGroups=[],a.operators=[],a.allCategories=[],a.allProducts=[],a.allEntities=[],a.scale=g.get("scale")&&1*g.get("scale")>=.25?1*g.get("scale"):1,a.widget=!1,a.scenariosErrors=[],a.collections=[],a.collectionFieldsList=[],a.stepToCopy=g.get("step")?JSON.parse(g.get("step")):null,a.allMails=[],a.allPlatforms=[],a.expertMode=!!g.get("expertMode")&&g.get("expertMode"),a.botId=f.id,a.panelInfo={keywords:"",scale:Math.round(100*a.scale),showAddComponentMenu:!1,showScaleMenu:!1};var z=[],A=[],B=document.getElementById("visual_editor"),C=$(B),D=document.getElementById("visual_editor_wrapper"),E=$(D);a.updateScenarioConnections=function(b){var c,d,e,f,g,h=a.scenariosMap[b.scenario_id],i=a.scenariosSteps[b.scenario_id];for(c in i)i[c].connectionsIn=[],i[c].connectionsOut=[],i[c].jumpersIn=[],i[c].jumpersOut=[];for(c in i){if(d=i[c].step,e=a.getComponentGroup(b,d),f=a.getStepComponent(b,d),e?e.color:"#969696",e&&"PRO"==e.name&&"collapsed"==f.mode){for(var j in d.action)if(d.action[j]&&(g=i[d.action[j]]?i[d.action[j]].step:null))if(g.position.column===d.position.column+1)i[d.id].connectionsOut[j]=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d);else if(g.position.column!=d.position.column||g.position.group!=d.position.group){var k=i[d.id].jumpersOut.indexOf(g);-1==k&&i[d.id].jumpersOut.push(g),i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d)}}else"condition"===d.component&&(d.action.true&&(g=i[d.action.true]?i[d.action.true].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut.true=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut.true=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d))),d.action.false&&(g=i[d.action.false]?i[d.action.false].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut.false=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut.false=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d)))),"input"===d.component&&d.properties.quick_replies&&d.properties.quick_replies.forEach&&d.properties.quick_replies.forEach(function(a){d.action[a.id]&&(g=i[d.action[a.id]]?i[d.action[a.id]].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut[a.id]=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut[a.id]=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d)))}),"existence"===d.component&&(d.action.exists&&(g=i[d.action.exists]?i[d.action.exists].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut.exists=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut.exists=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d))),d.action.nonexists&&(g=i[d.action.nonexists]?i[d.action.nonexists].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut.nonexists=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut.nonexists=g, 22i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d)))),"decision"===d.component&&(d.action.yes&&(g=i[d.action.yes]?i[d.action.yes].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut.yes=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut.yes=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d))),d.action.no&&(g=i[d.action.no]?i[d.action.no].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut.no=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut.no=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d)))),"switch"===d.component&&d.properties.switch&&d.properties.switch.forEac
22h&&d.properties.switch.forEach(function(a){d.action[a.name]&&(g=i[d.action[a.name]]?i[d.action[a.name]].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut[a.name]=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut[a.name]=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d)))}),"schedule"===d.component&&d.action.delayed&&(g=i[d.action.delayed]?i[d.action.delayed].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut.delayed=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut.delayed=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d))),"rest"!==d.component||d.meta&&d.meta.type||(d.action.success&&(g=i[d.action.success]?i[d.action.success].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut.success=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut.success=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d))),d.action.fail&&(g=i[d.action.fail]?i[d.action.fail].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut.fail=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut.fail=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d)))),"platform"===d.component&&d.properties.platforms&&d.properties.platforms.forEach&&d.properties.platforms.forEach(function(a){d.action[a]&&(g=i[d.action[a]]?i[d.action[a]].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut[a]=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut[a]=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d)))}),"tag"===d.component&&d.meta&&"check_tags"===d.meta.type&&d.action.fallback&&(g=i[d.action.fallback]?i[d.action.fallback].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut.fallback=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut.fallback=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d))),"label"===d.component&&d.meta&&"check"===d.meta.type&&d.action.fallback&&(g=i[d.action.fallback]?i[d.action.fallback].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut.fallback=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut.fallback=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d)));h[d.position.column][d.position.group][h[d.position.column][d.position.group].length-1].id===d.id&&d.action.next&&(g=i[d.action.next]?i[d.action.next].step:null)&&(g.position.column==d.position.column+1?(i[d.id].connectionsOut.next=g,i[g.id].connectionsIn.includes(d)||i[g.id].connectionsIn.push(d)):g.position.column==d.position.column&&g.position.group==d.position.group||(i[d.id].jumpersOut.next=g,i[g.id].jumpersIn.includes(d)||i[g.id].jumpersIn.push(d)))}setTimeout(function(){var c=document.getElementById("scenario_"+b.scenario_id);angular.getTestability(c).whenStable(function(){a.drawScenarioConnections(b)})},0)},a.drawScenarioConnections=function(b){var c;z[b.scenario_id]?z[b.scenario_id].reset():z[b.scenario_id]=jsPlumb.getInstance(),c=z[b.scenario_id],c.setContainer("scenario_"+b.scenario_id);var d,e,f,g,h,i,j,k,l,m,n,o,p=a.scenariosSteps[b.scenario_id];for(d in p){f=p[d],g=f.step,h=a.getComponentGroup(b,g),i=a.getStepComponent(b,g);for(e in f.connectionsOut)m=f.connectionsOut[e],j=h?h.color:"#969696","next"!=e?(l=e,h&&"PRO"==h.name&&(j="#000","collapsed"==i.mode&&(l="next")),k=1,c.connect({source:"step_connection_"+l+"_"+b.scenario_id+"_"+g.id,target:"step_connection_"+b.sce
22nario_id+"_"+m.id,anchors:["Right","Left"],endpoints:["Blank",["Dot",{radius:3}]],connector:["Bezier",{curviness:50}],endpointStyle:{fill:j},paintStyle:{strokeWidth:k,stroke:j},detachable:!1})):(k=1,c.connect({source:"step_connection_next_"+b.scenario_id+"_"+g.id,target:"step_connection_"+b.scenario_id+"_"+m.id,anchors:["Right","Left"],endpoints:["Blank",["Dot",{radius:3}]],connector:["Bezier",{curviness:50}],endpointStyle:{fill:j},paintStyle:{strokeWidth:k,stroke:j},detachable:!1}));for(e in f.jumpersIn)n=f.jumpersIn[e],o=a.getComponentGroup(b,n),j=o?o.color:"#969696",o&&"PRO"==o.name&&(j="#000"),k=1,c.connect({source:"step_jumper_in_"+b.scenario_id+"_"+g.id+"_"+n.id,target:"step_connection_"+b.scenario_id+"_"+g.id,anchors:[e>0?"Top":f.jumpersIn.length>1?"Bottom":"Right","Left"],endpoints:["Blank",["Dot",{radius:3}]],connector:[f.jumpersIn.length>1?"StateMachine":"Straight",{curviness:e>0?3:-3,proximityLimit:1}],endpointStyle:{fill:j},paintStyle:{strokeWidth:k,stroke:j},detachable:!1});for(e in f.jumpersOut)m=f.jumpersOut[e],j=h?h.color:"#969696",l=e,h&&"PRO"==h.name&&"next"!=e&&(j="#000","collapsed"==i.mode&&(l="next")),k=1,c.connect({source:"step_connection_"+l+"_"+b.scenario_id+"_"+g.id,target:"step_jumper_"+e+"_"+b.scenario_id+"_"+g.id,anchors:["Right",e>0?"Top":f.jumpersOut.length>1?"Bottom":"Left"],endpoints:["Blank","Blank"],connector:[f.jumpersOut.length>1?"StateMachine":"Straight",{curviness:e>0?3:-3,proximityLimit:1}],endpointStyle:{fill:j},paintStyle:{strokeWidth:k,stroke:j},detachable:!1})}},a.loadTags=function(){b.get(c.host+"/tags/"+f.id).then(function(b){b.data.tags&&(a.allTags=b.data.tags)},function(a){console.error(a)})},a.loadProducts=function(){b.get(c.host+"/products/"+f.id).then(function(b){a.allProductsSource=b.data.products,angular.forEach(a.allCategoriesSource,function(c){var d={name:c.name,id:c.name,items:[]};angular.forEach(b.data.products,function(a){a.category_id==c.category_id&&d.items.push({id:a.product_id,name:a.name})}),a.allProducts.push(d)})})},a.loadCategories=function(){b.get(c.host+"/categories/"+f.id).then(function(b){b.data.categories&&(b.data.categories.forEach(function(b){a.allCategories.push({name:b.name,value:b.name})}),a.allCategoriesSource=b.data.categories,a.loadProducts())},function(a){console.error(a)})},a.loadLabels=function(){b.get(c.host+"/clients/labels").then(function(b){b.data.labels&&(a.allLabels=b.data.labels)},function(a){console.error(a)})},a.loadOperators=function(){b.get(c.host+"/bot/team/"+f.id).then(function(b){a.operators.push({name:b.data.creator.name,value:b.data.creator.id}),b.data.status&&b.data.team&&b.data.team.forEach(function(b){var c={name:b.name,value:b.id};a.operators.push(c)})},function(a){console.error(a)})},a.loadCollections=function(){b.get(c.host+"/collections/"+f.id).then(function(d){d.data.collections.forEach(function(d){a.collections.push({name:d.name,value:d.collection_id}),b.get(c.host+"/collection/"+d.collection_id).then(function(b){a.collectionFieldsList[d.collection_id]=b.data.fields})})})},a.loadEntities=function(){b.get(c.host+"/entities/"+f.id+"?system=true").then(function(b){a.allEntities=b.data.entities})},a.loadMails=function(){b.get(c.host+"/mails/"+f.id).then(function(b){a.allMails=[],b.data.mails.forEach(function(b){"custom"==b.type&&a.allMails.push(b)})},function(a){console.error(a)})},a.loadConnections=function(){b.get(c.host+"/connections/"+f.id).then(function(b){a.allPlatforms=b.data.connections.map(function(a){if(a&&a.provider)return{value:a.provider,name:a.provider.charAt(0).toUpperCase()+a.provider.slice(1)}})})},l(),a.addScenario=function(){if(!a.isAddingScenario){a.isAddingScenario=!0;for(var d=1,e="NewScenario";n(e);)e="NewScenario"+(d||""),d++;var g={bot_id:f.id,account_id:i.getUser().account_id,name:e,description:null,keywords:[],intents:[],steps:[],template:"visual",default:!1,roles:[],validation:{status:"ok",forced:!1}};b.post(c.host+"/scenario/",g).then(function(b){a.$emit("getBot");var c=b.data.scenario_id;g.scenario_id=c,a.scenarios.push(g),a.scenariosMap[c]=[],a.scenariosSteps[c]=[],a.allScenarios.unshift(g),a.scenariosErrors[c]=[],A[c]=[],a.selectedGroups[c]=[],s(),angular.getTestability(B).whenStable(function(){a.isAddingScenario=!1,a.$apply()})},function(a){k.error({delay:6e4,message:a.message})})}},a.deleteScenario=function(d){if(confirm("Delete scenario?")){var e=m(d),g=!1;e.default&&(g=!0),b.delete(c.host+"/scenario/"+d).then(function(b){if(b.data.status){a.$emit("getBot");var c=a.scenarios.indexOf(e);c>-1&&a.scenarios.splice(c,1),delete a.scenariosMap[d],delete a.scenariosSteps[d],c=a.allScenarios.indexOf(e),c>-1&&a.allScenarios.splice(c,1),delete a.scenariosErrors[d],delete A[d],delete a.selectedGroups[d],a.scenarios.length?!a.single&&g&&a.scenarios[0]&&a.makeDefault(a.scenarios[0]):j.path("/bot/"+f.i
22d+"/functions"),makeShapshot()}else k.error({delay:6e4,message:"Can't delete these scenario"})},function(a){k.error({delay:6e4,message:a.message})})}},a.makeDefault=function(b){b.default||(a.scenarios.forEach(function(a){a.scenario_id===b.scenario_id?a.default=!0:a.default=!1}),a.autosave(b.scenario_id),s())},a.getComponentGroupName=function(b,c){return a.scenariosSteps[b.scenario_id][c.id]?a.scenariosSteps[b.scenario_id][c.id].componentGroupName:"unknown"},a.getComponentGroup=function(b,c){return a.scenariosSteps[b.scenario_id][c.id]?a.scenariosSteps[b.scenario_id][c.id].componentGroup:void 0},a.getStepComponent=function(b,c){return a.scenariosSteps[b.scenario_id][c.id]?a.scenariosSteps[b.scenario_id][c.id].component:void 0},a.getStepComponentInfo=function(b){var c,d,e={component:void 0,componentGroup:void 0,componentGroupName:"unknown"};for(var f in a.availableComponents){d=a.availableComponents[f];for(var g in d.components){var h=d.components[g];if(c=h.components?h.components.find(function(a){return b.meta&&b.meta.type?a.component===b.component&&a.metaType===b.meta.type:a.component===b.component&&!a.metaType}):b.meta&&b.meta.type?h.component===b.component&&h.metaType===b.meta.type?h:null:h.component!==b.component||h.metaType?null:h)return e.component=c,e.componentGroup=d,e.componentGroupName=f,e}}return e},a.getStepStats=function(a,b){return!!(a.statistics&&a.statistics.steps&&a.statistics.steps[b.id])&&a.statistics.steps[b.id]},a.autosaveInProgress=!1,a.autosave=function(d,e,f,g){var h=m(d);if(h){a.autosaveInProgress=!0;var i=angular.copy(h);return delete i.scenario_id,b.put(c.host+"/scenario/"+d,i).then(function(b){return a.autosaveInProgress=!1,a.$emit("getBot"),e&&q(h,g),f&&t(h),b},function(b){a.autosaveInProgress=!1,k.error({delay:6e4,message:b.message})})}};var F=!1;a.addComponent=function(b,c,d,e,f,g,i,j,l,n,q){if(!F){F=!0;var s,t,u,v=m(b),w=a.scenariosMap[b],y=a.scenariosSteps[b],z=!1;a.clearActiveSteps(v),M(),v.steps.length||C.css({opacity:0});var E=h.getC(g,i);"attachment"===g&&""!==j&&void 0!==j&&(E.type=j);var G=o(5),H={name:G,component:g,id:G,properties:E,position:{column:c,group:d}};if(i&&(H.meta={type:i}),r(v,H),p(v,H),l&&a.stepToCopy){H=Object.assign(H,a.stepToCopy);for(var I in H.action)H.action[I]&&!a.scenariosSteps[b][H.action[I]]&&(H.action[I]=null);z=!0}return e?(u=v.steps.indexOf(e),v.steps.splice(u+1,0,H)):v.steps.push(H),w[c]||(w[c]=[]),w[c][d]||(w[c][d]=[]),e&&e.position.column===c&&e.position.group===d?(u=w[c][d].indexOf(e),w[c][d].splice(u+1,0,H)):w[c][d].push(H),"platform"==H.component&&(A[b][H.id]=H),e&&(s="next",t=n||"next",f&&(H.action[s]=e.action[t]),e.action[t]=G,z=!0,"scenario"==e.component&&(e.component="nested",delete e.properties.step),"platform"==e.component&&"next"!=t?(y[G].platforms=[t],y[G].availableComponents=x(y[G])):y[e.id].platforms.length&&(y[G].platforms=y[e.id].platforms,y[G].availableComponents=x(y[G]))),z&&a.updateScenarioConnections(v),a.autosave(b,!1,!0).then(function(b){if(1==v.steps.length&&setTimeout(function(){var a=D.offsetHeight,b=a/2,c=B.clientHeight,d=c/2,e=b-d;C.css({opacity:1,top:e+"px"})},0),q){var c="The new component "+a.getStepComponent(v,H).name+" has been added at the end of the scenario map. Scroll to the right to see it.";k.success({message:c})}return F=!1,G})}},a.swapSteps=function(b,c,d){var e,f,g,h,i,j=b.scenario_id;for(f in a.scenariosSteps[j]){e=a.scenariosSteps[j][f].step;for(g in e.action)e.action[g]===c.id&&(e.action[g]=d.id)}c.action.next=d.action.next,d.action.next=c.id,h=b.steps.findIndex(function(a){return a.id===c.id}),i=b.steps.findIndex(function(a){return a.id===d.id}),a.scenariosMap[j][0][0][0].id===d.id?(b.steps.splice(h,1),b.steps.splice(0,0,c)):(b.steps.splice(i,1),b.steps.splice(h,0,d)),a.autosave(j,!0,!0)},a.deleteComponent=function(b,c){var d,e,f,g,h,i=m(b),j="next";a.clearError(i,c),h=i.steps.indexOf(c),h>-1&&i.steps.splice(h,1),h=a.scenariosMap[b][c.position.column][c.position.group].indexOf(c),h>-1&&a.scenariosMap[b][c.position.column][c.position.group].splice(h,1),delete a.scenariosSteps[b][c.id];for(d in a.scenariosSteps[b]){f=a.scenariosSteps[b][d].step,g="next";for(e in f.action)f.action[e]===c.id&&(e==g&&c.action[j]?f.action[e]=c.action[j]:f.action[e]=null)}var k=!a.scenariosMap[b][c.position.column][c.position.group].length;k&&a.scenariosMap[b][c.position.column].length<=1?(i.steps.forEach(function(a){a.position&&a.position.column>c.position.column&&a.position.column--}),a.scenariosMap[b].splice(c.position.column,1)):k&&(i.steps.forEach(function(a){a.position&&a.position.column===c.position.column&&a.position.group>c.position.group&&a.position.group--}),a.scenariosMap[b][c.position.column].splice(c.position.group,1)),a.updateScenarioConnections(i),a.autosave(b,!1,!0),"platform"==c.component?(delete A[b][c.id],y(i)):Object.keys(A[b]).length&&y(i)},a.deleteConnection=function(b,c,d){var e=m(b);if(!d){a.getComponentGroup(e,c);d="next"}
22void 0!==c.action[d]&&(c.action[d]=null,"ActMenu"===d.substring(0,7)&&delete c.action[d],"nested"==c.component&&(c.component="scenario",c.properties.step="")),a.updateScenarioConnections(e),a.autosave(b,!1,!0),Object.keys(A[b]).length&&y(e)},a.zoom=function(b){var c;if(b)c=1*a.scale+b;else{if(!(1*a.panelInfo.scale))return void(a.panelInfo.scale=Math.round(100*a.scale));c=1*a.panelInfo.scale/100}c<.25&&(c=.25),c>4&&(c=4),a.scale=c,a.panelInfo.scale=Math.round(100*a.scale),delete a.scaleBeforeFit,g.put("scale",a.scale)},a.fitToScreen=function(){var b,c,d=D.offsetWidth,e=D.offsetHeight,f=e/2,g=B.clientWidth,h=B.clientHeight,i=d/g,j=e/h,k=Math.min(i,j);a.scaleBeforeFit?(k=a.scaleBeforeFit,delete a.scaleBeforeFit):(k>4&&(k=4),a.scaleBeforeFit=a.scale),a.scale=k,a.panelInfo.scale=Math.round(100*a.scale),b=h/2,c=f-b,setTimeout(function(){C.css({left:0,top:c+"px"})},0)},a.allowActiveSteps=!0,a.centerStep=function(b,c){a.allowActiveSteps=!1,G(b,c);var d,e,f,g,h=D.offsetWidth,i=D.offsetHeight,j=h/2,k=i/2,l=B.clientHeight,m=l/2,n=document.getElementById("scenario_"+b.scenario_id),o=document.getElementById("step_"+b.scenario_id+"_"+c.id),p=o.clientWidth,q=o.clientHeight,r=a.scaleBeforeFit?a.scaleBeforeFit:a.scale;d=(n.offsetLeft+o.offsetLeft+p/2)*r,e=(n.offsetTop+o.offsetTop+q/2-m)*r,f=j-d,g=k-m-e,delete a.scaleBeforeFit,a.scale=r,a.panelInfo.scale=Math.round(100*a.scale),setTimeout(function(){C.css({top:g+"px",left:f+"px"}),setTimeout(function(){a.allowActiveSteps=!0},500)},0)},a.setScenarioName=function(b){var c=m(b);c.name=c.name.replace(/\s+/g," ").trim(),a.autosave(b,!1,!0)},a.setScenarioKeywords=function(b){var c=m(b),d=a.panelInfo.keywords.trim();d.length?(c.keywords=d.split(","),c.keywords.forEach(function(a,b){c.keywords[b]=a.trim()})):c.keywords=[],a.autosave(b,!1,!0)},a.calcActiveSteps=function(b,c){if(c!==a.hoveredStep)if(a.selectExistingData)a.activeStep=null,a.hoveredStep=c,a.firstInHoveredGroup=null,a.lastInHoveredGroup=null,a.activeSteps=[c];else{var d,e,f,g=b.scenario_id,h=a.scenariosSteps[b.scenario_id],i=c.position.column,j=c.position.group;if(a.activeStep=null,a.hoveredStep=c,a.firstInHoveredGroup=a.scenariosMap[g][i][j][0].id!==c.id?a.scenariosMap[g][i][j][0]:null,a.lastInHoveredGroup=a.scenariosMap[g][i][j][a.scenariosMap[g][i][j].length-1].id!==c.id?a.scenariosMap[g][i][j][a.scenariosMap[g][i][j].length-1]:null,a.activeSteps=[c].concat(h[c.id].connectionsIn,Object.values(h[c.id].connectionsOut),h[c.id].jumpersIn,Object.values(h[c.id].jumpersOut)),a.firstInHoveredGroup){d=h[a.firstInHoveredGroup.id].connectionsIn.concat(h[a.firstInHoveredGroup.id].jumpersIn),d=d.filter(function(a,b){return d.indexOf(a)===b});for(e in d)f=d[e],(h[f.id].connectionsOut.next&&h[f.id].connectionsOut.next.id===a.firstInHoveredGroup.id||h[f.id].jumpersOut.next&&h[f.id].jumpersOut.next.id===a.firstInHoveredGroup.id)&&a.activeSteps.push(f)}a.lastInHoveredGroup&&(h[a.lastInHoveredGroup.id].connectionsOut.next?a.activeSteps.push(h[a.lastInHoveredGroup.id].connectionsOut.next):h[a.lastInHoveredGroup.id].jumpersOut.next&&a.activeSteps.push(h[a.lastInHoveredGroup.id].jumpersOut.next)),a.activeSteps=a.activeSteps.filter(function(b,c){return a.activeSteps.indexOf(b)===c})}},a.clearActiveSteps=function(b){var c;a.hoveredStep&&(c=$("#step_"+b.scenario_id+"_"+a.hoveredStep.id).find(":focus")),c&&c.length?(G(b,a.hoveredStep),c.one("blur",H)):(a.activeStep=null,a.hoveredStep=null,a.activeSteps=[],a.firstInHoveredGroup=null,a.lastInHoveredGroup=null)};var G=function(b,c){c!==a.activeStep&&(a.activeStep=c,a.hoveredStep=null,a.firstInHoveredGroup=null,a.lastInHoveredGroup=null,a.activeSteps=[])},H=function(){a.activeStep=null,a.$apply()};a.getJumperArrow=function(a,b){return b.position.column<a.position.column?"arrow_back":b.position.column>a.position.column?"arrow_forward":b.position.column==a.position.column&&b.position.group<a.position.group?"arrow_upward":b.position.column==a.position.column&&b.position.group>a.position.group?"arrow_downward":void 0},a.selectExisting=function(b,c,d,e){a.selectExistingData={scenario:b,source:c,action:d},e.stopPropagation(),M()},a.applyExisting=function(b,c){var d=a.selectExistingData.scenario,e=a.selectExistingData.source;if(e.action[a.selectExistingData.action]=b.id,"ActMenu"===a.selectExistingData.action.substr(0,7)){var f=a.selectExistingData.source.properties.quick_replies.find(function(b){return b.id===a.selectExistingData.action});f&&(f.action={type:"step",step:b.id,scenario:null})}"scenario"==e.component&&(e.component="nested",delete e.properties.step),a.selectExistingData=null,c.stopPropagation(),a.updateScenarioConnections(d),a.autosave(d.scenario_id,!1,!0),Object.keys(A[d.scenario_id]).length&&y(d)},a.clearExisting=function(){a.selectExistingData=null};var I=function(b){a.selectExistingData&&27===b.keyCode&&(a.clearExisting(
22),a.$apply())};$(document).on("keyup",I),a.toggleWidget=function(){a.widget=!a.widget};var J,K,L=function(b){if(!J&&(J=$(b.target).closest(".scenario-group-option, .btn-connection-add"),K=J.children(".scenario-pop-up"))){var c=K.offset(),d=J.offset(),e=E.offset(),f=c.left+K[0].getBoundingClientRect().width,g=d.top+J[0].getBoundingClientRect().height+K[0].getBoundingClientRect().height;f>e.left+E.width()&&(K.addClass("scenario-pop-up-right"),c.left=d.left-K[0].getBoundingClientRect().width+32),g>e.top+E.height()&&(K.addClass("scenario-pop-up-bottom"),c.top=c.top-J[0].getBoundingClientRect().height-K[0].getBoundingClientRect().height),K.appendTo(E),K.css("transform","scale("+a.scale+")"),K.offset(c),E.on("mouseover",M)}},M=function(a){if(K){if(a){var b=$(a.target).closest(".scenario-group-option, .btn-connection-add");if(b&&b.get(0)===J.get(0))return;var c=$(a.target).closest(".scenario-pop-up");if(c&&c.get(0)===K.get(0))return}K.appendTo(J),K.css("left",""),K.css("top",""),K.css("transform",""),K.removeClass("scenario-pop-up-right"),K.removeClass("scenario-pop-up-bottom"),K=null,J=null,E.off("mouseover",M)}};E.on("mouseover",".scenario-group-option, .btn-connection-add",L),a.addError=function(b,c){-1===a.scenariosErrors[b.scenario_id].indexOf(c.id)&&(a.scenariosErrors[b.scenario_id].push(c.id),"errored"!=b.validation.status&&(b.validation.status="errored",a.autosave(b.scenario_id),u()))},a.clearError=function(b,c){var d=a.scenariosErrors[b.scenario_id].indexOf(c.id);d>-1&&(a.scenariosErrors[b.scenario_id].splice(d,1),a.scenariosErrors[b.scenario_id].length||"errored"!=b.validation.status||(b.validation.status="ok",a.autosave(b.scenario_id),u()))},a.toggleScenarioStatus=function(b){b.validation.forced=!b.validation.forced,a.autosave(b.scenario_id,!1,!0)},a.setStepToCopy=function(b){a.stepToCopy=b,g.put("step",JSON.stringify(b))};var N=function(b){M(),b.originalEvent.deltaY<0?a.zoom(.05):b.originalEvent.deltaY>0&&a.zoom(-.05),a.$apply()};E.on("wheel",N);var O=[],P=null;a.undo=function(){null===P&&(P=O.length-1),P&&(P--,v())},a.redo=function(){null!==P&&P<O.length-1&&(P++,v())},a.restore=function(){var a=P;null===a&&(a=O.length-1),a&&(P=0,v())},a.undoDisabled=function(){var a=P;return null===a&&(a=O.length-1),!a},a.redoDisabled=function(){var a=P;return null===a||a>=O.length-1};var Q=function(b){(b.ctrlKey||b.metaKey)&&"input"!=b.target.tagName.toLocaleLowerCase()&&"textarea"!=b.target.tagName.toLocaleLowerCase()&&("z"===b.key||"Ñ"===b.key?b.shiftKey?a.redo():a.undo():"y"!==b.key&&"н"!==b.key||a.redo())};$(document).on("keydown",Q);var R,S,T,U,V;w(),a.getPlatformAvailableComponents=function(a){switch(a){case"twilio":return R;case"email":return S;case"messenger":case"telegram":return T;case"viber":case"wechat":return U;default:return V}},a.switchExpertMode=function(){if(M(),a.expertMode=!a.expertMode,a.expertMode){var b=new Date,c=new Date(b.getTime()+31536e6);g.put("expertMode",a.expertMode,{expires:c})}else g.remove("expertMode");var d=a.expertMode?"You've just switched to Expert mode":"You've just switched to Beginner mode";k.success({message:d})},a.isGroupSelected=function(b,c,d){return a.selectedGroups[b].find(function(a){return a.column===c&&a.group===d})},a.selectGroup=function(b,c,d,e){!e.shiftKey&&(a.selectedGroups.length||"scenario-group-inner"!=e.target.className&&"scenario-step-header"!=e.target.className&&"scenario-step-row"!=e.target.className&&"scenario-step-footer"!=e.target.className)||(a.isGroupSelected(b,c,d)||a.selectedGroups[b].push({column:c,group:d}),e.preventDefault(),e.stopPropagation())},a.clearSelectedGroups=function(b){a.selectedGroups[b]=[]},a.handleSelectedGroups=function(b){if(a.selectedGroups[b].length)if(1===a.selectedGroups[b].length){var c,d,e,f,g=a.selectedGroups[b][0].column,h=a.selectedGroups[b][0].group,i=a.scenariosMap[b][g],j=i[h],k=j.length;for(e=0;e<j.length;e++)c=j[e],c.position.group=c.position.group+e;for(e=h+1;e<i.length;e++)for(d=i[e],f=0;f<d.length;f++)c=d[f],c.position.group=c.position.group+k-1;a.autosave(b,!0,!0)}else{var l,g,h,i,j,n,o,p,c,e,f,q,r,s,t,u,v,w=[],x=m(b);for(e=0;e<a.selectedGroups[b].length;e++)g=a.selectedGroups[b][e].column,h=a.selectedGroups[b][e].group,w[g]||(w[g]=[]),w[g][h]=a.scenariosMap[b][g][h];l=w.flat(2);for(e in w){i=w[e];for(f in i)if(j=i[f],n)for(q=0;q<j.length;q++){c=j[q],c.position.column=n.position.column,c.position.group=n.position.group,u=x.steps.indexOf(c),v=x.steps.indexOf(p),v>u&&(x.steps.splice(u,1),x.steps.splice(v,0,c)),0===q&&(p.action.next=c.id);for(r in a.scenariosSteps[b]){t=a.scenariosSteps[b][r].step;for(s in t.action)"next"===s&&t.position.column===n.position.column&&t.position.group===n.position.group||t.action[s]===c.id&&(t.action[s]=n.id)}o===c.id&&(o=null),p=c}else n=JSON.parse(JSON.stringify(j[0])),o=l[l.length-1].action.next?l[l.length-1].action.next:j[j.length-1].action.next,p=j[j.length-1]}c&&(c.action.next=o),a.autosave(b,!0,!0,!0)}},a.$on("$destroy",function(){$(document).off("keyup",I),$(document).off("keydown",Q)})}]),angular.module("brnaiApp").directive("visualStep",["Upload","getDomainData","$sce","$rootScope","storingservice","crmService","$stateParams","$http","$uibModal","$cookies","sce
22nariosInitData","getComponent","hintsService",function(a,b,c,d,e,f,g,h,i,j,k,l,m){return{restrict:"EA",template:'<div ng-include="wmType"></div>',replace:!0,scope:{step:"=",translations:"=",availableComponents:"=",stepToCopy:"=",setStepToCopy:"&",addComponent:"&",allTags:"=",allCategories:"=",allCategoriesSource:"=",allProductsSource:"=",allProducts:"=",allLabels:"=",allEntities:"=",allMails:"=",allPlatforms:"=",collections:"=",collectionFieldsList:"=",operators:"=",scenarios:"=",currentScenario:"=",errMsg:"=",deleteComponent:"&",deleteConnection:"&",autosave:"&",loadTags:"&",updateScenarioConnections:"&",drawScenarioConnections:"&",selectExisting:"&",addError:"&",clearError:"&",stepComponentGroup:"=",stepComponentGroupName:"=",stepComponent:"=",jumpersOut:"=",connectionsOut:"=",centerStep:"&",getPlatformAvailableComponents:"&",expertMode:"=",switchExpertMode:"&"},link:function(d,f,n){function o(){switch("card"!=d.step.component&&d.hintName&&m.getHint(d.hintName,d.hintCategory).then(function(a){d.hint=a}),d.step.component){case"delay":case"noreply":switch(d.step.properties.measure_unit){case"seconds":d.delay.convertedValue=d.step.properties.delay/1e3;break;case"minutes":d.delay.convertedValue=d.step.properties.delay/1e3/60;break;case"hours":d.delay.convertedValue=d.step.properties.delay/1e3/60/60;break;case"days":d.delay.convertedValue=d.step.properties.delay/1e3/60/60/24;break;default:d.delay.convertedValue=d.step.properties.delay}break;case"schedule":var a,b,c=new Date,e=c.getTimezoneOffset()/60;switch(d.step.properties.measure_unit){case"hours":d.delay.convertedValue=d.step.properties.delay/60;break;case"days":d.delay.convertedValue=d.step.properties.delay/60/24;break;default:d.delay.convertedValue=d.step.properties.delay}d.step.properties.schedule&&d.step.properties.schedule.time?(d.schedule.time="between",d.step.properties.schedule.time.from&&(a=d.step.properties.schedule.time.from.hour-e,a<0?a=24+a:a>=24&&(a-=24),d.schedule.timeFrom=("0"+a).slice(-2)+":"+("0"+d.step.properties.schedule.time.from.minute).slice(-2)),d.step.properties.schedule.time.to&&(b=d.step.properties.schedule.time.to.hour-e,b<0?b=24+b:b>=24&&(b-=24),d.schedule.timeTo=("0"+b).slice(-2)+":"+("0"+d.step.properties.schedule.time.to.minute).slice(-2))):d.schedule.time="any_time";break;case"tag":d.$watch("allTags",function(){if(d.allTags&&d.allTags.length){if(d.tag.add=[],d.tag.remove=[],d.tag.include=[],d.tag.exclude=[],d.step.properties.tag&&d.step.properties.command){var a=d.allTags.find(function(a){return a.name===d.step.properties.tag});a&&("add"==d.step.properties.command?(d.step.properties.add||(d.step.properties.add=[]),d.step.properties.add.includes(a.tag_id)||d.step.properties.add.push(a.tag_id)):"remove"==d.step.properties.command&&(d.step.properties.remove||(d.step.properties.remove=[]),d.step.properties.remove.includes(a.tag_id)||d.step.properties.remove.push(a.tag_id)))}d.step.properties.add&&d.step.properties.add.forEach(function(a){var b=d.allTags.find(function(b){return b.tag_id===a});b&&d.tag.add.push(b)}),d.step.properties.remove&&d.step.properties.remove.forEach(function(a){var b=d.allTags.find(function(b){return b.tag_id===a});b&&d.tag.remove.push(b)}),d.step.properties.include&&d.step.properties.include.forEach(function(a){var b=d.allTags.find(function(b){return b.tag_id===a});b&&d.tag.include.push(b)}),d.step.properties.exclude&&d.step.properties.exclude.forEach(function(a){var b=d.allTags.find(function(b){return b.tag_id===a});b&&d.tag.exclude.push(b)})}});break;case"condition":"match"==d.step.properties.operator&&(d.step.properties.operator="regex"),d.step.properties.value&&(d.condition.preset=d.condition.presets.find(function(a){return a.preset===d.step.properties.value}),d.condition.preset||(d.condition.preset=d.condition.presets.find(function(a){return"custom"==a.value})));break;case"input":d.step.meta&&"collect"==d.step.meta.type&&d.step&&d.step.properties&&(d.show_close_lead=d.step.properties.is_lead_data),d.step.meta&&"menu"==d.step.meta.type&&(d.step.properties.reply_type||(d.step.properties.reply_type="action"));break;case"rest":d.type=void 0!==d.step.properties.raw?"json":"object";break;case"card":m.getHint(d.hintNameGalleryA,d.hintCategory).then(function(a){d.hintGalleryA=a}),m.getHint(d.hintNameGalleryM,d.hintCategory).then(function(a){d.hintGalleryM=a})}}function p(a,b,c){var e=d.step.properties.quick_replies.find(function(a){return a.id===b});e&&(e.content=e.title,e.action.type="step",e.action.step=c)}function q(a){var c={bot_id:g.id,name:a};return h.post(b.host+"/tag/",c).then(function(a){return d.loadTags(),a},function(a){Notification.error({delay:6e4,message:a.message})})}function r(){if(d.step.properties.type){switch(d.step.properties.type){case"image":d.errMsg="Supported files: jpg, jpeg, png, gif";break;case"file":d.errMsg="Supported files: jpg, jpeg, png, gif, doc, docx, xsl, xslx, pdf, key, ppt, pptx, pps, ppsx, odt, zip, mp3, m4a, ogg, wav, mp4, m4v, mov, wmv, avi, mpg, ogv, 3gp, 3g2, txt, pages, numbers, rar";break;case"audio":d.errMsg="Supported files: mp3, m4a, ogg, wav";break;case"video":d.errMsg="Supported files: mp4, m4v, mov, wmv, avi, mpg, ogv, 3gp, 3g2"}d.progressPercentage=0}}function s(a){return"-"+[Math.floor(Math.ceil(a)/60).toString(),(Math.ceil(a)%60).toString().padStart(2,"0")].join(":")}function t(){angular.forEach($("audio"),function(a){a.paused||a.pause()}),angular.forEach($("video"),function(a){a.paused||a.pause()})}d.service={methods:[{name:"Check Signature",value:"CheckSignature"},{name:"Get Address Info",value:"GetAddressInfo"}]},d.delay={measureUnits:[{name:"Seconds",value:"seconds"},{name:"Minutes",value:"minutes"},{name:"Hours",value:"hours"},{name:"Days",value:"days"}]},d.schedule={measureUnits:[{name:"Minutes",value:"minutes"},{name:"Hours",value:"hours"},{name:"Days",value:"days"}],timeValues:[{name:"Between",value:"between"},{name:"Any time",value:"any_time"}]},d.tag={},d.replyTypes=[{name:"Text",value:"text"},{name:"Number",value:"number"},{name:"Email",value:"email"},{name:"Url",value:"url"},{name:"File",value:"file"},{name:"Quick reply",value:"quick_reply"}],d.quickRepliesTypes=[{name:"Text",value:"text"},{name:"Location",value:"location"},{name:"User email",value:"user_email"},{name:"User phone",value:"user_phone_number"}],d.scopesSystem=[{name:"Static",value:"user"},{name:"Temp",value:"scenario"},{name:"System",value:"system"}],d.condition={scopesSystem:[{value:"Static",name:"user"},{value:"Temp",name:"scenario"},{value:"System",name:"system"}
22],conditions:[{value:"Equal",name:"equal",symbol:"="},{value:"Not Equal",name:"not equal",symbol:"!="},{value:"Greater",name:"gt",symbol:">"},{value:"Greater or equal",name:"gte",symbol:">="},{value:"Less",name:"lt",symbol:"<"},{value:"Less or equal",name:"lte",symbol:"<="},{value:"Match Regex",name:"regex",symbol:"R"},{value:"Element contains",name:"contains",symbol:"E"}],presets:[{name:"Text",value:"text",preset:"system.message.content.text"},{name:"MSG Type",value:"message-type",preset:"system.message.type"},{name:"Custom",value:"custom"}]},d.differentType=[{name:"year",value:"Years"},{name:"month",value:"Months"},{name:"week",value:"Weeks"},{name:"day",value:"Days"},{name:"hour",value:"Hours" 23},{name:"minute",value:"Minutes"}],d.actions=[{name:"Like",value:"like"},{name:"Ban",value:"ban"},{name:"Unban",value:"unban"},{name:"Invite link",value:"invite_link"}],d.types=k.types,d.conditionsFilter=k.conditionsFilter,d.subscriptionCommands=k.subscriptionCommands,d.autopostingCommands=k.autopostingCommands,d.errorMsg=[],d.categoryProducts=[],d.hintCategory="scenario",d.hintName=d.stepComponent?d.stepComponent.name:"",d.hintNameGalleryA="Gallery Auto",d.hintNameGalleryM="Gallery Manual";var u=function(){return"pro"==d.stepComponentGroupName&&"collapsed"==d.stepComponent.mode?"pro":d.stepComponent?d.stepComponent.template?d.stepComponent.template:d.step.meta&&d.step.meta.type?d.step.component+"-"+d.step.meta.type:d.step.component:"advanced"};if(d.wmType="views/visual/"+u()+".html",o(),d.changeServiceMethod=function(){"CheckSignature"===d.step.properties.method?(d.step.properties.data.signature||(d.step.properties.data.signature={value:"",is_variable:!0}),d.step.properties.data.nonce||(d.step.properties.data.nonce={value:"",is_variable:!0}),d.step.properties.data.message||(d.step.properties.data.message={value:""})):"GetAddressInfo"===d.step.properties.method&&(delete d.step.properties.data.signature,delete d.step.properties.data.nonce,delete d.step.properties.data.message),d.drawScenarioConnections(),d.validate(),d.autosave()},d.autosaveProducts=function(){var a=[],b=[];angular.forEach(d.allProductsSource,function(b,c){b.product_id==d.step.properties.product_id&&(a=b)}),angular.forEach(d.allCategoriesSource,function(c,d){a.category_id==c.category_id&&(b=c)}),a&&b&&(d.step.properties.button_title="Buy now for $"+a.price,d.step.properties.category=b.name,d.step.properties.image=a.image,d.step.properties.name=a.name,d.autosave())},d.autosaveCategory=function(){var a={limit:30,offset:0,page:0,lastPage:!1};e.getProducts(g.id,d.step.properties.category,a).then(function(a){d.products=a.products,d.step.properties.elements=[],d.step.category="category_id",d.step.isSliderLoaded=!0,d.products.forEach(function(a){d.step.properties.elements.push({buttons:[],image:a.image,title:a.name,text:"$"+a.price})}),d.autosave()},function(a){d.products=[]})},d.addNextAction=function(a,b,c,e,f,g){f=f||"next",d.addComponent({prevStep:d.step,component:a,type:b,metaType:c,copied:e,prevStepAction:f}).then(function(b){g&&p(a,f,b)})},d.addNextScenarioAction=function(a,b,c,e){d.step.component="nested",d.addComponent({prevStep:d.step,component:a,type:b,metaType:c,copied:e,prevStepAction:"next"})},d.selectExistingScenarioAction=function(a){d.step.component="nested",d.selectExisting({action:"next",event:a})},d.deleteScenarioConnection=function(){d.step.component="scenario",d.deleteConnection({action:"next"})},d.showPro=function(){var a=function(){var a=d.step.meta?d.step.meta.type:"";i.open({templateUrl:"views/visual/"+(a?d.step.component+"-"+a:d.step.component)+"-modal.html",controller:["$scope","$uibModalInstance",function(a,b){a.translations=d.translations,a.scopes=d.scopes,a.availableComponents=d.availableComponents,a.dataAdditional=d.dataAdditional,a.requireDataJoin=d.requireDataJoin,a.requireDataSplit=d.requireDataSplit,a.requireDataStringify=d.requireDataStringify,a.quickRepliesTypes=d.quickRepliesTypes,a.validate=d.validate,a.replyTypes=d.replyTypes,a.step=JSON.parse(JSON.stringify(d.step)),a.scopesSystem=d.scopesSystem,a.type=void 0!==a.step.properties.raw?"json":"object",a.allLabels=d.allLabels,a.collections=d.collections,a.collectionFieldsList=d.collectionFieldsList,a.operators=d.operators,a.conditionsFilter=k.conditionsFilter,a.types=k.types,a.cardBtnTypes=k.cardBtnTypes,a.quickRepliesTypes=k.quickRepliesTypes,a.copyIcon="content_copy",a.copyIconCl
23ic=function(){a.copyIcon="check",setTimeout(function(){a.copyIcon="content_copy",a.$apply()},2e3)};var c="";a.renameCaseStart=function(a){c=a},a.renameCaseEnd=function(b,d){if(c){if(!b)return void(a.step.properties.switch[d].name=c);var e=a.step.action[c];delete a.step.action[c],a.step.action[b]=e,c=""}},a.deleteCase=function(b){delete a.step.action[a.step.properties.switch[b].name],a.step.properties.switch.splice(b,1)},a.deleteRestHeader=function(b){delete a.step.properties.headers[b]},a.spliceArrProp=function(a,b){a.splice(b,1)},a.deleteSwitchCondition=function(b,c){a.step.properties.switch[b].conditions.splice(c,1)},a.deleteExistenceParam=function(b){a.step.properties.params.splice(b,1)},a.toggleDataAdditional=function(){a.dataAdditional=!a.dataAdditional,a.dataAdditional&&setTimeout(function(){if($(".section-container.active .additional-options input").length){var a=$(".section-container.active input").toArray().reverse();angular.forEach(a,function(a){$(a).trigger("blur")})}},500)},a.switchCollectQuickReplies=function(b){a.step.properties.quick_replies[b].title="",a.step.properties.quick_replies[b].content="",a.step.properties.quick_replies[b].url=""},a.switchCollectButtonsType=function(b){a.step.properties.buttons[b].webview=""},a.addCollectPhrases=function(b){void 0===a.step.properties.phrases&&(a.step.properties.phrases=[]),a.step.properties.phrases.push("")},a.addCollectReplies=function(b){void 0===a.step.properties.quick_replies&&(a.step.properties.quick_replies=[]),a.step.properties.quick_replies.push(new Object({type:"",title:"",content:"",url:""}))},a.addCollectButtons=function(b){void 0===a.step.properties.buttons&&(a.step.properties.buttons=[]),a.step.properties.buttons.push(new Object({title:"",content:{value:"",params:[]},type:""}))},a.addRestHeader=function(b){for(var c=Object.keys(a.step.properties.headers).length+1,d="header_"+c;void 0!=a.step.properties.headers[d];)c++,d="header_"+c;a.step.properties.headers[d]=""},a.addRestSaveType=function(b){void 0===a.step.properties.save&&(a.step.properties.save=[]),a.step.properties.save.push(new Object({key:"",scope:"",param:""}))},a.addRestStaticProp=function(b){a.step.properties.data.push(new Object({type:"static",key:"",value:""}))},a.addRestVariableProp=function(b){a.step.properties.data.push(new Object({type:"variable",key:"",scope:"",param:""}))},a.addExistenceParam=function(b){a.step.properties.params.push(new Object({key:"",scope:""}))},a.changeRestSaveType=function(){"input"===a.step.save_type&&(a.step.properties.input=new Object({scope:"",key:""})),"save"===a.step.save_type&&a.addRestSaveType()},a.changeRestContentType=function(){"json"===a.type&&void 0===a.step.properties.raw&&(a.step.properties.raw={body:""}),"object"===a.type&&void 0===a.step.properties.data&&(a.step.properties.data=[{type:"static",key:"",value:""},{type:"variable",key:"",scope:"",param:""}])},a.addSwitchCondition=function(b){a.step.properties.switch[b].conditions.push(new Object({true:!0,operator:"",target:"",value:{param:"",scope:""}}))},a.addSwitchCase=function(b){var c="Case_"+l.makeId(4);a.step.properties.switch.push(new Object({conditions:[{true:!0,operator:"",target:"",value:{param:"",scope:""}}],operator:"",name:c})),a.step.action[c]=null},a.addMorePattern=function(b){a.step.properties.save.push(new Object({scope:"",param:""}))},a.deleteMorePattern=function(b){a.step.properties.save.splice(b,1)},a.autosaveRest=function(){"input"===a.step.save_type&&delete a.step.properties.save,"save"===a.step.save_type&&delete a.step.properties.input,"json"===a.type&&delete a.step.properties.data,"object"===a.type&&delete a.step.properties.raw,a.autosave()},a.collectionCommandsChange=function(b){var c=a.step;"insert"==b?(delete c.input,delete c.filters):(c.filters=[],delete c.data)},a.addCustomFilter=function(){a.step.properties.filters.push({field:"",condition:"",value:""})},a.deleteCustomFilter=function(b){a.step.properties.filters.splice(b,1)},a.addPhrase=function(){void 0===a.step.properties.phrases&&(a.step.properties.phrases=[]),a.step.properties.phrases.push("")},a.editPhrase=function(b,c){void 0===a.step.properties.phrases&&(a.step.properties.phrases=[]),a.step.properties.phrases[b]=c},a.fixTextBtn=function(b){var c=a.step;void 0==c.properties.buttons&&(c.properties.buttons=[]),void 0==c.properties.phrases&&(c.properties.phrases=[])},a.switchCardBtnTypes=function(b){"link"==a.step.properties.buttons[b].type?a.step.properties.buttons[b].webview=!1:delete a.step.properties.buttons[b].webview},a.handleAddParam=function(b,c){switch(b){case"targetParams":a.step.properties.target.params.push(new Object({replace:"",scope:"",param:""}));break;case"text":a.step.properties.params.push(new Object({replace:"",scope:"",param:""}));break;case"existence":a.step.properties.params.push(new Object({scope:"",key:""}));break;case"save":a.step.properties.save.push(new Object({scope:"",param:""}));break;case"raw":a.step.properties.raw.params.push(new Object({replace:"",scope:"",param:""}));break;case"drop":a.step.properties.drop.push(new Object({scope:"",key:""}));break;case"header":a.step.properties.headers["header_"+Object.keys(a.step.properties.headers).length]="";break;case"static":a.step.properties.data.push(new Object({type:"static",key:"",value:""}));break;case"variable":a.step.properties.data.push(new Object({type:"variable",key:"",scope:"",param:""}));break;case"saveType":delete a.step.properties.input,a.step.properties.save.push(new Object({key:"",scope:"",param:""}));break;case"rest":a.step.properties.url_params.push(new Object({replace:"",scope:"",param:""}));break;case"saveParam":a.step.properties.save.push(new Object({scope:"",key:"",value:""}));break;case"collapse":a.step.properties.collapse.push(new Object({title:"",content:""}));break;case"linkBtn":"dynamic"==a.step.properties.type&&a.step.properties.buttons.push(new Object({type:"link",title:"",url:""})),"static"==a.step.properties.type&&a.step.properties.elements[c].buttons.push(new Object({type:"link",title:"",url:""}));break;case"elasticsearch":a.step.properties.index.params.push(new Object({replace:"",param:"",scope:""}));break;case"fields":a.step.properties.fields.params.push(new Object({replace:"",param:"",scope:""}));break;case"score":a.step.properties.score.params.push(new Object({replace:"",param:"",scope:""}));break;case"suggetBtn":a.step.properties.buttons.push(new Object({title:"",content:""}));break;case"addBtnToInput":a.step.properties.buttons.push(new Object({title:"",content:{value:"",params:[]}}));break;case"addQuickReply":a.step.properties.quick_replies||(a.step.properties.quick_replies=[]),a.step.properties.quick_replies.push(new Object({type:"text",title:"",content:"",url:""}));break;case"addParamToInputBtns":break;case"suggestBtn":"dynamic"==a.step.properties.type&&a.step.properties.buttons.push(new Object({type:"suggest",title:"",content:""})),"static"==a.step.properties.type&&a.step.properties.elements[c].buttons.push(new Object({type:"suggest",title:"",content:""}));break;case"pushParam":a.step.properties.push.push(new Object({array:{key:"",scope:""},value:{key:"",scope:""}}));break;case"pullParam":a.step.properties.pull.push(new Object({array:{key:"",scope:""},value:{key:"",scope:""}}));break;case"setParam":a.step.properties.set.push(new Object({from:{key:"",scope:"",key_params:[]},to:{key:"",scope:""}}));break;case"attachmentParam":a.step.properties.url_params.push(new Object({replace:"",scope:"",param:""}));break;case"attachmentNameParam":a.step.properties.name_params.push(new Object({replace:"",scope:"",param:""}));break;case"expression":a.step.properties.params.push(new Object({replace:"",scope:"",param:""}));case"card":"generic"===a.step.properties.template.type?a.step.properties.template.options={}:(a.step.properties.template.options={},a.step.properties.template.options.top_element_style="large")}},a.handleQuickRepliesTypes=function(b,c){var d=a.step;"text"==b?(d.properties.quick_replies[c].title="",d.properties.quick_replies[c].content="",d.properties.quick_replies[c].url=""):(delete d.properties.quick_replies[c].title,delete d.properties.quick_replies[c].content,delete d.properties.quick_replies[c].url)},a.moveComponentButton=function(b,c,d,e){for(var f=a.step,g=d.split("."),h=f,i=0;i<g.length;i++)h=h[g[i]];if(h)if("up"==b)if(e){for(var i=c;i>0;i--)if(h[i-1]=h.splice(i,1,h[i-1])[0],h[i].type==e)return}else{if(0==c)return;h[c-1]=h.splice(c,1,h[c-1])[0]}else if(e){for(var i=c;i<h.length-1;i++)if(h[i+1]=h.splice(i,1,h[i+1])[0],h[i].type==e)return}else{if(c==h.length-1)return;h[c+1]=h.splice(c,1,h[c+1])[0]}},a.addNextAction=function(b,c,e,f,g){g=g||"next",d.addComponent({component:b,type:c,metaType:e,copied:f}).then(function(b){a.step.action[g]=b})},a.autosave=function(){d.step=Object.assign(d.step,a.step),d.validate(),d.autosave(),d.updateScenarioConnections(),b.close()},a.close=function(){b.close()},setTimeout(function(){if($(".section-container.active input").length){var a=$(".section-container.active input, .section-container.active textarea").toArray().reverse();angular.forEach(a,function(a){a.focus(),a.blur()})}},500)}],resolve:{}}).result.then(function(a){},function(a){})};if(j.get("remember_required"))a();else{i.open({templateUrl:"views/visual-warning.html",controller:["$scope","$cookies","$uibModalInstance",function(b,c,d){b.remember_required=!1,b.proceed=function(){if(b.remember_required){var e=new Date,f=new Date(e.getTime()+72e5);c.put("remember_required",b.remember_required,{expires:f})}d.close(),a()},b.close=function(){d.close()},b.switchWarning=function(){b.remember_required=!b.remember_required}}]})}},"scenario"==d.step.component||"nested"==d.step.component){var v=[];d.scenarios.forEach(function(a){a.scenario_id!==d.currentScenario.scenario_id&&v.push(a)}),d.scenariousWithoutCurrent=v}d.setScenario=function(){if(d.errMsg="",d.step.properties.step){var a=!1;d.scenarios.forEach(function(b){b.scenario_id===d.step.properties.scenario&&b.steps.forEach(function(b){b.id===d.step.properties.step&&(a=!0)})}),a||(d.step.properties.step="",d.errMsg="Step is not in selected scenario")}d.autosave()},d.updateTags=function(){var a=[],b=[],c=[],e=[],f=[];
23d.tag.add.forEach(function(b){b.tag_id?a.push(b.tag_id):f.push(q(b.name).then(function(b){void 0!==b.data.tag_id&&a.push(b.data.tag_id)}))}),d.tag.remove.forEach(function(a){b.push(a.tag_id)}),d.tag.include.forEach(function(a){c.push(a.tag_id)}),d.tag.exclude.forEach(function(a){e.push(a.tag_id)}),Promise.all(f).then(function(){d.step.properties.add=a,d.step.properties.remove=b,d.step.properties.include=c,d.step.properties.exclude=e,d.drawScenarioConnections(),d.validate(),d.autosave()})},d.applyConditionPreset=function(){d.condition.preset&&"custom"!==d.condition.preset.value&&(d.step.properties.value=d.condition.preset.preset)},d.delayToMicrosecond=function(){switch(d.step.properties.measure_unit){case"seconds":d.step.properties.delay=1e3*d.delay.convertedValue;break;case"minutes":d.step.properties.delay=1e3*d.delay.convertedValue*60;break;case"hours":d.step.properties.delay=1e3*d.delay.convertedValue*60*60;break;case"days":d.step.properties.delay=1e3*d.delay.convertedValue*60*60*24;break;default:d.step.properties.delay=d.delay.convertedValue}},d.delayToMinutes=function(){switch(d.step.properties.measure_unit){case"hours":d.step.properties.delay=60*d.delay.convertedValue;break;case"days":d.step.properties.delay=60*d.delay.convertedValue*24;break;default:d.step.properties.delay=d.delay.convertedValue}},d.switchScheduleTime=function(){"between"==d.schedule.time?(d.step.properties.schedule||(d.step.properties.schedule={days:[],time:{}}),d.step.properties.schedule.time||(d.step.properties.schedule.time={})):d.step.properties.schedule.time=null},d.updateScheduleTimeFrom=function(){if(d.schedule.timeFrom){var a=new Date,b=a.getTimezoneOffset()/60,c=d.schedule.timeFrom.split(":"),e=parseInt(c[0])+b;e<0?e=24+e:e>=24&&(e-=24),d.step.properties.schedule.time.from={hour:e,minute:c[1]?parseInt(c[1]):0}}else delete d.step.properties.schedule.time.from},d.updateScheduleTimeTo=function(){if(d.schedule.timeTo){var a=new Date,b=a.getTimezoneOffset()/60,c=d.schedule.timeTo.split(":"),e=parseInt(c[0])+b;e<0?e=24+e:e>=24&&(e-=24),d.step.properties.schedule.time.to={hour:e,minute:c[1]?parseInt(c[1]):0}}else delete d.step.properties.schedule.time.to},d.switchScheduleDay=function(a){d.step.properties.schedule.days&&-1!==d.step.properties.schedule.days.indexOf(a)?d.step.properties.schedule.days=d.step.properties.schedule.days.filter(function(b){return 0+b!==0+a}):(d.step.properties.schedule.days||(d.step.properties.schedule.days=[]),d.step.properties.schedule.days.push(a))},d.isScheduleDaySelected=function(a){return d.step.properties.schedule.days&&-1!==d.step.properties.schedule.days.indexOf(a)},d.switchActionRequired=function(){d.step.properties.action_required=!d.step.properties.action_required,d.autosave()},d.switchIsLeadData=function(){d.step.properties.is_lead_data=!d.step.properties.is_lead_data,d.step.properties.is_lead_data?d.show_close_lead=!0:(d.step.properties.close_lead=!1,d.show_close_lead=!1),d.autosave()},d.switchCloseLead=function(){d.step.properties.close_lead=!d.step.properties.close_lead,d.autosave()},d.switchSelf=function(){d.step.properties.self=!d.step.properties.self,d.validate(),d.autosave()},d.progressPercentage=0,d.prevImg="",d.addFile=function(c,e,f,h){f||(f=c.type.split("/")[0],d.step.properties.type=f),"image"===f&&(d.prevImg=c),a.upload({url:b.host+"/attachment/"+f+"/"+g.id,data:{file:c}}).then(function(a){a&&a.data?("menu"==h?d.step.properties.image=a.data.url:"gallery"==h?d.step.properties.elements[d.step.properties.current].image=a.data.url:(d.step.properties.url=a.data.url,d.step.properties.name=c.name),"image"!==f&&(d.progressPercentage=0),d.errMsg="",d.attachmentsError=!1,d.autosave(),setTimeout(d.drawScenarioConnections,0)):(d.attachmentsError=!0,r())},function(a){d.errMsg=a.message,d.attachmentsError=!0,d.progressPercentage=0},function(a){d.progressPercentage=parseInt(100*a.loaded/a.total)})},d.validate=function(){setTimeout(function(){if(d.errCount=0,"service"===d.step.component&&d.step.meta&&"ethereum"===d.step.meta.type&&"CheckSignature"!==d.step.properties.method&&(d.errorMsg[1]||d.errorMsg[2]||d.errorMsg[3])&&(d.errorMsg[1]="",d.errorMsg[2]="",d.errorMsg[3]="",d.setError()),"attachment"===d.step.component&&(d.errMsg="",d.step.properties.url||(d.errMsg="File not uploaded.")),"tag"===d.step.component&&(d.errMsg="",d.step.meta&&"check_tags"===d.step.meta.type?d.step.properties.include.length||d.step.properties.exclude.length||(d.errMsg="Tags not set."):d.step.properties.tag||d.step.properties.add&&d.step.properties.add.length||d.step.properties.remove&&d.step.properties.remove.length||(d.errMsg="Tags not set.")),"rest"===d.step.component)if(d.errMsg="",d.step.meta&&"promo"==d.step.meta.type);else{if(d.step.properties.url||(d.errMsg="Request URL is required."),!d.errMsg)for(var a in d.step.properties.headers)d.step.properties.headers[a]||
23(d.errMsg="Header value is required.");d.errMsg||(d.step.properties.authorization.data?"Basic"!==d.step.properties.authorization.type&&"Didgest"!==d.step.properties.authorization.type||d.step.properties.authorization.data.user?"Basic"!==d.step.properties.authorization.type&&"Didgest"!==d.step.properties.authorization.type||d.step.properties.authorization.data.password?"Bearer"!==d.step.properties.authorization.type||"string"==typeof d.step.properties.authorization.data&&d.step.properties.authorization.data.match(/^[a-zA-Z_{}][\w{}]*(\.[\w{}]+)*$/)||(d.errMsg="Wrong storage name."):d.errMsg="Password is required.":d.errMsg="User is required.":"Basic"===d.step.properties.authorization.type||"Didgest"===d.step.properties.authorization.type?d.errMsg="User is required.":"Bearer"===d.step.properties.authorization.type&&(d.errMsg="Storage is required.")),d.errMsg||angular.forEach(d.step.properties.data,function(a,b){d.errMsg||("static"!==a.type||a.key?"static"!==a.type||a.value?"variable"!==a.type||a.key?"variable"!==a.type||a.param?"variable"!==a.type||a.param.match(/^[a-zA-Z_{}][\w{}]*(\.[\w{}]+)*$/)||(d.errMsg="Wrong storage property."):d.errMsg="Storage property is required.":d.errMsg="Storage key is required.":d.errMsg="Static value is required.":d.errMsg="Static key is required.")}),d.errMsg||("input"===d.step.save_type||void 0===d.step.save_type?d.step.properties.input?"string"==typeof d.step.properties.input&&d.step.properties.input.match(/^[a-zA-Z_{}][\w{}]*(\.[\w{}]+)*$/)||(d.errMsg="Wrong Save as key."):d.errMsg="Save as key is required.":"save"===d.step.save_type&&angular.forEach(d.step.properties.save,function(a,b){d.errMsg||(a.key?a.param?a.param.match(/^[a-zA-Z_{}][\w{}]*(\.[\w{}]+)*$/)||(d.errMsg="Wrong Save as property."):d.errMsg="Save as property is required.":d.errMsg="Save as key is required.")}))}"input"!==d.step.component||d.step.meta&&d.step.meta.type||setTimeout(function(){"Save reply or question must be set."!=d.errorMsg[0]&&"Save reply or question must be set."!=d.errorMsg[1]||!d.step.properties.save&&!d.step.properties.question||(d.errorMsg[0]="",d.errorMsg[1]="",d.setError())},0),"person"===d.step.component&&setTimeout(function(){"Person cannot be empty."!=d.errorMsg[0]||"delete"==d.step.properties.command||"update"==d.step.properties.command&&!d.step.properties.self||(d.errorMsg[0]="",d.setError()),d.errorMsg[1]&&"delete"==d.step.properties.command&&(d.errorMsg[1]="",d.setError()),d.errorMsg[2]&&"delete"==d.step.properties.command?(d.errorMsg[2]="",d.setError()):"Attribute or new value must be set."==d.errorMsg[2]&&(d.step.properties.profile||d.step.properties.attributes)&&(d.errorMsg[2]="",d.setError()),d.errorMsg[3]&&"delete"==d.step.properties.command?(d.errorMsg[3]="",d.setError()):"Attribute or new value must be set."==d.errorMsg[3]&&(d.step.properties.profile||d.step.properties.attributes)&&(d.errorMsg[3]="",d.setError())},0),"condition"===d.step.component&&d.errorMsg[2]&&"custom"!=d.condition.preset.value&&(d.errorMsg[2]="",d.setError()),"notification"===d.step.component&&(d.errorMsg[2]&&"push"==d.step.properties.type&&(d.errorMsg[2]="",d.setError()),d.errorMsg[3]&&"email"==d.step.properties.type&&(d.errorMsg[3]="",d.setError())),!d.errMsg&&d.errCount&&(d.errMsg=d.errCount+(1==d.errCount?" field":" fields")+" with an error")},0)},d.validate(),d.continueScenario=function(a,b,c,e,f,g,h){d.addComponent({scenario_id:a,column:b,group:c,component:e,type:f,metaType:g,category:h}).then(function(b){d.step.action.next=b,d.step.properties.scenario=a,d.step.properties.step=b,d.autosave(),d.updateScenarioConnections()})},d.trustSrc=function(a){return c.trustAsResourceUrl(a)},d.toggleVideoPlayer=function(a){d.player=angular.element($(a.target.parentNode.parentNode).find("video"))[0],d.isplaying?(d.player.pause(),d.isplaying=!1,clearInterval(d.durationInterval)):(t(),d.player.play(),d.duration=s(d.player.duration),d.durationInterval=setInterval(function(){d.duration=s(d.player.duration-d.player.currentTime),d.player.paused?d.isplaying=!1:d.isplaying=!0,d.$apply()},200),d.isplaying=!0,d.player.onended=function(){d.isplaying=!1,d.duration=s(d.player.duration),d.$apply(),clearInterval(d.durationInterval)})},d.toggleAudioPlayer=function(a){d.player=angular.element($(a.target.parentNode.parentNode).find("audio"))[0],d.isplaying?(d.player.pause(),d.isplaying=!1,
23clearInterval(d.durationInterval)):(t(),d.player.play(),d.duration=s(d.player.duration),d.durationInterval=setInterval(function(){d.duration=s(d.player.duration-d.player.currentTime),d.player.paused?d.isplaying=!1:d.isplaying=!0,d.$apply()},100),d.isplaying=!0,d.player.onended=function(){d.isplaying=!1,d.duration=s(d.player.duration),d.$apply(),clearInterval(d.durationInterval)})},d.hasConnections=function(){for(var a in d.step.action)if(d.step.action[a]&&"next"!=a)return!0;return!1},d.addGalleryButton=function(){var a,b={type:"suggest",title:"",content:""};"dynamic"==d.step.properties.type?(d.step.properties.buttons||(d.step.properties.buttons=[]),d.step.properties.buttons.push(b)):(a=d.step.properties.current,d.step.properties.elements[a].buttons||(d.step.properties.elements[a].buttons=[]),d.step.properties.elements[a].buttons.push(b)),d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.updateGalleryButton=function(a){var b;b="dynamic"==d.step.properties.type?d.step.properties.buttons[a]:d.step.properties.elements[d.step.properties.current].buttons[a],"suggest"==b.type?(delete b.url,delete b.webview):b.type,d.autosave()},d.deleteGalleryButton=function(a){"dynamic"==d.step.properties.type?d.step.properties.buttons.splice(a,1):d.step.properties.elements[d.step.properties.current].buttons.splice(a,1),d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.prevGalleryCard=function(){d.step.properties.elements;d.step.properties.current>0&&(d.step.properties.current--,d.autosave(),setTimeout(d.drawScenarioConnections,0))},d.nextGalleryCard=function(){var a=d.step.properties.elements;a[d.step.properties.current+1]||a.push({text:"",title:"",image:"",buttons:[]}),d.step.properties.current++,d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.removeGalleryCard=function(){d.step.properties.elements.splice(d.step.properties.current,1),d.step.properties.current>0&&d.step.properties.current--,d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.toggleModeGallery=function(){"dynamic"==d.step.properties.type?d.step.properties={type:"static",current:0,elements:[{text:"",title:"",image:"",buttons:[]}],template:{type:"generic"},quick_replies:[]}:d.step.properties={type:"dynamic",data:"",link:"",image:"",text:"",title:"",collapse:[],buttons:[],template:{type:"generic",options:{}},quick_replies:[]},d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.addTextPhrase=function(){d.step.properties.phrases||(d.step.properties.phrases=[]),d.step.properties.phrases.push(""),d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.deleteTextPhrase=function(a){d.step.properties.phrases.splice(a,1),d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.addButton=function(){var a={type:"suggest",title:"",content:{value:"",params:[]}};d.step.properties.buttons||(d.step.properties.buttons=[]),d.step.properties.buttons.push(a),d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.updateInputView=function(){setTimeout(d.drawScenarioConnections,0)},d.updateTextButton=function(a){var b;b=d.step.properties.buttons[a],"suggest"==b.type?(delete b.url,delete b.webview):"link"==b.type&&delete b.content,d.autosave()},d.deleteTextButton=function(a){d.step.properties.buttons.splice(a,1),d.autosave(),setTimeout(d.drawScenarioConnections,0)};var w=!1;d.showCopied=function(){return w},d.copyId=function(){w=!0;var a,b,c=document.getElementById("copy_id");c.value=d.step.id,c.select(),c.setSelectionRange(0,99999),document.execCommand("copy"),a=JSON.parse(JSON.stringify(d.step)),delete a.name,delete a.id,delete a.position,delete a.$$hashKey,b="next",delete a.action[b],d.setStepToCopy({obj:a}),setTimeout(function(){w=!1,d.$apply()},1500)},d.setError=function(){var a="";setTimeout(function(){angular.forEach(d.errorMsg,function(b){if(b)return void(a=b)}),d.errMsg=a},0)},d.resetActionRepliesMenu=function(a){a&&(a.action={type:"",step:null,scenario:null})},d.addRepliesMenu=function(){var a="ActMenu_"+l.makeId(4);d.step.properties.quick_replies||(d.step.properties.quick_replies=[]),d.step.properties.quick_replies.push({id:a,type:"text",title:"",content:"",action:{type:"",step:null,scenario:null}}),d.autosave(),setTimeout(function(){d.drawScenarioConnections(),$("#step_menu_reply_"+a+" input, #step_menu_reply_"+a+" textarea").focus()})}
23,d.changedReplieMenu=function(a,b,c){a.content=a.title,a.title?c&&13==c.keyCode&&b+1===d.step.properties.quick_replies.length&&d.addRepliesMenu():d.step.properties.quick_replies.length>1&&(d.deleteConnection({action:a.id}),d.step.properties.quick_replies.splice(b,1)),d.drawScenarioConnections(),d.autosave()},d.getJumperArrow=function(a,b){return b.position.column<a.position.column?"arrow_back":b.position.column>a.position.column?"arrow_forward":b.position.column==a.position.column&&b.position.group<a.position.group?"arrow_upward":b.position.column==a.position.column&&b.position.group>a.position.group?"arrow_downward":void 0},d.toggleSwitchMode=function(){var a,b,c,e;if(d.step.properties.all_match=!d.step.properties.all_match,d.step.properties.all_match)a=angular.copy(d.step.properties.switch),a.length>1&&(d.step.properties.switch=[a.shift()],a.forEach(function(a){delete d.step.action[a.name],d.step.properties.switch[0].conditions.push(a.conditions[0])}));else if(c=d.step.properties.switch[0].conditions.splice(1),c.length)for(;c.length;)e=c.shift(),b=angular.copy(l.getC("switch").switch[0]),b.name="Case_"+l.makeId(4),b.conditions=[e],d.step.properties.switch.push(b);d.autosave(),d.updateScenarioConnections()},d.addSwitchesConditionOrCase=function(){var a;a=l.getC("switch").switch[0],a.name="Case_"+l.makeId(4),d.step.properties.all_match?d.step.properties.switch[0].conditions.push(a.conditions[0]):d.step.properties.switch.push(a),d.autosave()},d.symbolCurrentCondition=function(a){var b;return b="collection"==d.step.component?d.conditionsFilter.find(function(b){return b.value===a}):d.condition.conditions.find(function(b){return b.name===a}),b?b.symbol:"="},d.collectionCommandsChange=function(a){"insert"==a?(delete d.step.properties.input,delete d.step.properties.filters):(d.step.properties.filters=[{field:"",condition:"equal",value:""}],delete d.step.properties.data)},d.setMailVariables=function(){if(d.step.properties.scope={},d.step.properties.name){var a=d.allMails.find(function(a){return d.step.properties.name===a.name});if(a)for(var b=0;b<a.variables.length;b++)d.step.properties.scope[a.variables[b]]=""}},d.getMailVariables=function(){if(d.step.properties.name){var a=d.allMails.find(function(a){return d.step.properties.name===a.name});if(a&&a.variables&&a.variables.length)return a.variables}return null},d.updatePersonCommand=function(){d.drawScenarioConnections(),"delete"==d.step.properties.command?(delete d.step.properties.profile,delete d.step.properties.attributes,delete d.step.properties.result,delete d.step.properties.self):("update"!=d.step.properties.command||d.step.properties.self)&&delete d.step.properties.person,d.validate(),d.autosave()},d.updateNotificationType=function(){"push"==d.step.properties.type&&delete d.step.properties.email,"email"==d.step.properties.type&&delete d.step.properties.user,d.validate(),d.autosave()},d.switchSubscriptionAutoposting=function(){d.step.properties.autoposting?delete d.step.properties.autoposting:d.step.properties.autoposting={command:"add",collections:[]},d.autosave()},d.addRestHeader=function(a){for(var b=Object.keys(d.step.properties.headers).length+1,c="header_"+b;void 0!=d.step.properties.headers[c];)b++,c="header_"+b;d.step.properties.headers[c]="",d.validate(),d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.deleteRestHeader=function(a){delete d.step.properties.headers[a],d.validate(),d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.updateRestAuthType=function(){"Bearer"==d.step.properties.authorization.type?"string"!=typeof d.step.properties.authorization.data&&(d.step.properties.authorization.data=""):"Basic"==d.step.properties.authorization.type||"Didgest"==d.step.properties.authorization.type?"object"!=typeof d.step.properties.authorization.data&&(d.step.properties.authorization.data={user:"",password:""}):d.step.properties.authorization.data=null,d.validate(),d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.addRestStaticProp=function(a){d.step.properties.data.push(new Object({type:"static",key:"",value:""})),d.validate(),d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.addRestVariableProp=function(a){d.step.properties.data.push(new Object({type:"variable",key:"",param:""})),d.validate(),d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.addRestSaveType=function(a){void 0===d.step.properties.save&&(d.step.properties.save=[]),d.step.properties.save.push(""),d.validate(),d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.spliceArrProp=function(a,b){a.splice(b,1),d.validate(),d.autosave(),setTimeout(d.drawScenarioConnections,0)},d.platform={platforms:[],added:!1},d.addPlatform=function(a){ 24a&&(d.step.properties.switch.push({conditions:[{true:!0,operator:"equal",target:a,value:"system.client.provider"}],operator:"and",name:a}),d.step.action[a]="",x(),d.platform.added=!0,setTimeout(function(){d.drawScenarioConnections(),d.platform.added=!1},0),d.validate(),d.autosave())},d.changePlatform=function(a){var b=d.step.properties.switch[a].conditions[0].target,c=d.step.properties.switch[a].name;c!==b&&(c?(d.step.properties.switch[a].conditions[0].target=c,d.step.action[c]=d.step.action[b],delete d.step.action[b]):(d.step.properties.switch.splice(a,1),delete d.step.action[b]),x(),setTimeout(function(){d.drawScenarioConnections()},0),d.validate(),d.autosave())};var x=function(){var a;a="switch"==d.step.component&&d.step.meta&&"platform"==d.step.meta.type?d.allPlatforms.filter(function(a){return!d.step.properties.switch.some(function(b){return b.name==a.value})}):d.allPlatforms,d.platform.platforms=angular.copy(a)};
24x(),d.$watch("allPlatforms",function(a,b){a!==b&&x()}),d.$watch("errMsg",function(a,b){d.errMsg?d.addError():void 0!==b&&d.clearError()})}}}]),angular.module("brnaiApp").directive("dragscroll",["$document",function(a){return{link:function(b,c,d){function e(a){a.stopPropagation()}function f(a){(a.originalEvent.movementX||a.originalEvent.movementY)&&(i=a.pageY-l,h=a.pageX-k,document.addEventListener("click",e,{capture:!0,once:!0}),c.css({top:i+"px",left:h+"px"}),a.preventDefault())}function g(){a.off("mousemove",f),a.off("mouseup",g)}var h,i,j=c.parent(),k=0,l=0;c.css({position:"relative"}),j.on("mousedown",function(b){h=c[0].style.left?parseFloat(c[0].style.left):0,i=c[0].style.top?parseFloat(c[0].style.top):0,0!==b.button||["input","textarea","select"].includes(b.target.nodeName.toLocaleLowerCase())||b.target.className.search&&-1!==b.target.className.search("prevent-drag")||(k=b.pageX-h,l=b.pageY-i,a.on("mousemove",f),a.on("mouseup",g))})}}}]),angular.module("brnaiApp").controller("ProfileCtrl",["usersService","$scope","$http","$stateParams","Upload","getDomainData","Notification","$state","$uibModal",function(a,b,c,d,e,f,g,h,i){function j(){var a=b.user.avatar,c=a.lastIndexOf("/")+1;return a.substr(c)}function k(){b.inProgressTransactions=!0,a.getTransactions(d.id,b.filterTransactions).then(function(a){b.inProgressTransactions=!1,a.length?b.transactions.push.apply(b.transactions,a):b.filterTransactions.lastPage=!0})}b.user={},b.search_portals=[],b.transactions=[],b.uploaders={avatar:!1},b.inProgressTransactions=!1,b.filterTransactions={limit:20,page:0,lastPage:!1},b.roles=a.getRoles(),b.tfid={old_password:"",new_password:"",repeat_new_password:""},b.changePassword=function(){c.post("https://tfid.me/api/password",{old_password:b.tfid.old_password,new_password:b.tfid.new_password,repeat_new_password:b.tfid.repeat_new_password,email:b.user.email}).then(function(a){a.data.status?(g.success({message:"Password successfully updated."}),b.tfid={old_password:"",new_password:"",repeat_new_password:""}):g.error({message:a.data.error})})},a.getUserMe().then(function(a){b.user=a,b.avatar=j()}),b.loadMoreTransactions=function(){b.inProgressTransactions||b.filterTransactions.lastPage||(b.filterTransactions.page++,k())},b.addFile=function(a,c,d,g){e.upload({url:f.host+"/message/attachment/"+d,data:{file:a}}).then(function(a){b.uploaders[g]=!1,a.data.status&&(b.user[g]=a.data.url)},function(a){},function(a){b.uploaders[g]=!0})},b.updateUser=function(){a.updateUser(b.user).then(function(a){a.status&&g.success({message:'User "'+b.user.name+'" was successfully updated'})},function(a){})},b.getBalance=function(){return b.user.plan.balance<0?"- $"+Math.abs(b.user.plan.balance):b.user.plan.balance>0?"$"+Math.abs(b.user.plan.balance):0},b.showChangePlanModal=function(){i.open({templateUrl:"views/change-plan-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","$uibModal",function(a,b,c,d,e){a.plans=[{title:"Default plan",name:"default"},{title:"Free plan",name:"free"},{title:"Stopped",name:"stopped"}],a.plan=null,a.changePlan=function(){c.close({plan:a.plan})}}],windowClass:"edit-modal-window create"}).result.then(function(c){c.plan&&a.changePlan(b.user.id,c.plan).then(function(c){c.status&&a.getUser(d.id).then(function(a){b.user=a,b.user.portal_id=b.user.portal.portal_id})})},function(a){})}}]),angular.module("brnaiApp").controller("StatCrmCtrl",["$http","$scope","getDomainData","$q","$filter",function(a,b,c,d,e){b.isSummCalculated=!1,b.solvedTags=[{name:"allTime",count:0},{name:"today",count:0},{name:"min1day",count:0},{name:"min2day",count:0},{name:"min3day",count:0},{name:"min4day",count:0},{name:"min5day",count:0}],b.bots=[{name:"BuddyBandana IN",id:"2I26Z4FWZG"},{name:"BuddyBandana FB1",id:"23TUVMEL5L"},{name:"BuddyBandana FB2",id:"WB19GY3K4P"},{name:"Made by Meow IN",id:"27YX4YK4X1"},{name:"Made by Meow FB1",id:"00TFBB5UIK"},{name:"Made by Meow FB2",id:"A6QHRWD24H"},{name:"Mommy & Me IN",id:"DI2I9QQK5Z"},{name:"Mommy & Me FB1",id:"ZEP59KM0G5"},{name:"Mommy & Me FB2",id:"Q876YS9Q1D"}],b.getData=function(){var a=0;
24b.bots.forEach(function(c){b.getBotStatistics(c.id).then(function(d){c.allTime=d[0].data.statistics.tags,c.today=d[1].data.statistics.tags,c.min1day=d[2].data.statistics.tags,c.min2day=d[3].data.statistics.tags,c.min3day=d[4].data.statistics.tags,c.min4day=d[5].data.statistics.tags,c.min5day=d[6].data.statistics.tags,c.loaded=!0,++a===b.bots.length&&b.summTags()})})},b.getBotStatistics=function(e){var f=a.get(c.host+"/report/bot/statistics/"+e),g=a.get(c.host+"/report/bot/statistics/"+e,{params:{period:"today"}}),h=a.get(c.host+"/report/bot/statistics/"+e,{params:{date:b.calcDate(1)}}),i=a.get(c.host+"/report/bot/statistics/"+e,{params:{date:b.calcDate(2)}}),j=a.get(c.host+"/report/bot/statistics/"+e,{params:{date:b.calcDate(3)}}),k=a.get(c.host+"/report/bot/statistics/"+e,{params:{date:b.calcDate(4)}}),l=a.get(c.host+"/report/bot/statistics/"+e,{params:{date:b.calcDate(5)}});return d.all([f,g,h,i,j,k,l])},b.rangeTags=function(a){return a.forEach(function(b,c){if("Solved"===b.name||"solved"===b.name){var d=a.splice(c,1)[0];a.splice(a.length,0,d)}}),a},b.getTagCount=function(a,b){var c=0;return angular.forEach(a,function(a){a.name===b&&(c=a.count)}),c},b.calcDate=function(a){const b=new Date,c=b.setDate(b.getDate()-a);return e("date")(c,"yyyy-MM-dd")},b.summTags=function(){b.bots.forEach(function(a){a.allTime.forEach(function(a){"Solved"!==a.name&&"solved"!==a.name||(b.solvedTags[0].count+=a.count)}),a.today.forEach(function(a){"Solved"!==a.name&&"solved"!==a.name||(b.solvedTags[1].count+=a.count)}),a.min1day.forEach(function(a){"Solved"!==a.name&&"solved"!==a.name||(b.solvedTags[2].count+=a.count)}),a.min2day.forEach(function(a){"Solved"!==a.name&&"solved"!==a.name||(b.solvedTags[3].count+=a.count)}),a.min3day.forEach(function(a){"Solved"!==a.name&&"solved"!==a.name||(b.solvedTags[4].count+=a.count)}),a.min4day.forEach(function(a){"Solved"!==a.name&&"solved"!==a.name||(b.solvedTags[5].count+=a.count)}),a.min5day.forEach(function(a){"Solved"!==a.name&&"solved"!==a.name||(b.solvedTags[6].count+=a.count)})})},b.getData()}]),angular.module("brnaiApp").controller("ProfileMembersCtrl",["$scope","$http","storingservice","$cookies","Notification",function(a,b,c,d,e){function f(){a.inProgress||(a.inProgress=!0,c.getCustomers(h,a.options,g()).then(function(b){b.customers.length?angular.forEach(b.customers,function(b,c){a.members.push(b)}):a.options.lastPage=!0,a.inProgress=!1,a.loading=!1},function(b){a.members=[],a.inProgress=!1,a.loading=!1}))}function g(){var b={};for(var c in a.filters)if(a.filters.hasOwnProperty(c)){if(!a.filters[c].value)continue;b[c]=a.filters[c].value}return b}var h="48QQ2L8L53";a.typesList=["investor","consultant","partner","developer"],a.loading=!0,a.inProgress=!1,a.options={limit:30,offset:0,page:0,lastPage:!1},a.members=[],a.filters={},a.filterMembers=function(b){setTimeout(function(){a.options={limit:30,offset:0,page:0,lastPage:!1},a.members=[],f()},100)},a.loadMore=function(){a.inProgress||a.options.lastPage||(a.options.page++,f())},f()}]),angular.module("brnaiApp").controller("ProfileEmployeeCtrl",["$scope","$stateParams","Notification","profileService","$state","storage","$uibModal","$uibModalStack","Upload","getDomainData",function(a,b,c,d,e,f,g,h,i,j){const k=this;a.editingSectionCounter=0,a.isEditing=!1,a.userId=b.id,a.userData={},a.userProfile={},a.isLoaded=!1,a.isProfileEditable=!1,k.$onInit=function(){a.getUserProfile()},a.checkProfileOwner=function(){"admin"!==f.getItem("authData").role&&a.userData.login!==f.getItem("authData").email||(a.isProfileEditable=!0)},a.getUserProfile=function(){d.getEmploeeProfile(a.userId).then(function(b){if(!b)return void e.go("profile-members");a.userData=b.data,a.userProfile=a.userData.profile,a.isLoaded=!0,a.checkProfileOwner(),console.log(a.userProfile)},function(a){e.go("profile-members")})},a.updateUserProfile=function(){h.dismissAll(),d.updateEmploeeProfile(a.userId,a.userData).then(function(b){b.status&&(a.userData=b.data,a.userProfile=a.userData.profile,c.success({message:"Profile updated"}))},function(a){})},a.getLanguaugeLevel=function(a){switch(Number(a.level)){case 2:return"Basic";case 3:return"Intermediate";case 4:return"Upper Intermediate";case 5:return"Fluent"}},a.checkContacts=function(a){return!!(a.phone||a.skype||a.telegram||a.url||a.viber)},a.$on("updateProfile",function(b,c){a.updateUserProfile()}),a.uploadImg=function(b){a.progress=0,null!=b&&i.upload({url:j.host+"/message/attachment/image",data:{file:b}}).then(function(b){b.data&&(a.userProfile.avatar=b.data.url,d.updateEmploeeProfile(a.userId,a.userData).then(function(b){b.status&&(a.userData=b.data,a.userProfile=a.userData.profile,c.success({message:"Profile updated"}))},function(a){}))},function(a){})}
24,a.openModal=function(b,c){g.open({templateUrl:"views/profile/profile-modal.html",bindToController:!0,windowClass:"small-modal",scope:a})}}]),angular.module("brnaiApp").service("profileService",["$http","getDomainData",function(a,b){return{getEmploeeProfile:function(c){return a.get(b.host+"/customer/"+c)},updateEmploeeProfile:function(c,d){return a.put(b.host+"/customer/"+c,d)},getCompanyProfile:function(c){return a.get(b.host+"/merchant/"+c)},updateCompanyProfile:function(c,d){return a.put(b.host+"/merchant/"+c,d)},getUsersList:function(c){return a.get(b.host+"/customers/"+c)}}}]),angular.module("brnaiApp").controller("ProfileCompanyCtrl",["$scope","$stateParams","Notification","profileService","$state","storage","$uibModal","$uibModalStack","Upload","getDomainData",function(a,b,c,d,e,f,g,h,j,k){const l=this;a.isEditing=!1,a.companyId=b.id,a.companyData={},a.companyProfile={},a.isLoaded=!1,a.isProfileEditable=!1,a.usersList=[],a.selectedUser={},a.botId="48QQ2L8L53",l.$onInit=function(){a.getCompanyProfile()},a.getCompanyProfile=function(){d.getCompanyProfile(a.companyId).then(function(b){if(!b)return void e.go("profile-companies");a.companyData=b.data,a.companyProfile=a.companyData.profile,a.isLoaded=!0,a.checkProfileOwner(),console.log(b.data)},function(a){e.go("profile-companies")})},a.checkProfileOwner=function(){"admin"===f.getItem("authData").role&&(a.isProfileEditable=!0,a.getUsersList())},a.updateCompanyProfile=function(b){b&&h.dismissAll(),d.updateCompanyProfile(a.companyId,a.companyData).then(function(b){b.status&&(a.companyData=b.data,a.companyProfile=a.companyData.profile,c.success({message:"Profile updated"}))})},a.getUsersList=function(){d.getUsersList(a.botId).then(function(b){angular.forEach(b.data.customers,function(b,c){a.usersList.push({fullname:b.profile.firstname+" "+b.profile.lastname,firstname:b.profile.firstname,lastname:b.profile.lastname,id:b.customer_id,avatar:b.profile.avatar,type:b.profile.type,email:b.profile.email})}),console.log(a.usersList)},function(a){console.log(a)})},a.addUserToCompany=function(){const b=a.selectedUser.value;var c=!0;if(a.companyProfile.members.length){for(i=0;i<a.companyProfile.members.length;i++)if(a.companyProfile.members[i].id===b){c=!1;break}if(c)for(i=0;i<a.usersList.length;i++)if(a.usersList[i].id===b){a.companyProfile.members.push(a.usersList[i]),a.updateUserProfile(b);break}}else for(i=0;i<a.usersList.length;i++)if(a.usersList[i].id===b){a.companyProfile.members.push(a.usersList[i]),a.updateUserProfile(b);break}a.selectedUser={}},a.removeUserFromCompany=function(b){a.updateUserProfile(b,a.companyId)},a.updateUserProfile=function(b,c){c?d.getEmploeeProfile(b).then(function(e){if(e.status){var f=e.data;for(i=0;i<f.profile.companies.length;i++)if(f.profile.companies[i].id===c){f.profile.companies.splice(i,1),d.updateEmploeeProfile(b,f).then(function(c){if(c.status){for(i=0;i<a.companyProfile.members.length;i++)if(a.companyProfile.members[i].id===b){a.companyProfile.members.splice(i,1);break}a.updateCompanyProfile(!1)}});break}d.updateEmploeeProfile(b,f).then(function(b){b.status&&a.updateCompanyProfile(!1)})}}):d.getEmploeeProfile(b).then(function(c){if(c.status){var e=c.data;e.profile.companies.push({name:a.companyProfile.name,id:a.companyData.merchant_id,logo:a.companyProfile.logo}),d.updateEmploeeProfile(b,e).then(function(b){b.status&&a.updateCompanyProfile(!1)})}})},a.uploadImg=function(b){a.progress=0,null!=b&&j.upload({url:k.host+"/message/attachment/image",data:{file:b}}).then(function(b){b.data&&(a.companyProfile.logo=b.data.url,a.updateCompanyProfile(!1))})},a.addFile=function(c,d,e,f){j.upload({url:k.host+"/attachment/"+e+"/"+b.id,data:{file:c}}).then(function(b){if(b.data.status){if("prospectus"===f)a.companyProfile.prospectus=b.data.url;else if("factsheets"===f)a.companyProfile.factsheets=b.data.url;else{if("introduction"!==f)return;a.companyProfile.introduction.url=b.data.url}a.updateCompanyProfile(!1)}})},a.openModal=function(b,c){g.open({templateUrl:"views/profile/company-modal.html",bindToController:!0,windowClass:"small-modal",scope:a})}}]),angular.module("brnaiApp").controller("ProfileCompaniesCtrl",["$scope","$http","storingservice","$cookies","Notification",function(a,b,c,d,e){function f(){a.inProgress||(a.inProgress=!0,c.getMerchants(h,a.options,g()).then(function(b){console.log(b),b.merchants.length?angular.forEach(b.merchants,function(b,c){a.companies.push(b)}):a.options.lastPage=!0,a.inProgress=!1,a.loading=!1},function(b){a.companies=[],a.inProgress=!1,a.loading=!1}))}function g(){var b={};for(var c in a.filters)if(a.filters.hasOwnProperty(c)){if(!a.filters[c].value)continue;b[c]=a.filters[c].value}return b}var h="48QQ2L8L53";a.loading=!0,a.inProgress=!1,a.options={limit:30,offset:0,page:0,lastPage:!1},a.companies=[],a.filters={},a.filterCompanies=function(b){setTimeout(function(){a.options={limit:30,offset:0,page:0,lastPage:!1},a.companies=[],f()},100)}
24,a.loadMore=function(){a.inProgress||a.options.lastPage||(a.options.page++,f())},f()}]),angular.module("brnaiApp").directive("profileEducation",["$rootScope","$timeout",function(a,b){return{restrict:"EA",templateUrl:"views/profile/profile-education.html",transclude:!0,scope:!0,link:function(c,d,e){c.editingIndex=void 0,c.newEducation={ended:"",started:"",degree:"",university:""},c.$parent.$watch("isEditing",function(a,b){a||void 0===c.editingIndex||c.closeAllForms()}),c.addItem=function(){c.editingIndex=void 0,c.userProfile.education.unshift(c.newEducation),c.newEducation={ended:"",started:"",degree:"",university:""},a.$broadcast("updateProfile")},c.addItemCancel=function(){c.closeAllForms()},c.updateItem=function(){c.editingIndex=void 0,a.$broadcast("updateProfile")},c.removeItem=function(b){c.editingIndex=void 0,c.userProfile.education.splice(b,1),a.$broadcast("updateProfile")},c.isEditing=function(a){if(a===c.editingIndex)return!0},c.openEditForm=function(a){if(c.editingIndex===a)return void(c.editingIndex=void 0);c.$parent.isEditing&&void 0===c.editingIndex?(c.$parent.isEditing=!1,b(function(){c.editingIndex=a,c.$parent.isEditing=!0},0)):(c.$parent.isEditing=!0,c.editingIndex=a)},c.closeAllForms=function(){c.editingIndex=void 0,c.newEducation={ended:"",started:"",degree:"",university:""}}}}}]),angular.module("brnaiApp").directive("profileExperience",["$rootScope","$timeout",function(a,b){return{restrict:"EA",templateUrl:"views/profile/profile-experience.html",transclude:!0,scope:!0,link:function(c,d,e){c.editingIndex=void 0,console.log("TEST"),c.newExperience={ended:"",started:"",degree:"",university:""},c.$parent.$watch("isEditing",function(a,b){a||void 0===c.editingIndex||c.closeAllForms()}),c.addItem=function(){c.editingIndex=void 0,c.userProfile.experience.unshift(c.newExperience),c.newExperience={ended:"",started:"",position:"",company:""},a.$broadcast("updateProfile")},c.addItemCancel=function(){c.editingIndex=void 0,c.newExperience={ended:"",started:"",position:"",company:""}},c.updateItem=function(){c.editingIndex=void 0,a.$broadcast("updateProfile")},c.removeItem=function(b){c.editingIndex=void 0,c.userProfile.experience.splice(b,1),a.$broadcast("updateProfile")},c.isEditing=function(a){if(a===c.editingIndex)return!0},c.openEditForm=function(a){if(c.editingIndex===a)return void(c.editingIndex=void 0);c.$parent.isEditing&&void 0===c.editingIndex?(c.$parent.isEditing=!1,b(function(){c.editingIndex=a,c.$parent.isEditing=!0},0)):(c.$parent.isEditing=!0,c.editingIndex=a)},c.closeAllForms=function(){c.editingIndex=void 0,c.newExperience={ended:"",started:"",position:"",company:""}}}}}]),angular.module("brnaiApp").directive("profileExpertise",["$rootScope","$timeout",function(a,b){return{restrict:"EA",templateUrl:"views/profile/profile-expertise.html",transclude:!0,scope:!0,link:function(c,d,e){c.editingIndex=void 0,c.levels=[1,2,3,4,5,6,7],c.newExpertise={skill:"",years:null,level:null},c.$parent.$watch("isEditing",function(a,b){a||void 0===c.editingIndex||c.closeAllForms()}),c.addItem=function(){c.editingIndex=void 0,c.userProfile.expertise.unshift(c.newExpertise),c.newExpertise={skill:"",years:null,level:null},a.$broadcast("updateProfile")},c.addItemCancel=function(){c.closeAllForms()},c.updateItem=function(){c.editingIndex=void 0,a.$broadcast("updateProfile")},c.removeItem=function(b){c.editingIndex=void 0,c.userProfile.expertise.splice(b,1),a.$broadcast("updateProfile")},c.isEditing=function(a){if(a===c.editingIndex)return!0},c.openEditForm=function(a){if(c.editingIndex===a)return void(c.editingIndex=void 0);c.$parent.isEditing&&void 0===c.editingIndex?(c.$parent.isEditing=!1,b(function(){c.editingIndex=a,c.$parent.isEditing=!0},0)):(c.$parent.isEditing=!0,c.editingIndex=a)},c.closeAllForms=function(){c.editingIndex=void 0,c.newExpertise={skill:"",years:null,level:null}}}}}]),angular.module("brnaiApp").directive("profileExperiments",["$rootScope","$timeout",function(a,b){return{restrict:"EA",templateUrl:"views/profile/profile-experiments.html",transclude:!0,scope:!0,link:function(c,d,e){c.editingIndex=void 0,c.newExperiment={title:"",started:"",ended:""},c.$parent.$watch("isEditing",function(a,b){a||void 0===c.editingIndex||c.closeAllForms()}),c.addItem=function(){c.editingIndex=void 0,c.userProfile.experiments.unshift(c.newExperiment),c.newExperiment={title:"",started:"",ended:""},a.$broadcast("updateProfile")},c.addItemCancel=function(){c.closeAllForms()},c.updateItem=function(){c.editingIndex=void 0,a.$broadcast("updateProfile")},c.removeItem=function(b){c.editingIndex=void 0,c.userProfile.experiments.splice(b,1),a.$broadcast("updateProfile")}
24,c.isEditing=function(a){if(a===c.editingIndex)return!0},c.openEditForm=function(a){if(c.editingIndex===a)return void(c.editingIndex=void 0);c.$parent.isEditing&&void 0===c.editingIndex?(c.$parent.isEditing=!1,b(function(){c.editingIndex=a,c.$parent.isEditing=!0},0)):(c.$parent.isEditing=!0,c.editingIndex=a)},c.closeAllForms=function(){c.editingIndex=void 0,c.newExperiment={title:"",started:"",ended:""}}}}}]),angular.module("brnaiApp").directive("profileExtras",["$rootScope","$timeout",function(a,b){return{restrict:"EA",templateUrl:"views/profile/profile-extras.html",transclude:!0,scope:!0,link:function(c,d,e){c.editingIndex=void 0,c.newExtra={activity:"",started:"",ended:""},c.$parent.$watch("isEditing",function(a,b){a||void 0===c.editingIndex||c.closeAllForms()}),c.addItem=function(){c.editingIndex=void 0,c.userProfile.activities.unshift(c.newExtra),c.newExtra={activity:"",started:"",ended:""},a.$broadcast("updateProfile")},c.addItemCancel=function(){c.closeAllForms()},c.updateItem=function(){c.editingIndex=void 0,a.$broadcast("updateProfile")},c.removeItem=function(b){c.editingIndex=void 0,c.userProfile.activities.splice(b,1),a.$broadcast("updateProfile")},c.isEditing=function(a){if(a===c.editingIndex)return!0},c.openEditForm=function(a){if(c.editingIndex===a)return void(c.editingIndex=void 0);c.$parent.isEditing&&void 0===c.editingIndex?(c.$parent.isEditing=!1,b(function(){c.editingIndex=a,c.$parent.isEditing=!0},0)):(c.$parent.isEditing=!0,c.editingIndex=a)},c.closeAllForms=function(){c.editingIndex=void 0,c.newExtra={activity:"",started:"",ended:""}}}}}]),angular.module("brnaiApp").directive("crmTagGroup",["crmService",function(a){return{restrict:"EA",templateUrl:"views/crm-tag-group.html",transclude:!0,scope:!0,link:function(b,c,d){b.matchListOpened=!1,b.notMatchListOpened=!1,b.editingTagId=null,b.editingTag=null,b.tagColors=["#94cc25","#f5a623","#d0021b","#9013fe","#4a90e2","#969696"];var e=function(a){c[0].contains(a.target)||b.updateTagGroups()};c.bind("scroll mousewheel",function(a){a.stopPropagation()}),b.$on("$destroy",function(){$(document).off("click",e),c.unbind("scroll mousewheel")}),b.init=function(){setTimeout(function(){$(document).on("click",e)},100)},b.editTagInTagGroup=function(a,c){c.stopPropagation(),b.matchListOpened=!1,b.notMatchListOpened=!1,b.editingTagId=a,b.filterData.tags.forEac
24h(function(c){c.tag_id===a&&(b.editingTag=c)})},b.isTagEditing=function(a){return b.editingTagId===a},b.closeAllOpenPopups=function(a){a.stopPropagation(),b.matchListOpened=!1,b.notMatchListOpened=!1,b.editingTagId=null,b.editingTag=null},b.isTagAvaliable=function(a){return!b.tagGroupEditing.filter.match.concat(b.tagGroupEditing.filter.not_match).includes(a)},b.isColorSelected=function(a,c){return b.editingTag.color===c},b.getTagName=function(a){var c="";if(b.filterData.tags.forEach(function(b){b.tag_id===a&&(c=b.name)}),c)return c},b.getTagColor=function(a){var c="";if(b.filterData.tags.forEach(function(b){b.tag_id===a&&(c=b.color)}),c)return c},b.setTagColor=function(c,d){var e={bot_id:b.botId,name:b.editingTag.name,color:d};a.updateTag(c,e).then(function(a){a.data.status&&(b.editingTag.color=d)})},b.removeTagFromGroup=function(a,c,d){if(d.stopPropagation(),c){var e=b.tagGroupEditing.filter.match.indexOf(a);e>-1&&b.tagGroupEditing.filter.match.splice(e,1)}else{var e=b.tagGroupEditing.filter.not_match.indexOf(a);e>-1&&b.tagGroupEditing.filter.not_match.splice(e,1)}},b.removeTagGroup=function(){var a=b.tagGroups.indexOf(b.tagGroupEditing);b.tagGroups.splice(a,1),b.updateTagGroups()},b.openMatchList=function(a){a.stopPropagation(),b.notMatchListOpened=!1,!0===b.matchListOpened?b.matchListOpened=!1:b.matchListOpened=!0},b.openNotMatchList=function(a){a.stopPropagation(),b.matchListOpened=!1,b.editingTagId=null,b.editingTag=null,!0===b.notMatchListOpened?b.notMatchListOpened=!1:b.notMatchListOpened=!0},b.addTagToMatchList=function(a,c){c.stopPropagation(),b.matchListOpened=!1,b.editingTagId=null,b.editingTag=null,b.tagGroupEditing.filter.match.push(a)},b.addTagToNotMatchList=function(a,c){c.stopPropagation(),b.notMatchListOpened=!1,b.tagGroupEditing.filter.not_match.push(a)},b.init()}}}]),angular.module("brnaiApp").directive("crmTag",["crmService",function(a){return{restrict:"EA",templateUrl:"views/crm-tag.html",transclude:!0,scope:!0,link:function(a,b,c){var d=function(c){b[0].contains(c.target)||a.updateTags()};b.bind("scroll mousewheel",function(a){a.stopPropagation()}),a.$on("$destroy",function(){$(document).off("click",d),b.unbind("scroll mousewheel")}),a.init=function(){setTimeout(function(){$(document).on("click",d)},100)},a.init()}}}]),angular.module("brnaiApp").directive("visualComponentMenu",[function(){return{restrict:"EA",templateUrl:"views/visual-component-menu.html",replace:!0,scope:{availableComponents:"=",stepToCopy:"=",isFirst:"=",scenario:"=",addComponent:"&",hideExisting:"=",selectExisting:"&",expertMode:"=",switchExpertMode:"&"},link:function(a,b,c){a.getComponent=function(b){for(var c in a.availableComponents){var d=a.availableComponents[c];for(var e in d.components){var f=d.components[e];if(f.components)var g=f.components.find(function(a){return b.meta&&b.meta.type?a.component===b.component&&a.metaType===b.meta.type:a.component===b.component&&!a.metaType});else g=b.meta&&b.meta.type?f.component===b.component&&f.metaType===b.meta.type?f:null:f.component!==b.component||f.metaType?null:f;if(g)return g}}},a.getBeginnerComponents=function(){var b=[];for(var c in a.availableComponents){var d=a.availableComponents[c];for(var e in d.components){var f=d.components[e];if(f.components)for(var g in f.components){var h=f.components[g];h.beginner&&b.push(h)}else f.beginner&&b.push(f)}}return b}}}}]),angular.module("brnaiApp").directive("visualTestWidget",[function(){return{templateUrl:"views/visual-test-widget.html",restrict:"E",scope:{options:"=?",toggleWidget:"&"},controllerAs:"vm",controller:["$scope","$stateParams","$http","getDomainData","$cookies","Auth","storage",function(a,b,c,d,e,f,g){function h(){for(var a="",b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",c=0;c<15;c++)a+=b.charAt(Math.floor(Math.random()*b.length));return a}a.voice=null,a.debugMessages=[],a.widget_token="",a.messages=[],a.message={text:""},a.isConsole=!1,a.options=a.options?a.options:{},angular.extend(a.options,{clearData:function(){a.messages=[]}});var i=g.getItem("authData"),j=new Faye.Client(d.faye,{timeout:20,retry:5});new Faye.Client(d.faye,{timeout:20,retry:5}).subscribe("/messages_"+f.getUser().account_id,function(b){a.messages.push(b),a.$digest()}
24),j.subscribe("/log_"+b.id,function(b){b.messages.forEach(function(b){a.debugMessages.push(b)}),a.$digest()}),a.toogleConsole=function(){a.isConsole=!a.isConsole},a.sendMessage=function(){c.post(d.host+"/message/debug",{user_id:f.getUser().account_id,type:"text",content:{text:a.message.text},bot_id:b.id},{headers:{"X-Access-Token":i.access_token}}).then(function(b){a.message.text=""},function(a){})},e.getObject("user_widget_token_test")?a.widget_token=e.getObject("user_widget_token_test"):(e.putObject("user_widget_token_test",h()),a.widget_token=e.getObject("user_widget_token_test")),c.get(d.host+"/widget/messages/"+b.id+"/"+a.widget_token).then(function(b){b.data.messages&&b.data.messages&&(a.messages=b.data.messages)},function(a){}),c.get(d.host+"/bot/"+b.id).then(function(b){1==b.data.status&&(a.bot=b.data)},function(a){})}]}}]),angular.module("brnaiApp").directive("crmChat",["crmService","getDomainData","Upload","storage",function(a,b,c,d){return{templateUrl:"views/crm-chat.html",restrict:"E",scope:{client:"="},link:function(e,f,g){e.clientMessages=[],e.options={offset:0,limit:20,isFullyLoaded:!1},e.messageText="",e.suggestions=[],e.infoMode=void 0===d.getItem("infoMode")||d.getItem("infoMode"),console.log(d.getItem("infoMode2")),e.chatBody=f.find(".crm-chat__body"),e.isLoading=!1,e.scenarios=[],e.fayeChanel,e.toggleInfoMode=function(){e.infoMode=!e.infoMode,d.setItem("infoMode",e.infoMode)},e.checkHeight=function(){setTimeout(function(){0===e.chatBody.scrollTop()&&e.loadClientMessages()},0)},e.scrollBottom=function(){e.chatBody.scrollTop(e.chatBody[0].scrollHeight)},e.isUserOnline=function(a){return new Date-Date.parse(a)<3e5},e.loadClientMessages=function(){e.isLoading||e.options.isFullyLoaded||(e.isLoading=!0,a.getClientMessages(e.client.bot_id,e.client.client_id,e.options.offset).then(function(a){e.clientMessages=a.data.messages.concat(e.clientMessages),e.options.offset+=a.data.messages.length,a.data.messages.length<e.options.limit&&(e.options.isFullyLoaded=!0),e.isLoading=!1,e.checkHeight()}))},e.getScenarios=function(){a.getScenarios(e.client.bot_id).then(function(a){1==a.data.status&&(e.scenarios=a.data.scenarios)},function(a){e.scenarios=[]})},e.runScenario=function(b){a.runScenario(e.client.client_id,b).then(function(a){},function(a){})},e.changeDialogMode=function(){var b="auto"===e.client.mode?"manual":"auto",c={mode:b,bot_id:e.client.bot_id};a.changeDialogMode(e.client.client_id,c).then(function(a){a.data&&a.data.status&&(e.client.mode=b)})},e.sendMessage=function(){if(e.messageText){const b={type:"text",content:{text:e.messageText}};a.sendTextMessage(e.client.client_id,b).then(function(a){e.scrollBottom(),e.messageText=""})}},e.addAttachment=function(d,f,g){var h={content:{}};d&&d.type&&(d.type.indexOf("image")>-1?(h.type="image",h.content.url=b.host+"/attachment/image/"+e.client.bot_id):(h.type="file",h.content.url=b.host+"/attachment/file/"+e.client.bot_id,h.content.name=d.name),c.upload({url:h.content.url,data:{file:d}}).then(function(b){b.data.status?(h.content.url=b.data.url,a.sendTextMessage(e.client.client_id,h).then(function(a){setTimeout(function(){e.scrollBottom()},30)},function(a){})):alert(b.data.error)},function(a){console.log(a)}))},e.callSuggest=function(){e.messageText?a.callSuggest(e.client.bot_id,e.messageText).then(function(a){e.suggestions=a.data.suggestions}):e.suggestions=[]},e.selectSuggest=function(b,c){b.stopPropagation();var d;d=c.image?{type:"image",content:{url:c.image}}:{type:"text",content:{text:c.text}},a.sendTextMessage(e.client.client_id,d).then(function(a){e.scrollBottom(),e.messageText="",e.suggestions=[]})},e.startFayeChanel=function(){const a=new Faye.Client(b.faye,{timeout:20,retry:5});e.fayeChannel=a.subscribe("/bot_"+e.client.bot_id,function(a){if(a.client_id===e.client.client_id){var b={author:a.author,message:a.message,created:a.created,source:a.source,scores:a.scores};"client"===a.author&&(e.client.statistics.last_sent=a.created),e.clientMessages.push(b),e.$apply()}})},e.destroyFayeChanel=function(){e.fayeChannel.cancel()},e.chatBody.bind("scroll mousewheel",function(a){a.stopPropagation(),e.chatBody.scrollTop()<=120&&(e.options.isFullyLoaded||e.chatBody.scrollTop(120),e.loadClientMessages())}),e.$watch("client",function(){e.clientMessages.length&&(e.clientMessages=[],e.options={offset:0,limit:20,isFullyLoaded:!1},e.messageText="",e.scrollBottom(),e.loadClientMessages(),e.getSce
24narios())}),e.loadClientMessages(),e.startFayeChanel(),e.getScenarios(),e.$on("$destroy",function(){e.destroyFayeChanel()})}}}]),angular.module("brnaiApp").directive("crmChatP",["crmService","getDomainData","Upload","storage","$uibModal",function(a,b,c,d,e){return{templateUrl:"views/crm-chat-p.html",restrict:"E",scope:{person:"="},link:function(f,g,h){function i(){const a=f.person.statistics.last_message.provider||null;if(a)f.person.clients.forEach(function(b){b.provider===a&&(b.bot_id=f.person.bot_id,b.statistics={},b.statistics.last_sent=b.statistics.last_sent||f.person.statistics.last_sent,f.client=b)});else{f.person.clients[0].bot_id=f.person.bot_id,f.client=f.person.clients[0]}}function j(){f.startFayeChannel()}function k(){return $("input").each(function(){$(this).trigger("blur")}),!($(".ng-invalid").length>0)||(setTimeout(function(){$($(".ng-invalid")[0]).trigger("focus"),$scope.$apply()},100),!1)}f.clientMessages=[],f.options={offset:0,limit:20,isFullyLoaded:!1},f.messageText="",f.suggestions=[],f.isChannelSelected=!1,f.infoMode=void 0===d.getItem("infoMode")||d.getItem("infoMode"),f.chatBody=g.find(".crm-chat__body"),f.isLoading=!1,f.scenarios=[],f.fayeChannel,f.client,f.fullscreenMode=!1,f.enableFullscreen=function(){f.fullscreenMode=!0},f.disableFullscreen=function(){f.fullscreenMode=!1},f.toggleInfoMode=function(){f.infoMode=!f.infoMode,d.setItem("infoMode",f.infoMode)},f.openChannelsPopup=function(){f.isChannelSelected?f.isChannelSelected=!1:f.isChannelSelected=!0},f.closeChannelsPopup=function(){f.isChannelSelected=!1},f.getChannelIcon=function(a){ 25return"store"===a?"images/logos/widget.png":"instagram"===a?"images/socials/instagram.png":"images/logos/"+a+".png"},f.changeDialogChannel=function(a){var b=a;b.bot_id=f.person.bot_id,b.statistics={},b.statistics.last_sent=f.person.statistics.last_sent,f.client=b},f.checkHeight=function(){setTimeout(function(){0===f.chatBody.scrollTop()&&f.loadClientMessages()},0)},f.scrollBottom=function(){f.chatBody.scrollTop(f.chatBody[0].scrollHeight)},f.isUserOnline=function(a){return new Date-Date.parse(a)<3e5},f.loadClientMessages=function(){f.isLoading||f.options.isFullyLoaded||(f.isLoading=!0,a.getClientMessages(f.client.bot_id,f.client.client_id,f.options.offset).then(function(a){f.clientMessages=a.data.messages.concat(f.clientMessages),f.options.offset+=a.data.messages.length,a.data.messages.length<f.options.limit&&(f.options.isFullyLoaded=!0),f.isLoading=!1,f.checkHeight()}))},f.getScenarios=function(){a.getScenarios(f.person.bot_id).then(function(a){1==a.data.status&&(f.scenarios=a.data.scenarios)},function(a){f.scenarios=[]})},f.runScenario=function(b){a.runScenario(f.client.client_id,b).then(function(a){},function(a){})},f.changeDialogMode=function(){var b="auto"===f.client.mode?"manual":"auto",c={mode:b,bot_id:f.client.bot_id};a.changeDialogMode(f.client.client_id,c).then(function(a){a.data&&a.data.status&&(f.client.mode=b)})},f.sendMessage=function(){if(f.messageText){const b={type:"text",content:{text:f.messageText}};a.sendTextMessage(f.client.client_id,b).then(function(a){f.scrollBottom(),f.messageText=""})}},f.addAttachment=function(d,e,g){var h={content:{}};d&&d.type&&(d.type.indexOf("image")>-1?(h.type="image",h.content.url=b.host+"/attachment/image/"+f.client.bot_id):(h.type="file",h.content.url=b.host+"/attachment/file/"+f.client.bot_id,h.content.name=d.name),c.upload({url:h.content.url,data:{file:d}}).then(function(b){b.data.status?(h.content.url=b.data.url,a.sendTextMessage(f.client.client_id,h).then(function(a){setTimeout(function(){f.scrollBottom()},30)},function(a){})):alert(b.data.error)},function(a){console.log(a)}))},f.callSuggest=function(){f.messageText?a.callSuggest(f.client.bot_id,f.messageText).then(function(a){f.suggestions=a.data.suggestions}):f.suggestions=[]},f.selectSuggest=function(b,c){b.stopPropagation();var d;d=c.image?{type:"image",content:{url:c.image}}:{type:"text",content:{text:c.text}},a.sendTextMessage(f.client.client_id,d).then(function(a){f.scrollBottom(),f.messageText="",f.suggestions=[]})},f.startFayeChannel=function(){const a=new Faye.Client(b.faye,{timeout:20,retry:5});f.fayeChannel=a.subscribe("/bot_"+f.person.bot_id,function(a){if
25(a.client_id===f.client.client_id){var b={author:a.author,message:a.message,created:a.created,source:a.source,scores:a.scores};"client"===a.author&&(f.client.statistics.last_sent=a.created),f.clientMessages.push(b),f.$apply()}})},f.destroyFayeChannel=function(){f.fayeChannel.cancel()},f.chatBody.bind("scroll mousewheel",function(a){a.stopPropagation(),f.chatBody.scrollTop()<=120&&(f.options.isFullyLoaded||f.chatBody.scrollTop(120),f.loadClientMessages())}),f.$watch("client",function(){f.client&&(f.clientMessages=[],f.isChannelSelected=!1,f.options={offset:0,limit:20,isFullyLoaded:!1},f.messageText="",f.scrollBottom(),f.loadClientMessages(),f.getScenarios())}),f.$watch("person",function(){i()}),j(),f.$on("$destroy",function(){f.destroyFayeChannel()}),f.newIntentModal=function(a,c){e.open({templateUrl:"views/widget/create-intent.html",windowClass:"large-modal no-border-modal no-shadow-modal",controller:["$scope","$stateParams","learningService","$uibModalInstance","Notification","$http",function(d,e,f,g,h,i){i.get(b.host+"/scenarios/"+e.id).then(function(a){a.data.status&&(d.bot_scenarios=a.data.scenarios)},function(a){}),d.isSendtoUser=c,d.reply={name:""},d.text=a,d.intent_types=[{type:"scenario",label:"Scenario"},{type:"reply",label:"Reply"}],d.newIntent={name:"",response:{type:d.intent_types[1].type,scenario_id:null}},d.intents=[],f.getIntents(e.id,"").then(function(a){d.intents=a},function(a){d.intents=[]}),d.close=function(){g.close({status:"ok",data:null})},d.addReply=function(){d.reply.name.length&&(void 0==d.newIntent.response.replies?(delete d.newIntent.response.scenario_id,d.newIntent.response.replies=[],d.newIntent.response.replies.push(d.reply.name)):d.newIntent.response.replies.push(d.reply.name),d.reply.name="")},d.handleScenarioChange=function(){delete d.newIntent.response.replies},d.deleteReply=function(a){d.newIntent.response.replies.splice(a,1)},d.addNewIntent=function(a){if(k())return void(""==d.newIntent.name&&h.error({delay:6e4,message:"Some required fields are empty"}));d.newIntent={bot_id:e.id,name:d.newIntent.name,expressions:[{text:d.text}],response:d.newIntent.response},f.createIntent(d.newIntent).then(function(b){b.status?(h.success({message:'Intent "'+d.newIntent.name+'" was successfully created'}),a?g.close({status:"create_send",data:b.intent.intent_id}):g.close({status:"create",data:null})):(h.error({delay:6e4,message:'Intent "'+d.newIntent.name+"\" wasn't created"}),g.close({status:"error",data:null}))})}}]}).result.then(function(a){"create_send"===a.status&&learningService.runIntent(a.data,$scope.sliderClient.client_id).then(function(a){})},function(a){})}}}}]),angular.module("brnaiApp").directive("crmChatMessage",["$uibModal","$window",function(a,b){return{templateUrl:"views/crm-chat-message.html",restrict:"E",scope:{message:"="},link:function(a,c,d){a.bot_id=a.$parent.client.bot_id,a.infoMode=!1,a.isPopoverOpen=!1,a.parent=a.$parent.$parent.$parent.$parent.$parent.$parent.$parent,a.$parent.$watch("infoMode",function(b){a.infoMode=b}),a.selectedText="",a.getScore=function(a){return Math.round(a)},a.getScoreClass=function(a){return a>66.67?"scores--green":a>33.33?"scores--yellow":"scores--red"},a.getSelectedText=function(){var c=b.getSelection().toString(),d=b.getSelection().focusNode.data;if(c&&d){if(!d.includes(c))return void(a.selectedText="");a.selectedText=c,a.openIntentPopover()}},a.openIntentPopover=function(){if(!a.isPopoverOpen)return void(a.isPopoverOpen=!0);a.selectedText=""},a.closePopover=function(){a.selectedText="",a.isPopoverOpen=!1},a.toggleNewIntent=function(){a.selectedText&&(a.parent.newIntentModal(a.selectedText),a.closePopover())},a.toggleExistIntent=function(){a.parent.existIntentModal(a.selectedText),a.closePopover()},a.toggleExistIntentAsResponse=function(){a.parent.existIntentAsResponseModal(a.selectedText),a.closePopover()},a.isOnTop=function(){return c.offset().top<440}}}}]),angular.module("brnaiApp").controller("StorePersonsCtrl",["$scope","$http","storingservice","$stateParams","getDomainData","$cookies","Notification","$location",function(a,b,c,d,e,f,g,h){function i(){a.inProgress=!0,c.getPersons(d.id,a.options).then(function(b){a.options.total=b.data.total,a.options.offset+=b.data.persons.length,a.persons=a.persons.
25concat(b.data.persons),a.inProgress=!1})}function j(){b.get(e.host+"/bot/"+d.id).then(function(b){angular.forEach(b.data.settings.person.schema,function(b,c){b.visible&&(b.attrName=c,a.visibleAttributes.push(b))})})}a.loading=!0,a.inProgress=!0,a.tableHeader=[{title:"Clients"},{title:"Edit mask",link:"store-customer-mask({id: botNav.botInfo.bot_id})"},{}],a.options={limit:30,offset:0,total:0},a.persons=[],a.visibleAttributes=[],a.filters={isActive:!1},j(),i(),a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.loadMore=function(){console.log(a.options.total),console.log(a.persons.length),a.inProgress||a.persons.length>=a.options.total||(console.log("load more"),i())}}]),angular.module("brnaiApp").controller("CrmNewCtrl",["$scope","$stateParams","crmService","Notification","storage","$timeout","$location","$interval","$http","getDomainData","usersService",function(a,b,c,d,e,f,g,h,i,j,k){function l(){i.get(j.host+"/tool/"+b.id+"/sentiment",{notification:!1}).then(function(b){b&&b.data.status&&(a.sentimentEnabled=!0,a.numberOfColumns++,b.data.tool.properties&&(b.data.tool.properties.happy_2_buy&&(a.happy2BuyEnabled=!0,a.numberOfColumns++),b.data.tool.properties.negative_detector&&(a.negativeEnabled=!0)))})}function m(){a.inProgress||(a.inProgress=!0,a.persons=[],a.selectedPersons=[],c.getPersonsList(a.botId,a.pagination.options,v()).then(function(b){b&&b.data.status?(a.inProgress=!1,console.log("%cPERSONS:","font-size: 24px; color: blue"),console.log(b.data.persons),a.persons=b.data.persons,a.totalPersons=b.data.total,p(a.totalPersons),r(a.pagination.currentPage,b.data.persons[0])):(a.inProgress=!1,q(),a.resetFilter(),m())}))}function n(){c.getPersonsFilters(a.botId).then(function(b){b.data.status&&(a.filterData=b.data.filters,console.log("%cFILTER DATA:","font-size: 24px; color: blue"),console.log(a.filterData))})}function o(){const b=g.search().person;b&&setTimeout(function(){a.getPerson(b,-1)},1e3)}function p(b){const c=Math.ceil(b/a.pagination.options.limit);a.pagination.avaliablePages=c}function q(){const b=a.pagination.options.limit;a.pagination={currentPage:1,avaliablePages:0,options:{offset:0,limit:b}}}function r(b,c){!b||b>1||(h.cancel(a.activity.interval),a.activity.isDetected=!1,a.activity.lastTime=c.statistics.last,a.activity.interval=h(function(){s()},1e4))}function s(){if(!a.inProgress&&!a.activity.isDetected){const b={offset:0,limit:1};c.getPersonsList(a.botId,b,v()).then(function(b){if(!b.data||!b.data.persons.length)return void h.cancel(a.activity.interval);a.activity.lastTime!=b.data.persons[0].statistics.last&&(a.activity.isDetected=!0,h.cancel(a.activity.interval))})}}function t(){var b={};return e.getItem("crmn_"+a.botId)?(b=e.getItem("crmn_"+a.botId),b.created_at||(b.created_at={type:"date",operator:"gte",value:[]})):b=w(),b}function u(){const b="crmn_"+a.botId;e.setItem(b,a.filterParams)}function v(){var b=Object.assign({},a.filterParams);for(var c in b)b[c]?b[c].hasOwnProperty("value")&&!b[c].value&&delete b[c]:delete b[c];return b["statistics.last"].value[0]||b["statistics.last"].value[1]||delete b["statistics.last"],b.created_at.value[0]||b.created_at.value[1]||delete b.created_at,b["statistics.last_message.text"].value[0]||delete b["statistics.last_message.text"],b["scores.sentiment"]&&(b["scores.sentiment"].value[0]||b["scores.sentiment"].value[1]?(a.checkSentimentValue("from"),a.checkSentimentValue("to")):delete b["scores.sentiment"]),b["scores.happy_2_buy"]&&(b["scores.happy_2_buy"].value[0]||b["scores.happy_2_buy"].value[1]?(a.checkHappy2BuyValue("from"),a.checkHappy2BuyValue("to")):delete b["scores.happy_2_buy"]),console.log("%cREQ PARAMS:","font-size: 24px; color: blue"),console.log(b),b}function w(){return JSON.parse(JSON.stringify(a.filterTemplate))}function x(a){for(var b="",c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",d=c.length,e=0;e<a;e++)b+=c.charAt(Math.floor(Math.random()*d));return b}function y(){c.getBotTagGroups(a.botId).then(function(b){a.tagGroups=b.data.settings.tags.filters})}function z(){k.getUserMe().then(function(b){b.permissions.bot.tags&&c.getBotTags(a.botId).then(function(b){a.filterData.tags=b.data.tags})})}function A(){document.addEventListener("keydown",function(b){a.slider.isOpen&&!a.inProgress&&("ArrowLeft"===b.key&&a.prevPerson(),"ArrowRight"===b.key&&a.nextPerson(),"Escape"===b.key&&a.closeSlider())})}a.botId=b.id,a.inProgress=!1,a.totalPersons=0,a.persons=[],a.filterData=[],a.selectedPersons=[],a.tableFilterActive=!1,a.filterTemplate={name:"",email:"",client_role:"",tags:"",providers:"",role:"",tag_filter:"","statistics.send":{type:"number",operator:"gte",value:""},"statistics.last":{type:"date",operator:"gte",value:[]},"statistics.last_message.text":{type:"text",operator:"in",value:[]},"scores.sentiment":{type:"number",operator:"gte",value:[]},"scores.happy_2_buy":{type:"number",operator:"gte",value:[]},"scores.negative":"",created_at:{type:"date",operator:"gte",value:[]}},a.filterParams=t(),a.pagination={currentPage:1,avaliablePages:0,options:{offset:0,limit:50}},a.activity={isDetected:!1,lastTime:null,interval:null},a.tagGroups=[],a.tagGroupEditingIndex=null,a.tagGroupEditing=null,a.isTagEditing=!1,a.tagEditing={name:""},a.isTagsEditing=!1,a.isSliderOpen=!1,a.slider={person:{},index:null,isOpen:!1,activeTab:0},this.$onInit=function(){n(),y(),m(),A(),o(),l()},a.sentimentEnabled=!1,a.happy2BuyEnabled=!1,a.negativeEnabled=!1,a.numberOfColumns=7,a.setPaginationLimit=function(b){a.pagination.options.offset=0,a.pagination.options.limit=b,a.pagination.currentPage=1,m()},a.pageChanged=function(){a.inProgress||(a.pagination.options.offset=(a.pagination.currentPage-1)*a.pagination.options.limit,m())},a.goToFirstPage=function(){a.activity.isDetected=!1,q(),m()},a.checkSentimentValue=function(b){if("from"===b){const c=a.filterParams["scores.sentiment"].value[0];if(!c&&0!==c||c<0||c>100)return void(a.filterParams["scores.sentiment"].value[0]=0)}else if("to"===b){const c=a.filterParams["scores.sentiment"].value[1];if(!c&&0!==c||c<0||c>100)return void(a.filterParams["scores.sentiment"].value[1]=100)}},a.checkHappy2BuyValue=function(b){if("from"===b){const c=a.filterParams["scores.happy_2_buy"].value[0];if(!c&&0!==c||c<0||c>100)return void(a.filterParams["scores.happy_2_buy"].value[0]=0)}else if("to"===b){const c=a.filterParams["scores.happy_2_buy"].value[1];if(!c&&0!==c||c<0||c>100)return void(a.filterParams["scores.happy_2_buy"].value[1]=100)}},a.isFilterEmpty=function(){return JSON.stringify(a.filterParams)===JSON.stringify(a.filterTemplate)},a.resetFilter=function(){a.inProgress||(a.filterParams=w(),console.log(w()),console.log(a.filterParams),q())},a.setFilter=function(b,c,d){if(d){var e=[];a.filterParams[b]&&(e=a.filterParams[b].split(",")),e.includes(c)?e.splice(e.indexOf(c),1):e.push(c),a.filterParams[b]=e.j
25oin(",")}else a.filterParams[b]===c?a.filterParams[b]="":a.filterParams[b]=c},a.onPeriodChange=function(){a.filterParams["statistics.last"].value[1]=a.filterParams["statistics.last"].value[1].slice(0,10)+"T23:59:59.949Z"},a.getDate=function(a){return new Date(a)},a.openTagGroupEditor=function(b,c,d){return d.stopPropagation(),b===a.tagGroupEditingIndex?(a.updateTagGroups(),a.tagGroupEditingIndex=null,void(a.tagGroupEditing=null)):-1===b?(a.tagGroupEditingIndex=b,void(a.tagGroupEditing={name:"Group #"+x(5),filter:{match:[],not_match:[]}})):void a.tagGroups.forEach(function(d){d.name===c&&(a.tagGroupEditingIndex=b,a.tagGroupEditing=d)})},a.isTagGroupEditing=function(b){if(a.tagGroupEditingIndex===b)return!0},a.updateTagGroups=function(){-1===a.tagGroupEditingIndex&&a.tagGroups.push(a.tagGroupEditing);var b={tags:{filters:a.tagGroups}};c.updateTagGroups(a.botId,b).then(function(b){b.status&&(n(),a.tagGroupEditingIndex=null,a.tagGroupEditing=null,d.success({delay:3e3,message:"Tags group updated"}))})},a.openTagEditor=function(b){b.stopPropagation(),a.isTagEditing=!0},a.updateTags=function(){a.tagEditing.name&&!a.filterData.tags.find(function(b){return b.name===a.tagEditing.name})?c.createNewTag({bot_id:a.botId,name:a.tagEditing.name}).then(function(b){a.isTagEditing=!1,a.tagEditing.name="",z(),d.success({delay:3e3,message:"Tags updated"})}):(a.isTagEditing=!1,a.tagEditing.name="",a.$apply())},a.getPersonAvatar=function(a){const b=a.profile.image;return b||"https://api.brn.ai/img/default-client-avatar.png"},a.selectPerson=function(b,c){b.stopPropagation(),a.selectedPersons.includes(c)?a.selectedPersons.includes(c)&&a.selectedPersons.splice(a.selectedPersons.indexOf(c),1):a.selectedPersons.push(c)},a.isPersonSelected=function(b){return a.selectedPersons.includes(b)},a.isAllPersonsSelected=function(){return a.selectedPersons.length>0&&a.selectedPersons.length===a.persons.length},a.selectAllPersons=function(){a.selectedPersons.length>0&&a.selectedPersons.length===a.persons.length?a.selectedPersons=[]:(a.selectedPersons=[],a.selectedPersons=a.selectedPersons.concat(a.persons))},a.setControlsPosition=function(a){var b=$("#tableControls"),c=a.pageY-$(a.currentTarget).offset().top,d=c-b.height()/2;d<0?d=0:d+b.height()>$(a.currentTarget).height()&&(d=$(a.currentTarget).height()-b.height()),b.css("top",d+"px")},a.getScoreClass=function(a){return a>66.67?"crm-table__rating--green":a>33.33?"crm-table__rating--yellow":"crm-table__rating--red"},a.getPerson=function(b,d){c.getPersonById(b).then(function(b){console.log("%cPERSON:","font-size: 24px; color: blue"),console.log(b.data.person),a.slider.person=b.data.person,a.slider.index=d,a.slider.isOpen=!0,g.search("person",a.slider.person.id)})},a.deletePerson=function(b){a.inProgress||(a.inProgress=!0,confirm("Are you sure you want to delete this peron?")&&c.deletePersonById(b).then(function(b){b.status&&(a.inProgress=!1,a.closeSlider(),m())}))},a.mergePersons=function(){for(var b=[],d=0;d<a.selectedPersons.slice(1).length;d++)b.push(a.selectedPersons.slice(1)[d].id);const e={persons:b};c.mergePersons(a.selectedPersons[0].id,e).then(function(b){b.status&&(a.selectedPersons=[],a.closeSlider(),m())})},a.deletePersons=function(){for(var b=[],d=0;d<a.selectedPersons.length;d++)b.push(a.selectedPersons[d].id);const e={person_ids:b};confirm("Are you sure you want to delete this perons?")&&c.deletePersons(e).then(function(b){b.status&&(a.selectedPersons=[],a.closeSlider(),m())})},a.nextPerson=function(){const b=a.slider.index+1;b<a.persons.length&&a.getPerson(a.persons[b].id,b)},a.prevPerson=function(){const b=a.slider.index-1;console.log(a.slider.index),b>=0&&a.getPerson(a.persons[b].id,b)},a.closeSlider=function(){f(function(){a.slider={person:{},index:null,isOpen:!1,activeTab:0},g.search("person",null)},0)},a.getChannelIcon=function(a){return"store"===a?"images/logos/widget.png":"instagram"===a?"images/socials/instagram.png":"images/logos/"+a+".png"},a.updatePersonInfo=function(){const b={profile:{phone:a.slider.person.profile.phone,email:a.slider.person.profile.email,address:a.slider.person.profile.address}};c.updatePersonById(a.slider.person.id,b)};var B;
25a.$watch("filterParams",function(){a.inProgress||(B&&f.cancel(B),B=f(function(){a.pagination.currentPage=1,a.pagination.options.offset=0,u(),n(),m()},1e3))},!0),a.$on("$destroy",function(){h.cancel(a.activity.interval)}),a.setTags=function(b){if(a.isTagsEditing=!1,b.add.length||b.remove.length){for(var d=[],e=0;e<a.selectedPersons.length;e++)d.push(a.selectedPersons[e].id);const f={person_ids:d,tags:b};c.setPersonsTags(a.botId,f).then(function(a){console.log(a),n(),m()})}},a.editTags=function(){a.isTagsEditing=!a.isTagsEditing}}]),angular.module("brnaiApp").directive("labelInput",["$http","getDomainData","$stateParams",function(a,b,c){return{restrict:"EA",require:"ngModel",templateUrl:"views/label-input.html",replace:!0,transclude:!0,scope:{labels:"=ngModel",additionalLabels:"=additionalLabels",labelId:"=labelId",allLabels:"=allLabels",placeholder:"@placeholder",onBlur:"&?ngBlur",onFocus:"&?ngFocus",isReadonly:"=?isReadonly",isRequired:"=?isRequired",onChange:"&ngChange",maxWidth:"=?"},link:function(a,b,c){function d(b){var c=!1;return void 0===a.labels&&(a.labels=[]),void 0===a.additionalLabels&&(a.additionalLabels=[]),a.labels.concat(a.additionalLabels).forEach(function(a){b===a&&(c=!0)}),c}a.editingLabel=null,a.editingLabelId=null;var e=function(c){b[0].contains(c.target)||(a.editingLabel=null,a.editingLabelId=null,a.closeAutocomplete(),a.$apply())};a.init=function(){setTimeout(function(){$(document).on("click",e)},100)},a.closeAutocomplete=function(){a.filterLabels=[]},a.completeAll=function(){var b=[];angular.forEach(a.allLabels,function(a){d(a.name)||b.push(a)}),a.editingLabel=null,a.editingLabelId=null,a.filterLabels=b},a.hasFilterLabels=function(){return!!(a.filterLabels&&a.filterLabels.length>0)},a.hasNotAddedLabels=function(){var b,c,d;return b=a.allLabels?a.allLabels.length:0,c=a.labels?a.labels.length:0,d=a.additionalLabels?a.additionalLabels.length:0,b!==c+d},a.fillTextbox=function(b){a.text=b,a.filterLabels=null,a.addLabel(),a.onBlur()},a.addLabel=function(){if(""!==a.text&&void 0!==a.text){""!==a.labels&&void 0!==a.labels||(a.labels=[]);var b="";
25a.allLabels.forEach(function(c){c.title===a.text&&(b=c)}),d(b.name)||a.labels.push(b.name),a.text=""}},a.init()}}}]),angular.module("brnaiApp").directive("collectionInput",["$http","getDomainData","$stateParams",function(a,b,c){return{restrict:"EA",require:"ngModel",templateUrl:"views/collection-input.html",replace:!0,transclude:!0,scope:{collections:"=ngModel",allCollections:"=allCollections",placeholder:"@placeholder",onBlur:"&?ngBlur",onFocus:"&?ngFocus",isReadonly:"=?isReadonly",isRequired:"=?isRequired",onChange:"&ngChange",maxWidth:"=?"},link:function(a,b,c){function d(b){var c=!1;return void 0===a.collections&&(a.collections=[]),a.collections.forEach(function(a){b===a&&(c=!0)}),c}var e=function(c){b[0].contains(c.target)||(a.closeAutocomplete(),a.$apply())};a.init=function(){setTimeout(function(){$(document).on("click",e)},100)},a.closeAutocomplete=function(){a.filterCollections=[]},a.completeAll=function(){var b=[],c=[{name:"All",value:"*"}].concat(a.allCollections);angular.forEach(c,function(a){d(a.value)||b.push(a)}),a.filterCollections=b},a.hasFilterCollections=function(){return!!(a.filterCollections&&a.filterCollections.length>0)},a.hasNotAddedCollections=function(){var b,c;return b=a.allCollections?a.allCollections.length+1:1,c=a.collections?a.collections.length:0,b!==c},a.addCollection=function(b){if(a.filterCollections=null,b&&(""!==a.collections&&void 0!==a.collections||(a.collections=[]),!d(b))){if("*"==b)a.collections.splice(0,a.collections.length);else{var c=a.collections.indexOf("*");c>-1&&a.collections.splice(c,1)}a.collections.push(b),a.onBlur()}},a.getAutopostingName=function(b){if("*"===b)return"All";for(var c=0;c<a.allCollections.length;c++)if(a.allCollections[c].value===b)return a.allCollections[c].name;return null},a.init()}}}]),angular.module("brnaiApp").filter("decorate",[function(){return function(a,b){if(!b||!b.find)return a;var c=b.find(function(b){return b.name===a});return c?c.title:a}}]),angular.module("brnaiApp").directive("dateFormat",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){d.$formatters.length=0,d.$parsers.length=0,d.$formatters.push(function(a){return a.slice(0,10)}),d.$parsers.push(function(a){return new Date(a).toISOString()})}}}),angular.module("brnaiApp").directive("personTags",["crmService",function(a){return{templateUrl:"views/person-tags.html",restrict:"E",scope:{person:"=",tags:"="},link:function(b,c,d){b.addListOpened=!1,b.removeListOpened=!1,b.editingTag={},b.tagColors=["#94cc25","#f5a623","#d0021b","#9013fe","#4a90e2","#969696"],b.isTagAvaliable=function(a){for(var c=!0,d=0;d<b.person.tags.length;d++)if(b.person.tags[d].tag_id===a){c=!1;break}return c},b.openAddList=function(a){a.stopPropagation(),b.editingTag={},b.addListOpened?b.addListOpened=!1:b.addListOpened=!0},b.editTag=function(a,c){c.stopPropagation(),b.addListOpened=!1,b.editingTag.tag_id===a.tag_id?b.editingTag={}:b.editingTag=a,console.log(b.editingTag)},b.removeTagFromPerson=function(c,d){d.stopPropagation();const e={person_ids:b.person.id,tags:{remove:[c]}};a.removeTagFromPerson(b.person.bot_id,e).then(function(a){if(a.data.status)for(var d=0;d<b.person.tags.length;d++)if(b.person.tags[d].tag_id===c){b.person.tags.splice(d,1);break}})},b.addTagToPerson=function(c,d){d.stopPropagation();const e={person_ids:b.person.id,tags:{add:[c.tag_id]}};a.addTagToPerson(b.person.bot_id,e).then(function(a){a.data.status&&b.person.tags.push(c)})},b.setTagColor=function(c,d){d.stopPropagation();const e={bot_id:b.person.bot_id,name:b.editingTag.name,color:c};a.updateTag(b.editingTag.tag_id,e).then(function(a){a.data.status&&(b.editingTag.color=c,b.editingTag={})})},b.isTagEditing=function(a){return!(!b.editingTag||b.editingTag.tag_id!==a)}}}}]),angular.module("brnaiApp").directive("clickOutside",function(){return{link:function(a,b,c){var d=function(d){var e=$(b).has(d.target).length>0,f=b[0]==d.target;e||f||a.$apply(c.clickOutside)};a.$watch(c.isActive,function(a,b){a!==b&&1==a?$document.bind("click",d):a!==b&&0==a&&$document.unbind("click",d)})}}}),angular.module("brnaiApp").directive("dateRangeNew",function(){return{templateUrl:"views/date-range-new.html",restrict:"EA",require:"ngModel",replace:!0,transclude:!0,scope:{date:"=ngModel"},link:function(a,b,c){var d=b.find("input").datepicker({classes:"datepicker-new",range:!0,toggleSelected:!1,offset:-1,dateFormat:"dd.mm.yyyy",onSelect:function(b,c){if(new Date(a.date[0])===c[0]&&new Date(a.date[1])===c[1])return void console.log("return");c||(a.date=[],setTimeout(function(){a.$apply()},10)),2===c.length&&setTimeout(function(){var b=new Date(c[1]);b.setHours(23),b.setMinutes(59),b.setSeconds(59);const d=[c[0],b];a.date=d,a.$apply()},10)}});a.date[0]&&a.date[1]&&d.data("datepicker").selectDate([new Date(a.date[0]),new Date(a.date[1])]),a.$watch("date",function(a,b){b.length&&!a.length&&d.data("datepicker").clear()},!0)}}}),angular.module("brnaiApp").directive("crmTagsEditor",["crmService",function(a){return{restrict:"EA",templateUrl:"views/crm-tags-editor.html",transclude:!0,scope:!0,link:function(b,c,d){b.addListOpened=!1,b.removeListOpened=!1,b.editingTagId=null,b.editingTag=null,b.tagColors=["#94cc25","#f5a623","#d0021b","#9013fe","#4a90e2","#969696"],b.tags={add:[],remove:[]};var e=function(a){c[0].contains(a.target)||b.$parent.setTags(b.tags)};c.bind("scroll mousewheel",function(a){a.stopPropagation()}
25),b.$on("$destroy",function(){$(document).off("click",e),c.unbind("scroll mousewheel")}),b.init=function(){setTimeout(function(){$(document).on("click",e)},100)},b.editTagInTagGroup=function(a,c){c.stopPropagation(),b.addListOpened=!1,b.removeListOpened=!1,b.editingTagId=a,b.filterData.tags.forEach(function(c){c.tag_id===a&&(b.editingTag=c)})},b.isTagEditing=function(a){return b.editingTagId===a},b.closeAllOpenPopups=function(a){a.stopPropagation(),b.addListOpened=!1,b.removeListOpened=!1,b.editingTagId=null,b.editingTag=null},b.isTagAvaliable=function(a){return!b.tags.add.concat(b.tags.remove).includes(a)},b.isColorSelected=function(a,c){return b.editingTag.color===c},b.getTagName=function(a){var c="";if(b.filterData.tags.forEach(function(b){b.tag_id===a&&(c=b.name)}),c)return c},b.getTagColor=function(a){var c="";if(b.filterData.tags.forEach(function(b){b.tag_id===a&&(c=b.color)}),c)return c},b.setTagColor=function(c,d){var e={bot_id:b.botId,name:b.editingTag.name,color:d};a.updateTag(c,e).then(function(a){a.data.status&&(b.editingTag.color=d)})},b.removeTagFromGroup=function(a,c,d){if(d.stopPropagation(),c){var e=b.tags.add.indexOf(a);e>-1&&b.tags.add.splice(e,1)}else{var e=b.tags.remove.indexOf(a);e>-1&&b.tags.remove.splice(e,1)}},b.openAddList=function(a){console.log("openAddList"),a.stopPropagation(),b.removeListOpened=!1,!0===b.addListOpened?b.addListOpened=!1:b.addListOpened=!0},b.openRemoveList=function(a){a.stopPropagation(),b.addListOpened=!1,b.editingTagId=null,b.editingTag=null,!0===b.removeListOpened?b.removeListOpened=!1:b.removeListOpened=!0},b.addTagToAddList=function(a,c){c.stopPropagation(),b.addListOpened=!1,b.editingTagId=null,b.editingTag=null,b.tags.add.push(a)},b.addTagToRemoveList=function(a,c){c.stopPropagation(),b.removeListOpened=!1,b.editingTagId=null,b.editingTag=null,b.tags.remove.push(a)},b.init()}}}]),angular.module("brnaiApp").controller("HintsCtrl",["$scope","$timeout","$http","getDomainData",function(a,b,c,d){function e(){c.get(d.host+"/hint/categories").then(function(b){b.data.status&&(a.categories=b.data.categories)},function(a){console.error(a)})}function f(){c.get(d.host+"/hints?limit=1000").then(function(b){b.data.status&&(a.hints=b.data.hints)},function(a){console.error(a)})}a.newCategory="",a.categories=[],a.hints=[],a.slider={isOpen:!1,hint:null},e(),f(),a.addCategory=function(){a.newCategory&&(c.post(d.host+"/hint/category",{name:a.newCategory}).then(function(a){e()},function(a){Notification.error({delay:6e4,message:a.message})}),a.newCategory="")},a.addHint=function(c){b(function(){var b={name:"",category:null,preview:"",link:""};c&&(b.category=c.id),a.slider={isOpen:!0,hint:b}},0)},a.editHint=function(c){b(function(){var b=JSON.parse(JSON.stringify(c));b.category&&b.category.id&&(b.category=b.category.id),a.slider={isOpen:!0,hint:b}},0)},a.updateHint=function(){a.slider.hint&&a.slider.hint.id?c.put(d.host+"/hint/"+a.slider.hint.id,a.slider.hint).then(function(b){f(),a.slider={isOpen:!1,hint:null}},function(a){Notification.error({delay:6e4,message:a.message})}):c.post(d.host+"/hint",a.slider.hint).then(function(b){f(),a.slider={isOpen:!1,hint:null}},function(a){Notification.error({delay:6e4,message:a.message})})},a.deleteHint=function(){a.slider.hint&&a.slider.hint.id&&c.delete(d.host+"/hint/"+a.slider.hint.id).then(function(b){f(),a.slider={isOpen:!1,hint:null}},function(a){Notification.error({delay:6e4,message:a.message})})},a.closeSlider=function(){b(function(){a.slider={isOpen:!1,hint:null}},0)},a.getUrl=function(a){return/https?:\/\//g.test(a)?a:a&&a.length?"http://"+a:""}}]),angular.module("brnaiApp").directive("brnHint",["$http","getDomainData","hintsService",function(a,b,c){return{restrict:"EA",templateUrl:"views/brn-hint.html",replace:!0,scope:{position:"@",category:"@",name:"@"},link:function(a,b,d){a.positionFixed=a.position,function(){c.getHint(a.name,a.category).then(function(b){a.hint=b})}(),a.getUrl=function(a){return/https?:\/\//g.test(a)?a:a&&a.length?"http://"+a:""};
25var e=$("#visual_editor_wrapper"),f=b.parents(".brn-hint-wrapper");f.on("mouseenter",function(){if("top"==a.position){var c=f.offset().top-b[0].getBoundingClientRect().height;a.positionFixed=c<e.offset().top?"bottom":a.position}f.addClass("brn-hint-wrapper-hovered")}),f.on("mouseleave",function(){f.removeClass("brn-hint-wrapper-hovered")})}}}]),angular.module("brnaiApp").service("hintsService",["getDomainData","$http",function(a,b){var c=[];return{getHint:function(d,e){d=d?encodeURIComponent(d.toLowerCase().replace(/ /g,"_")):"",e=e?encodeURIComponent(e.toLowerCase().replace(/ /g,"_")):"";var f=d+(e?"?category="+e:"");return void 0===c[f]&&(c[f]=b.get(a.host+"/hint/"+f,{notification:!1}).then(function(a){return a&&a.data.status?a.data.hint:null},function(a){console.error(a)})),c[f]}}}]),angular.module("brnaiApp").controller("PortalDetailUserMaskCtrl",["$scope","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","$uibModal",function(a,b,c,d,e,f,g,h,i){a.schemaKeys=[],a.schemaKey="",a.values=[],a.fields=[],c.get(f.host+"/portal/"+g.id).then(function(b){b.status&&(a.portal=b.data.portal,a.portal_mask=b.data.portal.properties),g.field&&(a.newAttr=a.portal_mask.users.schema[g.field],a.oldIndex=a.newAttr.name,"mixed"==a.portal_mask.users.schema[g.field].type&&(a.schemaKeys=[],angular.forEach(a.portal_mask.users.schema[g.field].schema.fields,function(b,c){a.schemaKeys.push({name:b.name}),a.fields.push(c)}),a.schemaKey=a.portal_mask.users.schema[g.field].schema.key),a.values=a.newAttr.values)}),a.attributeTypes=b.getAttributesTypes(),a.schemaTypes=b.getSchemaTypes(),a.newSchemaAttr={name:"",label:"",type:"",show:!1},a.clearSchemaAttribute=function(){a.newSchemaAttr={name:"",label:"",type:"",show:!1}},a.showSchemaAttribute=function(){a.newSchemaAttr.show=!0},a.handleChangeType=function(){"mixed"!=a.newAttr.type&&(a.newAttr.schema={fields:{},key:null},a.schemaKeys=[],a.schemaKey="")},a.handleChangeKey=function(){a.newAttr.schema.key=a.schemaKey},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.addSchemaAttribute=function(){a.newSchemaAttr.type&&a.newSchemaAttr.name.length&&(a.newSchemaAttr.name=b.getSlug(a.newSchemaAttr.name),a.newAttr.schema.fields[a.newSchemaAttr.name]=a.newSchemaAttr,"string"!=a.newSchemaAttr.type&&"number"!=a.newSchemaAttr.type&&"date"!=a.newSchemaAttr.type&&"boolean"!=a.newSchemaAttr.type||a.schemaKeys.push({name:a.newSchemaAttr.name}),a.newSchemaAttr={name:"",label:"",type:"",show:!1})},a.deleteSchemaAttribute=function(b){delete a.newAttr.schema.fields[b],angular.forEach(a.schemaKeys,function(c,d){ 26c.name==b&&a.schemaKeys.splice([d],1)})},a.addAttribute=function(){if(!a.newAttr.type)return void h.error({delay:6e4,message:"You must set attribute type"});if(!a.newAttr.name.length)return void h.error({delay:6e4,message:"You must set attribute name"});if("mixed"==a.newAttr.type&&a.newAttr.selectable&&(null==a.newAttr.schema.key||""==a.newAttr.schema.key))return void h.error({delay:6e4,message:"You must set key field for schema"});a.newAttr.name=b.getSlug(a.newAttr.name),a.isEmpty(a.newAttr.schema)||angular.forEach(a.newAttr.schema.fields,function(b,c){c!=b.name&&(a.newAttr.schema.fields[b.name]=b,delete a.newAttr.schema.fields[c])}),a.portal_mask.users.schema[a.newAttr.name]=a.newAttr;const e=JSON.parse(JSON.stringify(a.portal));delete e.logo,delete e.favicon,delete e.widgets.chat.image,e.properties.users=a.portal_mask.users,c.put(f.host+"/portal/"+g.id,e).then(function(b){h.success({message:'Field "'+a.newAttr.name+'" was successfully edited'}),d.go("portal",{id:g.id})})},a.goBack=function(){d.go("portal",{id:g.id})},a.deleteValue=function(b){confirm("Are you sure, you want to delete value?")&&a.portal_mask.users.schema[g.field].values.splice(a.portal_mask.users.schema[g.field].values.indexOf(b),1)},a.addValue=function(b){i.open({templateUrl:"views/create-customer-schema-value.html",scope:a,controller:["storingservice","$uibModalInstance","$stateParams","Upload",function(b,c,d,e){a.values=[],a.newValue={},a.fields=[],a.valueToAdd={},a.uploaders={},a.attribute=a.portal_mask.users.schema[d.field],"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1),a.fields.push(c)}):("file"!=a.attribute.type&&"image"!=a.attribute.type||(a.uploaders[a.attribute.name]=!1),"location"==a.attribute.type&&(a.newValue={value:{type:"Point",coordinates:[]}})),a.values=a.attribute.values,a.createValue=function(){if("mixed"!=a.attribute.type&&~a.values.indexOf(a.newValue.value))return void h.error({delay:6e4,message:'Value "'+a.newValue.value+'" already exist'});if("mixed"==a.attribute.type){var b=!1;
26if(angular.forEach(a.newValue,function(b,c){"number"==a.attribute.schema.fields[c].type&&(a.newValue[c]=parseFloat(b))}),angular.forEach(a.values,function(c,d){c[a.attribute.schema.key]==a.newValue[a.attribute.schema.key]&&(b=!0)}),b)return void h.error({delay:6e4,message:'Value "'+a.newValue[a.attribute.schema.key]+'" already exist'})}"number"==a.attribute.type&&(a.newValue.value=parseFloat(a.newValue.value)),a.valueToAdd=Object.assign({},a.newValue),c.close({newValue:a.valueToAdd}),"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1)}):a.newValue={value:""}},a.close=function(){c.close()},a.showMapForm=function(b){i.open({templateUrl:"views/product-attribute-map-form-modal.html",controller:["$scope","storingservice","$uibModalInstance","$stateParams","NgMap",function(a,c,d,e,f){a.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",f.getMap().then(function(b){a.map=b;var c=a.map.getCenter();google.maps.event.trigger(a.map,"resize"),a.map.setCenter(c)}),a.marker={},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.placeMarker=function(b){a.marker={type:"Point",coordinates:[b.latLng.lng().toFixed(5)/1,b.latLng.lat().toFixed(5)/1]}},a.close=function(){d.close({attribute:b,data:a.marker})}}],windowClass:"large-modal zindex-map"}).result.then(function(b){a.newValue[b.attribute]=b.data},function(a){})},a.addFile=function(b,c,g,h){e.upload({url:f.host+"/attachment/"+g+"/"+d.id,data:{file:b}}).then(function(b){a.uploaders[h]=!1,b.data.status&&(a.newValue[h]=b.data.url)},function(a){},function(b){a.uploaders[h]=!0})}}],windowClass:"large-modal no-border-modal"}).result.then(function(b){"mixed"==a.newAttr.type?a.newAttr.values.push(b.newValue):a.newAttr.values.push(b.newValue.value)},function(a){})},a.addMapValue=function(a){i.open({templateUrl:"views/add-selectable-location-markers.html",controller:["$scope","storingservice","$uibModalInstance","NgMap",function(b,c,d,e){b.googleMapsUrl="https://maps.googleapis.com/maps/api/js?key=AIzaSyBioAzo_h8TuJ6lMj3ToihwtIdGmdi4hDg",b.values=a.values,e.getMap().then(function(a){b.map=a;var c=b.map.getCenter();google.maps.event.trigger(b.map,"resize"),b.map.setCenter(c)}),b.placeMarker=function(a){b.values.push({type:"Point",coordinates:[a.latLng.lng().toFixed(5)/1,a.latLng.lat().toFixed(5)/1]})},b.deletePlace=function(a,c){b.values.splice(c,1)},b.close=function(){d.close({values:b.values})}}],windowClass:"large-modal no-border-modal"}).result.then(function(a){},function(a){})}}]),angular.module("brnaiApp").controller("PortalDetailCreateMaskCtrl",["$scope","portalService","storingservice","$http","$state","domain","getDomainData","$stateParams","Notification","$uibModal",function(a,b,c,d,e,f,g,h,i,j){d.get(g.host+"/portal/"+h.id).then(function(b){b.status&&(a.portal=b.data.portal,a.portal_mask=b.data.portal.properties)}),a.schemaKeys=[],a.schemaKey="",a.attributeTypes=c.getAttributesTypes(),a.schemaTypes=c.getSchemaTypes(),a.newAttr={name:"",label:"",type:"",values:[],visible:!1,multiple:!1,selectable:!1,schema:{fields:{},key:null}},a.newSchemaAttr={name:"",label:"",type:"",show:!1},a.clearSchemaAttribute=function(){a.newSchemaAttr={name:"",label:"",type:"",show:!1}},a.showSchemaAttribute=function(){a.newSchemaAttr.show=!0},a.handleChangeType=function(){"mixed"!=a.newAttr.type&&(a.newAttr.schema={fields:{},key:null},a.schemaKeys=[],a.schemaKey="")},a.handleChangeKey=function(){a.newAttr.schema.key=a.schemaKey},a.isEmpty=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},a.addSchemaAttribute=function(){a.newSchemaAttr.type&&a.newSchemaAttr.name.length&&(a.newSchemaAttr.name=c.getSlug(a.newSchemaAttr.name),a.newAttr.schema.fields[a.newSchemaAttr.name]=a.newSchemaAttr,"string"!=a.newSchemaAttr.type&&"number"!=a.newSchemaAttr.type&&"date"!=a.newSchemaAttr.type&&"boolean"!=a.newSchemaAttr.type||a.schemaKeys.push({name:a.newSchemaAttr.name}),a.newSchemaAttr={name:"",label:"",type:"",show:!1})},a.goBack=function(){e.go("portal",{id:h.id})},a.deleteSchemaAttribute=function(b){delete a.newAttr.schema.fields[b],angular.forEach(a.schemaKeys,function(c,d){c.name==b&&a.schemaKeys.splice([d],1)})},a.addAttribute=function(){if(!a.newAttr.type)return void i.error({delay:6e4,message:"You must set attribute type"});if(!a.newAttr.name.length)return void i.error({delay:6e4,message:"You must set attribute name"});if("mixed"==a.newAttr.type&&a.newAttr.selectable&&(null==a.newAttr.schema.key||""==a.newAttr.schema.key))return void i.error({delay:6e4,message:"You must set key field for schema"});a.newAttr.name=c.getSlug(a.newAttr.name),a.isEmpty(a.newAttr.schema)||angular.forEach(a.newAttr.schema.fields,function(b,c){c!=b.name&&(a.newAttr.schema.fields[b.n
26ame]=b,delete a.newAttr.schema.fields[c])}),null===a.portal_mask.users.schema&&(a.portal_mask.users.schema={}),a.portal_mask.users.schema[a.newAttr.name]=a.newAttr;const b=JSON.parse(JSON.stringify(a.portal));delete b.logo,delete b.favicon,delete b.widgets.chat.image,b.properties.users=a.portal_mask.users,d.put(g.host+"/portal/"+h.id,b).then(function(b){i.success({message:'Field "'+a.newAttr.name+'" was successfully added'}),e.go("portal",{id:h.id})})},a.deleteValue=function(b){confirm("Are you sure, you want to delete value?")&&a.newAttr.values.splice(a.newAttr.values.indexOf(b),1)},a.addValue=function(b){j.open({templateUrl:"views/create-customer-schema-value.html",scope:a,controller:["storingservice","$uibModalInstance","$stateParams","Upload",function(b,c,d,e){a.values=[],a.newValue={},a.fields=[],a.valueToAdd={},a.uploaders={},a.attribute=a.newAttr,"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1),"file"!=b.type&&"image"!=b.type||(a.uploaders[c]=!1),a.fields.push(c)}):("file"!=a.attribute.type&&"image"!=a.attribute.type||(a.uploaders[a.attribute.name]=!1),a.newValue={value:""}),a.values=a.attribute.values,a.createValue=function(){if("mixed"!=a.attribute.type&&~a.values.indexOf(a.newValue.value))return void i.error({delay:6e4,message:'Value "'+a.newValue.value+'" already exist'});if("mixed"==a.attribute.type){var b=!1;
26if(angular.forEach(a.newValue,function(b,c){"number"==a.attribute.schema.fields[c].type&&(a.newValue[c]=parseFloat(b))}),angular.forEach(a.values,function(c,d){c[a.attribute.schema.key]==a.newValue[a.attribute.schema.key]&&(b=!0)}),b)return void i.error({delay:6e4,message:'Value "'+a.newValue[a.attribute.schema.key]+'" already exist'})}"number"==a.attribute.type&&(a.newValue.value=parseFloat(a.newValue.value)),a.valueToAdd=Object.assign({},a.newValue),c.close({newValue:a.valueToAdd}),"mixed"==a.attribute.type?angular.forEach(a.attribute.schema.fields,function(b,c){a.newValue[c]="","boolean"==b.type&&(a.newValue[c]=!1)}):a.newValue={value:""}},a.close=function(){c.close()},a.addFile=function(b,c,f,h){e.upload({url:g.host+"/attachment/"+f+"/"+d.id,data:{file:b}}).then(function(b){a.uploaders[h]=!1,b.data.status&&(a.newValue[h]=b.data.url)},function(a){},function(b){a.uploaders[h]=!0})}}],windowClass:"large-modal no-border-modal"}).result.then(function(b){"mixed"==a.newAttr.type?a.newAttr.values.push(b.newValue):a.newAttr.values.push(b.newValue.value)},function(a){})}}]),angular.module("brnaiApp").controller("ShopifyCtrl",["$scope","$http","$stateParams","getDomainData","Auth","$uibModalInstance","Notification",function(a,b,c,d,e,f,g){function h(){b.get(d.host+"/service/"+c.id+"/shopify",{notification:!1}).then(function(b){b.data.status&&(a.main.shop=b.data.service?b.data.service.data.shop:"",a.main.sync=b.data.service.data.active,a.exist=!0)},function(a){})}a.exist=!1,a.main={shop:"",sync:!1},h(),a.connect=function(){a.main.shop&&(window.location.href="https://app.brn.ai/?shop="+a.main.shop+"&bot_id="+c.id+"&redirect="+window.location.href)},a.deleteConnection=function(){b.delete(d.host+"/service/"+c.id+"/shopify").then(function(a){a.data.status&&f.close("ok")},function(a){})},a.onChange=function(){b.put(d.host+"/service/"+c.id+"/shopify",{category:"ecommerce",data:{shop:a.main.shop,active:!!a.main.sync}}).then(function(a){console.log(a)},function(a){})},a.close=function(){f.close("ok")}}]),angular.module("brnaiApp").run(["$templateCache",function(a){a.put("views/about.html",'<div class="container"> <div class="comon-padding"> <p>This is the about view.</p> </div> </div>'),a.put("views/add-selectable-location-markers.html",'<div map-lazy-load="https://maps.google.com/maps/api/js" map-lazy-load-params="{{googleMapsUrl}}" style="width: 500px; height: 500px"> <ng-map zoom="10" style="height:450px" center="52.527236,13.396573" on-click="placeMarker()"> <marker ng-repeat="value in values track by $index" position="{{value.coordinates[1]}}, {{value.coordinates[0]}}" on-click="deletePlace($index)"></marker> </ng-map> <div> <button type="submit" class="brn-btn brn-primary" ng-click="close()">{{main.translations.addValue}}</button> </div> </div>'),a.put("views/addcollection.html",'<div class="flex-row"> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb35">Edit category</h2> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="collection.name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb35"> <custom-dropdown ng-model="collectionType" ng-change="handleCollectionType()" array="collectionTypes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" ng-disabled="updRoute" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="card-checker no-margin" ng-if="isAdmin"> <input type="checkbox" ng-model="collection.rotation" id="collectionRotation"> <label for="collectionRotation"> <span class="checker-ico"></span>{{main.translations.enable_rotation}} </label> </div> <button data-toggle="modal" data-target="#broadcastModal" ng-click="openModal()" class="brn-btn brn-transparent mb30" style="width: 100%"> Set up autoposting </button> <button class="brn-btn brn-primary" ng-if="updateCollection" ng-click="updCollection()"> {{main.translations.save_btn}} </button> <button class="brn-btn brn-primary" ng-click="createCollection()" ng-if="!updateCollection"> Create </button> </div> </div> <div class="settings-card-wrap"> <div class="settings-card mb50" ng-switch="collectionType"> <div ng-switch-when="manual"> <h2 class="mb35" ng-class="{\'mb50\' : collection.fields.length == 0}">Manual source</h2> <div> <div ng-repeat="field in collection.fields" class="mb30"> <span>Field #{{$index + 1}}</span> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="field.name" is-required="true" ng-blur="NameChange(field, $index)" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title}}" title="{{main.translations.title}}" ng-model="field.title" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-dropdown ng-model="field.type" array="fields" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="delete-item" ng-click="deleteProperty(field)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> <button type="button" class="brn-btn brn-primary" style="margin-top: -3px" ng-click="addField()">Add field </button> </div> </div> <div ng-switch-when="twitter"> <h2 class="mb50">Twitter source</h2> <div class="card-checker no-margin"> <input type="checkbox" ng-model="sources.twitter.source_data.active" id="twitter_active"> <label for="twitter_active"> <span class="checker-ico"></span>{{main.translations.active}} </label> </div> <div class="mb10"> <custom-input placeholder="Twitter Page URL" title="Twitter Page URL" ng-model="sources.twitter.source_data.url" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="nitial Fetch Count" title="Initial Fetch Count" ng-model="sources.twitter.source_data.initial_fetch" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input placeholder="Update Frequency" title="Update Frequency" ng-model="sources.twitter.source_data.frequency" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> <div ng-switch-when="youtube"> <h2 class="mb50">Youtube source</h2> <div class="card-checker no-margin"> <input type="checkbox" ng-model="sources.youtube.source_data.active" id="youtube_active"> <label for="youtube_active"> <span class="checker-ico"></span>{{main.translations.active}} </label> </div> <div class="mb10"> <custom-input placeholder="Youtube Page URL" title="Youtube Page URL" ng-model="sources.youtube.source_data.url" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Initial Fetch Count" title="Initial fetch count" ng-model="sources.youtube.source_data.initial_fetch" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input placeholder="Update Frequency" title="Update Frequency" ng-model="sources.youtube.source_data.frequency" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> <div ng-switch-when="facebook"> <h2 class="mb50">Facebook source</h2> <div class="card-checker no-margin"> <input type="checkbox" ng-model="sources.facebook.source_data.active" id="facebook_active"> <label for="facebook_active"> <span class="checker-ico"></span>{{main.translations.active}} </label> </div> <div class="mb10"> <custom-input placeholder="Facebook Page URL" title="Facebook Page URL" ng-model="sources.facebook.source_data.url" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Initial Fetch Count" title="Initial fetch count" ng-model="sources.facebook.source_data.initial_fetch" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input placeholder="Update Frequency" title="Update Frequency" ng-model="sources.facebook.source_data.frequency" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div> <span class="green-small-title">Collect Data</span> <div class="card-checker" ng-repeat="option in facebookSelects" style="margin-bottom: 0px" ng-if="option.value!=\'events\'"> <input type="checkbox" name="selectedTypes[]" value="{{option.value}}" ng-checked="sources.facebook.source_data.types.indexOf(option.value) > -1" ng-click="toggleFacebokTypes(option.value)" id="{{option.value}}"> <label for="{{option.value}}"> <span class="checker-ico"></span>{{option.value}} </label> </div> </div> </div> <div ng-switch-when="rss"> <h2 class="mb50">Rss source</h2> <div class="card-checker no-margin"> <input type="checkbox" ng-model="sources.rss.source_data.active" id="r
26ss_active"> <label for="rss_active"> <span class="checker-ico"></span>{{main.translations.active}} </label> </div> <div class="mb10"> <custom-input placeholder="Rss Page URL" title="Rss Page URL" ng-model="sources.rss.source_data.url" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Initial Fetch Count" title="Initial fetch count" ng-model="sources.rss.source_data.initial_fetch" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input placeholder="Update Frequency" title="Update Frequency" ng-model="sources.rss.source_data.frequency" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb15"> <span class="green-small-title">Felds from feed to each item</span> <div ng-repeat="(key, value) in sources.rss.source_data.extra_fields.feed"> <div class="mb10"> <custom-input next-on-enter id="{{key}}" ng-model="value" placeholder="Feed Item #{{key+1}}" title="Feed Item #{{key+1}}" enter="updateFeed(key, value)" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-click="updateFeed(key, value)"> mode_edit </i> <i class="material-icons" style="font-size: 17px; color: #f66060; position: relative; top: 4px" ng-click="deleteFeed(key)"> close </i> </custom-input> </div> </div> <div class="mb10"> <custom-input placeholder="Add feed item..." title="New Feed Item" ng-model="rssModel.newFeed" enter="addFeed(rssModel.newFeed)" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px"> add </i> </custom-input> </div> </div> <div class="mb15" style="margin-top: 25px"> <span class="green-small-title">Felds from each item</span> <div ng-repeat="(key, value) in sources.rss.source_data.extra_fields.custom"> <div class="mb10"> <custom-input next-on-enter id="{{key}}" ng-model="value" placeholder="Extra Field #{{key+1}}" title="Extra Field #{{key+1}}" enter="updateCustom(key, value)" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-click="updateCustom(key, value)"> mode_edit </i> <i class="material-icons" style="font-size: 17px; color: #f66060; position: relative; top: 4px" ng-click="deleteCustom(key)"> close </i> </custom-input> </div> </div> <div class="mb20"> <custom-input placeholder="Add custum item..." title="New Custum Item" ng-model="rssModel.newCustom" enter="addCustom(rssModel.newCustom)" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px"> add </i> </custom-input> </div> </div> </div> <div ng-switch-when="api"> <h2 class="mb50">Api source</h2> <div class="card-checker no-margin"> <input type="checkbox" ng-model="sources.api.source_data.active" id="api_active"> <label for="api_active"> <span class="checker-ico"></span>{{main.translations.active}} </label> </div> <div class="mb10"> <custom-input placeholder="Path" title="Path" ng-model="sources.api.source_data.path" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-model="sources.api.source_data.request.method" array="requestMetods" opt-description="name" opt-value="value" title="Request method type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-dropdown ng-model="sources.api.source_data.request.auth.type" array="requestAuths" opt-description="name" opt-value="value" title="Auth type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-input placeholder="Auth login" title="Auth login" ng-model="sources.api.source_data.request.auth.login" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Auth password" title="Auth password" ng-model="sources.api.source_data.request.auth.password" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Auth bearer" title="Auth bearer" ng-model="sources.api.source_data.request.auth.bearer" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Request url" title="Request url" type-input="url" is-required="true" ng-model="sources.api.source_data.request.url" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Initial fetch" title="Initial fetch" type-input="number" ng-model="sources.api.source_data.initial_fetch" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Frequency" title="Frequency" type-input="number" ng-model="sources.api.source_data.frequency" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-model="sources.api.source_data.key.operator" array="apiOperators" opt-description="name" opt-value="value" ng-change="changeKeyOperator(sources.api.source_data.key.operator)" title="Key operator" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-dropdown ng-model="sources.api.source_data.key.field" array="collection.fields" opt-description="name" opt-value="name" title="Key field" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="sources.api.source_data.key.operator != \'in\'"> <custom-input placeholder="value" title="value" ng-model="sources.api.source_data.key.value" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> <div class="settings-card-wrap" ng-if="collectionType == \'api\'"> <div class="settings-card mb50"> <div> <h2 class="mb35" ng-class="{\'mb50\' : sources.api.source_data.extra_fields == 0}">Extra fields</h2> <div> <div ng-repeat="field in sources.api.source_data.extra_fields" class="mb30"> <span>Field #{{$index + 1}}</span> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="field.name" ng-blur="apiNameChange(field, $index)" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title}}" title="{{main.translations.title}}" ng-blur="apiNameChange(field, $index)" ng-model="field.title" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-dropdown ng-model="field.type" array="fields" opt-description="name" ng-change="apiNameChange(field, $index)" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="delete-item" ng-click="deleteApiFeald(field)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> <button type="button" class="brn-btn brn-primary" style="margin-top: -3px" ng-click="addApiField()">Add field </button> </div> </div> </div> </div> <div class="settings-card-wrap" ng-if="collectionType == \'api\'"> <div class="settings-card mb50"> <div> <h2 class="mb35" ng-class="{\'mb50\' : sources.api.source_data.extra_fields == 0}">Maper for fields</h2> <div> <div ng-repeat="item in collection.fields" class="mb30"> <div class="mb10"> <custom-input placeholder="{{item.name}}" title="{{item.name}}" ng-model="sources.api.source_data.map[item.name]" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div> </div> </div> <div id="broadcastModal" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb10"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> broadcast & autoposting template </div> <div class="mb40"> <div class="mb10"> <custom-input placeholder="Text" ng-model="broadcast.text" title="Text" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Image URL" ng-model="broadcast.image" title="Image URL" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title}}" ng-model="broadcast.title" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Title Link" ng-model="broadcast.link" title="Title Link" is-back-placeholder="true"> </custom-input> </div> <div class="mb-title"> <custom-dropdown ng-model="broadcast.type" array="[{value:\'generic\', name:\'Gorizontal carousel\'},{value:\'list\', name:\'Vertical list\'}]" opt-description="name" opt-value="value" title="Template {{main.translations.type}}" is-model-init="true" is-back-placeholder="true" placeholder="Template {{main.translations.type}}"> </custom-dropdown> </div> <div class="tags-container" ng-class="{\'mb10\' : broadcast.autoposting}"> <span class="title">Buttons</span> <div ng-repeat="(key, button) in broadcast.buttons"> <div class="mb10"> <custom-input placeholder="{{main.translations.title}}" ng-model="button.title" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-model="button.type" array="[{name:\'Link\', value:\'link\'},{name:\'Suggest\', value:\'suggest\'}]" opt-description="name" opt-value="value" ng-change="changeBtnType(key, button.type)" title="{{main.translations.type}}" is-model-init="true" is-back-placeholder="true" placeholder=""> </custom-dropdown> </div> <div class="mb20" ng-if="button.type == \'link\'"> <custom-input placeholder="URL" ng-model="button.url" title="URL" is-back-placeholder="true"> </custom-input> </div> <div class="mb20" ng-if="button.type == \'suggest\'"> <custom-input placeholder="Content" ng-model="button.content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="delete-item" ng-click="removeBtn(key)"> <i class="material-icons" style="margin-left: -5px"> close </i> <span>Remove</span> </div> </div> <div class="add-smal" ng-click="addBtn(\'link\')"> <i class="material-icons"> add </i> Add button </div> </div> <div class="mb50" ng-if="broadcast.autoposting"> <custom-dropdown ng-model="broadcast.scenario_id" array="scenariosList" opt-description="name" opt-value="value" title="Scenario name" is-model-init="true" placeholder="Select scenario" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div> <button ng-click="saveBroadcast()" class="brn-btn brn-primary" style="min-width: 0px; margin-right:24px; margin-top: 0px"> {{main.translations.save_btn}} </button> <div class="card-checker mb10" style="min-width: 80px;width: 80px; position: relative; top: 3px"> <input type="checkbox" ng-model="broadcast.autoposting" id="broadcast_autoposting"> <label for="broadcast_autoposting"> <span class="checker-ico"></span>Autopost </label> </div> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/addmind.html",'<div class="flex-row create-bot flex-row-start"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" ng-click="closeModal()"> close </i> Create mind </div> <div style="margin-bottom: 117px"> <custom-input placeholder="Mind title" ng-model="newMind.title" title="Mind title" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div> <div class="brn-form-group"> <button type="button" class="brn-btn brn-primary" ng-click="onSubmit()"> Create </button> </div> </div> </div> </div> </div>'),a.put("views/addportal.html",'<div class="flex-row create-bot flex-row-start"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div class="bots-list-item-name mb10"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" ng-click="closeModal()"> close </i> Create domain </div> <div class="mb10"> <custom-input placeholder="Portal name" ng-model="newDomain.name" title="Portal name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Portal domain" ng-model="newDomain.domain" title="Portal domain" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Portal url" ng-model="newDomain.domurlain" title="Portal url" is-required="true" http-prefix is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input placeholder="Portal title" ng-model="newDomain.title" title="Portal title" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div> <div class="brn-form-group"> <button type="button" class="brn-btn brn-primary" ng-click="onSubmit()"> Create </button> </div> </div> </div> </div> </div>'),a.put("views/admin-bot-change-owner.html",'<div class="flex-row create-bot flex-row-start"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 4px;top: 5px; font-size: 21px" ng-click="close()"> close </i> <h2>Change bot owner</h2> </div> </div> <div class="row"> <div class="mb50"> <div class="custom-input dropdown open no-arrow"> <span class="placeholder" ng-class="{\'placeholder-small placeholder-active\' : selected.user || isActive}"> New owner </span> <input type="text" ng-model="selected.user" ng-blur="isActive=false" ng-focus="isActive=true" uib-typeahead="user as user.name for user in getSearchUsers($viewValue)"> <span class="bar"></span> </div> </div> <div class="col-md-12" style="padding-left: 0"> <a class="brn-btn brn-primary" ng-click="addMember()">Save</a> </div> </div> </div> </div>'), 27a.put("views/admin-bots-user.html",'<div class="brn-table-wrap learning-entities"> <div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 20px 45px 51px" height="100%"> <div class="nav-sidebar-content-ofset" style="padding-right: 0px"> <div style="margin-bottom: 60px"> <h2>Search</h2> <custom-input placeholder="Name" ng-model="filter.name" title="Search" ng-keydown="searchBots($event)" is-back-placeholder="true"> <i class="material-icons" style="opacity: 0.6; font-size: 17px; position: relative; top: 3px">search</i> </custom-input> </div> <div style="margin-bottom: 30px" ng-if="filters.portals"> <h2>Portals</h2> <div class="card-checker" ng-repeat="portal in filters.portals" ng-if="portal.value"> <input type="checkbox" ng-model="filter.portal" ng-change="filterBots()" ng-true-value="\'{{portal.value}}\'" ng-false-value="\'\'" id="filter_checker_{{portal.value}}"> <label for="filter_checker_{{portal.value}}"> <span class="checker-ico"></span> <span>{{portal.title}}</span> <span class="item-counter">{{portal.count}}</span> </label> </div> </div> <div style="margin-bottom: 30px" ng-if="filters.providers"> <h2>Providers</h2> <div class="card-checker" ng-repeat="provider in filters.providers" ng-if="provider.value"> <input type="checkbox" ng-model="filter.provider" ng-change="filterBots()" ng-true-value="\'{{provider.value}}\'" ng-false-value="\'\'" id="filter_checker_{{provider.value}}"> <label for="filter_checker_{{provider.value}}"> <span class="checker-ico"></span> <span>{{provider.title}}</span> <span class="item-counter">{{provider.count}}</span> </label> </div> </div> <div style="margin-bottom: 30px" ng-if="filters.active"> <h2>Active</h2> <div class="card-checker" ng-repeat="val in filters.active"> <input type="checkbox" ng-model="filter.active" ng-change="filterBots()" ng-true-value="\'{{val.value}}\'" ng-false-value="\'\'" id="filter_checker_{{val.value}}"> <label for="filter_checker_{{val.value}}"> <span class="checker-ico"></span> <span>{{val.title}}</span> <span class="item-counter">{{val.count}}</span> </label> </div> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <h2 class="mb60"> Bots <span style="color: #d8d8d8; margin-left: 35px"> {{total}} total </span> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1602px"> <custom-scro
27ller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table audience image-table no-hover" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress" style="width:1600px"> <tbody ng-if="bots.length && !loading"> <tr class="header-image"> <td style="width:1%; overflow: visible"> <div class="card-checker"> <input type="checkbox" ng-model="selected.all" ng-change="selectAllBots()" id="selectAllBots_checker"> <label for="selectAllBots_checker" style="width: 20%"> <span class="checker-ico"></span> </label> <div auto-close="outsideClick" uib-dropdown class="dropdown-toggle"> <span id="dropdown-bots-action" uib-dropdown-toggle ng-style="{\'text-decoration\': \'underline\', cursor: \'pointer\'}"> <i class="material-icons" style="color: #cccccc"> list </i> </span> <div class="dropdown-menu" role="menu" aria-labelledby="dropdown-order-status"> <a ng-repeat="action in botActions" style="display: block; margin: 5px 5px 10px 5px; cursor: pointer; position: relative" ng-click="massAction(action)" ng-style="{color: action.color}"> <i class="material-icons" style="position: absolute; left: 0; bottom: 0; font-size: 20px"> {{action.icon}} </i> <span style="margin-left: 25px">{{action.title}}</span> </a> </div> </div> </div> </td> <td style="width:15%; padding-left: 2px">{{main.translations.title_name}}</td> <td style="width:8%">User</td> <td style="width:8%">Portal</td> <td style="width:5%">Connections</td> <td style="width:8%">Active</td> <td style="width:5%; cursor: pointer" ng-click="changeSort()"> <i class="material-icons" ng-if="filter.sort == \'created_at\'"> arrow_downward </i> <i class="material-icons" ng-if="filter.sort == \'-created_at\'"> arrow_upward </i> Created at </td> <td style="width:4%"></td> </tr> <tr ng-repeat="(key, bot) in bots" ng-class="{\'first-line-image\' : key == 0}" style="cursor: pointer; border-bottom: 1px solid #e7e7e7"> <td> <div class="card-checker"> <input type="checkbox" ng-model="selected[bot.bot_id]" ng-change="selectBots(bot.bot_id)" id="selectBot_checker_{{bot.bot_id}}"> <label for="selectBot_checker_{{bot.bot_id}}"> <span class="checker-ico"></span> </label> </div> </td> <td><a ui-sref="bot-abstract.bot-detail({id: bot.bot_id})" target="_blank" style="display: block; text-decoration: none; color: black">{{bot.name}}</a></td> <td><a ui-sref="bot-abstract.bot-detail({id: bot.bot_id})" target="_blank" style="display: block; text-decoration: none; color: black">{{bot.user.name}}</a></td> <td><a ui-sref="bot-abstract.bot-detail({id: bot.bot_id})" target="_blank" style="display: block; text-decoration: none; color: black">{{bot.portal.name}}</a></td> <td><a ui-sref="bot-abstract.bot-detail({id: bot.bot_id})" target="_blank" style="display: block; text-decoration: none; color: black"> <span ng-repeat="connection in bot.connections"> <p ng-if="connection.provider == \'techfunder\'"> <img src="{{collectionImages[connection.provider]}}" style="border-radius: 50%; width: 32px; height: 32px; position: relative"> <span>{{connection.id}}</span><span ng-if="connection.count">: {{connection.count}}</span> </p> <p ng-if="connection.provider != \'techfunder\'"> <img src="{{collectionImages[connection.provider]}}"> <span>{{connection.id}}</span><span ng-if="connection.count">: {{connection.count}}</span> </p> </span> </a> </td> <td><a ui-sref="bot-abstract.bot-detail({id: bot.bot_id})" target="_blank" style="display: block; text-decoration: none; color: black">{{bot.active}}</a></td> <td><a ui-sref="bot-abstract.bot-detail({id: bot.bot_id})" target="_blank" style="display: block; text-decoration: none; color: black">{{bot.created_at|date:\'medium\'}}</a></td> <td><a class="btn-icon" ng-click="changeOwner(bot, search_users)" title="Change owner"> <i class="material-icons">transfer_within_a_station</i> </a></td> </tr> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tbody ng-if="loading"> <tr class="header-image"> <td style="width:15%; padding-left: 2px">{{main.translations.title_name}}</td> <td style="width:8%">User</td> <td style="width:8%">Portal</td> <td style="width:5%">Connections</td> <td style="width:8%">Active</td> <td style="width:4%"></td> </tr> <tr> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!bots.length && !inProgress && !loading"> <tr> <td colspan="6">No Bots found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'),a.put("views/admin-bots.html",'<div class="brn-table-wrap learning-entities"> <div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 20px 45px 51px" height="100%"> <div class="nav-sidebar-content-ofset" style="padding-right: 0px"> <div style="margin-bottom: 60px"> <h2>Search</h2> <custom-input placeholder="Name" ng-model="filter.name" title="Search" ng-keydown="searchBots($event)" is-back-placeholder="true"> <i class="material-icons" style="opacity: 0.6; font-size: 17px; position: relative; top: 3px">search</i> </custom-input> </div> <div style="margin-bottom: 30px" ng-if="filters.portals"> <h2>Portals</h2> <div class="card-checker" ng-repeat="portal in filters.portals" ng-if="portal.value"> <input type="checkbox" ng-model="filter.portal" ng-change="filterBots()" ng-true-value="\'{{portal.value}}\'" ng-false-value="\'\'" id="filter_checker_{{portal.value}}"> <label for="filter_checker_{{portal.value}}"> <span class="checker-ico"></span> <span>{{portal.title}}</span> <span class="item-counter">{{portal.count}}</span> </label> </div> </div> <div style="margin-bottom: 30px" ng-if="filters.providers"> <h2>Providers</h2> <div class="card-checker" ng-repeat="provider in filters.providers" ng-if="provider.value"> <input type="checkbox" ng-model="filter.provider" ng-change="filterBots()" ng-true-value="\'{{provider.value}}\'" ng-false-value="\'\'" id="filter_checker_{{provider.value}}"> <label for="filter_checker_{{provider.value}}"> <span class="checker-ico"></span> <span>{{provider.title}}</span> <span class="item-counter">{{provider.count}}</span> </label> </div> </div> <div style="margin-bottom: 30px" ng-if="filters.active"> <h2>Active</h2> <div class="card-checker" ng-repeat="val in filters.active"> <input type="checkbox" ng-model="filter.active" ng-change="filterBots()" ng-true-value="\'{{val.value}}\'" ng-false-value="\'\'" id="filter_checker_{{val.value}}"> <label for="filter_checker_{{val.value}}"> <span class="checker-ico"></span> <span>{{val.title}}</span> <span class="item-counter">{{val.count}}</span> </label> </div> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <h2 class="mb60"> Bots <span style="color: #d8d8d8; margin-left: 35px"> {{total}} total </span> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1602px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table audience image-table no-hover" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress" style="width:1600px"> <tbody ng-if="bots.length && !loading"> <tr class="header-image"> <td style="width:1%; overflow: visible"> <div class="card-checker"> <input type="checkbox" ng-model="selected.all" ng-change="selectAllBots()" id="selectAllBots_checker"> <label for="selectAllBots_checker" style="width: 20%"> <span class="checker-ico"></span> </label>
27 <div auto-close="outsideClick" uib-dropdown class="dropdown-toggle"> <span id="dropdown-bots-action" uib-dropdown-toggle ng-style="{\'text-decoration\': \'underline\', cursor: \'pointer\'}"> <i class="material-icons" style="color: #cccccc"> list </i> </span> <div class="dropdown-menu" role="menu" aria-labelledby="dropdown-order-status"> <a ng-repeat="action in botActions" style="display: block; margin: 5px 5px 10px 5px; cursor: pointer; position: relative" ng-click="massAction(action)" ng-style="{color: action.color}"> <i class="material-icons" style="position: absolute; left: 0; bottom: 0; font-size: 20px"> {{action.icon}} </i> <span style="margin-left: 25px">{{action.title}}</span> </a> </div> </div> </div> </td> <td style="width:10%; padding-left: 2px">{{main.translations.title_name}}</td> <td style="width:5%">User</td> <td style="width:5%">Portal</td> <td style="width:5%">Connections</td> <td style="width:5%">Active</td> <td style="width:5%; cursor: pointer" ng-click="changeSort()"> <i class="material-icons" ng-if="filter.sort == \'created_at\'"> arrow_downward </i> <i class="material-icons" ng-if="filter.sort == \'-created_at\'"> arrow_upward </i> Created at </td> <td style="width:2%"></td> </tr> <tr ng-repeat="(key, bot) in bots" ng-class="{\'first-line-image\' : key == 0}" style="cursor: pointer; border-bottom: 1px solid #e7e7e7"> <td> <div class="card-checker"> <input type="checkbox" ng-model="selected[bot.bot_id]" ng-change="selectBots(bot.bot_id)" id="selectBot_checker_{{bot.bot_id}}"> <label for="selectBot_checker_{{bot.bot_id}}"> <span class="checker-ico"></span> </label> </div> </td> <td><a ui-sref="bot-abstract.bot-detail({id: bot.bot_id})" target="_blank" style="display: block; text-decoration: none; color: black">{{bot.name}}</a></td> <td><a ui-sref="bot-abstract.bot-detail({id: bot.bot_id})" target="_blank" style="display: block; text-decoration: none; color: black">{{bot.user.name}}</a> </td> <td><a ui-sref="bot-abstract.bot-detail({id: bot.bot_id})" target="_blank" style="display: block; text-decoration: none; color: black">{{bot.portal.name}}</a> </td> <td><a ui-sref="bot-abstract.bot-detail({id: bot.bot_id})" target="_blank" style="display: block; text-decoration: none; color: black"> <span ng-repeat="connection in bot.connections"> <p ng-if="connection.provider == \'techfunder\'"> <img src="{{collectionImages[connection.provider]}}" style="border-radius: 50%; width: 32px; height: 32px; position: relative"> <span>{{connection.id}}</span><span ng-if="connection.count">: {{connection.count}}</span> </p> <p ng-if="connection.provider != \'techfunder\'"> <img src="{{collectionImages[connection.provider]}}"> <span>{{connection.id}}</span><span ng-if="connection.count">: {{connection.count}}</span> </p> </span> </a> </td> <td><a ui-sref="bot-abstract.bot-detail({id: bot.bot_id})" target="_blank" style="display: block; text-decoration: none; color: black">{{bot.active}}</a></td> <td><a ui-sref="bot-abstract.bot-detail({id: bot.bot_id})" target="_blank" style="display: block; text-decoration: none; color: black">{{bot.created_at|date:\'medium\'}}</a> </td> <td><a class="btn-icon" ng-click="changeOwner(bot, search_users)" title="Change owner"> <i class="material-icons">transfer_within_a_station</i> </a></td> </tr> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tbody ng-if="loading"> <tr class="header-image"> <td style="width:8%"></td> <td style="width:15%; padding-left: 2px">{{main.translations.title_name}}</td> <td style="width:8%">User</td> <td style="width:8%">Portal</td> <td style="width:8%">Connections</td> <td style="width:8%">Active</td> <td style="width:4%"></td> </tr> <tr> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!bots.length && !inProgress && !loading"> <tr> <td colspan="6">No Bots found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'),a.put("views/admin-content.html",'<div class="brn-table-wrap learning-entities"> <div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 20px 45px 51px" height="100%"> <div class="nav-sidebar-content-ofset" style="padding-right: 0px"> <div style="margin-bottom: 60px"> <h2>Search</h2> <custom-input placeholder="Name" ng-model="filter.name" title="Search" ng-keydown="searchCollections($event)" is-back-placeholder="true"> <i class="material-icons" style="opacity: 0.6; font-size: 17px; position: relative; top: 3px">search</i> </custom-input> </div> <div style="margin-bottom: 30px" ng-if="filters.sources"> <h2>Sources</h2> <div class="card-checker" ng-repeat="source in filters.sources" ng-if="source.value"> <input type="checkbox" ng-model="filter.source" ng-change="filterCollections()" ng-true-value="\'{{source.value}}\'" ng-false-value="\'\'" id="filter_checker_{{source.value}}"> <label for="filter_checker_{{source.value}}"> <span class="checker-ico"></span> <span>{{source.title}}</span> <span class="item-counter">{{source.count}}</span> </label> </div> </div> <div style="margin-bottom: 30px" ng-if="filters.active"> <h2>Active</h2> <div class="card-checker" ng-repeat="val in filters.active"> <input type="checkbox" ng-model="filter.active" ng-change="filterCollections()" ng-true-value="\'{{val.value}}\'" ng-false-value="\'\'" id="filter_checker_{{val.value}}"> <label for="filter_checker_{{val.value}}"> <span class="checker-ico"></span> <span>{{val.title}}</span> <span class="item-counter">{{val.count}}</span> </label> </div> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <h2 class="mb60"> Collections <span style="color: #d8d8d8; margin-left: 35px"> {{total}} total </span> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1602px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table audience image-table no-hover" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress" style="width:1600px"> <tbody ng-if="collections.length && !loading"> <tr class="header-image"> <td style="width:10%">Name</td> <td style="width:5%">Bot</td> <td style="width:5%">User</td> <td style="width:5%">Source</td> <td style="width:5%">Size <i class="material-icons" ng-if="filter.sort == \'size\'" ng-click="changeSort(\'-size\')" style="cursor: pointer; position: absolute">keyboard_arrow_up</i> <i style="cursor: pointer; position: absolute" class="material-icons" ng-if="filter.sort == \'-size\'" ng-click="changeSort(\'size\')">keyboard_arrow_down</i></td> <td style="width:5%">Url</td> <td style="width:5%">Active</td> <td style="width:5%">Frequency</td> <td style="width:5%"> </td></tr> <tr ng-repeat="(key, collection) in collections" ng-class="{\'first-line-image\' : key == 0}" style="cursor: pointer"> <td style="width:10%"><a ui-sref="collections.collection({id: collection.bot.id, collection:collection.id})" target="_blank" style="display: block; text-decoration: none; color: black">{{collection.name}}</a></td> <td style="width:5%">{{collection.bot.name}}</td> <td style="width:5%">
27{{collection.user.name}}</td> <td style="width:5%">{{collection.source}}</td> <td style="width:5%">{{collection.size}}</td> <td style="width:5%">{{collection.url}}</td> <td style="width:5%">{{collection.active}}</td> <td style="width:5%">{{collection.frequency}}</td> <td style="width:5%"> <a class="btn-icon" ng-click="clearCollection(collection)" title="Clear collection"> <i class="material-icons">delete_sweep</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tbody ng-if="loading"> <tr class="header-image"> <td style="width:10%">Name</td> <td style="width:5%">Bot</td> <td style="width:5%">User</td> <td style="width:5%">Source</td> <td style="width:5%">Size</td> <td style="width:5%">Url</td> <td style="width:5%">Active</td> <td style="width:5%">Frequency</td> </tr> <tr> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!collections.length && !inProgress && !loading"> <tr> <td colspan="6">No Collections found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'),a.put("views/admin-proxies.html",'<div class="brn-table-wrap learning-entities"> <div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 20px 45px 51px" height="100%"> <div class="nav-sidebar-content-ofset" style="padding-right: 0px"> <div style="margin-bottom: 60px"> <h2>Search</h2> <custom-input placeholder="Username" ng-model="filter.username" title="Search" ng-keydown="searchProxies($event)" is-back-placeholder="true"> <i class="material-icons" style="opacity: 0.6; font-size: 17px; position: relative; top: 3px">search</i> </custom-input> </div> <div style="margin-bottom: 30px" ng-if="filters.portals[0]"> <h2>Portals</h2> <div class="card-checker" ng-repeat="portal in filters.portals" ng-if="portal.value"> <input type="checkbox" ng-model="filter.portal" ng-change="filterProxies()" ng-true-value="\'{{portal.value}}\'" ng-false-value="\'\'" id="filter_checker_{{portal.value}}"> <label for="filter_checker_{{portal.value}}"> <span class="checker-ico"></span> <span>{{portal.title}}</span> <span class="item-counter">{{portal.count}}</span> </label> </div> </div> <div style="margin-bottom: 30px" ng-if="filters.providers"> <h2>Providers</h2> <div class="card-checker" ng-repeat="provider in filters.providers" ng-if="provider.value"> <input type="checkbox" ng-model="filter.provider" ng-change="filterProxies()" ng-true-value="\'{{provider.value}}\'" ng-false-value="\'\'" id="filter_checker_{{provider.value}}"> <label for="filter_checker_{{provider.value}}"> <span class="checker-ico"></span> <span>{{provider.title}}</span> <span class="item-counter">{{provider.count}}</span> </label> </div> </div> <div style="margin-bottom: 30px" ng-if="filters.in_use"> <h2>In use</h2> <div class="card-checker" ng-repeat="in_use in filters.in_use"> <input type="checkbox" ng-model="filter.in_use" ng-change="filterProxies()" ng-true-value="\'{{in_use.value}}\'" ng-false-value="\'\'" id="filter_checker_in_use_{{in_use.value}}"> <label for="filter_checker_in_use_{{in_use.value}}"> <span class="checker-ico"></span> <span>{{in_use.title}}</span> <span class="item-counter">{{in_use.count}}</span> </label> </div> </div> <div style="margin-bottom: 30px" ng-if="filters.active"> <h2>Active</h2> <div class="card-checker" ng-repeat="val in filters.active"> <input type="checkbox" ng-model="filter.active" ng-change="filterProxies()" ng-true-value="\'{{val.value}}\'" ng-false-value="\'\'" id="filter_checker_active_{{val.value}}"> <label for="filter_checker_active_{{val.value}}"> <span class="checker-ico"></span> <span>{{val.title}}</span> <span class="item-counter">{{val.count}}</span> </label> </div> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="loader-container" style="position: fixed; z-index: 9; left: 50%; top: 50%" ng-if="check"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> <h2 class="mb60"> Proxies <span style="color: #d8d8d8; margin-left: 15px"> {{total}} total </span> <span class="add-bot" ui-sref="create_proxy()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </span> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1602px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table audience image-table no-hover" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress" style="width:1600px"> <tbody ng-if="proxies.length && !loading" ng-class="{\'hide-table\' : check
27== true}"> <tr class="header-image"> <td style="width:5%">Provider</td> <td style="width:10%">Host</td> <td style="width:5%">Port</td> <td style="width:5%">Rating</td> <td style="width:5%">Target</td> <td style="width:5%">Active</td> <td style="width:5%">In use</td> <td style="width:5%">Logs</td> <td style="width:5%">Date created</td> <td style="width:5%"> </td> </tr> <tr ng-repeat="(key, proxy) in proxies" ng-class="{\'first-line-image\' : key == 0}" style="cursor: pointer"> <td style="width:5%" ng-click="editProxy(proxy)">{{proxy.provider}}</td> <td style="width:10%" ng-click="editProxy(proxy)">{{proxy.host}}</td> <td style="width:5%" ng-click="editProxy(proxy)">{{proxy.port}}</td> <td style="width:5%"> <span ng-click="openRating(proxy, coefficients)" style="cursor:pointer">{{proxy.rating | number:3}}</span> </td> <td style="width:5%" ng-click="editProxy(proxy)"> <span ng-if="proxy.target && proxy.target.type">Type: {{proxy.target.type}}</span> <br> <span ng-if="proxy.target && proxy.target.username">Username: {{proxy.target.username}}</span> </td> <td style="width:5%" ng-click="editProxy(proxy)">{{proxy.active}}</td> <td style="width:5%" ng-click="editProxy(proxy)">{{proxy.in_use == false ? \'Free\' : \'In use\'}}</td> <td style="width:5%" ng-if="proxy.logs.length"> <span ng-click="openLog(proxy)" style="cursor:pointer">{{proxy.logs.length}} logs</span> </td> <td style="width:5%" ng-if="!proxy.logs.length"> no log </td> <td style="width:5%" ng-click="editProxy(proxy)">{{proxy.created_at | date:\'medium\'}}</td> <td style="width:7%" class="control-fixed"> <a class="btn-icon" ng-click="deleteProxy(proxy)" title="Delete proxy"> <i class="material-icons">delete</i> </a> <a class="btn-icon" ng-click="checkProxy(proxy)" title="Check proxy"> <i class="material-icons">autorenew</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tbody ng-if="loading"> <tr class="header-image"> <td style="width:5%">Provider</td> <td style="width:10%">Host</td> <td style="width:5%">Port</td> <td style="width:5%">Rating</td> <td style="width:5%">Target</td> <td style="width:5%">Active</td> <td style="width:5%">In use</td> <td style="width:5%">Logs</td> <td style="width:5%">Date created</td> <td style="width:5%"> </td> </tr> <tr> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!proxies.length && !inProgress && !loading"> <tr> <td colspan="6">No Proxies found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'), 28a.put("views/ard-moma/index.html",'<link rel="stylesheet" type="text/css" href="ardmoma/css/main.css"> <header id="header"> <nav> <a href="index.html" class="logo"> <img src="ardmoma/img/icons/Logo.svg" alt="logo"> </a> <ul class="nav-menu"> <li><a id="toFacts" href="#">Fakten</a></li> <li><a id="toFeatures" href="#">Features</a></li> <li><a href="http://m.me/384926558186855">Bot starten</a></li> </ul> </nav> </header> <div id="content"> <div class="section section-start"> <video id="start-video" poster="ardmoma/img/start-preview.jpg"> <source src="ardmoma/video/video_start.mp4"> </source></video> </div> <div class="section section-features" id="facts"> <div class="container"> <div class="row-features"> <div class="item"> <div class="item-icon"> <img src="ardmoma/img/icons/ic_1.svg" alt="icon"> </div> <h4> Start <br> Dezember 2017 </h4> </div> <div class="item"> <div class="item-icon"> <img src="ardmoma/img/icons/ic_2.svg" alt="icon"> </div> <h4> 10.000 <br> User täglich </h4> </div> <div class="item"> <div class="item-icon"> <img src="ardmoma/img/icons/ic_3.svg" alt="icon"> </div> <h4> Erster deutscher <br> videobasierter <br> Messenger Bot </h4> </div> <div class="item"> <div class="item-icon"> <img src="ardmoma/img/icons/ic_4.svg" alt="icon"> </div> <h4> 280.000 <br> versendete Nachrichten </h4> </div> <div class="item"> <div class="item-icon"> <img src="ardmoma/img/icons/ic_6.svg" alt="icon"> </div> <h4> 125.000 <br> User-Fragen </h4> </div> </div> </div> </div> <div class="section-title" id="features"> <div class="container"> <h3>Rubriken im MOMA-Messenger</h3> </div> </div> <div class="section section-category"> <div class="container"> <p class="section-text"> Warum haben Frankreich und Deutschland ihren Freundschaftsvertrag erneuert? Wie hat sich die Beziehung der beiden Länder in den letzten 65 Jahren eigentlich entwickelt? Und für welche Filme lohnt es sich am nächsten Wochenende ins Kino zu gehen? Ãber den MOMA-Messenger kann man alle Inhalte bequem nochmal ansehen. Im Hauptmenü unter Rubriken kann sich der User nach Themengebieten sortiert die Beiträge und Interviews raussuchen, die ihn besonders interessieren. Jedes Video ist zwischen 5 und 10 MB groà â und damit unterwegs gut abrufbar. </p> <div class="screens-container"> <div class="screen-lg"> <img src="ardmoma/img/categories.png" alt="screen"> </div> <div class="screen screen-md"> <img src="ardmoma/img/screens/Rubriken_8_final.jpg" alt="screen"> </div> <div class="screen screen-md"> <img src="ardmoma/img/screens/Rubriken_9_final.jpg" alt="screen"> </div> <div class="screen screen-md"> <img src="ardmoma/img/screens/Rubriken_10_final.jpg" alt="screen"> </div> <div class="screen screen-md"> <img src="ardmoma/img/screens/Rubriken_11_final.png" alt="screen"> </div> </div> </div> </div> <div class="section-title"> <div class="container"> <h3>Push-Nachrichten vom MOMA-Messenger</h3> </div> </div> <div class="section section-notification"> <div class="container"> <p class="section-text"> Politik an, Service aus: Der User kann selbst bestimmen zu welchen Rubriken er Push-Nachrichten bekommen moÌchte. Sobald in den Rubriken neue Inhalte verfuÌgbar sind, bekommt er sie direkt aufs Smartphone- oder Tablet-Display. </p> <div class="screens-container"> <div class="screen-lg"> <img src="ardmoma/img/notification-lg.png" alt="screen"> </div> <div class="screen screen-md"> <img src="ardmoma/img/screens/Push_1.PNG" alt="screen"> </div> <div class="screen screen-md screen-green"> <img src="ardmoma/img/screens/Push_2.PNG" alt="screen"> </div> <div class="screen screen-md screen-red"> <img src="ardmoma/img/screens/Push_3.PNG" alt="screen"> </div> <div class="screen screen-md screen-green"> <img src="ardmoma/img/screens/Push_4.jpg" alt="screen"> </div> </div> </div> </div> <div class="section-title"> <div class="container"> <h3>Schlagwortsuche im MOMA-Messenger</h3> </div> </div> <div class="section section-keyword-search"> <div class="container"> <p class="section-text"> Wie sieht Andrea Nahles die zukünftige Zusammenarbeit mit der neuen CDU-Vorsitzenden Annegret Kramp-Karrenbauer? Unter âFrag MOMAâ liefert der MOMA-Messenger Inhalte auf Knopfdruck. Dabei greift er auf die Mediathek des ARD-Morgenmagazins zurück. </p> <div class="screens-container"> <div class="screen-container img-arrow-sm"> <img src="ardmoma/img/screens/Frag Moma_1.jpg" alt="screen" class="screen"> </div> <div class="screen-container img-arrow-lg"> <img src="ardmoma/img/screens/Frag Moma_2.jpg" alt="screen" class="screen"> </div> <div class="video-container video--button video--button-play"> <video id="mobile-video" poster="ardmoma/img/mobile-preview.jpg"> <source src="ardmoma/video/FragMoma_3.mp4"> </source></video> </div> </div> </div> </div> <div class="section-title"> <div class="container"> <h3>Kontakt zur MOMA-Redaktion</h3> </div> </div> <div class="section section-contact"> <div class="container"> <p class="section-text"> Ein Chat-Bot ist zum chatten da! Deshalb gibtâs auch über den MOMA-Messenger die Möglichkeit, Kontakt zur Redaktion aufzunehmen. Einfach die eigene Mail-Adresse mit angeben und schon landen Fragen, Anregungen und Kritik im Postfach der MOMA-Redaktion. </p> <div class="screens-container"> <div class="screen-container img-arrow-sm"> <img src="ardmoma/img/screens/Kontakt_1_final.jpg" alt="screen" class="screen"> </div> <div class="screen-container img-arrow-sm"> <img src="ardmoma/img/screens/Kontakt_2_final.jpg" alt="screen" class="screen"> </div> <div class="screen-container"> <img src="ardmoma/img/screens/Kontakt_3_final.jpg" alt="screen" class="screen"> </div> </div> </div> </div> <div class="section-title"> <div class="container"> <h3>Storytelling im MOMA-Messenger</h3> </div> </div> <div class="section section-story"> <div class="container"> <p class="section-text"> Ob Weltmeisterschaft, MOMA-Themenwochen oder Wahlen: Bestimmte Themen werden im MOMA-Messenger als eigene Story erzählt. Wie in einem Dossier findet der User an einer Stelle gebündelt Reportagen, Erklärstücke und Interviews zum jeweiligen Thema. Dabei stehen sie nur so lange online, wie es für den User von Interesse ist. Die Beiträge sind online-gerecht aufgearbeitet und mit Untertiteln versehen. </p> <div class="video-container video--button video--button-play"> <video id="messenger-video" class="" poster="ardmoma/img/news-preview.jpg"> <source src="ardmoma/video/WM Messenger_fertig gemischt.mp4"> </source></video> </div> <p class="section-text"> Für mehr Infos zur MOMA-WM-Story einfach âWMStoryDemoScenarioâ ins Eingabefeld eingeben. Zur Themenwoche Landleben gehtâs mit âLSDemoScenarioâ. </p> </div> </div> </div> <footer id="footer"> <p class="impressum"> Diensteanbieter im Sinne von §5 TMG (Telemediengesetz) <br> ARD-Morgenmagazin <br> Leitung: Martin Hövel <br> WDR Köln <br> Appellhofplatz 1 <br> 50600 Köln </p> </footer> <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"><\/script> <script>jQuery(document).ready(function($) {\n //scroll\n\n $("#toFacts").click(function() {\
28n $(\'body, html\').animate({\n scrollTop: ($(\'#facts\').offset().top)\n },500);\n });\n\n $("#toFeatures").click(function() {\n $(\'body, html\').animate({\n scrollTop: ($(\'#features\').offset().top)\n },500);\n });\n\n var videos = $(\'video\');\n\n videos.on(\'click\', function(event) {\n event.preventDefault();\n\n if ($(this).get(0).paused) {\n videos.each(function(index, el) {\n $(this).get(0).pause();\n });\n $(this).get(0).play();\n }\n else {\n $(this).get(0).pause();\n videos.each(function(index, el) {\n $(this).get(0).pause();\n });\n }\n });\n });<\/script>'),a.put("views/ard-moma/index_old.html",'<div> <link href="https://vjs.zencdn.net/7.0.3/video-js.css" rel="stylesheet"> <link rel="stylesheet" type="text/css" href="styles/ard-moma/main.css"> <div id="wrapper-main"> <nav id="nav"> <div class="container"> <div class="row row-flex"> <div class="logo"> <a href="#"> ARD MOMA BOT </a> </div> <ul class="menu"> <li> <a href="#" id="toFacts" onclick="scroll()">Facts</a> </li> <li> <a href="#" id="toFeatures">Features</a> </li> <li> <a href="http://m.me/384926558186855" class="enter">Try bot now</a> </li> </ul> </div> </div> </nav> <section id="main"> <video id="my-video" class="video-js vjs-16-9" controls preload="auto" width="640" height="264" poster="images/ard_moma/preview.jpg" data-setup="{"fluid": true}"> <source src="images/ard_moma/video.mp4" type="video/mp4"> <p class="vjs-no-js"> To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a> </p> </source></video> </section> <section id="facts"> <div class="container"> <h2 class="section-title"> Facts Moma News Bot </h2> <div class="row row-flex"> <div class="facts-item"> <div class="facts-item-img"> <img src="images/ard_moma/rocket_ship.svg" alt="rocket"> </div> <h5 class="facts-item-title">Dezember 2017</h5> <p class="facts-item-description">Launch</p> </div> <div class="facts-item"> <div class="facts-item-img"> <img src="images/ard_moma/user.svg" alt="user"> </div> <h5 class="facts-item-title">10.000</h5> <p class="facts-item-description">Daily {{main.translations.active}} Users</p> </div> <div class="facts-item"> <div class="facts-item-img"> <img src="images/ard_moma/video_player.svg" alt="video_player"> </div> <h5 class="facts-item-title fz20">Erster Video Messenger Bot im Deutschen TV</h5> </div> </div> <div class="row row-flex"> <div class="facts-item"> <div class="facts-item-img"> <img src="images/ard_moma/messenger.svg" alt="messenger"> </div> <h5 class="facts-item-title">278.484</h5> <p class="facts-item-description">Video-Messages Sent</p> </div> <div class="facts-item"> <div class="facts-item-img"> <img src="images/ard_moma/social_media.svg" alt="social_media"> </div> <h5 class="facts-item-title fz20">Aktivierung Social Media Zielgruppen</h5> </div> <div class="facts-item"> <div class="facts-item-img"> <img src="images/ard_moma/asking.svg" alt="asking"> </div> <h5 class="facts-item-title">125.000</h5> <p class="facts-item-description">User-Fragen</p> </div> </div> </div> </section> <section id="features-1"> <div class="container"> <h2 class="section-title"> Features Moma News Bot </h2> <div class="row"> <div class="feature"> <h3 class="feature-title"> Anmeldung </h3> <p class="feature-description"> 1. Useraktivierung über Deep-Link in E-Mail o.ä. </p> <p class="feature-description"> 2. Automatische Antwort des Bots bei Usereintrag in Facebook-Post-Kommentarzeile. </p> <p class="feature-description"> 3. über Messenger Icon auf Facebook-Page. </p> </div> </div> <div class="row"> <div class="section-img-wide"> <img src="images/ard_moma/anmeldung.png" alt="anmeldung"> </div> <div class="section-img-mobile"> <div class="svg-layer"> <svg> <defs> <marker id="head" orient="auto" markerwidth="4" markerheight="8" refx="1" refy="2"> <path d="M0,0 V4 L4,2 Z" fill="#E4E4E4"> </marker> </defs> <path d="M 82 112 q -90 180 0 360" stroke="#E4E4E4" stroke-width="2" stroke-linecap="round" fill="none" stroke-dasharray="1, 6" marker-end="url(#head)"> <path d="M 339 500 q 70 185 0 370" stroke="#E4E4E4" stroke-width="2" stroke-linecap="round" fill="none" stroke-dasharray="1, 6" marker-end="url(#head)"> </svg> </div> <img src="images/ard_moma/a_1.jpg" alt="anmeldung"> <img src="images/ard_moma/a_2.jpg" alt="anmeldung"> <img src="images/ard_moma/a_3.jpg" alt="anmeldung"> </div> </div> <div class="row"> <div class="feature"> <h3 class="feature-title"> Push-Individualisierung </h3> <p class="feature-description word-space--2"> Freie Auswahl: Mit dem ARD Moma Messenger Bot individualisieren User ihre News-Alerts. Sie entscheiden wann und w
28orüber sie automatisch unterrichtet und informiert werden möchten. Jede Rubrik wird individuell angesteuert und dort die jeweilige Push-Einstellung aktiviert/deaktiviert. </p> </div> </div> <div class="row"> <div class="section-img-wide"> <img src="images/ard_moma/push.png" alt="push"> </div> <div class="section-img-mobile"> <div class="svg-layer"> <svg> <defs> <marker id="head-red" orient="auto" markerwidth="4" markerheight="8" refx="1" refy="2"> <path d="M0,0 V4 L4,2 Z" fill="#F8311060"> </marker> </defs> <path d="M 56 270 q -90 180 18 326" stroke="#E4E4E4" stroke-width="2" stroke-linecap="round" fill="none" stroke-dasharray="1, 6" marker-end="url(#head)"> <path d="M 84 620 q -70 100 -30 220" stroke="#F8311060" stroke-width="2" stroke-linecap="round" fill="none" stroke-dasharray="1, 6" marker-end="url(#head-red)"> <path d="M 334 620 q 130 130 30 560" stroke="#52AA2A60" stroke-width="2" stroke-linecap="round" fill="none" stroke-dasharray="1, 6" marker-end="url(#head)"> </svg> </div> <img src="images/ard_moma/p_1.png" alt="anmeldung"> <p class="p1-text">User wählt individuell aus</p> <p class="p2-title p2-title-red"> Abmelden </p> <p class="p2-text"> Nein, ich möchte keine Push Benachrichtigung erhalten </p> <img src="images/ard_moma/p_2.jpg" alt="anmeldung"> <p class="p2-title"> Anmelden </p> <p class="p2-text"> Ja, ich will Push Benachrichtigungen erhalten </p> <img src="images/ard_moma/p_3.jpg" alt="anmeldung"> </div> </div> </div> </section> <section id="themes"> <div class="container"> <div class="row row-flex"> <div class="category category-left"> <span>Top-Thema</span> </div> <div class="section-img-mobile"> <img src="images/ard_moma/c_1.png" alt="Rubriken"> </div> <div class="category category-right"> <span>Rubriken</span> </div> <div class="section-img-mobile"> <img src="images/ard_moma/c_2.png" alt="Rubriken"> <img src="images/ard_moma/c_4.png" alt="Rubriken"> <img src="images/ard_moma/c_5.png" alt="Rubriken"> <img src="images/ard_moma/c_6.png" alt="Rubriken"> <img src="images/ard_moma/c_7.png" alt="Rubriken"> </div> </div> <div class="row"> <div class="section-img-wide"> <img src="images/ard_moma/cats.png" alt="cats"> </div> </div> </div> </section> <section id="features-2"> <div class="container"> <div class="row row-flex"> <div class="feature"> <h3 class="feature-title"> Frag Moma </h3> <p class="feature-description word-space--2"> Der ARD Moma Messenger Bot liefert auf Nachfrage gezielt Inhalte aus der ARD Mediathek. Zukünftige Weiterentwicklung: Anschluss einer neuen Datenbank, die über KI (Natural Language) zielgenau individuelle Sequenzen aus Video-Inhalten ausliefert. </p> </div> <div class="img-wrapper"> <img src="images/ard_moma/fragmoma.png" alt="fragmoma"> </div> </div> <div class="row"> <div class="feature"> <h3 class="feature-title"> Kontakt </h3> <p class="feature-description word-space--2"> Der ARD Moma Messenger Bot liefert auf Nachfrage gezielt Antworten: Fragen werden an den ARD Moma Service wetergeleitet. Die Antwort erfolgt über die Aussendung einer E-Mail an die vom User mitgelieferte E-Mail-Adresse. </p> </div> </div> <div class="row"> <div class="section-img-wide"> <img src="images/ard_moma/kontakt.png" alt="kontakt"> </div> <div class="section-img-mobile"> <div class="svg-layer"> <svg> <path d="M 90 120 q -90 80 -40 200" stroke="#E4E4E4" stroke-width="2" stroke-linecap="round" fill="none" stroke-dasharray="1, 6" marker-end="url(#head)"> <path d="M 372 330 q 90 185 0 370" stroke="#E4E4E4" stroke-width="2" stroke-linecap="round" fill="none" stroke-dasharray="1, 6" marker-end="url(#head)"> </svg> </div> <img src="images/ard_moma/k_1.png" alt="kontakt"> <img src="images/ard_moma/k_2.png" alt="kontakt"> <img src="images/ard_moma/k_3.png" alt="kontakt"> </div> </div> </div> </section> <footer> <p class="copy"> ARD MOMA BOT <span>© 2018</span> </p> </footer> </div> <div id="cookiesAlert"> <div class="container"> <div class="row row-flex"> <p>Cookies help us deliver our services. By using our services, you agree to our use of cookies.</p> <i class="material-icons" id="close-cookies"> close </i> </div> </div> </div> <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"><\/script>
28 <script src="https://vjs.zencdn.net/7.0.3/video.js"><\/script> <script>$("#toFacts").click(function () {\n $(\'body, html\').animate({\n scrollTop: ($(\'#facts\').offset().top)\n }, 500);\n });\n\n $("#toFeatures").click(function () {\n $(\'body, html\').animate({\n scrollTop: ($(\'#features-1\').offset().top)\n }, 500);\n });\n\n $(\'#close-cookies\').click(function () {\n'+" setCookie('cookies', '1');\n $('#cookiesAlert').css('display', 'none');\n });\n\n $(window).on('scroll', function () {\n var hT = $('footer').offset().top,\n hH = $('footer').outerHeight(),\n wH = $(window).height(),\n wS = $(this).scrollTop();\n\n if (wS > (hT - wH)) {\n $('#cookiesAlert').css('bottom', wS - (hT - wH));\n } else {\n $('#cookiesAlert').css('bottom', '0');\n }\n });\n\n $(window).on('load', function () {\n if (!getCookie('cookies')) {\n $('#cookiesAlert').css('display', 'block');\n }\n });\n\n\n function setCookie(key, value) {\n var expires = new Date();\n expires.setTime(expires.getTime() + (1 * 24 * 60 * 60 * 1000));\n document.cookie = key + '=' + value + ';expires=' + expires.toUTCString();\n }\n\n function getCookie(key) {\n var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');\n return keyValue ? keyValue[2] : null;\n }<\/script> </div>"),a.put("views/assist.html",'<link rel="stylesheet" type="text/css" href="styles/braincubator/main.css"> <div ng-if="loaded"> <div ng-bind-html="page"> </div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/attribute-mixed-form-modal.html",'<div class="flex-row create-bot flex-row-start" style="width: 500px"> <div class="create-bot-wrap" style="width: 500px"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 4px;top: 5px; font-size: 21px" ng-click="close()"> close </i> <h2>{{mixedAttribute.name}}</h2> </div> </div> <div class="row" ng-if="mixedAttribute.multiple"> <form class="" ng-submit="fillMultipleAttribute()"> <div class="col-md-6"> <div class="mb10px" ng-repeat="(name, attr) in mixedAttribute.schema.fields track by $index"> <div class="mb10" ng-if="attr.type == \'string\'"> <custom-input ng-model="mainAttr[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'number\'"> <custom-input ng-model="mainAttr[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true" type-input="number"> </custom-input> </div> <div ng-if="attr.type == \'boolean\'" ng-class="{\'mt20\' : $index == 0}"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="mainAttr[name]" id="schema_bool"> <label for="schema_bool"> <span class="checker-ico"></span> <span>{{attr.label}}</span> </label> </div> </div> <div class="mb10" ng-if="attr.type==\'date\'"> <custom-date-range-single title="{{attr.label}}" ng-model="mainAttr[name]"> </custom-date-range-single> </div> <div ng-if="attr.type==\'file\'"> <div class="mb10"> <custom-input ng-model="mainAttr[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-if="!uploaders[name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="uploaders[name]"> file_upload </i> <span class="google-loader input-group-addon" ng-if="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'image\'"> <div class="mb10"> <custom-input ng-model="mainAttr[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name)" ng-disabled="uploaders[name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div class="mb10" ng-if="attr.type==\'color\'"> <custom-colorpicker ng-model="mainAttr[name]" title="{{attr.label}}"> </custom-colorpicker> </div> <div class="mb10" ng-if="attr.type==\'location\'"> <span ng-click="showMapForm(attr, mainAttr[name])" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">map</i> </span> </div> \x3c!--<div class="mb10" ng-if="attr.type == \'location\'">--\x3e \x3c!--<custom-input type-input="number" step="any" ng-model="mainAttr[name].coordinates[0]" placeholder="{{attr.label}} longitude" title="{{attr.label}} longitude" is-back-placeholder="true" is-required="mainAttr[name].coordinates[1]">--\x3e \x3c!--</custom-input>--\x3e \x3c!--</div>--\x3e \x3c!--<div class="mb10" ng-if="attr.type == \'location\'">--\x3e \x3c!--<custom-input type-input="number" step="any" ng-model="mainAttr[name].coordinates[1]" placeholder="{{attr.label}} latitude" title="{{attr.label}} latitude" is-back-placeholder="true" is-required="mainAttr[name].coordinates[0]">--\x3e \x3c!--</custom-input>--\x3e \x3c!--</div>--\x3e </div> <div> <span ng-click="addMultipleValue()">Add value <i class="material-icons" style="position: relative; top: 5px">add</i> </span> </div> </div> <div class="col-md-6"> <div ng-repeat="value in multipleValues track by $index" style="position: relative"> <span><i class="material-icons close-icon" style="position: absolute; top: 0; right: 0; font-size: 14px" ng-click="delMultipleVal($index)"> close </i></span> <div ng-repeat="(key, val) in value"> {{key}} : {{val}} </div> <hr> </div> </div> <div class="col-md-12"> <button type="submit" class="brn-btn brn-primary">Save</button> </div> </form> </div> <form class="" ng-submit="fillAttribute()" ng-if="!mixedAttribute.multiple"> <div class="mb10px" ng-repeat="(name, attr) in mixedAttribute.schema.fields track by $index"> <div class="mb10" ng-if="attr.type == \'string\'"> <custom-input ng-model="mainAttr[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'number\'"> <custom-input ng-model="mainAttr[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true" type-input="number"> </custom-input> </div> <div ng-if="attr.type == \'boolean\'" ng-class="{\'mt20\' : $index == 0}"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="mainAttr[name]" id="schema_bool"> <label for="schema_bool"> <span class="checker-ico"></span> <span>{{attr.label}}</span> </label> </div> </div> <div class="mb10" ng-if="attr.type==\'date\'"> <custom-date-range-single title="{{attr.label}}" ng-model="mainAttr[name]"> </custom-date-range-single> </div> <div ng-if="attr.type==\'file\'"> <div class="mb10"> <custom-input ng-model="mainAttr[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-if="!uploaders[name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="uploaders[name]"> file_upload </i> <span class="google-loader input-group-addon" ng-if="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'image\'"> <div class="mb10"> <custom-input ng-model="mainAttr[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name)" ng-disabled="uploaders[name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div class="mb10" ng-if="attr.type==\'color\'"> <custom-colorpicker ng-model="mainAttr[name]" title="{{attr.label}}"> </custom-colorpicker> </div> <div class="mb10" ng-if="attr.type==\'location\'"> <span ng-click="showMapForm(attr, mainAttr[name])" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">map</i> </span> </div> \x3c!--<div class="mb10" ng-if="attr.type == \'location\'">--\x3e \x3c!--<custom-input type-input="number" step="any" ng-model="mainAttr[name].coordinates[0]" placeholder="{{attr.label}} longitude" title="{{attr.label}} longitude" is-back-placeholder="true" is-required="mainAttr[name].coordinates[1]">--\x3e \x3c!--</custom-input>--\x3e \x3c!--</div>--\x3e \x3c!--<div class="mb10" ng-if="attr.type == \'location\'">--\x3e \x3c!--<custom-input type-input="number" step="any" ng-model="mainAttr[name].coordinates[1]" placeholder="{{attr.label}} latitude" title="{{attr.label}} latitude" is-back-placeholder="true" is-required="mainAttr[name].coordinates[0]">--\x3e \x3c!--</custom-input>--\x3e \x3c!--</div>--\x3e </div> <div> <button type="submit" class="brn-btn brn-primary">{{main.translations.addValue}}</button> </div> </form> </div> </div>'),a.put("views/attribute-simple-modal.html",'<div class="flex-row create-bot flex-row-start" style="width: 500px"> <div class="create-bot-wrap" style="width: 500px"> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 4px;top: 5px; font-size: 21px" ng-click="close()"> close </i> <h2>{{simpleAttribute.label}}</h2> </div> <div class="row"> <form class="simple-attribute-form" ng-submit="fillAttribute()"> <div class="col-md-6"> <div class="mb10"> <custom-input ng-if="simpleAttribute.type == \'string\'" ng-model="$parent.simpleAttr" placeholder="{{simpleAttribute.label}}" title="{{simpleAttribute.label}}" is-back-placeholder="true"> </custom-input> <custom-input ng-if="simpleAttribute.type == \'number\'" ng-model="$parent.simpleAttr" placeholder="{{simpleAttribute.label}}" title="{{simpleAttribute.label}}" is-back-placeholder="true" type-input="number"> </custom-input> <custom-date-range-single ng-if="simpleAttribute.type==\'date\'" title="{{simpleAttribute.label}}" ng-model="$parent.simpleAttr"> </custom-date-range-single> <custom-colorpicker ng-if="simpleAttribute.type==\'color\'" ng-model="$parent.simpleAttr" title="{{simpleAttribute.label}}"> </custom-colorpicker> <span ng-if="simpleAttribute.type==\'location\'" ng-click="showMapForm(simpleAttribute, $parent.simpleAttr)" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">map</i> </span> </div> <div> <span ng-click="addMultipleValue()">Add value <i class="material-icons" style="position: relative; top: 5px">add</i> </span> </div> </div> <div class="col-md-6"> <span ng-repeat="value in simpleValues track by $index" ng-click="deleteValue($index)" class="simple-value"> <span ng-if="$index != 0">, </span>{{value}} </span> </div> <div class="col-md-12"> <button type="submit" class="brn-btn brn-primary">Save</button> </div> </form> </div> </div> </div>'),a.put("views/auth.html",'<div class="auth-block"> <div class="loader-wrap"> <svg class="loader"> <filter id="blur"> <fegaussianblur in="SourceGraphic" stddeviation="2"></fegaussianblur> </filter> <circle cx="75" cy="75" r="60" fill="transparent" stroke="#F4F519" stroke-width="6" stroke-linecap="round" stroke-dasharray="385" stroke-dashoffset="385" filter="url
28(#blur)"></circle> </svg> <svg class="loader loader-2"> <circle cx="75" cy="75" r="60" fill="transparent" stroke="#DE2FFF" stroke-width="6" stroke-linecap="round" stroke-dasharray="385" stroke-dashoffset="385" filter="url(#blur)"></circle> </svg> <svg class="loader loader-3"> <circle cx="75" cy="75" r="60" fill="transparent" stroke="#FF5932" stroke-width="6" stroke-linecap="round" stroke-dasharray="385" stroke-dashoffset="385" filter="url(#blur)"></circle> </svg> <svg class="loader loader-4"> <circle cx="75" cy="75" r="60" fill="transparent" stroke="#E97E42" stroke-width="6" stroke-linecap="round" stroke-dasharray="385" stroke-dashoffset="385" filter="url(#blur)"></circle> </svg> <svg class="loader loader-5"> <circle cx="75" cy="75" r="60" fill="transparent" stroke="white" stroke-width="6" stroke-linecap="round" filter="url(#blur)"></circle> </svg> <svg class="loader loader-6"> <circle cx="75" cy="75" r="60" fill="transparent" stroke="#00DCA3" stroke-width="6" stroke-linecap="round" stroke-dasharray="385" stroke-dashoffset="385" filter="url(#blur)"></circle> </svg> <svg class="loader loader-7"> <circle cx="75" cy="75" r="60" fill="transparent" stroke="purple" stroke-width="6" stroke-linecap="round" stroke-dasharray="385" stroke-dashoffset="385" filter="url(#blur)"></circle> </svg> <svg class="loader loader-8"> <circle cx="75" cy="75" r="60" fill="transparent" stroke="#AAEA33" stroke-width="6" stroke-linecap="round" stroke-dasharray="385" stroke-dashoffset="385" filter="url(#blur)"></circle> </svg> </div> </div>'),a.put("views/back-navbar.html",'<div class="container"> <div class="empty-nav-sidebar"> <span class="nav-sidebar-back round-btn" ng-click="goBack()"> <i class="material-icons">arrow_back</i> </span> </div> <div class="margin-rest" ui-view=""> </div> </div>'), 29a.put("views/bot-abstract-new.html",'<div ui-view="" style="display: flex; flex-direction: column; flex-grow: 1"></div> <div id="bugRepport" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Bug Report </div> <div class="mb-title"> <div class="mb10"> <custom-input placeholder="Title" ng-model="bugSubject" title="Title" is-back-placeholder="true"> </custom-input> </div> <div class="mb40"> <custom-input placeholder="Description" type-input="textarea" ng-model="bugDescription" title="Description" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <div style="font-size: 14px">Files:</div> <div ng-repeat="item in bugReportFiles track by $index" class="files-modal-container"> <span> {{item.name}} </span> <i class="material-icons" ng-click="bugReportFiles.splice($index, 1)">close </i> </div> </div> <div class="add-more-files" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ng-if="!step.properties.url" ngf-select="addFile($file)"> Add more files <i class="material-icons">add </i> </div> </div> <div> <button type="button" class="brn-btn brn-primary" data-dismiss="modal" ng-click="sendReport()"> Send </button> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/bot-abstract.html",'<div ui-view="" class="flex-height"></div> <div id="bugRepport" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Bug Report </div> <div class="mb-title"> <div class="mb10"> <custom-input placeholder="Title" ng-model="bugSubject" title="Title" is-back-placeholder="true"> </custom-input> </div> <div class="mb40"> <custom-input placeholder="Description" type-input="textarea" ng-model="bugDescription" title="Description" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <div style="font-size: 14px">Files:</div> <div ng-repeat="item in bugReportFiles track by $index" class="files-modal-container"> <span> {{item.name}} </span> <i class="material-icons" ng-click="bugReportFiles.splice($index, 1)">close </i> </div> </div>
29 <div class="add-more-files" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ng-if="!step.properties.url" ngf-select="addFile($file)"> Add more files <i class="material-icons">add </i> </div> </div> <div> <button type="button" class="brn-btn brn-primary" data-dismiss="modal" ng-click="sendReport()"> Send </button> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/bot-functions.html",'<div class="container container-updated"> <div class="row margin-rest" style="max-width: 1440px"> <div class="bots-header"> <a class="add-bot" ng-click="addScenario()" style="{{isAddingScenario ? \'pointer-events: none\' : \'\'}}"> <span>New scenario</span> <i class="material-icons">add</i> </a> <div class="bots-search-bar" ng-class="{\'bots-search-bar-active\': showSearch}"> <resize-input2 ng-focus="toggleSearch()" ng-blur="toggleSearch()" ng-model="keyword" ng-model-options="{ debounce: 500 }" multiline="false" placeholder="{{searchPlaceholder}}" style="display: flex"> </resize-input2> <i class="material-icons" ng-if="!keyword">search</i> <i class="material-icons" style="color: #d0021b; cursor: pointer" ng-if="keyword" ng-click="clearKeyword()">close</i> </div> </div> <div class="table-actions" ng-class="{\'table-actions-active\': selectedScenarios.length}"> <span ng-click="makeDefault()" ng-class="{\'action-disabled\': selectedScenarios.length > 1}" class="action-default" title="Make default"> <i class="material-icons">grade</i> </span> <span ng-click="copyScenarios()" class="action-clone" title="Clone"> <i class="material-icons">content_copy</i> </span> <span ng-click="deleteScenarios()" class="action-delete" title="Delete"> <i class="material-icons">delete</i> </span> </div> <div class="brn-table-wrap t-modern mb60" style="width: 100%"> <table class="brn-table" style="width: 100%"> <thead> <tr class="header-image"> <td style="width: 36px; padding-left: 12px; padding-right: 12px" ng-click="onTableSelectAll()"> <div class="card-checker"> <input type="checkbox" ng-checked="isAllScenariosSelected"> <label> <span class="checker-ico"> </span> </label> </div> </td> <td style="width: calc(50% - 18px)"> {{main.translations.title_name}} </td> <td style="width: calc(50% - 18px)"> Keywords </td> </tr> </thead> <tbody> <tr ng-repeat="(key, scenario) in scenarios track by $index" ng-show="!keyword || scenario.searchResult" ng-class="{\'first-line\' : key == 0, \'errored\' : scenario.validation.status == \'errored\' && !scenario.validation.forced}"> <td style="padding-left: 12px; padding-right: 12px" ng-click="onTableSelect($event, scenario)"> <div class="card-checker"> <input type="checkbox" ng-checked="scenario.tableSelected"> <label> <span class="checker-ico"> </span> </label> </div> </td> <td ng-if="scenario.template == \'visual\'" style="position: relative; cursor: pointer" ng-click="editScenario(scenario.scenario_id)"> {{scenario.name}} <span ng-if="scenario.default" style="position: absolute; margin-top: -7px"> <i class="material-icons" style="font-size: 14px; color: #94cc25">grade</i> </span> </td> <td ng-if="scenario.template == \'visual\'" style="position: relative; cursor: pointer" ng-click="editScenario(scenario.scenario_id)"> <span ng-repeat="keyword in scenario.keywords track by $index">{{keyword}} </span> </td> <td ng-if="scenario.template != \'visual\'" style="position: relative; cursor: pointer" ui-sref="edit-scenarios-old({id: bot_id, scenario: scenario.scenario_id})"> {{scenario.name}} <span ng-if="scenario.default" style="position: absolute; margin-top: -7px"> <i class="material-icons" style="font-size: 14px; color: #94cc25">grade</i> </span> </td> <td ng-if="scenario.template != \'visual\'" style="position: relative; cursor: pointer" ui-sref="edit-scenarios-old({id: bot_id, scenario: scenario.scenario_id})"> <span ng-repeat="keyword in scenario.keywords track by $index">{{keyword}} </span> </td> </tr> <tr ng-if="inProgress"> <td colspan="3"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!scenarios.length && !inProgress"> <tr> <td colspan="3">No scenarios found.</td> </tr> </tfoot> </table> </div> </div> </div>'),a.put("views/bot-menu-abstract.html",'<div class="sub-main-menu"> <i class="material-icons arrow-icon" ng-if="windowWidth >= 768">keyboard_arrow_right </i> <div class="all-bots-btn-container"> <a href="/v2/bots" target="_self" class="all-bots-btn"> <i class="material-icons material-icons icon">keyboard_backspace </i> <span class="text">{{main.translations.bot_menu_allBots}}</span> </a> </div> <ul> <li ui-sref-active="active" style="max-width:350px;text-overflow: ellipsis; white-space: nowrap; overflow: hidden; padding-bottom: 40px"> \x3c!-- <a ui-sref="bot-abstract.bot-detail({id: botNav.botInfo.bot_id})"> --\x3e <a href="/v2/bot/{{botNav.botInfo.bot_id}}/dashboard" target="_self"> <img ng-src="{{botNav.botInfo.image}}" alt="" class="header-avatar"> <span class="">{{botNav.botInfo.name}}</span> </a> </li> <li ui-sref-active="active" ng-if="(windowWidth > 1055 || windowWidth < 768) && main.permissions.bot.clients"> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/crm" target="_self"> <span>CRM</span> </a> </li> <li ui-sref-active="{\'active\': \'learning\'}" ng-if="(windowWidth > 1055 || windowWidth < 768) && main.permissions.bot.ai"> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/learning" target="_self"> <span>{{main.translations.bot_menu_learning}}</span> </a> </li> <li ui-sref-active="active" ng-if="(windowWidth > 1125 || windowWidth < 768) && main.permissions.bot.collections"> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/collections" target="_self"> <span>Content</span> </a> \x3c!-- <a ui-sref="collections({id: botNav.botInfo.bot_id})">
29\n <span>{{main.translations.bot_menu_content}}</span>\n </a> --\x3e </li> <li ui-sref-active="active" ng-if="(windowWidth > 1205 || windowWidth < 768) && main.permissions.bot.broadcasts"> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/broadcasts" target="_self"> <span>{{main.translations.bot_menu_broadcast}}</span> </a> </li> <li ui-sref-active="active" ng-if="(windowWidth > 1280 || windowWidth < 768) && main.permissions.bot.scenarios" ng-class="{active: currentState.name == \'visual-editor\' || currentState.name == \'visual-editor-scenario\' || currentState.name == \'edit-scenarios\' || currentState.name == \'edit-scenarios-old\'}"> <a ui-sref="bot-abstract.bot-functions({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_functions}}</span> </a> </li> <li ui-sref-active="active" ng-if="(windowWidth > 1345 || windowWidth < 768) && main.permissions.bot.clients"> <a ui-sref="conversations({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_dialogs}}</span> </a> </li> <li ui-sref-active="{\'active\': \'statistic\'}" ng-if="windowWidth > 1415 || windowWidth < 768"> <a ui-sref="general({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_statistic}}</span> </a> </li> <li ng-if="(windowWidth > 1540 || windowWidth < 768) && main.permissions.bot.store" class="navbar-dropdown" uib-dropdown auto-close="outsideClick"> <a id="dropdown-store-menu" uib-dropdown-toggle> <span>{{main.translations.bot_menu_store}}</span> </a> <ul class="dropdown-menu" style="left:-120px; margin-top: 10px" role="menu" aria-labelledby="dropdown-store-menu"> <li> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/store/default/products" target="_self"> <span>{{main.translations.bot_menu_products}}</span> </a> </li> <li ui-sref-active="active"> <a ui-sref="store-orders({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_orders}}</span> </a> </li> <li ui-sref-active="active"> <a ui-sref="store-customers({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_clients}}</span> </a> </li> <li> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/store/persons" target="_self"> <span>Persons</span> </a> </li> <li ui-sref-active="active"> <a ui-sref="store-merchants({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_merchants}}</span> </a> </li> <li ui-sref-active="active"> <a ui-sref="store-transactions({id: botNav.botInfo.bot_id})"> <span>Transactions</span> </a> </li> <li ui-sref-active="active"> <a ui-sref="store-offers-public({id: botNav.botInfo.bot_id})"> <span>Offers</span> </a> </li> <li ui-sref-active="active"> <a ui-sref="store-payments({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_store_payments}}</span> </a> </li> </ul> </li> <li ui-sref-active="active" ng-if="(windowWidth > 1560 || windowWidth < 768) && main.permissions.bot.tools"> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/growth" target="_self"> <span>{{main.translations.bot_menu_growth}}</span> </a> </li> <li ui-sref-active="{\'active\': \'bot-tokens\'}" ng-if="botNav.botInfo.blockchain.active && (windowWidth > 1600 || windowWidth < 768)"> <a ui-sref="bot-tokens({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_tokens}}</span> </a> </li> <li ui-sref-active="{\'active\': \'bot-settings\'}" ng-if="main.permissions.bot.settings && (windowWidth > 1600 || windowWidth < 768)"> <a ui-sref="bot-settings.settings-general({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_settings}}</span> </a> </li> <li class="navbar-dropdown dropdown-more-menu" uib-dropdown ng-class="{\'open\' :subMenu.storeIsOpen}" auto-close="outsideClick"> <a id="dropdown-bot-menu" ng-if="windowWidth <= 1600 && windowWidth > 767" uib-dropdown-toggle> <span class="more-text" style="bottom: 9.3px"> {{main.translations.bot_menu_more}} <i class="material-icons more-icon">arrow_drop_down</i> </span> </a> <ul class="dropdown-menu" style="left: -84px;margin-top: 6px" role="menu" aria-labelledby="dropdown-bot-menu"> <li ui-sref-active="active" ng-if="windowWidth <= 1055 && main.permissions.bot.clients"> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/crm" target="_self"> <span>{{main.translations.bot_menu_audience}}</span> </a> </li> <li ui-sref-active="active" ng-if="windowWidth <= 1125 && main.permissions.bot.collections"> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/collections" target="_self"> <span>Content</span> </a> \x3c!-- <a ui-sref="collections({id: botNav.botInfo.bot_id})">
29\n <span>{{main.translations.bot_menu_content}}</span>\n </a> --\x3e </li> <li ui-sref-active="active" ng-if="windowWidth <= 1205 && main.permissions.bot.broadcasts"> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/broadcasts" target="_self"> <span>{{main.translations.bot_menu_broadcast}}</span> </a> </li> <li ui-sref-active="active" ng-if="windowWidth <= 1280 && main.permissions.bot.scenarios" ng-class="{active: currentState.name == \'visual-editor\' || currentState.name == \'visual-editor-scenario\' || currentState.name == \'edit-scenarios\' || currentState.name == \'edit-scenarios-old\'}"> <a ui-sref="bot-abstract.bot-functions({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_functions}}</span> </a> </li> <li ui-sref-active="active" ng-if="windowWidth <= 1345 && main.permissions.bot.clients"> <a ui-sref="conversations({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_dialogs}}</span> </a> </li> <li ui-sref-active="{\'active\': \'statistic\'}" ng-if="windowWidth <= 1415"> <a ui-sref="general({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_statistic}}</span> </a> </li> <li ng-if="windowWidth <= 1540 && main.permissions.bot.store" class="dropdown-sub right" uib-dropdown auto-close="outsideClick" on-toggle="toggledStore(open)" auto-close="outsideClick"> <a id="dropdown-store-menu-short" uib-dropdown-toggle> <span class="hidden-xs">{{main.translations.bot_menu_store}}</span> </a> <ul class="dropdown-menu flex-li" style="left: -190px; top: -15px" role="sub-menu" aria-labelledby="dropdown-store-menu-short"> <li> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/store/default/products" target="_self"> <span>{{main.translations.bot_menu_products}}</span> </a> </li> <li ui-sref-active="active"> <a ui-sref="store-orders({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_orders}}</span> </a> </li> <li ui-sref-active="active"> <a ui-sref="store-customers({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_clients}}</span> </a> </li> <li> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/store/persons" target="_self"> <span>Persons</span> </a> </li> <li ui-sref-active="active"> <a ui-sref="store-merchants({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_merchants}}</span> </a> </li> <li ui-sref-active="active"> <a ui-sref="store-transactions({id: botNav.botInfo.bot_id})"> <span>Transactions</span> </a> </li> <li ui-sref-active="active"> <a ui-sref="store-offers-public({id: botNav.botInfo.bot_id})"> <span>Offers</span> </a> </li> <li ui-sref-active="active"> <a ui-sref="store-payments({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_store_payments}}</span> </a> </li> </ul> </li> <li ui-sref-active="active" ng-if="windowWidth <= 1560 && main.permissions.bot.tools"> <a href="/v2/bot/{{botNav.botInfo.bot_id}}/growth" target="_self"> <span>{{main.translations.bot_menu_growth}}</span> </a> </li> <li ui-sref-active="{\'active\': \'bot-tokens\'}" ng-if="botNav.botInfo.blockchain.active && windowWidth <= 1600"> <a ui-sref="bot-tokens({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_tokens}}</span> </a> </li> <li ui-sref-active="{\'active\': \'bot-settings\'}" ng-if="main.permissions.bot.settings && windowWidth <= 1600"> <a ui-sref="bot-settings.settings-general({id: botNav.botInfo.bot_id})"> <span>{{main.translations.bot_menu_settings}}</span> </a> </li> </ul> </li> </ul> </div> <div class="right-panel" ng-if="windowWidth > 766"> <div style="margin: 0px 12px 0px 5px; float: left"> <div ng-if="botInfo.active" ng-click="switchBotActivity()" class="disable-bot"> <span style="color:#94cc25">On</span> <ng-include src="\'images/svg/ic_check_box_black_24px_menu.svg\'"></ng-include> </div> <div ng-if="!botInfo.active" ng-click="switchBotActivity()" class="enable-bot"> <span style="color:#94cc25">Off</span> <ng-include src="\'images/svg/ic_check_box_outline_blank_black_24px_menu.svg\'"></ng-include> </div> </div> <div class="bug-notification-btn" title="Bug Report" data-toggle="modal" data-target="#bugRepport"> <i class="material-icons">
29 bug_report </i> </div> <div class="alerts round-btn" ng-class="{error: isNotificationError, disabled : !isNotificationWarning && !isNotificationError}" ng-click="handleAlertClick($event)"> <i class="alerts-on" ng-include="\'images/svg/ic_notifications_black_24px.svg\'"> </i> </div> </div> <slide-menu visibility="notifications.visibility" align="right"> <div> <div class="main-title"> <h2> {{main.translations.bot_rightPanel_notifications}} </h2> <div class="buttons-panel"> <i ng-click="clearAll()" ng-include="\'images/svg/ic_clear_all_black_18px.svg\'"> </i> <i ng-click="notifications.visibility = false" ng-include="\'images/svg/ic_clear_black_18px.svg\'"> </i> </div> </div> <div class="single-notification" ng-repeat="(key, alert) in alerts" ng-if="alert.viewed == viewedType" ng-click="notivicationAction(alert, key)"> <div class="img-notification {{alert.type}}"> <i ng-if="alert.type != \'error\' && alert.type != \'warning\'" ng-include="\'images/svg/ic_check_circle_grean_18px.svg\'"> </i> <i ng-if="alert.type == \'error\'" ng-include="\'images/svg/ic_error_read_18px.svg\'"> </i> <i ng-if="alert.type == \'warning\'" style="color: #ffea00;font-size: 34px;position: relative;top: -1px;left: 1px" class="material-icons"> warning </i> </div> <div class="content-notification"> <span ng-bind="alert.created_at | date:\'dd.MM.yyyy - hh:mm a\'" class="n-date {{alert.type}}"> </span> <span class="n-date {{alert.type}} n-type"> - {{alert.category}}</span> <div class="n-message">{{alert.message}}</div> </div> </div> <div ng-if="!alerts.length"> {{main.translations.bot_rightPanel_notificationsEmpty}} </div> </div> </slide-menu>'), 30a.put("views/bot-menu-colapse.html",'<ul class="nav navbar-nav main-menu"> <li class="navbar-dropdown" ng-if="main.authenticated" uib-dropdown style="padding-left: 2px"> <a id="dropdown-profile" uib-dropdown-toggle> <span> <img class="dropdown-profile-avatar" ng-src="{{main.authenticated.avatar?(main.authenticated.avatar):(\'images/no-avatar-user.png\')}}"> <span ng-if="windowWidth < 768 ">{{main.authenticated.first_name}} {{main.authenticated.last_name}}</span> </span> </a> <div ng-if="windowWidth >= 768 " class="dropdown-menu" role="menu" style="padding: 0px" uib-dropdown-menu aria-labelledby="dropdown-profile"> <div class="dropdown-profile"> <div class="dropdown-profile-content"> <a class="table-cell" ui-sref="profile"> <img class="avatar" ng-src="{{main.authenticated.avatar?(main.authenticated.avatar):(\'images/no-avatar-user.png\')}}"> </a> <a class="table-cell" ui-sref="profile"> <span class="name">{{main.authenticated.first_name}} {{main.authenticated.last_name}}</span> <br> <span class="email">{{main.authenticated.email}}</span> </a> </div> <a ng-click="main.logOut()" class="logaut"> <i ng-include="\'images/svg/ic_exit_to_app_black_18px.svg\'"></i> </a> <div class="dropdown-profile-buttom" ng-if="main.isAdmin || main.isSubAdmin"> <a ui-sref="portals" class="links" ng-class="{\'disabled\' : !main.isAdmin && !main.isSubAdmin}"> <i ng-include="\'images/svg/ic_work_black_18px.svg\'"></i> {{main.translations.menu_portals}} </a> <a ui-sref="mind-settings" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i ng-include="\'images/svg/ic_new_releases_black_18px.svg\'"></i> {{main.translations.menu_mind}} </a> <a ng-if="main.authenticated.permissions.portal.users" ui-sref="manage-users" class="links" ng-class="{\'disabled\' : !main.isAdmin && !main.isSubAdmin}"> <i class="user" ng-include="\'images/svg/ic_person_black_18px.svg\'"></i> {{main.translations.menu_users}} </a> <a ui-sref="manage-bots" class="links" ng-class="{\'disabled\' : !main.isAdmin && !main.isSubAdmin}"> <i class="user" ng-include="\'images/svg/ic_face_black_18px.svg\'"></i> {{main.translations.menu_bots}} </a> <a ui-sref="manage-mails" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i class="mails" ng-include="\'images/svg/ic_email_black_18px.svg\'"></i> {{main.translations.menu_mails}} </a> <a ui-sref="manage-translation({page: \'all\'})" class="links" ng-class="{\'disabled\' : !main.isAdmin }"> <i class="mails" ng-include="\'images/svg/ic_language_black_18px.svg\'"></i> {{main.translations.menu_translations}} </a>
30 <a ui-sref="manage-content" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i class="mails" ng-include="\'images/svg/baseline-poll-24px.svg\'"></i> {{main.translations.menu_content}} </a> <a ng-if="authenticated.permissions.portal.proxies" ui-sref="manage-proxies" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i class="mails" ng-include="\'images/svg/baseline-vpn_lock-24px.svg\'"></i> {{main.translations.menu_proxies}} </a> <br> <a ui-sref="crm-statistic" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i ng-include="\'images/svg/ic_person_black_18px.svg\'"></i> Statistic </a> <a ui-sref="profile-companies" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i ng-include="\'images/svg/ic_group_work_24px.svg\'"></i> Projects </a> <br> <a ui-sref="profile-members" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i ng-include="\'images/svg/ic_group_black_24px.svg\'"></i> Team </a> <br> <a ui-sref="hints" class="links" ng-class="{\'disabled\' : !main.isAdmin && !main.isSubAdmin}"> <i ng-include="\'images/svg/ic_help_black_24px.svg\'"></i> Hints </a> </div> </div> </div> <ul class="dropdown-menu" uib-dropdown-menu ng-if="windowWidth < 768" role="menu" aria-labelledby="dropdown-profile"> <li ng-show="main.isAdmin || main.isSubAdmin"> <a ui-sref="portals"> <i class="material-icons icon profile-icon" style="width: 26px">work_black</i> {{main.translations.menu_portals}} </a> </li> <li ng-show="main.isAdmin"> <a ui-sref="mind-settings"> <i class="material-icons icon profile-icon">new_releases </i> {{main.translations.menu_mind}} </a> </li> <li ng-show="main.isAdmin && main.isSubAdmin"> <a ui-sref="manage-users"> <i class="material-icons icon profile-icon">person </i> {{main.translations.menu_users}} </a> </li> <li ng-show="main.isAdmin && main.isSubAdmin"> <a ui-sref="manage-bots"> <i class="material-icons icon profile-icon">face </i> {{main.translations.menu_bots}} </a> </li> <li ng-show="main.isAdmin"> <a ui-sref="manage-mails"> <i class="material-icons icon profile-icon">email </i> {{main.translations.menu_mails}} </a> </li> <li ng-show="main.isAdmin"> <a ui-sref="manage-translation({page: \'all\'})"> <i class="material-icons icon profile-icon">language </i> {{main.translations.menu_translations}} </a> </li> <li ng-show="main.isAdmin"> <a ui-sref="manage-content"> <i class="material-icons icon profile-icon">assessment </i> {{main.translations.menu_content}} </a> </li> <li ng-show="main.isAdmin"> <a ui-sref="manage-content"> <i class="material-icons icon profile-icon">vpn_lock </i> {{main.translations.menu_proxies}} </a> </li> <li> <a ng-click="main.logOut()"> <i class="material-icons icon profile-icon">exit_to_app </i> {{main.translations.menu_logout}} </a> </li> </ul> </li> <li class="navbar-dropdown dropdown-global-menu left-after" uib-dropdown style="padding-right: 24px" ng-class="{\'open\' : main.subMenuBots.appsIsOpen || main.subMenuBots.solutionsIsOpen }" auto-close="outsideClick"> <a id="dropdown-menu" uib-dropdown-toggle> <span ng-if="(main.curentState.isCurentStateBot || main.curentState.isCurentStateAllBot)"> <i class="material-icons icon">face</i> <span class="text" style="margin-right: 0px">{{main.translations.menu_bot}}</span> <i class="material-icons" style="{{windowWidth >= 768? \'position: absolute; top: 4px; right: -15px;\' : \'position: relative; top: 0px; left: 10px;\' }}">arrow_drop_down</i> </span> \x3c!-- <span ng-if="(main.curentState.isCurentStateTemplate || main.curentState.isCurentStateTemplates)">\n <i class="material-icons icon">assignment_turned_in</i>\n <span class="text" style="margin-right: 0px;">{{main.translations.menu_templates}}</span>\n <i class="material-icons"\n style="{{windowWidth >= 768? \'position: absolute; top: 4px; right: -15px;\' : \'position: relative; top: 0px; left: 10px;\' }}">arrow_drop_down</i>\n </span> --\x3e <span ng-if="main.curentState.isCurentStateStatsAll"> <i class="material-icons icon">donut_large</i> <span class="text" style="margin-right: 0px">{{main.translations.menu_global_Statistic}}</span> <i class="material-icons" style="{{windowWidth >= 768? \'position: absolute; top: 4px; right: -15px;\' : \'position: relative; top: 0px; left: 10px;\' }}">arrow_drop_down</i> </span> </a> <ul class="dropdown-menu" style="left: 58px; margin-top: 2px" role="menu" aria-labelledby="dropdown-menu"> <li ui-sref-active="active"> <a href="https://brn.ai/hub/"> <i class="material-icons icon-droped icon">home_large </i> <span class="text text-droped">Home</span> </a> </li> <li ng-if="!main.curentState.isCurentStateBot && !main.curentState.isCurentStateAllBot"> <a ui-sref="bots" ng-if="!main.curentState.isCurentStateBot"> <i class="material-icons material-icons icon icon-droped">face </i> <span class="text text-droped">{{main.translations.menu_bot}}</span> </a> <a ng-if="main.curentState.isCurentStateBot"> <i class="material-icons material-icons icon icon-droped">face </i> <span class="text text-droped">{{main.translations.menu_bot}}</span> </a> </li> \x3c!-- \n <li ng-if="!main.curentState.isCurentStateTemplates">\n <a ui-sref="templates">\n <i class="material-icons icon icon-droped">assignment_turned_in </i>
30\n <span class="text text-droped">{{main.translations.menu_templates}}</span>\n </a>\n </li> --\x3e \x3c!-- <li>\n <a href="https://brn.ai/bots/" target="_blank">\n <i class="material-icons icon icon-droped">insert_drive_file </i>\n <span class="text text-droped">{{main.translations.menu_ratings}}</span>\n </a>\n </li> --\x3e \x3c!-- <li class="dropdown-sub short" uib-dropdown on-toggle="main.toggledSolutions(open)"\n auto-close="outsideClick">\n <a id="dropdown-store-menu-solutions" uib-dropdown-toggle>\n <i class="material-icons icon icon-droped">thumb_up </i>\n <span class="text text-droped">{{main.translations.menu_solutions}}</span>\n </a>\n <ul class="dropdown-menu flex-li" style="left: calc(100% + 14px);top: -14px;" role="sub-menu"\n aria-labelledby="dropdown-store-menu-solutions">\n\n <li>\n <a href="https://brn.ai/instagram" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">{{main.translations.menu_instaDirect}}</span>\n <span\n style="font-size: 12px; color:#999999;">{{main.translations.menu_instaDirect_description}}</span>\n </a>\n </li>\n\n <li>\n <a href="https://brn.ai/hotelbot" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">{{main.translations.menu_hotelBot}}</span>\n <span\n style="font-size: 12px; color:#999999;">{{main.translations.menu_hotelBot_description}}</span>\n </a>\n </li>\n <li>\n <a href="https://brn.ai/cardealerbot" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">{{main.translations.menu_carDealership}}</span>\n <span\n style="font-size: 12px; color:#999999;">{{main.translations.menu_carDealership_description}}</span>\n </a>\n </li>\n\n <li>\n <a href="https://brn.ai/real-estate" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">Real estate chatbot</span>\n <span style="font-size: 12px; color:#999999;">An automated intelligence workforce that can\n more than you expect</span>\n </a>\n </li>\n <li>\n <a href="https://brn.ai/support-bot" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">Support chatbot</span>\n <span style="font-size: 12px; color:#999999;">Reduce Customer Support Cost by Automatically\n Answering Customerâs Questions</span>\n </a>\n </li>\n\n\n <li>\n <a href="https://brn.ai/assist" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">Sales assistant chatbot</span>\n <span style="font-size: 12px; color:#999999;">Ultra-fast time to value</span>\n </a>\n </li>\n <li>\n <a href="https://brn.ai/recruit" class="solution-menu" target="_blank">\n <span style="font-weight: 600;"> Recruiting chatbot</span>\n <span style="font-size: 12px; color:#999999;">Personalised candidate experience â at\n scale</span>\n </a>\n </li>\n <li>\n <a href="https://brn.ai/engage" class="solution-menu" target="_blank">
30\n <span style="font-weight: 600;">Customer engagement chatbot</span>\n <span style="font-size: 12px; color:#999999;">Automate sales with BRN.Engage</span>\n </a>\n </li>\n <li>\n <a href="https://brn.ai/leads" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">Lead generation chatbot</span>\n <span style="font-size: 12px; color:#999999;">Build, integrate, and launch bot in 20 minutes\n or less.</span>\n </a>\n </li>\n </ul>\n </li> --\x3e \x3c!-- <li>\n <a href="https://brn.ai/work/" target="_blank">\n <i class="material-icons icon icon-droped">group </i>\n <span class="text text-droped">{{main.currentLang === \'de\'? \'Work\': \'Work\'}}</span>\n </a>\n </li> --\x3e \x3c!-- <li ng-class="{\'active\' : main.isBotFabrik}">\n <a ui-sref="braincubator" ui-sref-active="active">\n <i class="material-icons icon icon-droped">new_releases </i>\n <span class="text text-droped">Code For Equity</span>\n </a>\n </li> --\x3e <li ui-sref-active="active" ng-if="userInfo.role == \'admin\' && !main.curentState.isCurentStateStatsAll"> <a ui-sref="statsAll"> <i class="material-icons icon-droped icon">donut_large </i> <span class="text text-droped">{{main.translations.menu_global_Statistic}}</span> </a> </li> \x3c!-- <li class="dropdown-sub short" uib-dropdown on-toggle="main.toggledApps(open)" auto-close="outsideClick">\n <a id="dropdown-store-menu-apps" uib-dropdown-toggle>\n <i class="material-icons icon icon-droped">phonelink_ring </i>\n <span class="text text-droped">{{main.translations.menu_ourApps}}</span>\n </a>\n <ul class="dropdown-menu flex-li" style="left: calc(100% + 14px);top: -14px;" role="sub-menu"\n aria-labelledby="dropdown-store-menu-apps">\n <li>\n <a href="https://play.google.com/store/apps/details?id=de.techfunder.brn" target="_blank">\n <i ng-include="\'images/svg/ic_android_black_24px.svg\'" class="big-icon-xs"></i>\n <span>{{main.translations.menu_android}}</span>\n </a>\n </li>\n <li>\n <a href="https://itunes.apple.com/ru/app/brn-chatbots-for-business-messaging/id1227372642?l=en&mt=8"\n target="_blank">\n <i ng-include="\'images/svg/ic_apple_small.svg\'" class="big-icon-xs"></i>\n <span>{{main.translations.menu_iPhone}}</span>\n </a>\n </li>\n </ul>\n </li> --\x3e <li> <a data-toggle="modal" data-target="#contactModal"> <i class="material-icons icon icon-droped">email</i> <span class="text text-droped">{{main.translations.menu_contact}}</span> </a> </li> </ul> </li> </ul>'),a.put("views/bot-preview-widget.html",'<div class="bot-preview-container"> <div id="botPreview" class="bot-preview"></div> </div>'),a.put("views/bot-preview.html",'<div class="container"> <div class="bot-detailed"> <div class="row-flex"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <span class="nav-sidebar-back round-btn" ng-click="goBack()"> <i class="material-icons">arrow_back</i> </span> <custom-scroller is-shadow="true" paddings="16px 10px 0px 51px"> <div class="nav-sidebar-content-ofset"> <div class="bot-info-text"> <div class="bot-info-img"> <img ng-src="{{bot.image?(bot.image):(\'images/preview-bg.png\')}}" alt="bot img"> </div> <div class="bot-info-name"> {{bot.name}} </div> <div class="bot-info-url"> <a href="#"> @{{bot.username}}
30 </a> </div> </div> <h2>chat now</h2> <div class="bot-info-socials"> <ul class="main-socials settings-social nav-sidebar-block"> <li class="messenger" ng-if="bot.links.messenger"> <a href="{{bot.links.messenger}}" target="_blank"> <span> <img src="images/socials/messenger.png" alt=""> <span> Messenger </span> </span> </a> </li> <li class="telegram" ng-if="bot.links.telegram"> <a href="{{bot.links.telegram}}" target="_blank"> <span> <img src="images/socials/telegram.png" alt=""> <span> Telegram </span> </span> </a> </li> <li class="code" ng-if="bot.links.widget"> <a href="{{getWidgetLink()}}" target="_blank"> <span> <img src="images/socials/widget.svg" alt=""> <span> Widget </span> </span> </a> </li> <li class="kik" ng-if="bot.links.kik"> <a href="{{bot.links.kik}}" target="_blank"> <span> <img src="images/socials/kik.png" alt=""> <span> Kik </span> </span> </a> </li> <li class="slack" ng-if="bot.links.slack"> <a href="{{bot.links.slack}}" target="_blank"> <span> <img src="images/socials/slack.png" alt=""> <span> Slack </span> </span> </a> </li> <li class="line" ng-if="bot.links.line"> <a href="{{bot.links.line}}" target="_blank"> <span> <img src="images/socials/line.png" alt=""> <span> Line </span> </span> </a> </li> <li class="skype" ng-if="bot.links.skype"> <a href="{{bot.links.skype}}" target="_blank"> <span> <img src="images/socials/skype.png" alt=""> <span> Skype </span> </span> </a> </li> <li class="wechat" ng-if="bot.links.wechat"> <a href="{{bot.links.wechat}}" target="_blank"> <span> <img src="images/socials/we-chat.png" alt=""> <span> Wechat </span> </span> </a> </li> <li class="viber" ng-if="bot.links.viber"> <a href="{{bot.links.viber}}" target="_blank"> <span> <img src="images/socials/viber.png" alt=""> <span> Viber </span> </span> </a> </li> <li class="twitter" ng-if="bot.links.twitter"> <a href="{{bot.links.twitter}}" target="_blank"> <span> <img src="images/socials/twitter.png" alt=""> <span> Twitter </span> </span> </a> </li> <li class="instagram" ng-if="bot.links.instagram"> <a href="{{bot.links.instagram}}" target="_blank"> <span> <img src="images/socials/instagram.png" alt=""> <span> Instagram </span> </span> </a> </li> </ul> </div> </div> </custom-scroller> </div> </div> <div class="flex-col nav-sidebar-margin-rest"> <div class="row-flex"> <div class="flex-col-p col-half mb60"> <h2 class="mb50">About</h2> <div class="catalog-about" style="max-width:588px"> <p ng-if="bot.description"> {{bot.description}} </p> <p ng-if="!bot.description">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? </p> </div> </div> <div class="flex-col-p col-half mb60" ng-if="screenshots.length > 0"> <h2 class="mb50">Screenshots</h2> <div class="catalog-screenshot-container"> <div class="catalog-screenshot" ng-repeat="image in screenshots"> <a data-toggle="modal" data-target="#screenshotPiker" ng-click="selectScreenshot(image)" target="_blank"> <img src="{{image.url}}" alt="{{image.name}}" style="width:100%"> </a> </div> </div> </div> </div> </div> </div> </div> </div> <div id="screenshotPiker" class="modal fade" role="dialog"> <div class="modal-dialog catalog-screenshot-modal"> \x3c!-- Modal content--\x3e <i class="material-icons close-icon" style="font-size: 19px" data-dismiss="modal"> close </i> <div class="img-container"> <img src="{{selectedScreenshot.url}}" alt="{{selectedScreenshot.name}}"> </div> </div> </div> <div ui-view=""></div>'),a.put("views/bot-settings.html",'<div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 10px 0px 51px" height="calc(100% - 116px)"> <div class="nav-sidebar-content-ofset"> <h2 class="mb40">{{main.translations.leftMenu_category}}</h2> <div class="card-checker" ng-click="goto(\'bot-settings.settings-general\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'bot-settings.settings-general\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>{{main.translations.leftMenu_general}}</span> </label> </div> <div ng-if="main.permissions.bot.connections" class="card-checker" ng-click="goto(\'bot-settings.settings-connections\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'bot-settings.settings-connections\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>{{main.translations.leftMenu_connections}}</span> </label> </div> <div class="card-checker" ng-click="goto(\'bot-settings.settings-mail
30s\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'bot-settings.settings-mails\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>{{main.translations.lefMenu_emailTemplates}}</span> </label> </div> <div class="card-checker" ng-click="goto(\'bot-settings.settings-catalog\',botNav.botInfo.bot_id)" ng-if="isAdmin"> <input type="checkbox" ng-checked="check(\'bot-settings.settings-catalog\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>{{main.translations.leftMenu_template}}</span> </label> </div> <div class="card-checker" ng-click="goto(\'bot-settings.settings-roles\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'bot-settings.settings-roles\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>{{main.translations.leftMenu_roles}}</span> </label> </div> <div class="card-checker" ng-click="goto(\'bot-settings.settings-languages\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'bot-settings.settings-languages\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>{{main.translations.leftMenu_languages}}</span> </label> </div> <div class="card-checker" ng-click="goto(\'bot-settings.settings-blockchain\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'bot-settings.settings-blockchain\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>{{main.translations.leftMenu_blockchain}}</span> </label> </div> <div ng-if="main.permissions.bot.variables" class="card-checker" ng-click="goto(\'bot-settings.settings-variables\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'bot-settings.settings-variables\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>{{main.translations.leftMenu_variables}}</span> </label> </div> <div class="card-checker" ng-click="goto(\'bot-settings.settings-widget\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'bot-settings.settings-widget\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>{{main.translations.leftMenu_widget}}</span> </label> </div> <div class="card-checker" ng-click="goto(\'bot-settings.settings-other\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'bot-settings.settings-other\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>{{main.translations.leftMenu_other}}</span> </label> </div> <div class="nav-sidebar-bottom" ng-if="!botInfo.protected" ng-class="{\'nav-sidebar-bottom-shadow\' : isButomShadow}"> <div class="muted" ng-click="deleteBot()"> <span class="off"> <i ng-include="\'images/svg/ic_delete_black_24px.svg\'"></i> {{main.translations.leftMenu_deleteBot}} </span> </div> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div ui-view=""> </div> </div> </div>'),a.put("views/bot-tokens.html",'<div class="container"> <div class="nav-sidebar nav-sidebar-bottom-pd"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" height="calc(100% - 127px)" paddings="22px 10px 30px 52px"> <div style="flex: 1 1 auto"> <div class="bot-info-text"> <div class="bot-info-img"> <img ng-src="{{botNav.botInfo.image}}" alt="bot img"> </div> <div class="bot-info-name"> {{botNav.botInfo.name}} </div> <div class="bot-info-url grean-text" ng-if="botNav.botInfo.blockchain.token.traded"> <a href=""> Traded </a> </div> </div> <h2 class="mb40">Token info</h2> <div class="mb60"> <span>{{botNav.botInfo.blockchain.token.symbol}}</span> <div class="grean-text mb10">Symbol</div> <span>{{botNav.botInfo.blockchain.activated | date:\'MMM dd, yyyy\'}}</span> <div class="grean-text mb10">Activated</div> <span ng-if="botNav.botInfo.blockchain.token.type" style="text-transform: capitalize">{{botNav.botInfo.blockchain.token.type}}</span> <div ng-if="botNav.botInfo.blockchain.token.type" class="grean-text">Blockchain</div> </div> <h2 class="mb40">Summary</h2> <div class="mb60"> <span>{{summary.currentSupply | number}}</span> <div class="grean-text mb10">Current Supply</div> <span>{{summary.marketCap | number}}</span> <div class="grean-text mb10">Market Cap</div> <span>{{summary.reserve | number}}</span> <div class="grean-text mb10">Reserve</div> <span>{{summary.crr}}</span> <div class="grean-text">CRR</div> </div> </div> </custom-scroller> <div class="nav-sidebar-bottom"> <button data-toggle="modal" data-target="#exchangeModal" class="brn-btn brn-primary"> Exchange Tokens </button> </div> </div> </div> <div class="flex-col nav-sidebar-margin-rest"> <div class="row-flex"> <div class="flex-col-p"> <div class="mb-card"> <h2 class="mb50">Price History</h2> <div class="card card-64"> <div class="card-body"> <basic-area data="priceHistory" style="width: 100%; display: block"></basic-area> <basic-column data="bottomTable" style="width: 100%; display: block"></basic-column> </div> </div> </div> <div class="mb-card"> <h2 class="mb50">Market Depth</h2> <div class="card card-64"> <div class="card-body"> <basic-area data="marketDepth" style="width: 100%; display: block"></basic-area> </div> </div> </div> </div> <div class="flex-col-p"> <h2 class="mb50">Last Transactions</h2> <div class="brn-table-wrap mb-card t-modern"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table audience image-table no-hover" style="width:640px"> <tbody> <tr class="header-image"> <td style="width:66px"></td> <td style="width:40%; padding-left: 2px">{{main.translations.title_name}}</td> <td style="width:20%">Amount</td> <td style="width:30%">Date</td> </tr> <tr ng-repeat="(key, transaction) in transactions" ng-class="{\'first-line-image\' : key == 0}"> <td style="padding-left: 30px"> <img src="{{transaction.avatar||\'https://api.brn.ai/img/default-client-avatar.png\'}}" alt=""> </td> <td style="padding-left: 2px"> {{transaction.name}}</td> <td> {{transaction.amount>=0? "+" : "-"}}{{transaction.amount||0}}{{botNav.botInfo.blockchain.token.symbol}}</td> <td> {{transaction.created | date:\'dd/MM/yyyy, HH:mm:ss\'}}</td> </tr> <tr ng-if="inProgress"> <td colspan="4"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!transactions.length && !inProgress"> <tr> <td colspan="4">No Transactions yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div> </div>
30 <div id="exchangeModal" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> exchange tokens </div> <div class="mb-title"> <div> <div> <custom-input ng-if="isBuyToken" placeholder="Tokens" ng-model="tokenToTransfer" title="Tokens" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input ng-if="!isBuyToken" placeholder="Cash" ng-model="cashToTransfer" title="TCash" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div> <i></i> </div> <div> <custom-input ng-if="!isBuyToken" placeholder="Tokens" ng-model="tokenToTransfer" title="Tokens" ng-disabled="true" is-back-placeholder="true"> </custom-input> <custom-input ng-if="isBuyToken" placeholder="Cash" ng-model="cashToTransfer" title="Cash" ng-disabled="true" is-back-placeholder="true"> </custom-input> </div> </div> <button type="button" class="brn-btn brn-primary" ng-click="setTag()"> Exchange </button> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/botedit.html",'<div class="modal-header text-center"> <h3 class="modal-title">Edit bot info</h3> </div> <div class="modal-body"> <div class="bot-edit"> <form name="editBot" ng-submit="saveChanges()"> <input type="text" ng-model="bot.name" placeholder="{{main.translations.title_name}}" required> <input type="text" ng-model="bot.username" placeholder="Username" required> <textarea type="text" ng-model="bot.description" placeholder="Description" required>\n </textarea> <div> <label>Current background image:</label> <div style="padding: 15px 0"> <img ng-src="{{bot.cover_image?(bot.cover_image): (\'images/preview-bg.png\')}}" style="width: 100%"> </div> <ng-form name="attachmentForm"> <div class="card-light-btn" style="width: 100%" ngf-select="addFile($file, $index)"> <div class="google-loader" ng-show="imageLoading"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> <span ng-show="!imageLoading">Upload</span> </div> </ng-form> </div> <br> <div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="bot.in_catalog" id="step_return_{{$index}}"> <label for="step_return_{{$index}}"> <span>Add to catalog</span> <span class="checker-ico"></span> </label> </div> </div> <br> <button type="submit" class="brn-btn brn-primary">SAVE</button> </form> </div> </div>'), 31a.put("views/bots.html",'<div> <div ng-if="notifications.length"> <div class="bots-notifications animations animations-opacity" ng-show="showNotifications"> <i class="material-icons close-icon n-close" ng-click="closeNotifications()">close</i> <h4 ng-if="countAll">{{ countAll }} bots have issues</h4> <ul> <li ng-repeat="notification in notifications" ng-class="{\'active\' : selectedNotificationFilter == $index || selectedNotificationFilter == -1}" ng-click="selectNotificationFilter($index)" ng-if="notification.category!=\'user\'" class="pointer"> {{ notification.count }} {{ notification.message }} </li> </ul> </div> </div> <div class="bots" infinite-scroll="loadMoreActive()" infinite-scroll-disabled="inProgressActive"> <div class="bots-wrapper"> <div class="container"> <div class="empty-nav-sidebar"></div> <div class="row margin-rest"> <div> <div class="bots-header"> <div> <h2>{{main.translations.menu_bot_active}} <span class="add-bot" ng-click="createBot()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </span> </h2> </div> <div class="bots-search-bar"> <custom-input ng-model-options="{ debounce: 500 }" placeholder="Search" ng-model="main.searchBotKeyword" title="Search" is-back-placeholder="true"> <i class="material-icons" style="opacity: 0.6; font-size: 17px; position: relative; top: 3px" ng-if="!main.searchBotKeyword">search</i> <i class="material-icons" style="font-size: 17px; position: relative; top: 3px; color: #ef5350" ng-if="main.searchBotKeyword" ng-click="main.searchBotKeyword=\'\'">close</i> </custom-input> </div> </div> </div> </div> <div class="margin-rest mb60"> <div class="bots-list"> <div style="width: 100%;height: 100%;position: relative" ng-show="!loaderActive"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> <div class="bots-list-item" ng-repeat="(key, bot) in activeBots"> <div class="bots-list-item-wrapper" ng-class="{error: bot.alerts}"> <div class="top-container"> <div ng-if="!bot.alerts"> <img ng-if="!bot.settings.notifications" src="images/notifications-off.png" class="notification off"> </div> \x3c!-- <div ng-if="bot.alerts">\n <i class="material-icons notification error-icon">error</i>\n </div> --\x3e <div class="bots-list-item-img"> <img ng-src="{{bot.image?(bot.image):(\'images/tf.png\')}}" alt="bot img"> </div> <div class="bots-list-item-name"> {{ bot.name | limitTo: 70 }} </div> <div class="bots-list-item-url"> <a href="">@{{botService.getBotNickname(bot.name)}}</a> </div> <div style="width: 100%; text-align: center" ng-if="bot.warnings && bot.warnings.length"> <span class="round-item-main" ng-repeat="warning in bot.warnings|limitTo:6">{{warning.text[0]}}</span> </div> </div> <div class="wrapper-overley" ng-class="{error: bot.alerts}"> <div class="top-container"> <a href="{{getLink(bot.bot_id)}}" class="bots-list-item-img"> <img ng-src="{{bot.image?(bot.image):(\'images/tf.png\')}}" alt="bot img"> </a> \x3c!-- <div ng-if="bot.alerts">\n <i class="material-icons notification error-icon" style="color:#fff">error</i>\n </div> --\x3e <a href="{{getLink(bot.bot_id)}}" class="bots-list-item-name"> {{ bot.name | limitTo: 70 }} </a> <div class="bots-list-item-url"> <a href="">@{{botService.getBotNickname(bot.name)}}</a> </div> </div> <div class="bot-card-notifications" ng-if="bot.warnings && bot.warnings.length"> <div> <div class="round-item" ng-repeat="warning in bot.warnings|limitTo:7"> <span class="round-item-container">{{warning.text[0]}}</span> <div class="round-item-text"> {{warning.text}} </div> </div> </div> </div> <div class="bots-list-bottom" style="width: 125px"> <span style="float: left"> <a ng-if="bot.active" ng-click="disableBot(bot.bot_id, key)" class="disable-bot"> <span>On</span> <ng-include src="\'images/svg/ic_check_box_black_24px.svg\'"></ng-include> </a> <a ng-if="!bot.active" ng-click="enableBot(bot.bot_id, key)" class="enable-bot"> <span>Off</span> <ng-include src="\'images/svg/ic_check_box_outline_blank_black_24px.svg\'"></ng-include> </a> </span> <span class="bots-list-bottom-buttons" ng-click="handleClick(bot.bot_id, key, bot.settings.notifications)" ng-class="{\'on\' : bot.settings.notifications ,\'off\' : !bot.settings.notifications}"> <i class="material-icons" style="font-size: 22px"> {{bot.settings.notifications? \'notifications\': \'notifications_off\'}} </i> </span> <span class="bots-list-bottom-buttons" ng-click="duplicateBot(bot.bot_id, bot.name)"> <i class="material-icons" style="font-size: 22px"> content_copy </i> </span> <span style="float: right" class="bots-list-bottom-buttons visability-btn" ui-sref="bot-abstract.bot-detail({id: bot.bot_id})"> <i class="material-icons" style="font-size: 22px">remove_red_eye</i> </span> </div> </div> </div> </div> <div class="bots-empty" ng-if="activeBots.length == 0 && inactiveBots.length == 0"> <div class="bots-empty-container" ng-click="createBot()"> <img class="bots-empty-img" ng-src="../images/bots-empty.png" alt=""> <div class="bots-empty-text"> <div class="text-first-line"> You donât have any bots </div> <div class="text-second-line"> Click here to add one </div> </div> </div> </div> </div> </div> </div> </div> \x3c!-- <custom-notification \n click-event="goToTemplates()"\n message="Seems like your curent plan is too small for you"\n is-notification="isTemplateNotification"\n message-title="It\'s time to upgrate!">\n </custom-notification> --\x3e </div> <div class="bots" ng-if="inactiveBots.length" infinite-scroll="loadMoreInactive()" infinite-scroll-disabled="inProgressInactive"> <div class="bots-wrapper"> <div class="container"> <div class="empty-nav-sidebar"></div> <div class="row margin-rest"> <div> <div class="bots-header"> <div> <h2>{{main.translations.menu_bot_disable}}</h2> </div> </div> </div> </div> <div class="margin-rest mb60"> <div class="bots-list"> \x3c!--\n <div style="width: 100%;height: 100%;position: relative;" ng-show="!loaderInactive">\n <div class="showbox">\n <div class="google-loader">\n <svg class="circular" viewBox="25 25 50 50">\n <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"/>\n </svg>\n </div>\n </div>\n </div>\n --\x3e <div class="bots-list-item disabled-bot" ng-repeat="(key, bot) in inactiveBots"> <div class="bots-list-item-wrapper"> <div class="top-container"> <div> <i class="material-icons notification" style="font-size: 22px;opacity: 0.2">publish</i> </div> <div class="bots-list-item-img" ui-sref="bot-abstract.bot-detail({id: bot.bot_id})"> <img ng-src="{{bot.image?(bot.image):(\'images/tf.png\')}}" alt="bot img"> </div> <div class="bots-list-item-name" ui-sref="bot-abstract.bot-detail({id: bot.bot_id})"> {{ bot.name | limitTo: 70 }} </div> <div class="bots-list-item-url"> <a href="">@{{botService.getBotNickname(bot.name)}}</a> </div> </div> <div class="wrapper-overley"> <div class="top-container"> <a href="{{getLink(bot.bot_id)}}" class="bots-list-item-img"> <img ng-src="{{bot.image?(bot.image):(\'images/tf.png\')}}" alt="bot img"> </a> <a href="{{getLink(bot.bot_id)}}" class="bots-list-item-name"> {{ bot.name | limitTo: 70 }} </a> <div class="bots-list-item-url"> <a href="">@{{botService.getBotNickname(bot.name)}}</a> </div> </div> <div class="bots-list-bottom"> \x3c!-- <span \n ng-click="enableBot(bot.bot_id, key)"\n class="bots-list-bottom-buttons visability-btn">\n <i class="material-icons" style="font-size: 22px;">publish</i>\n </span> --\x3e <span> <a ng-if="bot.active" ng-click="disableBot(bot.bot_id, key)" class="disable-bot"> <span>On</span> <ng-include src="\'images/svg/ic_check_box_black_24px.svg\'"></ng-include> </a> <a ng-if="!bot.active" ng-click="enableBot(bot.bot_id, key)" class="enable-bot"> <span>Off</span> <ng-include src="\'images/svg/ic_check_box_outline_blank_black_24px.svg\'"></ng-include> </a> </span> </div> </div> </div> </div> \x3c!--\n <div class="bots-empty" ng-if="inactiveBots.length == 0">\n <div class="bots-empty-container" ng-click="createBot()">\n <img class="bots-empty-img" ng-src="../images/bots-empty.png" alt="">\n <div class="bots-empty-text">\n <div class="text-first-line">\n You donât have any bots\n </div>\n <div class="text-second-line">\n Click here to add one\n </div>\n </div>\n </div>\n </div>\n --\x3e </div> </div> </div> </div> </div> </div>'),a.put("views/braincubator.html",'<link rel="stylesheet" type="text/css" href="styles/braincubator/main.css"> <style>/* header {\n display: none !important;\n } */\n\n /* .wide-image {\n cursor: pointer;\n width: 100%;\n height: auto;\n padding: 24px 15px;\n }\n .wide-image img {\n display: block;\n width: auto;\n max-width: 100%;\n margin-left: auto;\n margin-right: auto;\n } */</style> <div ng-if="loaded"> <div ng-bind-html="page"></div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/brn-hint.html",'<div class="brn-hint {{hint && positionFixed ? \'brn-hint-\' + positionFixed : \'\'}}"> <div ng-if="hint" class="brn-hint-inner"> <div ng-if="hint.preview" ng-bind-html="hint.preview"></div> <a ng-if="hint.link" ng-href="{{getUrl(hint.link)}}" target="_blank" class="learn-more"> <span>Learn more</span> <span class="material-icons">
31 navigate_next </span> </a> </div> </div>'),a.put("views/broadcast.html",'<div class="container"> <div class="empty-nav-sidebar"></div> <div class="row margin-rest"> <h2 class="mb60">{{main.translations.broadcasts}} <a class="add-bot" ui-sref="bot-abstract.broadcast_detail_create({id: botNav.botInfo.bot_id})"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1605px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:1603px"> <tbody> <tr class="header-image"> <td style="width: 65%"> {{main.translations.title}} </td> <td style="width: 12%"> {{main.translations.store_date}} </td> <td style="width: 12%"> {{main.translations.store_status}} </td> <td style="width: 8%"> {{main.translations.sent}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, broadcast) in broadcasts track by $index" ng-class="{\'first-line\' : key == 0}"> <td ui-sref="bot-abstract.broadcast_detail({id: bot_id, broadcastId: broadcast.broadcast_id})" style="cursor: pointer"> <span>{{broadcast.name}}</span> </td> <td ui-sref="bot-abstract.broadcast_detail({id: bot_id, broadcastId: broadcast.broadcast_id})" style="cursor: pointer"> {{broadcast.timing.date | date: \'dd.MM.yyyy\'}} </td> <td> <div ng-switch="broadcast.broadcast_status.state"> <span ng-switch-when="new" style="color: #94cc25">{{main.translations.new}}</span> <span ng-switch-when="waiting" style="color: #ffb504">{{main.translations.waiting}}</span> <span ng-switch-when="in_progress" style="color: #0bdcc7">{{main.translations.inProgress}}</span> <span ng-switch-when="stopped" style="color: #ff7070">{{main.translations.error}}</span> <span ng-switch-when="completed"> {{main.translations.completed}} </span> </div> </td> <td> {{broadcast.broadcast_status.send_count > 0 ? broadcast.broadcast_status.send_count : 0}} </td> <td class="control-fixed"> <a class="btn-icon" title="Edit broadcast" ui-sref="bot-abstract.broadcast_detail({id: bot_id, broadcastId: broadcast.broadcast_id})"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteBroadcast(broadcast)" title="Delete broadcast"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="5"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!broadcasts.length && !inProgress"> <tr> <td colspan="5">{{main.translations.broadcasts_noData}}</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div>'),a.put("views/broadcast/audio.html",'<div> <h2 class="mb50"> {{el.type}} <div class="card-move"> <i class="nav-control material-icons" ng-click="moveComponent($index, \'up\')" ng-class="{\'inactive\' : $index == 0}"> keyboard_arrow_up </i> <i class="nav-control material-icons" ng-click="moveComponent($index, \'down\')" ng-class="{\'inactive\' : $index == broadcast.messages.length - 1}"> keyboard_arrow_down </i> <i class="delete material-icons" ng-click="deleteEl($index)"> close </i> </div> </h2> <div class="upload-area" ngf-accept="\'audio/*\'" ng-if="!el.content.url" ngf-select="addFile($file, \'audio\', el)"> <div class="centering"> <div ng-show="!el.content.url && !el.progress"> <i class="file-icon material-icons"> audiotrack </i> <div class="text" ng-class="{\'error\' : el.error}"> <span ng-if="!el.error"> Select Audio </span> <span ng-if="el.error"> {{el.error}} </span> </div> </div> <div ng-show="el.progress"> <i class="file-icon material-icons" style="top: 0px; left: 21px"> file_upload </i> <div class="progress-container"> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{el.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{el.progress}}%"> </div> </div> </div> </div> </div> </div> <div class="upload-area audio-el" ng-if="el.content.url"> <div class="centering"> <div class="audio-el-wrapper"> <div class="audio-el-play"> <button ng-click="playAudio(el)"> <i class="icon material-icons" ng-if="el.audio.paused"> play_arrow </i> <i class="icon material-icons" ng-if="!el.audio.paused"> pause </i> </button> </div> <div class="audio-el-range"> <i class="material-icons" ng-if="!el.audio.paused"> volume_up </i> <input type="range" min="0" max="1" step="0.01" ng-model="el.audio.volume"> </div> </div> </div> </div> </div>'),a.put("views/broadcast/file.html",'<div> <h2 class="mb50"> {{el.type}} <div class="card-move">
31 <i class="nav-control material-icons" ng-click="moveComponent($index, \'up\')" ng-class="{\'inactive\' : $index == 0}"> keyboard_arrow_up </i> <i class="nav-control material-icons" ng-click="moveComponent($index, \'down\')" ng-class="{\'inactive\' : $index == broadcast.messages.length - 1}"> keyboard_arrow_down </i> <i class="delete material-icons" ng-click="deleteEl($index)"> close </i> </div> </h2> <div class="upload-area" ngf-accept="\'file/*\'" ng-if="!el.content.url" ngf-select="addFile($file, \'file\', el)"> <div class="centering"> <div ng-show="!el.content.url && !el.progress"> <i class="file-icon material-icons"> insert_drive_file </i> <div class="text" ng-class="{\'error\' : el.error}"> <span ng-if="!el.error"> Select File </span> <span ng-if="el.error"> {{el.error}} </span> </div> </div> <div ng-show="el.progress"> <i class="file-icon material-icons" style="top: 0px; left: 21px"> file_upload </i> <div class="progress-container"> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{el.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{el.progress}}%"> </div> </div> </div> </div> </div> </div> <div class="upload-area" ng-if="el.content.url" ng-click="redirectToFile(el.content.url)"> <div class="centering"> <div> <i class="file-icon material-icons"> insert_drive_file </i> <div class="text selected"> <span>{{el.filename}}</span> </div> </div> </div> </div> </div>'),a.put("views/broadcast/image.html",'<div> <h2 class="mb50"> {{el.type}} <div class="card-move"> <i class="nav-control material-icons" ng-click="moveComponent($index, \'up\')" ng-class="{\'inactive\' : $index == 0}"> keyboard_arrow_up </i> <i class="nav-control material-icons" ng-click="moveComponent($index, \'down\')" ng-class="{\'inactive\' : $index == broadcast.messages.length - 1}"> keyboard_arrow_down </i> <i class="delete material-icons" ng-click="deleteEl($index)"> close </i> </div> </h2> <div class="upload-area" ngf-accept="\'image/*\'" ng-if="!el.content.url" ngf-select="addFile($file, \'image\', el)"> <div class="centering"> <div ng-show="!el.content.url && !el.progress"> <i class="file-icon material-icons"> image </i> <div class="text" ng-class="{\'error\' : el.error}"> <span ng-if="!el.error"> Select Image </span> <span ng-if="el.error"> {{el.error}} </span> </div> </div> <div ng-show="el.progress"> <i class="file-icon material-icons" style="top: 0px; left: 21px"> file_upload </i> <div class="progress-container"> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{el.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{el.progress}}%"> </div> </div> </div> </div> </div> </div> <div class="upload-area data-preview" ng-if="el.content.url"> <img ng-src="{{el.content.url}}" alt="preview" ng-if="el.content.url" class="preview"> </div> </div>'),a.put("views/broadcast/slider.html",'<div> <h2 class="mb90"> {{el.type}} <div class="card-move"> <i class="nav-control material-icons" ng-click="moveComponent($index, \'up\')" ng-class="{\'inactive\' : $index == 0}"> keyboard_arrow_up </i> <i class="nav-control material-icons" ng-click="moveComponent($index, \'down\')" ng-class="{\'inactive\' : $index == broadcast.messages.length - 1}"> keyboard_arrow_down </i> <i class="delete material-icons" ng-click="deleteEl($index)"> close </i> </div> </h2> <div class="slide-control"> <i class="material-icons add" ng-click="addSlide(el)"> add </i> <i class="material-icons delete" ng-if=" el.content.elements.length > 1" ng-click="el.content.elements.splice(active, 1); swipeRight();"> close </i> </div> <uib-carousel active="active" interval="myInterval" no-wrap="true" autoscroll="false" ng-swipe-left="e.preventDefault(); swipeLeft();" ng-swipe-right="e.preventDefault(); swipeRight();"> <uib-slide ng-repeat="slide in el.content.elements" index="$index"> <div class="upload-area mb10" ngf-accept="\'image/*\'" ng-if="!slide.image" ngf-select="addImgToCard($file, \'image\', slide)"> <div class="centering"> <div ng-show="!slide.image && !slide.progress"> <i class="file-icon material-icons"> wallpaper </i> <div class="text" ng-class="{\'error\' : slide.error}"> <span ng-if="!slide.error"> Select Image </span> <span ng-if="slide.error"> {{slide.error}} </span> </div> </div> <div ng-show="slide.progress"> <i class="file-icon material-icons" style="top: 0px; left: 21px"> file_upload </i> <div class="progress-container"> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{slide.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{slide.progress}}%"> </div> </div> </div> </div> </div> </div> <div class="upload-area data-preview mb10" ng-if="slide.image"> <img ng-src="{{slide.image}}" alt="preview" class="preview"> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title}}" ng-model="slide.title" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Url" ng-model="slide.link" title="Url" http-prefix is-back-placeholder="true"> </custom-input> </div> <div style="margin-top: 8px; padding-bottom:1px" class="mb30" ng-class="{\'mb40\' : slide.buttons.length == 0}"> <div class="custom-input auto-height"> <span class="placeholder placeholder-small placeholder-active" style="top: 0px"> </span> <textarea ng-model="slide.text" placeholder="{{main.translations.catalog_textPlaceholder}}">\n </textarea> <span class="bar" style="top: 22px"></span> </div> </div> <div class="mb10" style="font-size: 12px;text-align: left; color: #94cc25"> Buttons </div> <div ng-repeat="btn in slide.buttons"> <div class="mb10"> <custom-input placeholder="Text" ng-model="btn.title" title="Text" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Url" ng-model="btn.url" title="Url" http-prefix is-back-placeholder="true"> </custom-input> </div> <div class="mb20"> <div class="delete-smal" ng-click="removeBtn(slide, btn)"> <i class="material-icons" style="margin-left: -3px"> close </i> Remove </div> </div> </div> <div class="add-smal" ng-click="addBtnToSlide(slide)"> <i class="material-icons" style="margin-left: -3px"> add </i> Add button </div> </uib-slide>
31 </uib-carousel> </div>'),a.put("views/broadcast/text.html",'<div> <h2> {{el.type}} <div class="card-move"> <i class="nav-control material-icons" ng-click="moveComponent($index, \'up\')" ng-class="{\'inactive\' : $index == 0}"> keyboard_arrow_up </i> <i class="nav-control material-icons" ng-click="moveComponent($index, \'down\')" ng-class="{\'inactive\' : $index == broadcast.messages.length - 1}"> keyboard_arrow_down </i> <i class="delete material-icons" ng-click="deleteEl($index)"> close </i> </div> </h2> <div style="margin-top: -18px; padding-bottom:1px" class="mb60"> <div class="custom-input auto-height"> <textarea ng-model="el.content.text" placeholder="{{main.translations.catalog_textPlaceholder}}">\n </textarea> <span class="bar" style="top: 22px"></span> </div> </div> </div>'),a.put("views/broadcast/video.html",'<div> <h2 class="mb50"> {{el.type}} <div class="card-move"> <i class="nav-control material-icons" ng-click="moveComponent($index, \'up\')" ng-class="{\'inactive\' : $index == 0}"> keyboard_arrow_up </i> <i class="nav-control material-icons" ng-click="moveComponent($index, \'down\')" ng-class="{\'inactive\' : $index == broadcast.messages.length - 1}"> keyboard_arrow_down </i> <i class="delete material-icons" ng-click="deleteEl($index)"> close </i> </div> </h2> <div class="upload-area" ngf-accept="\'video/*\'" ng-if="!el.content.url" ngf-select="addFile($file, \'video\', el)"> <div class="centering"> <div ng-show="!el.content.url && !el.progress"> <i class="file-icon material-icons"> local_movies </i> <div class="text" ng-class="{\'error\' : el.error}"> <span ng-if="!el.error"> Select Video </span> <span ng-if="el.error"> {{el.error}} </span> </div> </div> <div ng-show="el.progress"> <i class="file-icon material-icons" style="top: 0px; left: 21px"> file_upload </i> <div class="progress-container"> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{el.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{el.progress}}%"> </div> </div> </div> </div> </div> </div> <div class="upload-area data-preview" ng-click="togleVideo(el.filename)" ng-if="el.content.url"> <video ng-if="el.content.url" class="video" src="{{trustSrc(el.content.url)}}"> </video> <div class="video-hover"> <div class="viedo-shadow" ng-class="{\'active\' : paused}"></div> <div class="centering" ng-class="{\'active\' : paused}"> <div ng-if="paused"> <i class="vide-icon material-icons"> play_circle_outline </i> <div class="text"> <span>Play Video</span> </div> </div> </div> </div> </div> </div>'), 32a.put("views/broadcast_detail.html",'<div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse broadcast-menu" id="left_sidebar_content"> <span class="nav-sidebar-back round-btn" ui-sref="bot-abstract.broadcast({id: botNav.botInfo.bot_id})"> <i class="material-icons">arrow_back</i> </span> <div class="dropdown-sub nav-sidebar-add-container" uib-dropdown> <span uib-dropdown-toggle class="nav-sidebar-add round-btn" ng-if="broadcast.type == \'manual\'"> <i class="material-icons">add</i> </span> <ul class="dropdown-menu flex-li" uib-dropdown-menu role="sub-menu" style="left: 46px; top: -10px" aria-labelledby="dropdown-apps-short"> <li> <a class="imaged" ng-click="addElement(\'card\')"> <i class="material-icons">view_carousel</i> <span>{{main.translations.slider}}</span> </a> </li> <li> <a class="imaged" ng-click="addElement(\'text\')"> <i class="material-icons">chat</i> <span>{{main.translations.text}}</span> </a> </li> <li> <a class="imaged" ng-click="addElement(\'image\')"> <i class="material-icons">image</i> <span>{{main.translations.image}}</span> </a> </li> <li> <a class="imaged" ng-click="addElement(\'audio\')"> <i class="material-icons">audiotrack</i> <span>{{main.translations.audio}}</span> </a> </li> <li> <a class="imaged" ng-click="addElement(\'video\')"> <i class="material-icons">local_movies</i> <span>{{main.translations.video}}</span> </a> </li> <li> <a class="imaged" ng-click="addElement(\'file\')"> <i class="material-icons">insert_drive_file</i> <span>{{main.translations.file}}</span> </a> </li> </ul> </div> <custom-scroller is-shadow="true" paddings="22px 10px 0px 51px" height="calc(100% - 104px)"> <form name="broadcastForm" novalidate> <div class="nav-sidebar-content-ofset"> <h2> {{main.translations.search}} </h2> <div class="mb-title" style="margin-top: -20px; margin-bottom: 70px"> <div class="mb10"> <custom-dropdown ng-model="broadcast.type" array="broadcastTypes" is-model-init="true" opt-description="name" opt-value="value" title="{{main.translations.type}}" placeholder="" ng-change="handleBroadcastType()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="broadcast.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-model="broadcast.timing.type" array="timings" is-model-init="true" opt-description="name" opt-value="value" title="{{main.translations.cast}}" placeholder="" ng-change="handleTiming()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10 custom-date-range"> \x3c!-- calrndar --\x3e <div class="dropdown" ng-if="broadcast.timing.type != \'
32now\'"> <custom-date-range-single title="{{main.translations.value}}" ng-model="broadcast.timing.date " timepicker="true"> </custom-date-range-single> </div> </div> <div ng-if="broadcast.timing.type === \'repeat\'"> <custom-dropdown ng-model="broadcast.timing.frequency" array="repeatArray" is-model-init="true" opt-description="name" opt-value="value" title="{{main.translations.reapeat}}" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <h2>{{main.translations.provider}}</h2> <div class="mb-title" ng-class="{\'no-data\' : rolesFilters.length == 0}"> <div class="card-checker" ng-repeat="provider in filters.providers" ng-click="addFilterInstance(broadcast.subscribers.providers, provider.name)"> <input type="checkbox" ng-checked="broadcast.subscribers.providers.indexOf(provider.name) >= 0"> <label> <span class="checker-ico"> </span> <span>{{provider.name}}</span> <span class="item-counter">{{provider.count}}</span> </label> </div> </div> <h2>{{main.translations.gender}}</h2> <div class="mb-title" ng-class="{\'no-data\' : providers.length == 0}"> <div class="card-checker" ng-repeat="gender in filters.gender" ng-click="addGender(gender)"> <input type="checkbox" ng-checked="broadcast.subscribers.gender === gender.name"> <label> <span class="checker-ico"> </span> <span>{{gender.name}}</span> <span class="item-counter">{{gender.count}}</span> </label> </div> </div> <h2>{{main.translations.tags}}</h2> <div class="mb-title" ng-class="{\'no-data\' : genders.length == 0}"> <div class="card-checker" ng-repeat="tag in filters.tags" ng-click="addFilterInstance(broadcast.subscribers.tags, tag.tag_id)"> <input type="checkbox" ng-checked="broadcast.subscribers.tags.indexOf(tag.tag_id) >= 0"> <label> <span class="checker-ico"> </span> <span>{{tag.name}}</span> <span class="item-counter">{{tag.count}}</span> </label> </div> </div> <h2>{{main.translations.leftMenu_roles}}</h2> <div class="mb-title" ng-class="{\'no-data\' : tags.length == 0}"> <div class="card-checker" ng-repeat="role in filters.roles" ng-click="addFilterInstance(broadcast.subscribers.roles, role.name)"> <input type="checkbox" ng-checked="broadcast.subscribers.roles.indexOf(role.name) >= 0"> <label> <span class="checker-ico"> </span> <span>{{role.name}}</span> <span class="item-counter">{{role.count}}</span> </label> </div> </div> <h2>{{main.translations.leftMenu_other}}</h2> <div class="card-checker" ng-if="broadcast.timing.type === \'schedule\' || broadcast.timing.type === \'repeat\'"> <input type="checkbox" ng-model="broadcast.broadcast_data.timing.time_travel" id="timezone"> <label for="timezone"> <span class="checker-ico"></span> <span>{{main.translations.usingTimezones}}</span> </label> </div> <div class="card-checker mb40"> <input type="checkbox" ng-model="broadcast.subscribers.subscription" id="subscription_status"> <label for="subscription_status"> <span class="checker-ico"></span> <span>{{main.translations.onlySubscribers}} ({{filters.subscription}})</span> </label> </div> </div> <div class="nav-sidebar-bottom"> <div class="settings-save" ng-click="createBroadcast(broadcastForm)" ng-if="!updRoute" style="margin-bottom: 0px"> <span> <i class="material-icons">save</i> {{main.translations.save_btn}} </span> </div> <div class="settings-save" ng-if="updRoute" ng-click="editBroadcast(broadcastForm)" style="margin-bottom: 0px"> <span> <i class="material-icons">save</i> {{main.translations.save_btn}} </span> </div> </div> </form> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="flex-row"> <div class="broadcast-container broadcast-list" ng-switch="broadcast.type"> <div ng-switch-when="manual"> <div class="settings-card medium mb50" ng-repeat="el in broadcast.broadcast_data.messages track by $index"> <broadcast-element type="{{el.type}}" class="broadcast-element"> </broadcast-element> </div> <div class="settings-card medium mb50"> <h2 class="mb30">{{main.translations.broadcastEdit_scenarioTitle}}</h2> <custom-dropdown ng-model="broadcast.broadcast_data.scenario_id" array="bot_scenarios" is-model-init="true" opt-description="name" opt-value="scenario_id" title="{{main.translations.selectScenario}}" placeholder="{{main.translations.selectScenario}}" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div ng-switch-when="collection"> <div class="settings-card medium mb50"> <h2 class="mb10">{{main.translations.collection}}</h2> <div style="margin-top: 8px; padding-bottom:1px" class="mb30" ng-class="{\'mb40\' : slide.buttons.length == 0}"> <div class="custom-input auto-height"> <span class="placeholder placeholder-small placeholder-active" style="top: 0px"> </span> <textarea ng-model="slide.text" placeholder="{{main.translations.catalog_textPlaceholder}}">\n </textarea> <span class="bar" style="top: 22px"></span> </div> </div> <div class="mb20"> <custom-dropdown ng-model="broadcast.broadcast_data.collection_id" array="collectionsArray" is-model-init="true" opt-description="name" opt-value="value" title="{{main.translations.collection}}" ng-change="handleCollection()" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div ng-if="collection_variables.length" style="width: 250px; opacity: 0.6; font-size: 12px"> <p>{{main.translations.broadcastEdit_noteStart}} <span>{{collection_variables.join(\', \')}}</span> {{main.translations.broadcastEdit_noteEnd}}</p> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title}}" title="{{main.translations.title}}" ng-model="broadcast.broadcast_data.template.title" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.imageUrl}}" title="{{main.translations.imageUrl}}" ng-model="broadcast.broadcast_data.template.image" http-prefix is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.titleLink}}" title="{{main.translations.titleLink}}" ng-model="broadcast.broadcast_data.template.link" http-prefix is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.templateText}}" title="{{main.translations.templateText}}" ng-model="broadcast.broadcast_data.template.text" is-back-placeholder="true"> </custom-input> </div> <div class="mb20" ng-class="{\'mb40\': broadcast.broadcast_data.template.type !== \'list\'}"> <custom-dropdown ng-model="broadcast.broadcast_data.template.type" array="cardTempalteType" is-model-init="true" opt-description="name" opt-value="value" title="{{main.translations.templateType}}" ng-change="handleTemplateType()" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb40" ng-if="broadcast.broadcast_data.template.type === \'list\'"> <custom-dropdown ng-model="broadcast.broadcast_data.template.options.top_element_style" array="topElement" is-model-init="true" opt-description="name" opt-value="value" title="{{main.translations.topElementStyle}}" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" style="font-size: 12px;text-align: left; color: #94cc25"> {{main.translations.linkButtons}} </div> <div ng-repeat="link in broadcast.broadcast_data.template.buttons | filter: {type: \'link\'}"> <div class="mb10"> <custom-input placeholder="{{main.translations.title}}" ng-model="link.title" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.url}}" ng-model="link.url" title="{{main.translations.url}}" http-prefix is-back-placeholder="true"> </custom-input> </div> <div class="mb20"> <div class="delete-smal" ng-click="broadcast.broadcast_data.template.buttons.splice(broadcast.broadcast_data.template.buttons.indexOf(link), 1)"> <i class="material-icons" style="margin-left: -3px"> close </i> {{main.translations.store_remove}} </div> </div> </div> <div class="add-smal mb20" ng-click="addBtn(\'link\')"> <i class="material-icons" style="margin-left: -3px"> add </i> {{main.translations.addButton}} </div> <div class="mb10" style="font-size: 12px;text-align: left; color: #94cc25"> {{main.translations.suggestButtons}} </div> <div ng-repeat="suggest in broadcast.broadcast_data.template.buttons | filter: {type: \'suggest\'}"> <div class="mb10"> <custom-input placeholder="{{main.translations.title}}" ng-model="suggest.title" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.bot_menu_content}}" ng-model="suggest.content" title="{{main.translations.bot_menu_content}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb20"> <div class="delete-smal" ng-click="broadcast.broadcast_data.template.buttons.splice(broadcast.broadcast_data.template.buttons.indexOf(suggest), 1)"> <i class="material-icons" style="margin-left: -3px"> close </i> {{main.translations.store_remove}} </div> </div> </div> <div class="add-smal mb40" ng-click="addBtn(\'suggest\')"> <i class="material-icons" style="margin-left: -3px"> add </i> {{main.translations.addButton}} </div> <div class="settings-card medium"> <h2 class="mb30">{{main.translations.broadcastEdit_scenarioTitle}}</h2> <custom-dropdown ng-model="broadcast.broadcast_data.scenario_id" array="bot_scenarios" is-model-init="true" opt-description="name" opt-value="scenario_id" title="{{main.translations.selectScenario}}" placeholder="{{main.translations.selectScenario}}" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> <div ng-switch-when="scenario"> <div class="settings-card medium"> <h2>{{main.translations.text}}</h2> <div style="margin-top: -18px; padding-bottom:1px" class="mb60"> <div class="custom-input auto-height"> <textarea ng-model="broadcast.broadcast_data.text" placeholder="{{main.translations.catalog_textPlaceholder}}">\n </textarea> <span class="bar" style="top: 22px"></span> </div> </div> </div> <div class="settings-card medium mb50"> <h2 class="mb30">{{main.translations.broadcastEdit_scenarioTitle}}</h2> <custom-dropdown ng-model="broadcast.broadcast_data.scenario_id" array="bot_scenarios" is-model-init="true" opt-description="name" opt-value="scenario_id" title="{{main.translations.selectScenario}}" placeholder="{{main.translations.selectScenario}}" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> <div> <div class="settings-card medium mb50"> <h2 class="mb30" ng-class="{\'mb50\' : broadcast.subscribers.context.length == 0}">{{main.translations.customFilters}}</h2> <div ng-repeat="filter in broadcast.subscribers.context"> <div class="mb10"> <custom-input placeholder="{{main.translations.store_field}}" ng-model="filter.field" title="{{main.translations.store_field}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-model="filter.condition" array="conditionsFilter" is-model-init="true" opt-description="name" opt-value="value" title="" placeholder="" is-back-placeholder="false"> </custom-dropdown> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.value}}" ng-model="filter.value" title="{{main.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb20"> <div class="delete-smal" ng-click="deleteCustomFilter($index)"> <i class="material-icons"> close </i> {{main.translations.store_remove}} </div> </div> </div> <div class="add-smal" ng-click="addCustomFilter($parent.$index, $index)"> <i class="material-icons"> add </i> {{main.translations.addMore}} </div> </div> </div> <div ng-if="broadcast.type == \'scenario\'"> <div class="settings-card-wrap big"> <div class="settings-card big mb50"> <h2 class="mb45">Broadcast data</h2> <div ng-if="broadcast.broadcast_data.variables"> <ng-jsoneditor json="broadcast.broadcast_data.variables" prefer-text="true" options="jsoneditor" collapsed-level="1" is-full-edit="true"> </ng-jsoneditor> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/cardealership/cardealership.html",'<div id="pageWrapper"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link rel="stylesheet" type="text/css" href="styles/cardealership/main.css"> <nav id="nav"> <div class="nav"> <a href="#" class="logo"> <span>Cardealer </span>ChatBot </a> <div id="nav-button"> <span></span> </div> <ul class="nav-menu" id="nav-menu"> <li class="devider"> </li> <li> <div class="auth-block"> <span class="auth-container"> <a href="http://brain.tfid.me/" class="signIn">Sign In</a> <a href="http://brain.tfid.me/register" class="signUp"> <i class="material-icons"> person_add </i> </a> </span> </div> </li> </ul> </div> </nav> <section class="section-start"> <div class="container"> <h1> Get More Leads. <br> <span>Sell More Cars.</span> </h1> <p>
32 The setup process is simple! All you need is a Facebook Page. <br> Once you Sign Up we will setup everything for you. </p> <a href="http://brain.tfid.me/register" class="button button-float button-start"> <span>Get started for free</span> </a> </div> </section> <section class="section-engage"> <div class="container"> <h3 class="section-title">Engage Your Customers with Your Car Dealer Chatbot!</h3> <p> Your Car Dealer Chatbot will automatically obtain your prospectâs name and create a permanent communications channel. Your Car Dealer Chatbot works for you! Your prospects and sales team can do the following directly from any device: </p> </div> </section> <section class="section-features"> <div class="container"> <div class="feature-item"> <img src="images/cardealership/ic-21.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">On Site 24/7 Messenger</h3> <p class="feature-item__description"> The Chatbot offers instant, real-time sales conversations 7 days a week, 365-days per year right from your automotive dealership website! During open business hours of Operation, customers can still speak with a staff member through our chat bot and when you are closed, our chatbot can lead them through checking inventory, scheduling service appointments and even scheduling test drives.Your Business Development Center, Call Center, and/or Internet Manager will never miss a lead again! </p> </div> <div class="feature-item"> <img src="images/cardealership/ic-22.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Sales Lead Generation</h3> <p class="feature-item__description"> Convert your customer's public Facebook profile information into useable data for instant lead generation. The chatbot customer profile can be instantly synced through user updates and input to reflect current consumer behaviour, interests and possible fit for new services and products. <br> <br> Once a user subscribes to your chatbot and favorites one of the vehicles in your inventory, the car dealer chatbot will automatically send them a daily vehicle feed comprised of cars similar to those they have favorited. </p> </div> <div class="feature-item"> <img src="images/cardealership/ic-23.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Text Messaging Service</h3> <p class="feature-item__description"> Potential customers that don't have a Facebook account, can utilize the Text Messaging service by clicking the Car Dealer web site widget that appears on all pages of your dealer web site. </p> </div> </div> </section> <section class="section-wide-image section-wide-image--1"> </section> <section class="section-features section-features-col"> <div class="container container--flex"> <div class="feature-item"> <img src="images/cardealership/ic-31.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Programmable Website Widget</h3> <p class="feature-item__description"> Customize the Chatbot widget to the needs of your website by changing the look and feel of the widget. You can also modify the widget schedule to change the hours and days your widget is active on your website. You can also activate the Text Messaging and Live Chat services. Its easy implementation and instantaneous update makes it a breeze to add to any website. </p> </div> <div class="feature-item"> <img src="images/cardealership/ic-32.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Staff Text Alerts</h3> <p class="feature-item__description"> Staff alerts allow you to alert up to 50 staff members, as well as the account holders, whenever a customer fills out a form, leaves a message, schedules a service appointment or test drive, or requests to speak to a staff member. You can modify which staff members receive these alerts, and which alerts should be sent via test. Staff alerts are instantaneous so customers aren't waiting too long and no leads go hours without an answer. </p> </div> <div class="feature-item"> <img src="images/cardealership/ic-33.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Inventory Sync</h3> <p class="feature-item__description"> Your inventory is synced automatically on an hourly basis. A powerful search features allows you to find vehicles in your inventory through VIN numbers, model, color and more. Our Inventory Sync includes a feature that automatically notifies Facebook users when their favorited vehicles have a price reduction and if the vehicle is sold the Facebook user will receive a fresh feed of similar vehicles. </p> </div> <div class="feature-item"> <img src="images/cardealership/ic-34.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Conversations</h3> <p class="feature-item__description"> Instant two-way communications between your dealership and your customers. Chatbot manages and archives chat history, making it easier to address and anticipate customer needs. Combined with Chatbot's 24/7 operation, youll never miss a lead again. </p> </div> </div> </section> <section class="section-wide-image section-wide-image--2"> </section> <section class="section-features"> <div class="container"> <div class="feature-item"> <img src="images/cardealership/ic-41.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Facebook Messages - Text + Voice</h3> <p class="feature-item__description"> Chatbot's messaging allows customers or clients to leave a text message or a voice message when contacting your business. When a new message is received, it notifies all staff members who can then reply via the control panel and without needing to login to messenger. Staff members can then have 1-on-1 messaging with customers. Messages can be archived in the control panel as well as printed or downloaded for alternative archival methods. </p> </div> <div class="feature-item"> <img src="images/cardealership/ic-42.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Test Drives</h3> <p class="feature-item__description"> The test drive system allows you to capture customer information and build a customer profile, while simultaneously engaging customers and making it easy to schedule a test drive and try out the vehicle of their dreams. It also offers customers information that will help with financing a possible new car by offering finance options and the ability to trade-in, if applicable. Your customers can change their appointments under the " My Appointments" link in the Car Dealer Chatbot. </p> </div> <div class="feature-item"> <img src="images/cardealership/ic-43.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Visitors</h3> <p class="feature-item__description"> Using the customer profile generated through their Facebook profile information, Chatbot allows you to collect the important information needed to qualify
32your customers. The automated functions allows you to never worry about skipping steps during the sales cycle, while making your customer feel safe and informed about your services. </p> </div> </div> </section> <section class="section-wide-image section-wide-image--3"> </section> <section class="section-features section-features-col"> <div class="container container--flex"> <div class="feature-item"> <img src="images/cardealership/ic-51.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Credit Applications</h3> <p class="feature-item__description"> Make it easy for customers to Finance their vehicle purchase by submitting their own credit applications. Our control panel allows you to view and manage credit applications from your customers. Your staff will be able to add account notes, print and even pull a soft credit score. You will get a detailed profile of the customer, based on the information they input and the cars they have favorited, to assist with the decision making process. </p> </div> <div class="feature-item"> <img src="images/cardealership/ic-52.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Service Requests</h3> <p class="feature-item__description"> Turn your customers into repeat customers by making it easy for them to schedule their own service appointments. Service requests allow customers to pick a time and date for their appointment as well as leave any valuable information about their visit quickly and easily. The option of adding service discounts to service requests makes it easy for customers to remain engaged without the hassle of finding coupons or codes. Your customers can change their appointments under the "My Appointments" link in the Car Dealer Chatbot </p> </div> <div class="feature-item"> <img src="images/cardealership/ic-53.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Find My Car</h3> <p class="feature-item__description"> Give your sales team qualified leads. The Chatbot administrative panel allows control of all aspects of your Chatbot and allows Staff members to contact your customers, continue conversations, and explore new leads without ever needing to log into Facebool. </p> </div> <div class="feature-item"> <img src="images/cardealership/ic-54.png" alt="icon" class="feature-item__logo"> <h3 class="feature-item__title">Data Exports Auto Synced <br>To Your CRM</h3> <p class="feature-item__description"> Your CRM allows for certain data elements, called Leads, to be imported and exported from their system using cleverly crafted XML formatted files. This format is called the Auto-Lead Data Format or ADF. The Chatbot administrative panel allows you to set your CRM Lead email address and "Auto Sync" your Leads automatically to your CRM when a lead is generated or created. </p> </div> </div> </section> \x3c!-- WHITE LABEL --\x3e <div class="section section-white-label"> <div class="container"> <h3 class="white-label__title"> White label partner registration </h3> <p class="white-label__text"> Selling chatbots without worrying about the technology and the development. Lets us take care of all the technological aspects while you concentrate on doing what you do best - sales. </p> <p class="white-label__link"> <span>to register with one click, just </span> <a class="white-label__link-button" target="_blanc" href="https://m.me/1237860396355276"> <i></i> Message Us </a> <span> with your account</span> </p> </div> </div> <section class="section-footer"> <div class="container"> <h3>Get started for Free right now!</h3> <form class="contact-form"> <input type="email" required placeholder="Your email"> <button type="submit"> <img src="images/cardealership/ic-send.png" alt="send"> </button> </form> <div class="footer-inner"> <div class="row--flex"> <img src="images/cardealership/tf-logo.png" alt="TF" class="footer-logo"> </div> <div class="row--flex"> <p class="copy">2018 (c) TechFunder. All rights reserved.</p> </div> <div class="row--flex"> <a href="tel:+4922167785187">+49 221 677 85 187</a> <a href="tel:+491711254074">+49 171 125 40 74</a> <a href="mailto:[email protected]">[email protected]</a> </div> <div class="row--flex"> <a href="https://app.brnz.ai/blog">Blog</a> <a href="https://app.brnz.ai/docs" target="_blank">Documentation</a> <a href="https://app.brnz.ai/privacy">Privacy Policy</a> <a href="https://app.brnz.ai/imprint">Imprint</a> </div> </div> </div> </section> </div> <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"><\/script> <script>var navButton=$("#nav-button"),navMenu=$("#nav-menu"),displayWidth;navButton.on("click",function(){$(this).hasClass("nav-button--active")?($
32(this).removeClass("nav-button--active"),navMenu.slideUp(200)):($(this).addClass("nav-button--active"),navMenu.slideDown({start:function(){$(this).css({display:"flex"})}}))}),$(window).on("resize",function(){displayWidth=window.innerWidth,navButton.hasClass("nav-button--active")&&(navButton.removeClass("nav-button--active"),navMenu.slideUp(200)),displayWidth>768?navMenu.css({display:"flex"}):navMenu.css({display:"none"})});<\/script>'),a.put("views/catalog.html",'<div class="bots-wrapper"> <div class="container"> <div class="empty-nav-sidebar"></div> <div class="margin-rest mb60"> <h2 class="mb60">catalog</h2> <div class="bots-list"> <div class="bots-list-item" ng-if="loader"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> <h1 ng-if="!bots.length && !loader">There are no bots in catalog</h1> <div class="bots-list-item" ng-repeat="bot in bots"> <div class="bots-list-item-wrapper"> <div class="top-container"> <div class="bots-list-item-img"> <img ng-src="{{bot.image?(bot.image):(\'images/tf.png\')}}" alt="bot img"> </div> <div class="bots-list-item-name"> {{bot.name}} </div> <div class="bots-list-item-url"> <a>@{{botService.getBotNickname(bot.name)}}</a> </div> </div> <div class="wrapper-overley"> <div class="top-container"> <div class="bots-list-item-img" ui-sref="bot-preview({name: bot.username})"> <img ng-src="{{bot.image?(bot.image):(\'images/tf.png\')}}" alt="bot img"> </div> <div class="bots-list-item-name" ui-sref="bot-preview({name: bot.username})"> {{bot.name}} </div> <div class="bots-list-item-url"> <a href="">@{{botService.getBotNickname(bot.name)}}</a> </div> </div> <div class="bots-list-bottom"> <span class="bots-list-bottom-buttons visability-btn" ui-sref="bot-preview({name: bot.username})"> <i class="material-icons" style="font-size: 22px">remove_red_eye</i> </span> </div> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/category-attributes.html",'<div> <h2 class="mb60">Dictionaries</h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1205px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:1203px"> <tbody> <tr class="header-default"> <td style="width:27%"> {{main.translations.title_name}} </td> <td style="width:27%"> Label </td> <th style="width:27%"> {{main.translations.type}} </th> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, attribute) in attributes" ng-class="{\'first-line\' : key == 0}"> <td class="td-top-align" ui-sref="store.attribute-values({id: botNav.botInfo.bot_id, category: category.category_id, attribute: attribute.name})" style="cursor: pointer"> {{attribute.name}} </td> <td class="td-top-align" ui-sref="store.attribute-values({id: botNav.botInfo.bot_id, category: category.category_id, attribute: attribute.name})" style="cursor: pointer"> {{attribute.label}} </td> <td class="td-top-align" ui-sref="store.attribute-values({id: botNav.botInfo.bot_id, category: category.category_id, attribute: attribute.name})" style="cursor: pointer"> {{attribute.type}} </td> <td class="control-fixed"> <a class="btn-icon" title="Edit attribute values" ui-sref="store.attribute-values({id: botNav.botInfo.bot_id, category: category.category_id, attribute: attribute.name})"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> </td> </tr> </tbody> <tfoot ng-if="!attributes.length "> <tr> <td colspan="3">No attributes found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div>'), 33a.put("views/category-detail.html",'<div class="flex-row"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb35">edit category</h2> <div class="mb50"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="category.title" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Description" title="Description" ng-model="category.description" is-required="false" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input ng-model="category.image" ng-disabled="uploader" placeholder="Image" title="Image" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploader" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\')" ng-disabled="uploader"> image </i> <span class="google-loader input-group-addon" ng-show="uploader" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> <div class="mb25"> <custom-dropdown ng-model="category.parent" array="categories | filter: $select.search" opt-description="title" opt-value="category_id" title="Parent" is-model-init="true" placeholder="Parent" is-back-placeholder="true" is-required="false"> </custom-dropdown> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="disabledTemplate" id="attributes_active"> <label for="attributes_active" style="text-transform: none"> <span class="checker-ico"></span>Product Name consists of several attributes </label> </div> <div style="padding-left: 18px; width: 200px" class="mb15"> <span class="text-small-transparent">
33 Combine your category {attributes} to achieve complete product name, that will be shown in Invoice. </span> </div> <div class="mb25"> <custom-input placeholder="Product Name for Invoice" title="Product Name for Invoice" ng-disabled="!disabledTemplate" ng-model="category.template.name" is-back-placeholder="true"> </custom-input> </div> </div> <button ng-click="updateCategory()" class="brn-btn brn-primary">Save Category</button> </div> </div> <div class="settings-card-wrap big"> <h2 class="mb60">Attributes <a class="add-bot" ui-sref="store.create_category_attribute({id: botNav.botInfo.bot_id, category: category.name})"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:644px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:641px"> <tbody> <tr class="header-image"> <td style="width:25%"> {{main.translations.title_name}} </td> <td style="width:15%"> {{main.translations.type}} </td> <td style="width:12%"> Visible </td> <td style="width:13%"> Multiple </td> <td style="width:13%"> Selectable </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(name, attr) in category.attributes track by $index" ng-class="{\'first-line\' : $index == 0}"> <td class="td-top-align" ui-sref="store.edit-category-attribute({id: botNav.botInfo.bot_id, category: category.name, attribute: name})" style="cursor: pointer"> {{name}} <span ng-if="name==\'price\'" style="position: absolute; font-size: 8px; color: #94cc25; margin-left: 5px"> $ </span> </td> <td class="td-top-align" ui-sref="store.edit-category-attribute({id: botNav.botInfo.bot_id, category: category.name, attribute: name})" style="cursor: pointer">{{attr.type}}</td> <td class="td-top-align" style="text-align: center"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="category.attributes[name].visible" id="{{name}}_visible_{{$index}}"> <label for="{{name}}_visible_{{$index}}"> <span class="checker-ico"></span> </label> </div> </td> <td class="td-top-align" style="text-align: center"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="category.attributes[name].multiple" id="{{name}}_multiple_{{$index}}"> <label for="{{name}}_multiple_{{$index}}"> <span class="checker-ico"></span> </label> </div> </td> <td class="td-top-align" style="text-align: center"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="category.attributes[name].selectable" id="{{name}}_selectable_{{$index}}"> <label for="{{name}}_selectable_{{$index}}"> <span class="checker-ico"></span> </label> </div> </td> <td class="control-fixed"> <a class="btn-icon" title="Edit attribute value" ui-sref="store.edit-category-attribute({id: botNav.botInfo.bot_id, category: category.name, attribute: name})"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteAttribute(name)" style="top: 8px" title="Delete attribute value"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="3"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!isAttributes && !inProgress"> <tr> <td colspan="100%">No attributes found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div>'),a.put("views/change-plan-modal.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap" style="min-height: 250px"> <div class="top-create-bot"> <div class="bots-list-item-name"> Change plan </div> </div> <div> <form name="newBot" ng-submit="createBot()"> <custom-dropdown ng-model="plan" array="plans" opt-value="name" opt-description="title" title="Plan" is-back-placeholder="true" placeholder="Plan"> </custom-dropdown> <button type="submit" class="brn-btn brn-primary" ng-click="changePlan()">Apply</button> </form> </div> </div> </div> </div>'),a.put("views/client-mask-attributes.html",'<div class="flex-row"> <div class="settings-card-wrap big mb50" style="margin-right: 60px"> <h2 class="mb60">Client mask <a class="add-bot" ui-sref="store-edit-customer-mask({id: botNav.botInfo.bot_id})"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb50" style="max-width:640px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:638px"> <tbody> <tr class="header-default"> <td style="width:25%"> {{main.translations.title_name}} </td> <td style="width:20%"> {{main.translations.type}} </td> <td style="width:13%"> Visible </td> <td style="width:13%"> Multiple </td> <td style="width:15%"> Selectable </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(name, attr) in attributes track by $index" ng-class="{\'first-line\' : $index == 0}"> <td ui-sref="store.edit-customer-field({id: botNav.botInfo.bot_id, field: name})" style="cursor: pointer">{{name}}</td> <td ui-sref="store.edit-customer-field({id: botNav.botInfo.bot_id, field: name})" class="td-top-align" style="cursor: pointer">{{attr.type}}</td> <td class="td-top-align" style="text-align: center"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="attributes[name].visible" ng-change="updateCustomer()" id="{{name}}_visible_{{$index}}"> <label for="{{name}}_visible_{{$index}}"> <span class="checker-ico"></span> </label> </div> </td> <td class="td-top-align" style="text-align: center"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="attributes[name].multiple" ng-change="updateCustomer()" id="{{name}}_multiple_{{$index}}"> <label for="{{name}}_multiple_{{$index}}"> <span class="checker-ico"></span> </label> </div> </td> <td class="td-top-align" style="text-align: center"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="attributes[name].selectable" ng-change="updateCustomer()" id="{{name}}_selectable_{{$index}}"> <label for="{{name}}_selectable_{{$index}}"> <span class="checker-ico"></span> </label> </div> </td> <td class="control-fixed"> <a class="btn-icon" title="Edit customer field" ui-sref="store.edit-customer-field({id: botNav.botInfo.bot_id, field: name})"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteAttribute(name)" style="top: 8px" title="Delete customer field"> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> </table> </custom-scroller> </div> <button ng-click="updateCustomer()" class="brn-btn brn-primary">{{main.translations.save_btn}}</button> </div> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb60">Additional</h2> <div class="mb50" style="margin-top: -4px"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="disabledTemplate" id="attributes_active"> <label for="attributes_active" style="text-transform: none"> <span class="checker-ico"></span>Client Name consists of several attributes </label> </div> <div style="padding-left: 18px; width: 200px" class="mb15"> <span class="text-small-transparent">
33 Combine your {fields} to achieve complete client name, that will be shown in Orders List. </span> </div> <div class="mb25"> <custom-input placeholder="Client Name for Orders List" title="Client Name for Orders List" ng-disabled="!disabledTemplate" ng-click="updateCustomer()" ng-model="customer_mask.customer.template.name" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/clientdetail.html",'<div class="cards client-detail"> <div class="container"> <div class="nav-sidebar nav-sidebar-bottom-pd"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" height="calc(100% - 138px)" paddings="22px 50px 30px 52px"> <div style="flex: 1 1 auto" class="mb90"> <div class="bot-info-text"> <div class="bot-info-img"> <img ng-src="{{client.avatar?(client.avatar):(\'images/no-avatar-user.png\')}}" alt="client img"> </div> <div class="bot-info-name"> {{client.name}} </div> <div class="bot-info-url"> <a>{{main.translations.providerName_list}}{{client.provider}}</a> </div> <div class="bot-info-url"> <span ng-if="client.status" style="color: #94cc25">active</span> <span ng-if="!client.status" style="color:#f66060">inactive</span> </div> </div> <div class="card-checker"> <input type="checkbox" ng-model="mode" ng-change="changeMode()" id="modeSwitcer" class="ng-pristine ng-untouched ng-valid"> <label for="modeSwitcer"> <span class="checker-ico"></span> {{main.translations.autoMode}} </label> </div> <div class="card-checker"> <input type="checkbox" ng-model="client.subscription.status" id="subscriberSwitcer" class="ng-pristine ng-untouched ng-valid"> <label for="subscriberSwitcer"> <span class="checker-ico"></span> {{main.translations.subscriber}} </label> </div> <custom-dropdown ng-model="selected.role" array="rolesFilters" opt-description="title" opt-value="name" title="{{main.translations.role}}" is-model-init="true" placeholder="{{main.translations.selectRole}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="nav-sidebar-bottom" ng-class="{\'nav-sidebar-bottom-shadow\' : isButomShadow}"> <div class="settings-save" ng-click="Save()"> <span> <i class="material-icons">save</i> {{main.translations.save_btn}} </span> </div> <div class="settings-cancel" ui-sref="bot-abstract.crm({id: botId})"> <span> <i class="material-icons">cancel</i> {{main.translations.cancel}} </span> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="flex-row"> <div class="settings-card-wrap" ng-if="client.profile.first_name || client.profile.last_name || client.profile.username || client.profile.gender || client.profile.locale"> <div class="settings-card mb50"> <h2 class="mb45">{{main.translations.profileData}}</h2> <div class="mb10"> <custom-input ng-class="{mb25 : client.profile.username == null && client.profile.last_name == null}" ng-if="client.profile.first_name" placeholder="{{main.translations.firstName}}" ng-model="client.profile.first_name" title="{{main.translations.firstName}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input ng-class="{mb25 : client.profile.username == null}" ng-if="client.profile.last_name" placeholder="{{main.translations.lastName}}" ng-model="client.profile.last_name" title="{{main.translations.lastName}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input ng-if="client.profile.username" placeholder="{{main.translations.userName}}" ng-model="client.profile.username" title="{{main.translations.userName}}" is-back-placeholder="true"> </custom-input> </div> <div class="client-detail-input" ng-if="client.profile.gender"> <span>{{main.translations.gender}} - </span> <span>{{client.profile.gender}}</span> </div> <div class="client-detail-input" ng-if="client.profile.locale"> <span>{{main.translations.location}} - </span> <span>{{client.profile.locale}}</span> </div> </div> </div> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb45">{{main.translations.contactsData}}</h2> <div class="mb10"> <custom-input placeholder="{{main.translations.email}}" ng-model="client.contacts.email" title="Email" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.phone}}" ng-model="client.contacts.phone" title="{{main.translations.phone}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.city}}" ng-model="client.contacts.city" title="{{main.translations.city}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.province}}" ng-model="client.contacts.province" title="{{main.translations.province}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.country}}" ng-model="client.contacts.country" title="{{main.translations.country}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="settings-card-wrap big"> <div class="settings-card big mb50"> <h2 class="mb45">{{main.translations.variablesTitle}}</h2> <div ng-if="isVarible"> <ng-jsoneditor json="client.variables" prefer-text="true" options="jsoneditor" collapsed-level="1"> </ng-jsoneditor> </div> <div ng-if="!isVarible" style="margin-top: 55px"> <span>{{main.translations.noVariables}}</span> </div> </div> </div> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb50">{{main.translations.tags}} <a class="add-bot" data-toggle="modal" data-target="#addTag"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="tags-container">
33 <div ng-repeat="(key, tag) in client.tags"> <span>{{tag.name}}</span> <i class="material-icons close-icon" ng-click="removeTag(tag)"> close </i> </div> </div> </div> </div> </div> </div> </div> </div> <div id="addTag" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> {{main.translations.editTags}} </div> <div class="mb-title"> <custom-dropdown ng-model="tagOption" ng-init="{name:\'New tag\',value:\'new\'}" array="[{name:\'New tag\',value:\'new\'},{name:\'Existing tags\',value:\'old\'}]" opt-value="value" opt-description="name" title="{{main.translations.tag}} {{main.translations.type}}" placeholder="" is-back-placeholder="false"> </custom-dropdown> <custom-input ng-if="tagOption==\'new\'" placeholder="{{main.translations.catalog_textPlaceholder}}" ng-model="newTag.name" title="{{main.translations.tagName}}" required is-back-placeholder="true"> </custom-input> <custom-dropdown ng-if="tagOption==\'old\'" ng-model="newTag.tag_id" array="tags" opt-description="name" opt-value="tag_id" title="{{main.translations.tagName}}" is-back-placeholder="true" placeholder="Choose tag"> </custom-dropdown> </div> <button type="button" class="brn-btn brn-primary" ng-click="setTag()"> {{main.translations.addTag}} </button> </div> </div> </div> </div> </div> </div>'),a.put("views/collection-input.html",'<div class="resize-input-container"> <span class="tag" ng-repeat="collection in collections track by $index" ng-click="collections.splice($index, 1); onBlur();"> <i class="material-icons tag-icon" style="color: #d0021b">close</i> <span class="tag-text">{{getAutopostingName(collection)}}</span> </span> <span class="new-tag-block"> <span ng-click="completeAll()" ng-show="hasNotAddedCollections()"> <span class="plus-tag">+</span> <span class="select-tag">{{placeholder}}</span> </span> <div class="scenario-pop-up" ng-if="hasFilterCollections()"> <ul> <li ng-repeat="collection in filterCollections" ng-click="addCollection(collection.value)"> <span class="tag-text">{{collection.name}}</span> </li> </ul> </div> </span> </div>'),a.put("views/collection.html",'<h2 class="mb60"> {{collection.name}} <a ui-sref="collections.createElement({id: bot_id, collection: collection.collection_id})" class="add-bot"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> New Post </a> </h2> <div ng-if="!loading"> <div class="brn-table-wrap t-modern mb60" ng-style="{\'max-width\': (titles.length * 220) + \'px\'}"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-auto-table-btn-padding="true"> <table class="brn-table" style="min-width: 480px" ng-style="{\'width\': (titles.length * 220) + \'px\'}" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <tbody> <tr class="header-image"> <td width="24px"> <span class="header-image__star"> <i class="material-icons"> star </i> </span> </td> <td ng-repeat="title in titles track by $index">{{title}}</td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, element) in elements" ng-class="{\'first-line\' : key == 0}"> \x3c!-- collection item starred status toggle --\x3e <td> <span class="table-star-button" ng-click="toggleStarredStatus(element,element.starred)" ng-switch="element.starred"> <i class="material-icons star--not-active" ng-switch-when="false"> star_outline </i> <i class="material-icons star--active" ng-switch-when="true"> star </i> </span> </td> <td ng-repeat="(key, value) in fields"> <div ng-switch="value" class="table-attachments-wrap"> <div ng-switch-when="number" ui-sref="collections.createElement({id: bot_id, collection: collection.collection_id, el: element.linkEditId})" style="cursor: pointer"> <span ng-bind-html="element[key].toString()"></span> </div> <div ng-switch-when="text" ui-sref="collections.createElement({id: bot_id, collection: collection.collection_id, el: element.linkEditId})" style="cursor: pointer"> <span ng-bind-html="element[key] | linky:\'link\'"></span> </div> <div ng-switch-when="date" ui-sref="collections.createElement({id: bot_id, collection: collection.collection_id, el: element.linkEditId})" style="cursor: pointer"> <span ng-bind-html="element[key] | date: \'dd-MM-yyyy\'"></span> </div> <div ng-switch-when="file" ui-sref="collections.createElement({id: bot_id, collection: collection.collection_id, el: element.linkEditId})" style="cursor: pointer"> <span ng-bind-html="element[key] | linky:\'link\'"></span> </div> <div ng-switch-when="audio" ui-sref="collections.createElement({id: bot_id, collection: collection.collection_id, el: element.linkEditId})" style="cursor: pointer"> <span ng-bind-html="element[key] | linky:\'link\'"></span> </div> <div ng-switch-when="image" style="max-height: 150px; max-width: 150px" ui-sref="collections.createElement({id: bot_id, collection: collection.collection_id, el: element.linkEditId})" style="cursor: pointer"> <img ng-show="element[key]" ng-src="{{element[key]}}" alt=""> </div> <div ng-switch-when="video" style="max-height: 150px; max-width: 150px"> <simple-video src-url="{{element[key]}}" video-style="max-height: 150px; max-width: 150px;"></simple-video> </div> </div> </td> <td class="control-fixed" style="width: 140px"> <a class="btn-icon" ng-click="toggleStatus(element.linkEditId,element.published,$event)" title="{{!element.published? \'Enable\' : \'Disable\'}} published collections element"> <div class="control-fixed-shadow"></div> <i class="material-icons" ng-class="{\'item-red\': !element.published}">remove_red_eye</i> </a> <a class="btn-icon" title="Edit collections element" ui-sref="collections.createElement({id: bot_id, collection: collection.collection_id, el: element.linkEditId})"> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteElement(element)" title="Delete collections element"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-show="inProgress"> <td colspan="10"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!elements.length"> <tr style="height: 90px"> <td colspan="100%">No elements yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div>'),a.put("views/collections-elements/audio.html",'<div class="upload-area" ngf-accept="\'audio/*\'" ng-disabled="field.loading" ngf-select="addFile($file, $index, \'audio\', field)"> <div class="centering"> <div ng-show="!field.progress"> <i class="file-icon material-icons"> audiotrack </i> <div class="text" ng-class="{\'error\' : field.error}"> <span ng-if="!field.error"> <sapn ng-if="fields[field.name]" ng-click="redirectToFile($event, fields[field.name])"> {{fields[field.name]}} </sapn> <sapn ng-if="!fields[field.name]"> Select Audio </sapn> </span> <span ng-if="field.error"> {{ field.error}} </span> </div> </div> <div ng-show="field.progress"> <i class="file-icon material-icons" style="top: 0px; left: 21px"> file_upload </i> <div class="progress-container"> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{ field.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{ field.progress}}%"> </div> </div> </div> </div> </div> </div>'),a.put("views/collections-elements/file.html",'<div class="upload-area" ngf-max-size="5MB" ng-disabled="field.loading" ngf-select="addFile($file, $index, \'file\', field)"> <div class="centering"> <div ng-show="!field.progress"> <i class="file-icon material-icons"> insert_drive_file </i> <div class="text" ng-class="{\'error\' : field.error}"> <span ng-if="!field.error"> <sapn ng-if="fields[field.name]" ng-click="redirectToFile($event, fields[field.name])"> {{fields[field.name]}} </sapn> <sapn ng-if="!fields[field.name]"> Select File </sapn> </span> <span ng-if="field.error"> {{ field.error}} </span> </div> </div> <div ng-show="field.progress"> <i class="file-icon material-icons" style="top: 0px; left: 21px"> file_upload </i> <div class="progress-container"> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{ field.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{ field.progress}}%"> </div> </div> </div> </div> </div> </div>'),a.put("views/collections-elements/image.html",'<div class="upload-area" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ng-disabled="field.loading" ngf-select="addFile($file, $index, \'image\', field)"> <div class="centering" ng-if="!fields[field.name]"> <div ng-show="!field.progress"> <i class="file-icon material-icons"> image </i> <div class="text" ng-class="{\'error\' : field.error}"> <span ng-if="!field.error"> Select Image </span> <span ng-if="field.error"> {{ field.error}} </span> </div> </div> <div ng-show="field.progress"> <i class="file-icon material-icons" style="top: 0px; left: 21px"> file_upload </i> <div class="progress-container"> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{ field.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{ field.progress}}%"> </div> </div> </div> </div> </div> <div class="upload-area data-preview" ng-if="fields[field.name]"> <img ng-src="{{fields[field.name]}}" alt="" class="preview"> </div> </div>'),a.put("views/collections-elements/video.html",'<div class="upload-area" ngf-accept="\'video/*\'" ngf-max-size="30MB" ng-disabled="field.loading" ngf-select="addFile($file, $index, \'video\', field)"> <div class="centering"> <div ng-show="!field.progress"> <i class="file-icon material-icons"> local_movies </i> <div class="text" ng-class="{\'error\' : field.error}"> <span ng-if="!field.error"> <sapn ng-if="fields[field.name]" ng-click="redirectToFile($event, fields[field.name])"> {{fields[field.name]}} </sapn> <sapn ng-if="!fields[field.name]"> Select Video </sapn> </span> <span ng-if="field.error"> {{ field.error}} </span> </div> </div> <div ng-show="field.progress"> <i class="file-icon material-icons" style="top: 0px; left: 21px"> file_upload </i> <div class="progress-container"> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{ field.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{ field.progress}}%"> </div> </div> </div> </div> </div> </div>'),a.put("views/collections.html",'<div class="bots-wrapper"> <div class="container"> <div class="empty-nav-sidebar" ng-if="isShortSidebar"> <span class="nav-sidebar-back round-btn" ng-click="goBack()"> <i class="material-icons">arrow_back</i> </span> </div> <div class="nav-sidebar" ng-if="!isShortSidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 20px 45px 51px" height="100%"> <div class="nav-sidebar-content-ofset" style="padding-right: 0px"> <h2>Categories</h2> <div ng-repeat="collection in collections" class="card-checker" ng-click="goto(bot_id, collection.collection_id)"> <input type="checkbox" ng-checked="check(collection.collection_id)"> <label> <span class="checker-ico checker-ico-right"> </span> <span> {{collection.name}}</span> </label> <div class="item-buttons" style="width: 220px"> <span ng-click="deleteCollection(collection); $event.stopPropagation();" title="Delete collection"> <i class="material-icons">delete</i> </span> <span ng-click="cloneCollection(collection)" title="Clone collection"> <i class="material-icons">content_copy</i> </span> <span ui-sref="collections.editCollection({id: bot_id, collection: collection.collection_id})" title="Edit collection"> <i class="material-icons">edit</i> </span> <span ng-click="clearCollection(collection)" title="Clear collection"> <i class="material-icons">delete_sweep</i> </span> </div> </div> </div> <a style="margin-left: -6px" class="add-bot" ui-sref="collections.addCollection({id: bot_id})" ng-click=""> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </custom-scroller> </div> </div> <div ng-class="{\'margin-rest\' : isShortSidebar, \'container-content nav-sidebar-margin-rest\' : !isShortSidebar}" ui-view=""> </div> </div> </div>'), 34a.put("views/componentsmodal.html",'<div> <h2>Add another step</h2> <div> <div class="mb10 list-item dropdown-toggle dropdown add-store" id="add_store" uib-dropdown uib-dropdown-toggle> <span>Store</span> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="add_store" style="margin-left: 0px"> <div class="scenario-dropdown-container"> <div ng-repeat="component in helperModals.store" dnd-draggable="createComponent(component.value)" dnd-type="\'item\'" dnd-effect-allowed="link" dnd-dragend="console.log({{item}})" ng-click="addComponent(component.value)" class="mb10 list-item active"> <i class="material-icons">{{component.icon}}</i> <span>{{component.name}}</span> </div> </div> </div> </div> </div> <div> <div class="mb10 list-item dropdown-toggle dropdown add-learning" id="add_learning" uib-dropdown uib-dropdown-toggle> <span>Learning</span> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="add_learning" style="margin-left: 0px"> <div class="scenario-dropdown-container"> <div ng-repeat="component in helperModals.learning" dnd-draggable="createComponent(component.value)" dnd-type="\'item\'" dnd-effect-allowed="link" dnd-dragend="console.log({{item}})" ng-click="addComponent(component.value)" class="mb10 list-item active"> <i class="material-icons">{{component.icon}}</i> <span>{{component.name}}</span> </div> </div> </div> </div> </div> <div> <div class="mb10 list-item dropdown-toggle dropdown add-output" id="add_output" uib-dropdown uib-dropdown-toggle> <span>Outputs</span> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="add_output" style="margin-left: 0px"> <div class="scenario-dropdown-container"> <div ng-repeat="component in helperModals.output" dnd-draggable="createComponent(component.value)" dnd-type="\'item\'" dnd-effect-allowed="link" dnd-dragend="console.log({{item}})" ng-click="addComponent(component.value)" class="mb10 list-item active"> <i class="material-icons">{{component.icon}}</i> <span>{{component.name}}</span> </div> </div> </div> </div> </div> <div> <div class="mb10 list-item dropdown-toggle dropdown add-condition" id="add_condition" uib-dropdown uib-dropdown-toggle> <span>Condition</span> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="add_condition" style="margin-left: 0px"> <div class="scenario-dropdown-container"> <div ng-repeat="component in helperModals.condition" dnd-draggable="createComponent(component.value)" dnd-type="\'item\'" dnd-effect-allowed="link" dnd-dragend="console.log({{item}})" ng-click="addComponent(component.value)" class="mb10 list-item active"> <i class="material-icons">{{component.icon}}</i> <span>{{component.name}}</span> </div> </div> </div> </div> </div> <div> <div class="mb10 list-item dropdown-toggle dropdown add-input" id="add_input" uib-dropdown uib-dropdown-toggle> <span>
34Inputs</span> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="add_input" style="margin-left: 0px"> <div class="scenario-dropdown-container"> <div ng-repeat="component in helperModals.input" dnd-draggable="createComponent(component.value)" dnd-type="\'item\'" dnd-effect-allowed="link" dnd-dragend="console.log({{item}})" ng-click="addComponent(component.value)" class="mb10 list-item active"> <i class="material-icons">{{component.icon}}</i> <span>{{component.name}}</span> </div> </div> </div> </div> </div> <div> <div class="mb10 list-item dropdown-toggle dropdown add-blockchain" id="add_blockchain" uib-dropdown uib-dropdown-toggle> <span>Blockchain</span> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="add-blockchain" style="margin-left: 0px"> <div class="scenario-dropdown-container"> <div ng-repeat="component in helperModals.blockchain" dnd-draggable="createComponent(component.value)" dnd-type="\'item\'" dnd-effect-allowed="link" dnd-dragend="console.log({{item}})" ng-click="addComponent(component.value)" class="mb10 list-item active"> <i class="material-icons">{{component.icon}}</i> <span>{{component.name}}</span> </div> </div> </div> </div> </div> <div class="mb20"> <div class="mb10 list-item dropdown-toggle dropdown add-helpers" id="add_helpers" uib-dropdown uib-dropdown-toggle> <span>Helpers</span> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="add_helpers" style="margin-left: 0px"> <div class="scenario-dropdown-container"> <div ng-repeat="component in helperModals.helpers" dnd-draggable="createComponent(component.value)" dnd-type="\'item\'" dnd-effect-allowed="link" dnd-dragend="console.log({{item}})" ng-click="addComponent(component.value)" class="mb10 list-item active"> <i class="material-icons">{{component.icon}}</i> <span>{{component.name}}</span> </div> </div> </div> </div> </div> </div>'),a.put("views/contact-modal.html",'<div id="contactModal" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> <h2>{{$parent.main.translations.menu_contact}}</h2> </div> <div class="mb54"> <div style="margin-top: -16px" class="mb40"> <div class="custom-input auto-height"> <span class="placeholder" ng-class="{\'placeholder-small placeholder-active\' : isActive}"> {{$parent.main.translations.menu_contact_messagePlaceholder}} </span> <textarea class="modal-short" ng-model="message" ng-required="true">\n </textarea> <span class="bar" style="top: 23px"></span> </div> </div> <div style="position: relative"> <div style="margin: 0px 18px; height: 68px; z-index: 100; position: relative" id="fb-messenger_button_container"> \x3c!-- <div class="fb-send-to-messenger" \n id="fb-messenger_button"\n messenger_app_id="279474245766642" \n page_id="173763546438082" \n data-ref="send_to_messenger_{{fbMessage}}"\n color="blue" \n size="xlarge">\n </div> --\x3e </div> <img src="/images/other/send_fb.png" alt="" style="cursor: not-allowed; position: absolute; top: -2px; left: 17px; z-index: 0"> </div> \x3c!-- <button ng-disabled="!isEmailValide" type="button" class="brn-btn brn-primary" ng-click="sentMessage()">\n Send message\n </button> --\x3e </div> <div class="tags-container"> <span class="title">{{$parent.main.translations.menu_ourContact}}</span> <div> <a href="mailto:[email protected]"> <img src="/images/other/email.png" alt=""> <span>[email protected]</span> </a> </div> <div>
34 <a target="_blank" href="https://api.whatsapp.com/send?phone=491711254074&text=Hello,%20I%20want%20to%20get%20more%20details%20about%20BRAIN.%20Please%20send%20me%20more%20information"> <img src="/images/other/whatsapp.png" alt=""> <span>+49 171 125 40 74 </span> </a> </div> <div> <a href="skype:techfunder?call"> <img src="/images/other/skype.png" alt=""> <span>techfunder</span> </a> </div> <div> <a href="https://www.linkedin.com/in/techfunder" target="_blank"> <img src="/images/other/linkedin.png" alt=""> <span>linkedin.com/in/techfunder</span> </a> </div> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/contacts.html",'<social-providers></social-providers> <div class="about-us"> <div class="container"> <div class="row"> <div class="col-xs-12 col-md-7"><h1>About us</h1> <p>TechFunder - software development company from Cologne (Germany).</p></div> <div class="col-xs-12 col-md-5 col-lg-4 col-lg-offset-1"><h1>Contact</h1> <ul> <li><span><i class="icon icon-location"></i> </span><span>TechFunder, Carl-von-Linné-StraÃe 1,</span><span>50226 Frechen</span> </li><li><a href="mailto:[email protected]"><span><i class="icon icon-envelope"></i> </span><span>[email protected]</span></a> </li><li><a href=""><span><i class="icon icon-phone"></i> </span><span>+49 221 677 85 187</span></a> </li></ul> </div> </div> </div> </div>'),a.put("views/convcard.html",'\x3c!-- <div class="modal-header text-center">\n <h3 class="modal-title">Add card item</h3>\n</div>\n<div class="modal-body cards-select">\n <div class="row">\n <div class="col-xs-12 col-lg-4 mb25">\n <button type="button" ng-click="addCard()" class="card-light-btn">Add card</button>\n </div>\n </div>\n <div class="row">\n <form ng-submit="sendCard()" class="col-xs-12">\n <uib-tabset active="active" ng-if="cards.length" class="rest-tabs">\n <uib-tab ng-repeat="card in cards" index="$index" heading="Card {{$index + 1}}" class="mb25">\n <ng-form name="addImg">\n <br>\n <br>\n <div class="card-light-btn mb25" ngf-select="addCardImg($file, $index)">Select file</div>\n <div class="progress mb25" ng-show="card.progress != 0 && card.progress != 100">\n <div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="card.progress"\n aria-valuemin="0" aria-valuemax="100" ng-style="{\'width\': card.progress + \'%\'}">\n <span class="sr-only">{{card.progress} / 100</span>\n </div>\n </div>\n <div class="mb25" ng-if="card.image">\n <img ng-src="{{card.image}}" alt="card image" style="max-width: 100%">\n </div>\n </ng-form>\n <div class="mb25">\n <label for="title_{{$index}}">Card title</label>\n <input type="text" class="" ng-model="card.title" id="title_{{$index}}">\n </div>\n <div>\n <label for="text_{{$index}}">Car text</label>\n <input type="text" class="" ng-model="card.text" id="text_{{$index}}">\n </div>\n\n <button type="button" class="card-light-btn mb25" ng-click="addButton($index)">Add button</button>\n\n <div class="row" ng-if="card.buttons.length">\n <div class="col-xs-12 col-md-5">\n <label>Button url</label>\n </div>\n <div class="col-xs-12 col-md-5">\n <label>Button title</label>\n </div>\n <div class="col-xs-12">\n <div class="row" ng-repeat="btn in card.buttons">\n <div class="col-xs-12 col-lg-5">\n <input type="text" ng-model="btn.url" required http-prefix>\n </div>\n <div class="col-xs-12 col-lg-5">\n <input type="text" ng-model="btn.title" required>\n </div>\n <div class="col-xs-12 col-lg-2">\n <button type="button" class="brn-btn brn-delete" ng-click="deleteButton($parent.$index, $index)">X</button>\n </div>\n </div>\n </div>\n </div>\n <br>\n <button type="button" class="brn-btn brn-delete mb25" ng-click="deleteTab($index)" style="width: 100%;">Delete tab</button>\n </uib-tab>\n </uib-tabset>\n <button type="submit" class="card-light-btn" ng-if="cards.length">Submit</button>\n </form>\n </div>\n</div> --\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb30"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> Add card item </div> </div> <form ng-submit="sendCard()"> <div class="top-create-bot">
34 <div ng-repeat="card in cards" class="mb10"> <div class="tags-container"> <span class="title">Card</span> </div> <div class="mb30"> <custom-input placeholder="{{main.translations.title}}" ng-model="card.title" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Text" ng-model="card.text" title="Text" is-back-placeholder="true"> </custom-input> </div> <div class="tags-container mb10"> <span class="title">Image</span> </div> <div ngf-select="addCardImg($file, $index)" ngf-drop="addCardImg($file, $index)" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" class="mb40" style="padding: 10px 0px; cursor: pointer" ng-class="{\'drop-box\' : !card.image}"> <div class="drop-box-icon" ng-if="!card.image"> <i class="material-icons">cloud_upload</i> </div> <div class="drop-box-text" ng-if="!card.image" style="margin: 0px 45px"> Select file to upload </div> <img ng-src="{{card.image}}" ng-if="card.image" alt="Select file to upload" style="width: 100%; height: 100%"> </div> <div class="mb20"> <div class="tags-container"> <span class="title">Buttons</span> </div> <div class="mb10" ng-if="card.buttons.length"> <div ng-repeat="btn in card.buttons"> <div class="mb10"> <custom-input placeholder="Url" ng-model="btn.url" title="Url" is-required="true" http-prefix is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{main.translations.title}}" ng-model="btn.title" title="{{main.translations.title}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <div class="delete-smal" ng-click="deleteButton($parent.$index, $index)"> <i class="material-icons"> close </i> Remove button </div> </div> </div> </div> <div class="add-smal" ng-click="addButton($index)" style="margin-top: 20px"> <i class="material-icons"> add </i> Add button </div> </div> <div class="mb40"> <div class="delete-smal" ng-click="deleteTab($index)"> <i class="material-icons"> close </i> Remove card </div> </div> </div> </div> <div> <div class="add-smal" ng-click="addCard()"> <i class="material-icons"> add </i> Add card </div> <div style="{{cards.length? \'\' : \'position: absolute;bottom: 120px;\'}}"> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">Submit</button> </div> </div> </form> </div> </div> </div>'),a.put("views/conversations.html",'<div class="container conversation"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 10px 0px 51px" on-scrolled-down="getMoreClients()"> <div class="nav-sidebar-content-ofset"> <h2 class="mb30"> filter </h2> <div class="mb-title" style="margin-top: -20px; margin-bottom: 70px"> <custom-dropdown ng-model="dialogsFilter" array="dialogsFilterOptions" opt-value="value" opt-description="name" title="" placeholder="" ng-init="dialogsFilterOptions[0]" on-init="dialogsFilter = \'\'" is-back-placeholder="false"> </custom-dropdown> </div> <h2>Dialogs</h2> <div class="mb-title conversation-clients"> <div class="clients"> <div ng-repeat="client in clients | filter: {mode: dialogsFilter}" class="client-wrap"> <div class="client" ng-click="addDialog(client)"> <div> <div class="client-img"> <img ng-src="{{client.avatar}}" alt="{{client.provider}}"> <div class="provider-image" ng-switch="client.provider"> <img ng-src="images/logos/messenger.png" ng-switch-when="messenger" class="provider"> <img ng-src="images/logos/telegram.png" ng-switch-when="telegram" class="provider"> <img ng-src="images/logos/debug.png" ng-switch-when="widget" class="provider"> <img ng-src="images/logos/kik.png" ng-switch-when="kik" class="provider"> <img ng-src="images/logos/slack.png" ng-switch-when="slack" class="provider"> <img ng-src="images/logos/twitter.png" ng-switch-when="twitter" class="provider"> <img ng-src="images/logos/skype.png" ng-switch-when="skype" class="provider"> <img ng-src="images/logos/viber.png" ng-switch-when="viber" class="provider"> <img ng-src="images/logos/wechat.png" ng-switch-when="wechat" class="provider"> <img ng-src="images/logos/line.png" ng-switch-when="line" class="provider"> <img ng-src="images/logos/widget.png" ng-switch-when="debug" class="provider"> <img ng-src="images/socials/instagram.png" ng-switch-when="instagram" class="provider"> </div> </div> </div> <span>{{getShortName(client.name)}} <span class="client-mode" ng-show="client.mode === \'manual\'"> <i class="client-mode__icon"> M </i> </span> <i ng-if="isDialogActive(client) && selectedDialog == client.client_id" class="material-icons">chat_bubble</i> <i ng-if="isDialogActive(client) && selectedDialog != client.client_id" class="material-icons">chat_bubble_outline</i> </span> </div> </div> </div> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="conversations-dialogs"> <div class="dialogs-list"> <div class="brn-widget {{dialog.client.client_id == selectedDialog ? \'widget-shadow\' : \'\'}}" ng-repeat="dialog in dialogs track by $index" tabindex="-1" ng-blur="blurDialog()" ng-focus="setBoxShadow(dialog)" ng-class="{\'active\': selectedDialog == dialog.client.client_id}" id="{{dialog.client.client_id}}"> <div class="brn-widget-header"> <div class="client"> <span class="img-wrap"> <img ng-src="{{dialog.client.avatar}}"> </span> <div class="client-info"> <span style="font-size: 14px; color: #000000">{{dialog.client.name}}</span> <br> <span style="font-size: 12px; color: #d3d3d3" ng-if="!isOnline(dialog.last_seen)">last seen <span am-time-ago="dialog.last_seen"></span></span> <span style="font-size: 12px; color: #94cc25" ng-if="isOnline(dialog.last_seen)">Online</span> </div> </div>
34 <div class="brn-widget-controls"> <span ng-class="{\'manual\': dialog.client.mode === \'manual\', \'auto\' : dialog.client.mode === \'auto\'}" class="client-mode" ng-click="changeDialogMode(dialog, dialog.client.mode)"> <i class="client-mode__icon" ng-show="dialog.client.mode === \'manual\'"> M </i> <i class="client-mode__icon" ng-show="dialog.client.mode !== \'manual\'"> A </i> </span> <span class="close-btn" ng-click="closeDialog(dialog)"> <i class="material-icons">close</i> </span> </div> </div> <div class="brn-body-wrap"> <div class="brn-widget-body" scroll-glue id="{{dialog.client.client_id}}_messages"> <widget-message ng-repeat="message in dialog.messages track by $index" type="{{message}}" image="false" dialog-index="{{$parent.$index}}" curent-index="{{$index}}" check-is-last="checkIsLast" new-intent-modal="newIntentModal" exist-intent-modal="existIntentModal" exist-intent-as-response-modal="existIntentAsResponseModal" hide-image="true"> </widget-message> </div> </div> <div class="brn-widget-footer"> <form ng-submit="sendMessage(dialog)" class="conversation-footer"> <fieldset ng-disabled="dialog.disabled"> <input type="text" name="name" class="" ng-model="dialog.text" ng-focus="setBoxShadow(dialog)" placeholder="{{main.translations.catalog_textPlaceholder}}" required> <div class="widget-attachment"> <div class="submit-icon" ng-class="{\'active\' : dialog.text.length}"> <button type="submit" ng-click="setBoxShadow(dialog)" class="reset-btn"> <span ng-include src="\'images/svg/ic_send_black_24px.svg\'"></span> </button> </div> <div class="submit-icon" ng-class="{\'active\' : !dialog.text.length}" style="top: -8px"> <button type="button" class="card-type" ng-click="setBoxShadow(dialog)" ngf-select="addAttachment($file, $invalidFiles, dialog)" ngf-max-size="5MB"> <i class="fa fa-plus" aria-hidden="true"></i> </button> <button type="button" class="card-type" ng-click="addCards(dialog)"> <i class="fa fa-list-ul" aria-hidden="true"></i> </button> </div> </div> </fieldset> </form> </div> </div> </div> </div> </div> </div>'),a.put("views/create-bot.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div class="top-create-bot"> <div class="bots-list-item-name"> <i class="material-icons item-name-icon">add</i> Blank </div> <span class="bots-list-item-text">You can fill all data and set up your bot in next steps.</span> </div> <div> <form name="newBot" ng-submit="createBot()"> <custom-input placeholder="Bot Name" ng-model="bot.name" title="Bot Name" required is-back-placeholder="true"> </custom-input> <button type="submit" class="brn-btn brn-primary">Create</button> </form> </div> </div> </div> <div class="flex-col-small"> <div class="create-bot-wrap"> <div class="top-create-bot"> <div class="bots-list-item-name" style="margin-top: 4px"> <i class="material-icons item-name-icon duplicate">content_copy</i> Duplicate </div> <span class="bots-list-item-text">Bot will be cloned completely with all his settings and data. You can edit this later.</span> </div> <div> <form name="newBot" ng-submit="duplicateBot()"> <custom-dropdown ng-init="bots[0]" ng-model="duplicate_bot.template_data.bot_id" array="bots" opt-value="bot_id" opt-description="name" title="Bot Name" is-back-placeholder="true" placeholder="Existing Bot"> </custom-dropdown> <custom-input placeholder="New Name" ng-model="duplicate_bot.name" title="New Name" required is-back-placeholder="true"> </custom-input> <button type="submit" class="brn-btn brn-primary">Clone</button> </form> </div> </div> </div> <div class="flex-col-small"> <div class="create-bot-wrap"> <div class="top-create-bot"> <div class="bots-list-item-name" style="margin-top: 3px"> <i ng-include="\'images/svg/facebook.svg\'" class="facebook item-name-icon"></i> Facebook </div> <span class="bots-list-item-text">Bot will be based on selected page with ability to manage its data.</span> </div> <div> <form name="newBot" ng-submit="templateBot()"> <custom-input placeholder="Facebook Page" ng-model="template_bot.template_data.page_url" title="Facebook Page" required is-back-placeholder="true"> </custom-input> <custom-input placeholder="Bot Name" ng-model="template_bot.name" title="Bot Name" required is-back-placeholder="true"> </custom-input> <button type="submit" class="brn-btn brn-primary">Proceed</button> </form> </div> </div> </div> \x3c!-- <div class="flex-col-small">\n <div class="create-bot-wrap">\n <div class="top-create-bot">\n <div class="bots-list-item-name" style="margin-top: 4px;">\n <i class="material-icons item-name-icon">face</i>\n Template\n </div>
34\n <span class="bots-list-item-text">Create a bot with one click with our awesome templates! </span>\n </div>\n <div >\n <form name="newBot" ng-submit="template_botFn()">\n <custom-dropdown\n ng-init="templates[0]"\n ng-model="template.template_data.bot_id"\n array="templates"\n opt-value="bot_id"\n opt-description="name"\n title="Existing Template"\n is-back-placeholder="true"\n placeholder="Existing Template">\n </custom-dropdown>\n <custom-input\n placeholder="Bot Name"\n ng-model="template.name"\n title="Bot Name"\n required\n is-back-placeholder="true">\n </custom-input>\n <button type="submit" class="brn-btn brn-primary">Create</button>\n </form>\n </div>\n </div>\n </div> --\x3e </div> <div class="flex-row flex-row-centered"> <div class="flex-col-small text-center"> <button type="button" class="brn-btn brn-delete" ng-click="closeModal()">Cancel</button> </div> </div>'),a.put("views/create-category-attribute-value.html",'<div class="flex-row create-bot flex-row-start"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 4px;top: 5px; font-size: 21px" ng-click="close()"> close </i> <h2>Add value</h2> </div> </div> <form class="" ng-if="attribute.type == \'mixed\'" ng-submit="createValue()"> <div class="mb10px" ng-repeat="(name, schema) in attribute.schema.fields track by $index"> <div class="mb10" ng-if="schema.type == \'location\'"> <span ng-click="showMapForm(name)" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{schema.label}}</span> <i class="material-icons" style="position: relative; top: 5px">map</i> </span> </div> <div class="mb10" ng-if="schema.type == \'string\' || schema.type == \'number\'"> <custom-input ng-model="newValue[name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> </custom-input> </div> <div ng-show="schema.type == \'boolean\'" ng-class="{\'mt20\' : $index == 0}"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newValue[name]" id="schema_bool"> <label for="schema_bool"> <span class="checker-ico"></span> <span>{{schema.label}}</span> </label> </div> </div> <div class="mb10" ng-show="schema.type==\'date\'"> <custom-date-range-single title="{{schema.label}}" ng-model="newValue[name]"> </custom-date-range-single> </div> <div ng-show="schema.type==\'file\'"> <div class="mb10"> <custom-input ng-model="newValue[name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="uploaders[name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-show="schema.type==\'image\'"> <div class="mb10"> <custom-input ng-model="newValue[name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name)" ng-disabled="uploaders[name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div class="mb10" ng-show="schema.type==\'color\'"> <custom-colorpicker ng-model="newValue[name]" title="{{schema.label}}"> </custom-colorpicker> </div> </div> <div> <button type="submit" class="brn-btn brn-primary">{{main.translations.addValue}}</button> </div> </form> <form ng-if="attribute.type != \'mixed\'" ng-submit="createValue()"> <div> <div class="mb10" ng-if="attribute.type == \'string\' || attribute.type == \'number\'"> <custom-input ng-model="newValue.value" placeholder="{{main.translations.value}}" title="{{main.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attribute.type == \'color\'"> <custom-colorpicker ng-model="newValue.value" title="{{main.translations.value}}"> </custom-colorpicker> </div> <div ng-show="attribute.type == \'boolean\'" class="mt20"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newValue.value" id="model_boolvalue"> <label for="model_boolvalue"> <span class="checker-ico"></span> <span>{{main.translations.value}}</span> </label> </div> </div> <div class="mb10" ng-show="attribute.type == \'date\'"> <custom-date-range-single title="{{main.translations.value}}" ng-model="newValue.value"> </custom-date-range-single> </div> <div ng-show="schema.type==\'file\'"> <div class="mb10"> <custom-input ng-model="newValue.value" ng-disabled="uploaders[attribute.name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[attribute.name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', \'value\')" ng-disabled="uploaders[attribute.name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[attribute.name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-show="schema.type==\'image\'"> <div class="mb10"> <custom-input ng-model="newValue.value" ng-disabled="uploaders[attribute.name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', \'value\')" ng-disabled="uploaders[attribute.name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[attribute.name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> </div> <div> <button type="submit" class="brn-btn brn-primary">{{main.translations.addValue}}</button> </div> </form> </div> </div> </div>'), 35a.put("views/create-category-attribute.html",'<div class="flex-row"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb35">Create Attribute</h2> <div class="mb50"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="newAttr.name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Lable" title="Lable" ng-model="newAttr.label" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-class="{\'mb30\' : newAttr.type!=\'mixed\'}"> <custom-dropdown ng-model="newAttr.type" array="attributeTypes" opt-description="title" opt-value="name" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleChangeType()" ng-disabled="newAttr.values.length" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb30" ng-if="newAttr.type==\'mixed\' && newAttr.selectable"> <custom-dropdown ng-model="$parent.schemaKey" array="schemaKeys" opt-description="name" opt-value="name" title="Schema Key" is-model-init="true" placeholder="Schema Key..." ng-change="handleChangeKey()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="card-checker"> <input type="checkbox" ng-model="newAttr.visible" id="attributes_visible"> <label for="attributes_visible" style="text-transform: none"> <span class="checker-ico"></span>Visible </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.multiple" id="attributes_multiple"> <label for="attributes_multiple" style="text-transform: none"> <span class="checker-ico"></span>Multiple </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.selectable" id="attributes_selectable"> <label for="attributes_selectable" style="text-transform: none"> <span class="checker-ico"></span>Selectable </label> </div> </div> <button ng-click="addCategoryAttribute()" class="brn-btn brn-primary">Create Attribute</button> </div> </div> <div> <div class="scenario-card max-size transparent" ng-if="newAttr.type==\'mixed\'"> <div class="section no-padding mb60"> <h2 class="mb35">Schema</h2> <div ng-show="!isEmpty(newAttr.schema.fields)"> <div class="flex-row mb5" ng-repeat="(name, schema) in newAttr.schema.fields"> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].label" placeholder="Label" title="Label" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newAttr.schema.fields[name].type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container mt10"> <div class="delete-item" ng-click="deleteSchemaAttribute(name)" ng-if="$parent.schemaKey != name"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> <div class="flex-row mb5" ng-if="newSchemaAttr.show"> <div class="short-item"> <custom-input ng-model="newSchemaAttr.name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newSchemaAttr.label" placeholder="Label" title="Label" is-required="true" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newSchemaAttr.type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" ng-change="addSchemaAttribute()" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container mt10"> <div class="delete-item" ng-click="clearSchemaAttribute()"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot mt20" ng-click="showSchemaAttribute()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> \x3c!-- <div class="settings-card-wrap big mb50" ng-if="newAttr.selectable">\n <h2 class="mb60">Values\n <a\n class="add-bot" \n ng-click="addValue(category, newAttr)">\n <i ng-include="\'images/svg/plus_icon.svg\'"></i>\n {{main.translations.addMore}}\n </a>\n </h2>\n\n <div class="brn-table-wrap t-modern mb60" style="max-width:640px;" >\n <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true">\n <table class="brn-table" style="width:638px">\n <tbody ng-if="newAttr.type!=\'mixed\' && newAttr.values.length">\n <tr class="header-image">\n <td style="width:45%">\n {{main.translations.value}}\n </td>\n <td class="control-fixed control-fixed-heder"></td>\n </tr>\n <tr ng-repeat="(key, value) in newAttr.values"ng-class="{\'first-line\' : key == 0}">\n <td>
35\n <span ng-if="newAttr.type == \'boolean\'">\n <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include>\n <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include>\n </span>\n <img ng-src="{{value}}" ng-if="newAttr.type==\'image\' && newAttr.value.length" style="max-width: 100px;">\n <span ng-if="newAttr.type==\'string\' || newAttr.type==\'number\' || newAttr.type==\'date\'">\n {{value}}\n </span>\n <div ng-if="newAttr.type==\'color\'" ng-style="{\'width\': \'15px\', \'height\': \'15px\', \'background-color\': value}"></div>\n </td>\n \n <td class="control-fixed">\n <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px">\n <div class="control-fixed-shadow"></div>\n <i class="material-icons">delete</i>\n </a>\n </td>\n </tr>\n </tbody>\n\n <tbody ng-if="newAttr.type==\'mixed\' && newAttr.values.length">\n <tr class="header-image">\n <td ng-repeat="field in fields">\n {{newAttr.schema.fields[field].label}}\n </td>\n <td class="control-fixed control-fixed-heder"></td>\n </tr>\n <tr ng-repeat="(key, value) in newAttr.values"ng-class="{\'first-line\' : key == 0}">\n <td ng-repeat="field in fields">\n <span ng-if="newAttr.schema.fields[field].type == \'boolean\'">\n <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value[field] == true"></ng-include>\n <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value[field] != true"></ng-include>\n </span>\n <div ng-if="newAttr.schema.fields[field].type == \'color\'" ng-style="{\'width\': \'20px\', \'height\': \'20px\', \'background-color\': value[field]}">\n \n </div>\n <img ng-src="{{value[field]}}" ng-if="newAttr.schema.fields[field].type==\'image\' && value[field].length" style="max-width: 100px;">\n <span ng-if="newAttr.schema.fields[field].type==\'string\' || newAttr.schema.fields[field].type==\'number\' || newAttr.schema.fields[field].type==\'date\'">\n {{value[field]}}\n </span>\n </td>\n \n <td class="control-fixed">\n <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px">\n <div class="control-fixed-shadow"></div>\n <i class="material-icons">delete</i>\n </a>\n </td>\n </tr>\n </tbody>\n <tfoot ng-if="!newAttr.values.length">\n <tr>\n <td colspan="100%">No attribute values found.</td>\n </tr>\n </tfoot>\n </table>\n </custom-scroller>\n </div>\n </div> --\x3e </div> </div>'),a.put("views/create-category.html",'<div class="flex-row"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb35">Create category</h2> <div class="mb50"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="category.title" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-dropdown ng-model="category.parent" array="categories | filter: $select.search" opt-description="title" opt-value="category_id" title="Parent" is-model-init="true" placeholder="Parent" is-back-placeholder="true" is-required="false"> </custom-dropdown> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="disabledTemplate" id="attributes_active"> <label for="attributes_active" style="text-transform: none"> <span class="checker-ico"></span>Product Name consists of several attributes </label> </div> <div style="padding-left: 18px; width: 200px" class="mb15"> <span class="text-small-transparent">
35 Combine your category {attributes} to achieve complete product name, that will be shown in Invoice. </span> </div> <div class="mb25"> <custom-input placeholder="Product Name for Invoice" title="Product Name for Invoice" ng-model="category.template.name" ng-disabled="!disabledTemplate" is-back-placeholder="true"> </custom-input> </div> </div> <button ng-click="createCategory()" class="brn-btn brn-primary">Save Category</button> </div> </div> </div>'),a.put("views/create-customer-schema-value.html",'<div class="flex-row create-bot flex-row-start"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 4px;top: 5px; font-size: 21px" ng-click="close()"> close </i> <h2>Add value</h2> </div> </div> <form class="" ng-if="attribute.type == \'mixed\'" ng-submit="createValue()"> <div class="mb10px" ng-repeat="(name, schema) in attribute.schema.fields track by $index"> <div class="mb10" ng-if="schema.type == \'string\' || schema.type == \'number\'"> <custom-input ng-model="newValue[name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="schema.type == \'location\'"> <span ng-click="showMapForm(name)" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{schema.label}}</span> <i class="material-icons" style="position: relative; top: 5px">map</i> </span> </div> <div ng-show="schema.type == \'boolean\'" ng-class="{\'mt20\' : $index == 0}"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newValue[name]" id="schema_bool"> <label for="schema_bool"> <span class="checker-ico"></span> <span>{{schema.label}}</span> </label> </div> </div> <div class="mb10" ng-show="schema.type==\'date\'"> <custom-date-range-single title="{{schema.label}}" ng-model="newValue[name]"> </custom-date-range-single> </div> <div ng-show="schema.type==\'file\'"> <div class="mb10"> <custom-input ng-model="newValue[name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="uploaders[name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-show="schema.type==\'image\'"> <div class="mb10"> <custom-input ng-model="newValue[name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name)" ng-disabled="uploaders[name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div class="mb10" ng-show="schema.type==\'color\'"> <custom-colorpicker ng-model="newValue[name]" title="{{schema.label}}"> </custom-colorpicker> </div> </div> <div> <button type="submit" class="brn-btn brn-primary">{{main.translations.addValue}}</button> </div> </form> <form ng-if="attribute.type != \'mixed\'" ng-submit="createValue()"> <div> <div class="mb10" ng-if="attribute.type == \'string\' || attribute.type == \'number\'"> <custom-input ng-model="newValue.value" placeholder="{{main.translations.value}}" title="{{main.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attribute.type == \'color\'"> <custom-colorpicker ng-model="newValue.value" title="{{main.translations.value}}"> </custom-colorpicker> </div> <div ng-show="attribute.type == \'boolean\'" class="mt20"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newValue.value" id="model_boolvalue"> <label for="model_boolvalue"> <span class="checker-ico"></span> <span>{{main.translations.value}}</span> </label> </div> </div> <div class="mb10" ng-show="attribute.type == \'date\'"> <custom-date-range-single title="{{main.translations.value}}" ng-model="newValue.value"> </custom-date-range-single> </div> <div ng-show="schema.type==\'file\'"> <div class="mb10"> <custom-input ng-model="newValue.value" ng-disabled="uploaders[attribute.name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[attribute.name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', \'value\')" ng-disabled="uploaders[attribute.name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[attribute.name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-show="schema.type==\'image\'"> <div class="mb10"> <custom-input ng-model="newValue.value" ng-disabled="uploaders[attribute.name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', \'value\')" ng-disabled="uploaders[attribute.name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[attribute.name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> </div> <div> <button type="submit" class="brn-btn brn-primary">{{main.translations.addValue}}</button> </div> </form> </div> </div> </div>'),a.put("views/create-customer.html",'<div class="row create-bot"> <div class="col-lg-12 col-xs-12"> <div class="fixed-card"> <h3>Add customer</h3> <form ng-submit="createCustomer()"> <div class="row"> <div class="col-md-8"> <div class="row" ng-repeat="row in rows"> <div ng-repeat="(name, attr) in row" class="col-md-6" style="margin: 5px 0; height: auto"> <div ng-if="attr.selectable && attr.type != \'mixed\'" style="min-height: 45px; height: auto"> <select ng-if="!attr.multiple" ng-model="customer.attributes[name]" ng-options="value as value for value in attr.values"> <option value="" selected>Select {{attr.label}}</option> </select> <ui-select ng-model="customer.attributes[name]" multiple theme="bootstrap" ng-if="attr.multiple && attr.type != \'mixed\'" style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">{{$item}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div ng-bind-html="value | highlight: $select.search"></div> </ui-select-choices> </ui-select> </div> <div ng-if="attr.selectable && attr.type == \'mixed\'" style="min-height: 45px; height: auto"> <select ng-if="!attr.multiple" ng-model="customer.attributes[name]" ng-options="value[selectedCategory.attributes[name].schema.key] for value in attr.values track by value[selectedCategory.attributes[name].schema.key]"> <option value="" selected>Select {{attr.label}}</option> </select> <ui-select ng-model="customer.attributes[name]" multiple theme="bootstrap" ng-if="attr.multiple && attr.type == \'mixed\'" style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">{{$item[selectedCategory.attributes[name].schema.key]}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div ng-bind-html="value[selectedCategory.attributes[name].schema.key] | highlight: $select.search"></div> </ui-select-choices> </ui-select> </div> <div ng-if="!attr.selectable" style="min-height: 45px; height: auto"> <input type="text" ng-model="customer.name" placeholder="{{main.translations.title_name}}" ng-if="attr.type === \'productMainName\'"> <input type="text" ng-if="attr.type == \'string\' && attr.mainAttrName" ng-model="customer.attributes[attr.mainAttrName][name]" placeholder="{{attr.label}}"> <input type="text" ng-if="attr.type == \'string\' && !attr.mainAttrName" ng-model="customer.attributes[name]" placeholder="{{attr.label}}"> <input type="number" ng-if="attr.type == \'number\' && attr.mainAttrName" ng-model="customer.attributes[attr.mainAttrName][name]" placeholder="{{attr.label}}"> <input type="number" ng-if="attr.type == \'number\' && !attr.mainAttrName" ng-model="customer.attributes[name]" placeholder="{{attr.label}}"> <input type="checkbox" ng-if="attr.type == \'boolean\' && attr.mainAttrName" ng-model="customer.attributes[attr.mainAttrName][name]" value="false"> <span ng-if="attr.type == \'boolean\'">{{attr.label}}</span> <input type="checkbox" ng-if="attr.type == \'boolean\' && !attr.mainAttrName" ng-model="customer.attributes[name]" value="false"> <span ng-if="attr.type == \'boolean\'">{{attr.label}}</span> <input ng-if="attr.type==\'date\' && attr.mainAttrName" type="text" ng-model="customer.attributes[attr.mainAttrName][name]" date-range-picker options="{singleDatePicker: true}" placeholder="{{attr.label}}"> <input ng-if="attr.type==\'date\' && !attr.mainAttrName" type="text" ng-model="customer.attributes[name]" date-range-picker options="{singleDatePicker: true}" placeholder="{{attr.label}}"> <div ng-if="attr.type==\'file\' && attr.mainAttrName" class="input-group"> <input type="text" ng-model="customer.attributes[attr.mainAttrName][name]" ng-disabled="uploaders[attr.mainAttrName][name]" placeholder="{{attr.label}}" class="form-control"> <span ng-show="!uploaders[attr.mainAttrName][name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name, attr.mainAttrName)" ng-disabled="uploaders[attr.mainAttrName][name]" class="input-group-addon" style="background-color: unset; border: 1px solid #ebebeb"> <ng-include src="\'images/svg/ic_file_upload_black_24px.svg\'"></ng-include> </span> </div> <div ng-if="attr.type==\'file\' && !attr.mainAttrName" class="input-group"> <input type="text" ng-model="customer.attributes[name]" ng-disabled="uploaders[name]" placeholder="{{attr.label}}" class="form-control"> <span ng-show="!uploaders[name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="uploaders[name]" class="input-group-addon" style="background-color: unset; border: 1px solid #ebebeb"> <ng-include src="\'images/svg/ic_file_upload_black_24px.svg\'"></ng-include> </span> </div> <div ng-if="attr.type==\'image\' && !attr.mainAttrName && !attr.multiple" class="input-group"> <input type="text" ng-model="customer.attributes[name]" ng-disabled="uploaders[name]" placeholder="{{attr.label}}" class="form-control"> <span ng-show="!uploaders[name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name)" ng-disabled="uploaders[name]" class="input-group-addon" style="background-color: unset; border: 1px solid #ebebeb"> <ng-include src="\'images/svg/ic_file_upload_black_24px.svg\'"></ng-include> </span> </div> <div ng-if="attr.type==\'image\' && attr.mainAttrName" class="input-group"> <input type="text" ng-model="customer.attributes[attr.mainAttrName][name]" ng-disabled="uploaders[attr.mainAttrName][name]" placeholder="{{attr.label}}" class="form-control"> <span ng-show="!uploaders[name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name, attr.mainAttrName)" ng-disabled="uploaders[attr.mainAttrName][name]" class="input-group-addon" style="background-color: unset; border: 1px solid #ebebeb"> <ng-include src="\'images/svg/ic_file_upload_black_24px.svg\'"></ng-include> </span> </div> <input colorpicker type="text" ng-model="customer.attributes[attr.mainAttrName][attr.name]" placeholder="{{attr.label}}" ng-if="attr.type==\'color\' && attr.mainAttrName"> <input colorpicker type="text" ng-model="customer.attributes[attr.name]" placeholder="{{attr.label}}" ng-if="attr.type==\'color\' && !attr.mainAttrName"> </div> </div> </div> </div> <div class="col-md-4" ng-if="multipleImages.length"> <div class="row" ng-repeat="attr in multipleImages"> <div class="col-md-12" style="margin-top: 5px; height: auto"> <div ng-if="attr.type==\'image\' && !attr.mainAttrName && attr.multiple" class="input-group"> <input type="text" ng-model="multipleImagesModels[attr.name]" ng-disabled="uploaders[attr.name]" placeholder="{{attr.label}}" class="form-control"> <span ng-show="!uploaders[attr.name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFiles($file, \'image\', attr.name)" ng-disabled="uploaders[attr.name]" class="input-group-addon" style="background-color: unset; border: 1px solid #ebebeb"> <ng-include src="\'images/svg/ic_file_upload_black_24px.svg\'"></ng-include> </span> </div> <div ng-repeat="img in customer.attributes[attr.name]" style="padding: 5px; border-radius: 3px; border: 1px solid #ebebeb; max-width: 120px; float: left; position: relative; margin: 5px 5px 5px 5px"> <img ng-src="{{img}}" style="max-width: 95px; margin-top: 30px"> <span ng-click="deleteImage(img, attr.name)" style="position: absolute; top: 5px; right: 0" ng-include src="\'images/svg/ic_clear_black_24px.svg\'"> </span> </div> </div> </div> </div> </div> <div class="row"> <div class="col-md-4"> <button type="submit" class="brn-btn brn-primary">Add</button> </div> </div> </form> </div> </div> </div>'),a.put("views/create-entity.html",'<div class="row create-bot"> <div class="col-lg-4 col-xs-12"> <div class="fixed-card"> <h3 class="text-center">Add Entity</h3> <form ng-submit="addEntity()"> <input type="text" ng-model="entity" placeholder="Entity name" required> <br> <button type="submit" class="brn-btn brn-primary">Add</button> </form> </div> </div> </div>'),a.put("views/create-merchant-schema-value.html",'<div class="flex-row create-bot flex-row-start"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 4px;top: 5px; font-size: 21px" ng-click="close()"> close </i> <h2>Add value</h2> </div> </div> <form class="" ng-if="attribute.type == \'mixed\'" ng-submit="createValue()"> <div class="mb10px" ng-repeat="(name, schema) in attribute.schema.fields track by $index"> <div class="mb10" ng-if="schema.type == \'string\' || schema.type == \'number\'"> <custom-input ng-model="newValue[name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="schema.type == \'location\'"> <span ng-click="showMapForm(name)" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{schema.label}}</span> <i class="material-icons" style="position: relative; top: 5px">map</i> </span> </div> <div ng-show="schema.type == \'boolean\'" ng-class="{\'mt20\' : $index == 0}"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newValue[name]" id="schema_bool"> <label for="schema_bool"> <span class="checker-ico"></span> <span>{{schema.label}}</span> </label> </div> </div> <div class="mb10" ng-show="schema.type==\'date\'"> <custom-date-range-single title="{{schema.label}}" ng-model="newValue[name]"> </custom-date-range-single> </div> <div ng-show="schema.type==\'file\'"> <div class="mb10"> <custom-input ng-model="newValue[name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-i
35cons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="uploaders[name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-show="schema.type==\'image\'"> <div class="mb10"> <custom-input ng-model="newValue[name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name)" ng-disabled="uploaders[name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div class="mb10" ng-show="schema.type==\'color\'"> <custom-colorpicker ng-model="newValue[name]" title="{{schema.label}}"> </custom-colorpicker> </div> </div> <div> <button type="submit" class="brn-btn brn-primary">{{main.translations.addValue}}</button> </div> </form> <form ng-if="attribute.type != \'mixed\'" ng-submit="createValue()"> <div> <div class="mb10" ng-if="attribute.type == \'string\' || attribute.type == \'number\'"> <custom-input ng-model="newValue.value" placeholder="{{main.translations.value}}" title="{{main.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attribute.type == \'color\'"> <custom-colorpicker ng-model="newValue.value" title="{{main.translations.value}}"> </custom-colorpicker> </div> <div ng-show="attribute.type == \'boolean\'" class="mt20"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newValue.value" id="model_boolvalue"> <label for="model_boolvalue"> <span class="checker-ico"></span> <span>{{main.translations.value}}</span> </label> </div> </div> <div class="mb10" ng-show="attribute.type == \'date\'"> <custom-date-range-single title="{{main.translations.value}}" ng-model="newValue.value"> </custom-date-range-single> </div> <div ng-show="schema.type==\'file\'"> <div class="mb10"> <custom-input ng-model="newValue.value" ng-disabled="uploaders[attribute.name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[attribute.name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', \'value\')" ng-disabled="uploaders[attribute.name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[attribute.name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-show="schema.type==\'image\'"> <div class="mb10"> <custom-input ng-model="newValue.value" ng-disabled="uploaders[attribute.name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', \'value\')" ng-disabled="uploaders[attribute.name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[attribute.name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> </div> <div> <button type="submit" class="brn-btn brn-primary">{{main.translations.addValue}}</button> </div> </form> </div> </div> </div>'), 36a.put("views/create-merchant.html",'<div class="container"> <div class="flex-row" style="margin-left:0px"> <div> <h2 class="mb35">Add Merchant</h2> <div class="mb40 settings-card-wrap big670"> <div class="flex-row"> <div> <div class="settings-card medium210 mr20"> <div class="mb10"> <custom-input ng-model="merchant.login" placeholder="Login" title="Login" is-back-placeholder="true"> </custom-input> </div> </div> <div class="settings-card medium210 mr20"> <div class="mb10"> <custom-input ng-model="merchant.password" placeholder="Password" title="Password" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div ng-repeat="row in rows"> <div ng-repeat="(name, attr) in row" class="settings-card medium210 mr20" ng-class="{\'card-all\': attr.multiple && attr.selectable}"> <div ng-if="attr.selectable && attr.type != \'mixed\' && attr.type != \'location\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="merchant.profile[name]" array="attr.values" opt-description="" opt-value="" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple && attr.type != \'mixed\'"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="merchant.profile[name]" multiple theme="bootstrap" style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">{{$item}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div ng-bind-html="value | highlight: $select.search"></div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="attr.selectable && attr.type == \'location\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="merchant.profile[name]" array="attr.values" opt-description="" opt-value="" is-location-object="true" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="merchant.profile[name]" multiple theme="bootstrap" style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">Lat: {{$item.coordinates[1]}}, Lng: {{$item.coordinates[0]}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div>{{"Lat: "+value.coordinates[1]+", Lng: "+value.coordinates[0]}}</div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="attr.selectable && attr.type == \'mixed\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="merchant.profile[name]" array="attr.values" opt-description="{{clientShema.schema[name].schema.key}}" opt-value="" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple && attr.type == \'mixed\'"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="merchant.profile[name]" multiple style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">{{$item[clientShema.schema[name].schema.key]}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div ng-bind-html="value[clientShema.schema[name].schema.key] | highlight: $select.search"></div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="!attr.selectable"> <div class="mb10" ng-if="attr.multiple && attr.type != \'mixed\' && attr.type != \'image\'" style="cursor: pointer" ng-click="showSimpleMultipleModal(attr, merchant.profile[attr.name])"> <div class="custom-input"> <span class="placeholder" ng-class="{\'placeholder-small\' : merchant.profile[attr.name]}"> {{attr.label}} </span> <span style="max-height: 40px; height: 40px; display: block; position: absolute; top: 20px; right: 0"> <i class="material-icons" style="position: relative; top: 5px">add</i> </span> <input ng-disabled="true" value="{{merchant.profile[attr.name].join(\', \')}}"> <span class="bar"></span> </div> </div> <div class="mb10" ng-if="attr.type == \'mixed\'"> <span ng-click="showMixedForm(attr, merchant.profile[attr.name])" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">add</i> </span> </div> <div class="mb10" ng-if="attr.type == \'string\' && attr.mainAttrName && !attr.multiple"> <custom-input ng-model="merchant.profile[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'string\' && !attr.mainAttrName && !attr.multiple"> <custom-input ng-model="merchant.profile[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'number\' && attr.mainAttrName && !attr.multiple"> <custom-input ng-model="merchant.profile[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" type-input="number" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'number\' && !attr.mainAttrName && !attr.multiple"> <custom-input ng-model="merchant.profile[name]" placeholder="{{attr.label}}" title="{{attr.label}}" type-input="number" is-back-placeholder="true"> </custom-input> </div> <div ng-if="attr.type == \'boolean\' && attr.mainAttrName && !attr.multiple" class="mt20"> <div class="card-checker"> <input type="checkbox" ng-model="merchant.profile[attr.mainAttrName][name]" id="model_bool_{{name}}"> <label for="model_bool_{{name}}"> <span class="checker-ico"></span> <span>{{attr.label}}</span> </label> </div> </div> <div ng-if="attr.type == \'boolean\' && !attr.mainAttrName && !attr.multiple" class="mt20"> <div class="card-checker"> <input type="checkbox" ng-model="merchant.profile[name]" id="model_bool_{{name}}_no"> <label for="model_bool_{{name}}_no"> <span class="checker-ico"></span> <span>{{attr.label}}</span> </label> </div> </div> <div class="mb10" ng-if="attr.type==\'date\' && attr.mainAttrName && !attr.multiple"> <custom-date-range-single title="{{attr.label}}" ng-model="merchant.profile[attr.mainAttrName][name]"> </custom-date-range-single> </div> <div class="mb10" ng-if="attr.type==\'date\' && !attr.mainAttrName && !attr.multiple"> <custom-date-range-single title="{{attr.label}}" ng-model="merchant.profile[name]"> </custom-date-range-single> </div> <div ng-if="attr.type==\'file\' && attr.mainAttrName && !attr.multiple"> <div class="mb10"> <custom-input ng-model="merchant.profile[attr.mainAttrName][name]" ng-disabled="uploaders[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[attr.mainAttrName][name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name, attr.mainAttrName)" ng-disabled="uploaders[attr.mainAttrName][name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[attr.mainAttrName][name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'file\' && !attr.mainAttrName && !attr.multiple"> <div class="mb10"> <custom-input ng-model="merchant.profile[name]" ng-disabled="uploaders[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="uploaders[name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'image\' && !attr.mainAttrName && !attr.multiple"> <div class="mb10"> <custom-input ng-model="merchant.profile[name]" ng-disabled="uploaders[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name)" ng-disabled="uploaders[name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'image\' && attr.mainAttrName"> <div class="mb10"> <custom-input ng-model="merchant.profile[attr.mainAttrName][name]" ng-disabled="uploaders[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name, attr.mainAttrName)" ng-disabled="uploaders[attr.mainAttrName][name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div class="mb10" ng-if="attr.type==\'color\' && attr.mainAttrName && !attr.multiple"> <custom-colorpicker ng-model="merchant.profile[attr.mainAttrName][attr.name]" title="{{attr.label}}"> </custom-colorpicker> </div> <div class="mb10" ng-if="attr.type==\'color\' && !attr.mainAttrName && !attr.multiple"> <custom-colorpicker ng-model="merchant.profile[attr.name]" title="{{attr.label}}"> </custom-colorpicker> </div> <div class="mb10" ng-if="attr.type==\'location\' && !attr.mainAttrName && !attr.multiple"> <span ng-click="showMapForm(attr, merchant.profile[attr.name])" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">map</i> </span> </div> </div> </div> </div> </div> </div> <div> <button ng-click="createMerchant()" class="brn-btn brn-primary">Add</button> </div> </div> <div class="settings-card-wrap" style="flex-basis: auto" ng-if="multipleImages.length"> <div class="settings-card mb25" style="max-width: max-content" ng-repeat="attr in multipleImages"> <h2 class="mb60"> {{attr.label}} </h2> <div class="catalog-screenshot-container mb60"> <div class="catalog-screenshot settings" ng-repeat="img in merchant.profile[attr.name]"> <div class="delete-container"> <img src="{{img}}" alt=""> <div class="delete-hover" ng-click="deleteImage(img, attr.name)"> <div class="icon-container"> <i class="material-icons icon">
36remove_circle</i> <span class="text"> Remove photo </span> </div> </div> </div> </div> <div ng-if="attr.type==\'image\' && !attr.mainAttrName && attr.multiple" class="catalog-screenshot" ng-show="!uploaders[attr.name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFiles($file, \'image\', attr.name)"> <div class="add-item" style="width: 150px"> <div class="icon-container"> <i class="material-icons icon">add_circle</i> <span class="text"> Add photo </span> </div> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/create-offer.html",'<div class="row create-bot"> <div class="col-lg-12"> <div class="fixed-card"> <h3>Create new offer</h3> <form ng-submit="createOffer()"> <div class="row"> <div class="col-xs-4"> <input type="text" ng-model="offer.merchant" placeholder="Customer Number" style="margin: 5px 0px"> <input type="text" ng-model="offer.in" placeholder="Internal Number" style="margin: 5px 0px"> <select type="text" ng-model="offer.category" placeholder="Category Id" style="margin: 5px 0px"> <option value="" selected>Category Id</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <select type="text" ng-model="offer.model" placeholder="Model Id" style="margin: 5px 0px"> <option value="" selected>Model Id</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> </select> <input type="text" ng-model="offer.performance" placeholder="Performance" style="margin: 5px 0px"> <input type="text" ng-model="offer.rd" placeholder="Reg Date" style="margin: 5px 0px"> </div> <div class="col-xs-4"> <input type="text" ng-model="offer.km" placeholder="Kilometre" style="margin: 5px 0px"> <input type="text" ng-model="offer.price" placeholder="Price" style="margin: 5px 0px"> <input type="text" ng-model="offer.vat" placeholder="Vat" style="margin: 5px 0px"> <input type="text" ng-model="offer.dp" placeholder="Dealer Price" style="margin: 5px 0px"> <select type="text" ng-model="offer.frpc" placeholder="Fin Rate Per Cent" style="margin: 5px 0px"> <option value="" selected>Fin Rate Per Cent</option> <option value="15">15</option> <option value="20">20</option> <option value="25">25</option> </select> <input type="text" ng-model="offer.frm" placeholder="Fin Monthly Rate" style="margin: 5px 0px"> </div> <div class="col-xs-4"> <select type="text" ng-model="offer.fp" placeholder="Fin Period" style="margin: 5px 0px"> <option value="" selected>Fin Period</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> </select> <input type="text" ng-model="offer.ffi" placeholder="Fin First Install" style="margin: 5px 0px"> <input type="text" ng-model="offer.fer" placeholder="Fin Ending Rate" style="margin: 5px 0px"> <input type="text" ng-model="offer.ff" placeholder="Fin Feature" style="margin: 5px 0px"> <select type="text" ng-model="offer.color" placeholder="Color" style="margin: 5px 0px"> <option value="" selected>Color</option> <option value="red">red</option> <option value="black">black</option> <option value="white">white</option> </select> </div> </div> <button type="submit" class="brn-btn brn-primary">Create offer</button> </form> </div> </div> </div>'),a.put("views/create-order.html",'<div class="row create-bot"> <div class="col-lg-4 col-xs-12"> <div class="fixed-card"> <h3>Add order</h3> <form ng-submit="createOrder()"> <ui-select ng-model="order.client_id" theme="bootstrap"> <ui-select-match placeholder="Client">{{$select.selected.name}}</ui-select-match> <ui-select-choices repeat="item.client_id as item in clients | filter: $select.search"> <div ng-bind-html="item.name | highlight: $select.search"></div> </ui-select-choices> </ui-select> <br> <ui-select multiple ng-model="order.products" theme="bootstrap" close-on-select="false"> <ui-select-match placeholder="Products">{{$item.name}}</ui-select-match> <ui-select-choices repeat="item.product_id as item in products | filter: $select.search"> <div ng-bind-html="item.name | highlight: $select.search"></div> </ui-select-choices> </ui-select> <br> <select ng-model="order.order_status" ng-options="item.name as item.title for item in orderStatuses"> </select> <br> <br> <button type="submit" class="brn-btn brn-primary">Create order</button> </form> </div> </div> </div>'),a.put("views/create-product.html",'<div class="container"> <div class="flex-row" style="margin-left:0px"> <div> <h2 class="mb35">Product Info</h2> <div class="mb40 settings-card-wrap big670"> <div class="flex-row"> <div ng-repeat="row in rows"> <div ng-repeat="(name, attr) in row" class="settings-card medium210 mr20" ng-class="{\'card-all\': attr.multiple && attr.selectable}"> <div ng-if="attr.selectable && attr.type != \'mixed\' && attr.type != \'location\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="product.attributes[name]" array="attr.values" opt-description="" opt-value="" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple && attr.type != \'mixed\'"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="product.attributes[name]" multiple theme="bootstrap" style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">{{$item}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div ng-bind-html="value | highlight: $select.search"></div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="attr.selectable && attr.type == \'location\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="product.attributes[name]" array="attr.values" opt-description="" opt-value="" is-location-object="true" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="product.attributes[name]" multiple theme="bootstrap" style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">Lat: {{$item.coordinates[1]}}, Lng: {{$item.coordinates[0]}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div>{{"Lat: "+value.coordinates[1]+", Lng: "+value.coordinates[0]}}</div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="attr.selectable && attr.type == \'mixed\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="product.attributes[name]" array="attr.values" opt-description="{{selectedCategory.attributes[name].schema.key}}" opt-value="" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple && attr.type == \'mixed\'"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="product.attributes[name]" multiple style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">{{$item[selectedCategory.attributes[name].schema.key]}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div ng-bind-html="value[selectedCategory.attributes[name].schema.key] | highlight: $select.search"></div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="!attr.selectable"> <div class="mb10" ng-if="attr.multiple && attr.type != \'mixed\' && attr.type != \'image\'" style="cursor: pointer" ng-click="showSimpleMultipleModal(attr, product.attributes[attr.name])"> <div class="custom-input"> <span class="placeholder" ng-class="{\'placeholder-small\' : product.attributes[attr.name]}"> {{attr.label}} </span> <span style="max-height: 40px; height: 40px; display: block; position: absolute; top: 20px; right: 0"> <i class="material-icons" style="position: relative; top: 5px">add</i> </span> <input ng-disabled="true" value="{{product.attributes[attr.name].join(\', \')}}"> <span class="bar"></span> </div> </div> <div class="mb10" ng-if="attr.type == \'mixed\'"> <span ng-click="showMixedForm(attr, product.attributes[attr.name])" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">add</i> </span> </div> <div class="mb10" ng-if="attr.type == \'string\' && attr.mainAttrName && !attr.multiple"> <custom-input ng-model="product.attributes[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'string\' && !attr.mainAttrName && !attr.multiple"> <custom-input ng-model="product.attributes[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'number\' && attr.mainAttrName && !attr.multiple"> <custom-input ng-model="product.attributes[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" type-input="number" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'number\' && !attr.mainAttrName && !attr.multiple"> <custom-input ng-model="product.attributes[name]" placeholder="{{attr.label}}" title="{{attr.label}}" type-input="number" is-back-placeholder="true"> </custom-input> </div> <div ng-if="attr.type == \'boolean\' && attr.mainAttrName && !attr.multiple" class="mt20"> <div class="card-checker"> <input type="checkbox" ng-model="product.attributes[attr.mainAttrName][name]" id="model_bool_{{name}}"> <label for="model_bool_{{name}}"> <span class="checker-ico"></span> <span>{{attr.label}}</span> </label> </div> </div> <div ng-if="attr.type == \'boolean\' && !attr.mainAttrName && !attr.multiple" class="mt20"> <div class="card-checker"> <input type="checkbox" ng-model="product.attributes[name]" id="model_bool_{{name}}_no"> <label for="model_bool_{{name}}_no"> <span class="checker-ico"></span> <span>{{attr.label}}</span> </label> </div> </div> <div class="mb10" ng-if="attr.type==\'date\' && attr.mainAttrName && !attr.multiple"> <custom-date-range-single title="{{attr.label}}" ng-model="product.attributes[attr.mainAttrName][name]"> </custom-date-range-single> </div> <div class="mb10" ng-if="attr.type==\'date\' && !attr.mainAttrName && !attr.multiple"> <custom-date-range-single title="{{attr.label}}" ng-model="product.attributes[name]"> </custom-date-range-single> </div> <div ng-if="attr.type==\'file\' && attr.mainAttrName"> <div class="mb10"> <custom-input ng-model="product.attributes[attr.mainAttrName][name]" ng-disabled="uploaders[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[attr.mainAttrName][name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name, attr.mainAttrName)" ng-disabled="uploaders[attr.mainAttrName][name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[attr.mainAttrName][name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'file\' && !attr.mainAttrName"> <div class="mb10"> <custom-input ng-model="product.attributes[name]" ng-disabled="uploaders[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="uploaders[name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'image\' && !attr.mainAttrName && !attr.multiple"> <div class="mb10"> <custom-input ng-model="product.attributes[name]" ng-disabled="uploaders[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name)" ng-disabled="uploaders[name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'image\' && attr.mainAttrName"> <div class="mb10"> <custom-input ng-model="product.attributes[attr.mainAttrName][name]" ng-disabled="uploaders[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name, attr.mainAttrName)" ng-disabled="uploaders[attr.mainAttrName][name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div class="mb10" ng-if="attr.type==\'color\' && attr.mainAttrName && !attr.multiple"> <custom-colorpicker ng-model="product.attributes[attr.mainAttrName][attr.name]" title="{{attr.label}}"> </custom-colorpicker> </div> <div class="mb10" ng-if="attr.type==\'color\' && !attr.mainAttrName && !attr.multiple"> <custom-colorpicker ng-model="product.attributes[attr.name]" title="{{attr.label}}"> </custom-colorpicker> </div> <div class="mb10" ng-if="attr.type==\'location\' && !attr.mainAttrName && !attr.multiple"> <span ng-click="showMapForm(attr, product.attributes[attr.name])" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">map</i> </span> </div> </div> </div> </div> </div> </div> <div> <button ng-click="createProduct()" class="brn-btn brn-primary">Add Product</button> </div> </div> <div class="settings-card-wrap" style="flex-basis: auto" ng-if="multipleImages.length"> <div class="settings-card mb25" style="max-width: max-content" ng-repeat="attr in multipleImages"> <h2 class="mb60"> {{attr.label}} </h2> <div class="catalog-screenshot-container mb60"> <div class="catalog-screenshot settings" ng-repeat="img in product.attributes[attr.name]"> <div class="delete-container"> <img src="{{img}}" alt=""> <div class="delete-hover" ng-click="deleteImage(img, attr.name)"> <div class="icon-container"> <i class="material-icons icon">
36remove_circle</i> <span class="text"> Remove photo </span> </div> </div> </div> </div> <div ng-if="attr.type==\'image\' && !attr.mainAttrName && attr.multiple" class="catalog-screenshot" ng-show="!uploaders[attr.name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFiles($file, \'image\', attr.name)"> <div class="add-item" style="width: 150px"> <div class="icon-container"> <i class="material-icons icon">add_circle</i> <span class="text"> Add photo </span> </div> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/create-proxy.html",'<div class="flex-row"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb35">Create proxy</h2> <div class="mb50"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_host}}" title="{{main.translations.title_host}}" ng-model="proxy.host" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title_port}}" title="{{main.translations.title_port}}" ng-model="proxy.port" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title_user}}" title="{{main.translations.title_user}}" ng-model="proxy.user" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title_password}}" title="{{main.translations.title_password}}" ng-model="proxy.password" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title_country}}" title="{{main.translations.title_country}}" ng-model="proxy.country" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-model="proxy.portal_id" array="portals" opt-value="portal_id" opt-description="name" is-model-init="true" is-back-placeholder-active="true" is-back-placeholder="true" title="Portal" placeholder="Existing portal"> </custom-dropdown> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title_provider}}" title="{{main.translations.title_provider}}" ng-model="proxy.provider" is-required="false" is-back-placeholder="true"> </custom-input> </div> <div class="card-checker" style="margin-top: 15px"> <input type="checkbox" ng-model="proxy.active" id="proxy_is_active"> <label for="proxy_is_active"> <span class="checker-ico"></span> <span>Is Active</span> </label> </div> <div class="card-checker"> <input type="checkbox" ng-model="proxy.in_use" id="proxy_is_in_use"> <label for="proxy_is_in_use"> <span class="checker-ico"></span> <span>In use</span> </label> </div> </div> <button ng-click="createProxy()" class="brn-btn brn-primary">Save Proxy</button> </div> </div> </div>'), 37a.put("views/createelement.html",'<div class="flex-row"> <div class="settings-card-wrap"> <div class="settings-card big mb50"> <h2 class="mb35">{{updateRoute ? \'Edit\': \'Create\'}} element</h2> <div class="mb40 element-edit-wrapper"> <div ng-repeat="field in collection.fields"> <div class="mb10" ng-if="field.type == \'text\'"> <custom-input placeholder="{{field.title}}" title="{{field.title}}" ng-model="fields[field.name]" type-input="textarea" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="field.type == \'number\'"> <custom-input placeholder="{{field.title}}" title="{{field.title}}" type-input="number" ng-model="fields[field.name]" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="field.type == \'date\'"> <custom-date-range-single title="{{field.title}}" ng-model="fields[field.name]"> </custom-date-range-single> </div> <div ng-if="field.type != \'text\' && field.type != \'date\' && field.type != \'number\'" class="mb10"> <div class="mb20"> <custom-input ng-model="fields[field.name]" title="{{field.title}}" placeholder="{{field.title}}" ng-disabled="field.progress" is-back-placeholder="true"> </custom-input> </div> <div> <div ng-switch on="field.type" class="broadcast-list mb10"> <div ng-switch-when="audio"> <ng-include src="\'views/collections-elements/audio.html\'"></ng-include> </div> <div ng-switch-when="file"> <ng-include src="\'views/collections-elements/file.html\'"></ng-include> </div> <div ng-switch-when="image"> <ng-include src="\'views/collections-elements/image.html\'"></ng-include> </div> <div ng-switch-when="video"> <ng-include src="\'views/collections-elements/video.html\'"></ng-include> </div> </div> </div> </div> </div> </div> <button class="brn-btn brn-primary" ng-if="!updateRoute" ng-disabled="disabledBtnCreate" ng-click="addElement()"> Create </button> <button class="brn-btn brn-primary" ng-click="updateElement()" ng-if="updateRoute"> {{main.translations.save_btn}} </button> </div> </div> </div>'),a.put("views/createscenario.html",'<form class="gui-modal-wrap" ng-submit="nextStep()"> <div class="card card-tabs"> <div class="card-nav"> <span class="gui-component-name">{{step.component}}</span> <div class="step-img subscription-step"></div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="scenario.default" id="default_scenario"> <label for="default_scenario"> <span class="checker-ico"></span> <span>Default</span> </label> </div> <div class="card-nav-tabs">
37 <div ng-show="!guiRoute"> <button type="submit" class="brn-btn btn-blue">Next </button> </div> <div ng-show="guiRoute"> <button type="button" class="brn-btn btn-blue" ng-click="saveScenario()">{{main.translations.save_btn}} </button> </div> <div ng-show="guiRoute"> <button type="button" class="brn-btn brn-remove" ng-click="deleteScenario()">Delete </button> </div> <div ng-show="guiRoute"> <button type="button" class="card-btn card-btn-success" ng-click="testScenario()">Test </button> </div> <div> <button type="button" class="brn-btn btn-cancel" ng-click="closeModal()">Cancel </button> </div> </div> </div> <div class="card-tabs-body"> <div class="section"> <div class="row mb25"> <div class="col-xs-12"> <div class="info-row"> <p>{{guiRoute ? \'Update\': \'Create new\'}} scenario</p> </div> </div> <div class="col-xs-12 col-md-6"> <input type="text" ng-model="scenario.name" placeholder="Scenario name" form-title="Scenario name" required> </div> <div class="col-xs-12 col-md-6"> <input type="text" ng-model="scenario.keywords" placeholder="Keywords" form-title="Keywords"> </div> </div> <div class="row mb25"> <div class="col-xs-12 col-sm-66 mb25"> <span>Add Roles</span> <select ng-model="selectedRole" ng-change="addRole()"> <option ng-repeat="role in roles" value="{{ role.name }}" ng-selelected="{{ selectedRole == role.name }}"> {{ role.title }} </option> </select> </div> <div class="col-xs-12 col-sm-6 mb25"> <div class="edit-entity"> <div ng-repeat="(key, role) in scenario.roles" style="display: inline-flex"> <div class="custom-chips"> <div class="default-chip"> {{role}} <img src="images/svg/letter-x.svg" ng-click="removeRole(key)" class="remove-chip"> </div> </div> </div> </div> </div> </div> </div> </div> </div> </form>'),a.put("views/createuser.html",'<div class="flex-row create-bot flex-row-start"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div class="bots-list-item-name mb10"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" ng-click="closeModal()"> close </i> Create user </div> <div class="mb10"> <custom-input placeholder="First Name" ng-model="user.firstname" title="First Name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Last Name" ng-model="user.lastname" title="Last Name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Email" ng-model="user.email" title="Email" type-input="email" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Password" ng-model="user.password" title="Password" type-input="password" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input placeholder="Nickname" ng-model="user.nickname" title="Nickname" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-dropdown ng-model="user.portal" array="portals" opt-description="name" opt-value="service_name" title="Select portal" is-model-init="true" placeholder="Select portal" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb25"> <custom-dropdown ng-model="user.group" array="groups" opt-description="title" opt-value="value" title="Group" is-model-init="true" placeholder="Select group" is-back-placeholder="true"> </custom-dropdown> </div> <div> <div class="brn-form-group"> <button type="button" class="brn-btn brn-primary" ng-click="onSubmit()"> Create </button> </div> </div> </div> </div> </div>'),a.put("views/crm-chat-message.html",'<div class="crm-chat__message" ng-class="{\'crm-chat__message--client\': message.author === \'client\'}"> \x3c!--******************* Text *********************--\x3e <div class="crm-chat__message-body" ng-if="message.message.type === \'text\'"> <div class="crm-chat__message-content"> <div class="crm-chat__message-text" ng-mouseup="getSelectedText()" ng-class="{\'crm-chat__message-text--animated\': isPopoverOpen}"> <p>{{message.message.content.text}}</p> <span class="crm-chat__message-negative" ng-if="message.scores && infoMode && message.author === \'client\' && message.scores.negative"> <i class="material-icons"> thumb_down </i> </span> </div> </div> <span class="crm-chat__message-time" am-time-ago="message.created"> </span> <div class="crm-chat__message-popover" ng-class="{\'crm-chat__message-popover--bottom\': isOnTop()}" ng-if="isPopoverOpen" click-outside="closePopover()"> <ul> <li ng-click="toggleNewIntent()">New Intent</li>
37 <li ng-click="toggleExistIntent()">Add to Intent</li> <li ng-click="toggleExistIntentAsResponse()">Add as Response</li> </ul> </div> </div> \x3c!--******************* Image *********************--\x3e <div class="crm-chat__message-body" ng-if="message.message.type === \'image\'"> <div class="crm-chat__message-content"> \x3c!-- if image --\x3e <a href="{{message.message.content.url}}" target="_blank" class="crm-chat__message-image"> <img src="{{message.message.content.url}}" alt="no image"> </a> </div> <span class="crm-chat__message-time" am-time-ago="message.created"> </span> </div> \x3c!--******************* File *********************--\x3e <div class="crm-chat__message-body" ng-if="message.message.type === \'file\'"> <div class="crm-chat__message-content" style="display: flex"> <a target="_blank" title="{{message.message.content.name}}" href="{{message.message.content.url}}" class="crm-chat__message-file"> <i class="material-icons">save</i> {{message.message.content.name}} </a> </div> <span class="crm-chat__message-time" am-time-ago="message.created"> </span> </div> \x3c!-- Message source --\x3e <div class="crm-chat__message-info" ng-if="message.source && infoMode"> \x3c!-- if operator--\x3e <div class="message-info__operator" ng-if="message.source.type === \'user\'"> <a class="message-info__operator-name"> {{message.source.user.name}}
37 </a> <i class="material-icons"> person </i> </div> \x3c!-- if scenario--\x3e <div class="message-info__scenario" ng-if="message.source.type === \'scenario\'"> <a class="message-info__scenario-name" ui-sref="edit-scenarios({id: bot_id, scenario: message.source.scenario.scenario_id})"> {{message.source.scenario.name}} </a> <i class="material-icons"> keyboard_arrow_right </i> <a class="message-info__scenario-step" ui-sref="edit-scenarios({id: bot_id, scenario: message.source.scenario.scenario_id})"> Step {{message.source.step.name}} </a> </div> \x3c!-- if best reply--\x3e <div class="message-info__best" ng-if="message.source.type === \'best_reply\'"> <a class="message-info__best-name"> Best reply </a> <i class="material-icons"> thumb_up </i> </div> \x3c!-- if system--\x3e <div class="message-info__system" ng-if="message.source.type === \'system\'"> <a class="message-info__system-name"> System message </a> <i class="material-icons"> warning </i> </div> \x3c!-- if broadcast--\x3e <div class="message-info__broadcast" ng-if="message.source.type === \'broadcast\'"> <a class="message-info__broadcast-name" ui-sref="bot-abstract.broadcast_detail({id: bot_id, broadcastId: message.source.broadcast.broadcast_id})"> {{message.source.broadcast.name}} </a> <i class="material-icons"> rss_feed </i> </div> \x3c!-- if intent--\x3e <div class="message-info__intent" ng-if="message.source.type === \'intent\'"> <a class="message-info__intent-name" ui-sref="intent-detail({id: bot_id, intent: message.source.intent.intent_id})"> {{message.source.intent.name}} </a> <i class="material-icons"> loyalty </i> </div> </div> \x3c!-- Message source for clients--\x3e <div class="crm-chat__message-info" ng-if="message.scores && infoMode && message.author === \'client\'" ng-class="{\'crm-chat__message-info--client\': message.author === \'client\'}"> \x3c!-- if scores--\x3e <div class="message-info__scores"> <span class="message-info__scores--h" ng-class="getScoreClass(message.scores.happy_2_buy)"> H2B{{getScore(message.scores.happy_2_buy)}} </span> <b>/</b> <span class="message-info__scores--b" ng-class="getScoreClass(message.scores.sentiment)"> SNT{{getScore(message.scores.sentiment)}} </span> </div> </div> </div>'),a.put("views/crm-chat-p.html",'<div class="crm-chat crm-chat--person" ng-class="{\'crm-chat--fullscreen\': fullscreenMode}"> <div class="crm-chat__header"> <div class="crm-chat__header-avatar"> <img src="{{person.profile.image || \'https://api.brn.ai/img/default-client-avatar.png\'}}" alt="{{person.profile.name}}"> <div class="crm-chat__person-channels"> <img ng-src="{{getChannelIcon(client.provider)}}" alt="{{client.provider}}" class="crm-chat__current-channel" ng-click="openChannelsPopup()"> <ul class="crm-chat__person-channel-list" click-outside="closeChannelsPopup()" ng-if="isChannelSelected"> <li ng-click="changeDialogChannel(channel)" ng-repeat="channel in person.clients" ng-class="{\'active\': channel.provider === client.provider}"> <img class="crm-chat__channel-icon" ng-src="{{getChannelIcon(channel.provider)}}" alt="{{channel.provider}}"> <p class="crm-chat__channel-name">{{channel.provider}}</p> </li> </ul> </div> </div> <div class="crm-chat__header-user"> <h3 class="user__name">{{person.profile.name}}</h3> <p class="user__status" ng-if="!isUserOnline(client.statistics.last_sent)"> Last seen <span am-time-ago="client.statistics.last_sent"></span> </p> <p class="user__status user__status--online" ng-if="isUserOnline(client.statistics.last_sent)"> Online </p> </div> <div class="crm-chat__header-controls"> <span class="crm-chat__info-control" ng-click="toggleInfoMode()" ng-class="{\'crm-chat__info-control--enabled\': infoMode}"> <i class="material-icons"> info </i> </span> <span ng-click="changeDialogMode()" class="crm-chat__mode-control" ng-class="{\'crm-chat__mode-control--manual\': client.mode === \'manual\', \n \'crm-chat__mode-control--auto\': client.mode === \'auto\'}"> <i class="material-icons"> autorenew </i> <i>A</i> <i>M</i> </span> </div> <div class="crm-chat__loader" ng-if="isLoading"> <i class="material-icons"> autorenew </i> </div> <span class="crm-chat__body-fullscreen-button" ng-if="fullscreenMode" ng-click="disableFullscreen()"> <i class="material-icons"> fullscreen_exit </i> </span> </div> <div class="crm-chat__body" scroll-glue> <crm-chat-message ng-repeat="message in clientMessages" message="message"> </crm-chat-message> </div> \x3c!-- Chat input --\x3e <div class="crm-chat__input"> <form class="crm-chat__input-form" ng-submit="sendMessage()"> <div class="crm-chat__input-data"> <i class="material-icons"> attach_file </i> <ul class="crm-chat__input-bubble"> <li ngf-select="addAttachment($file, $invalidFiles, client)" ngf-max-size="5MB" class="crm-chat__input-bubble-item"> <i class="material-icons"> insert_drive_file </i> <span> File </span> </li> <li ngf-select="addAttachment($file, $invalidFiles, client)" ngf-max-size="5MB" class="crm-chat__input-bubble-item"> <i class="material-icons"> image </i> <span> Image </span> </li> <li ngf-select="addAttachment($file, $invalidFiles, client)" ngf-max-size="5MB" class="crm-chat__input-bubble-item"> <i class="material-icons"> local_movies </i> <span> Video </span> </li> <li ngf-select="addAttachment($file, $invalidFiles, client)" ngf-max-size="5MB" class="crm-chat__input-bubble-item"> <i class="material-icons"> music_note </i> <span> Audio </span> </li> \x3c!-- \t\t\t\t\t\t\t\t<li>\n <i class="material-icons">\n shopping_cart\n </i>
37\n <span>\n Product\n </span>\n </li> --\x3e <li ng-if="scenarios.length" class="crm-chat__input-bubble-item"> <i class="material-icons">archive</i> <span>Scenario</span> <div class="crm-chat__input-bubble--inner"> <ul> <li ng-repeat="scenario in scenarios"> <span ng-click="runScenario(scenario.scenario_id)">{{scenario.name}}</span> <i ng-hide="!checkScenarioStatus(value.scenario_id)" class="material-icons status">done</i> </li> </ul> </div> </li> </ul> </div> <input type="text" ng-model="messageText" ng-change="callSuggest()" required class="crm-chat__input-text" placeholder="Type here..."> <div class="crm-chat__input-submit" ng-click="sendMessage()" ng-class="{\'crm-chat__input-submit--disabled\': !messageText}"> <i class="material-icons"> send </i> </div> </form> </div> <div class="crm-chat__suggestions" ng-if="suggestions.length"> <div class="crm-chat__suggestion" ng-click="selectSuggest($event, suggestion)" ng-repeat="suggestion in suggestions"> <span class="crm-chat__suggestion-image" ng-if="suggestion.image"> <img src="{{suggestion.image}}" alt="-"> </span> <p>{{suggestion.text}}</p> </div> </div> <div class="crm-chat__fullscreen-footer" ng-if="!fullscreenMode" ng-click="enableFullscreen()"> <span> <i class="material-icons"> fullscreen </i> Enable immersive mode </span> </div> </div>'),a.put("views/crm-chat.html",'<div class="crm-chat"> <div class="crm-chat__header"> <div class="crm-chat__header-avatar"> <img src="{{client.avatar}}" alt="{{client.name}}"> </div> <div class="crm-chat__header-user"> <h3 class="user__name"> {{client.name}} </h3> <p class="user__status" ng-if="!isUserOnline(client.statistics.last_sent)"> Last seen <span am-time-ago="client.statistics.last_sent"></span> </p> <p class="user__status user__status--online" ng-if="isUserOnline(client.statistics.last_sent)"> Online </p> </div> <div class="crm-chat__header-controls"> \x3c!-- old sentiments --\x3e <span ng-if="client.sentiment <= -5" class="sentiment-score" style="width: 40px;\n height: 30px;\n background: #f2c5ce;\n text-align: center;\n line-height: 30px;\n border-radius: 13px;\n color: #bc1a27;\n margin-right: 8px"> -{{client.sentiment}} </span> <span ng-if="client.sentiment > -5 && client.sentiment < 0" class="sentiment-score" style="width: 40px;\n height: 30px;\n background: #f7e9ce;\n text-align: center;\n line-height: 30px;\n border-radius: 13px;\n color: #f7ad3a;\n margin-right: 8px"> -{{client.sentiment}} </span> <span ng-if="client.sentiment >= 0 && client.sentiment < 5" class="sentiment-score" style="width: 40px;\n height: 30px;\n background: #f7e9ce;\n text-align: center;\n line-height: 30px;\n border-radius: 13px;\n color: #f7ad3a;\n margin-right: 8px"> +{{client.sentiment}} </span> <span ng-if="client.sentiment >= 5" class="sentiment-score" style="width: 40px;\n height: 30px;\n background: #e2eeca;\n text-align: center;\n line-height: 30px;\n border-radius: 13px;\n color: #89bd1d;\n margin-right: 8px"> +{{client.sentiment}} </span> \x3c!-- --\x3e <span class="crm-chat__info-control" ng-click="toggleInfoMode()" ng-class="{\'crm-chat__info-control--enabled\': infoMode}"> <i class="material-icons"> info </i> </span> <span ng-click="changeDialogMode()" class="crm-chat__mode-control" ng-class="{\'crm-chat__mode-control--manual\': client.mode === \'manual\', \n \'crm-chat__mode-control--auto\': client.mode === \'auto\'}"> <i class="material-icons"> autorenew </i> <i>A</i> <i>M</i> </span> </div> <div class="crm-chat__loader" ng-if="isLoading"> <i class="material-icons"> autorenew </i> </div> </div> <div class="crm-chat__body" scroll-glue> <crm-chat-message ng-repeat="message in clientMessages" message="message"> </crm-chat-message> </div> \x3c!-- Chat input --\x3e <div class="crm-chat__input"> <form class="crm-chat__input-form" ng-submit="sendMessage()"> <div class="crm-chat__input-data"> <i class="material-icons"> attach_file </i> <ul class="crm-chat__input-bubble"> <li ngf-select="addAttachment($file, $invalidFiles, client)" ngf-max-size="5MB" class="crm-chat__input-bubble-item"> <i class="material-icons"> insert_drive_file </i> <span> File </span> </li> <li ngf-select="addAttachment($file, $invalidFiles, client)" ngf-max-size="5MB" class="crm-chat__input-bubble-item"> <i class="material-icons"> image </i> <span> Image </span> </li> <li ngf-select="addAttachment($file, $invalidFiles, client)" ngf-max-size="5MB" class="crm-chat__input-bubble-item"> <i class="material-icons"> local_movies </i> <span> Video </span> </li> <li ngf-select="addAttachment($file, $invalidFiles, client)" ngf-max-size="5MB" class="crm-chat__input-bubble-item"> <i class="material-icons"> music_note </i> <span> Audio </span> </li> \x3c!-- \t\t\t\t\t\t\t\t<li>\n <i class="material-icons">\n shopping_cart\n </i>
37\n <span>\n Product\n </span>\n </li> --\x3e <li ng-if="scenarios.length" class="crm-chat__input-bubble-item"> <i class="material-icons">archive</i> <span>Scenario</span> <div class="crm-chat__input-bubble--inner"> <ul> <li ng-repeat="scenario in scenarios"> <span ng-click="runScenario(scenario.scenario_id)">{{scenario.name}}</span> <i ng-hide="!checkScenarioStatus(value.scenario_id)" class="material-icons status">done</i> </li> </ul> </div> </li> </ul> </div> <input type="text" ng-model="messageText" ng-change="callSuggest()" required class="crm-chat__input-text" placeholder="Type here..."> <div class="crm-chat__input-submit" ng-click="sendMessage()" ng-class="{\'crm-chat__input-submit--disabled\': !messageText}"> <i class="material-icons"> send </i> </div> </form> </div> <div class="crm-chat__suggestions" ng-if="suggestions.length"> <div class="crm-chat__suggestion" ng-click="selectSuggest($event, suggestion)" ng-repeat="suggestion in suggestions"> <span class="crm-chat__suggestion-image" ng-if="suggestion.image"> <img src="{{suggestion.image}}" alt="-"> </span> <p> {{suggestion.text}} </p> </div> </div> </div>'), 38a.put("views/crm-new.html",'<div id="crm-wrapper"> \x3c!-- SIDEBAR --\x3e <div id="crm-sidebar__wrapper"> <custom-scroller> <div class="crm-sidebar"> \x3c!-- MESSAGES --\x3e <div class="crm-sidebar__block"> <h3 class="crm-sidebar__block-title">Messages in dialog</h3> <div class="crm-sidebar__block-body"> <div class="crm-input__text"> <input type="text" ng-model-options="{ debounce: 1000 }" ng-model="filterParams[\'statistics.send\'].value" placeholder="Number of messages"> </div> </div> </div> \x3c!-- MESSAGES period --\x3e <div class="crm-sidebar__block"> <h3 class="crm-sidebar__block-title">Last message date</h3> <div class="crm-sidebar__block-body"> <date-range-new ng-model="filterParams[\'statistics.last\'].value"></date-range-new> </div> </div> \x3c!-- MESSAGES period --\x3e <div class="crm-sidebar__block"> <h3 class="crm-sidebar__block-title">First message date</h3> <div class="crm-sidebar__block-body"> <date-range-new ng-model="filterParams[\'created_at\'].value"></date-range-new> </div> </div> \x3c!-- Sentiment --\x3e <div ng-if="sentimentEnabled" class="crm-sidebar__block"> <h3 class="crm-sidebar__block-title">Sentiment</h3> <div class="crm-sidebar__block-body"> <div class="crm-input__text"> <input type="text" ng-model-options="{ debounce: 1000 }" ng-model="filterParams[\'scores.sentiment\'].value[0]" placeholder="From"> <input type="text" ng-model-options="{ debounce: 1000 }" ng-model="filterParams[\'scores.sentiment\'].value[1]" placeholder="To"> </div> </div> </div> \x3c!-- Happy2Buy --\x3e <div ng-if="happy2BuyEnabled" class="crm-sidebar__block"> <h3 class="crm-sidebar__block-title">Happy2Buy</h3> <div class="crm-sidebar__block-body"> <div class="crm-input__text"> <input type="text" ng-model-options="{ debounce: 1000 }" ng-model="filterParams[\'scores.happy_2_buy\'].value[0]" placeholder="From"> <input type="text" ng-model-options="{ debounce: 1000 }" ng-model="filterParams[\'scores.happy_2_buy\'].value[1]" placeholder="To"> </div> </div> </div> \x3c!-- Negative --\x3e <div ng-if="negativeEnabled" class="crm-sidebar__block"> <h3 class="crm-sidebar__block-title">Negative dialogs</h3> <div class="crm-sidebar__block-body"> <div class="crm-sidebar__check" ng-click="setFilter(\'scores.negative\', \'1\', false)"> <input type="checkbox" ng-checked="filterParams[\'scores.negative\'].includes(1)"> <label> <span class="crm-sidebar__check-icon"> <i class="material-icons"> check </i> </span> <p class="crm-sidebar__check-name">Only negative</p> </label> </div> </div> </div> \x3c!-- TAGS GROUPS --\x3e <div class="crm-sidebar__block" ng-init="tagsGroupsCollapsed = true" ng-class="{\'sidebar__block--collapsed\': tagsGroupsCollapsed}"> <h3 class="crm-sidebar__block-title" ng-click="tagsGroupsCollapsed = !tagsGroupsCollapsed"> Tags groups <span class="crm-sidebar__block-title__icon"> <i class="material-icons"> keyboard_arrow_up </i> </span> </h3> <div class="crm-sidebar__block-body"> <div class="crm-sidebar__check" ng-click="setFilter(\'tag_filter\', tagGroup.name, false)" ng-repeat="tagGroup in filterData.tag_filters | orderBy:\'-count\'"> <input type="checkbox" ng-checked="filterParams.tag_filter === tagGroup.name"> <label> <span class="crm-sidebar__check-icon"> <i class="material-icons"> check </i> </span> <p class="crm-sidebar__check-name">{{tagGroup.name}}</p> <span class="crm-sidebar__check-count"> {{tagGroup.count}} </span> </label> <span class="crm-sidebar__check-settings" ng-class="{\'crm-sidebar__check-settings--active\': isTagGroupEditing($index)}" ng-click="openTagGroupEditor($index, tagGroup.name, $event)"> <i class="material-icons"> settings </i> </span> <crm-tag-group ng-if="isTagGroupEditing($index)"></crm-tag-group> </div> <span class="crm-sidebar__add-button" ng-click="openTagGroupEditor(-1, tagGroup.name, $event)"> <i class="material-icons"> add </i> <b>Add more</b> <crm-tag-group ng-if="isTagGroupEditing(-1)"></crm-tag-group> </span> </div> </div> \x3c!-- TAGS --\x3e <div class="crm-sidebar__block" ng-init="tagsCollapsed = true" ng-class="{\'sidebar__block--collapsed\': tagsCollapsed}"> <h3 class="crm-sidebar__block-title" ng-click="tagsCollapsed = !tagsCollapsed"> Tags <span class="crm-sidebar__block-title__icon"> <i class="material-icons"> keyboard_arrow_up </i> </span> </h3> <div class="crm-sidebar__block-body"> <div class="crm-sidebar__check" ng-click="setFilter(\'tags\', tag.tag_id, true)" ng-repeat="tag in filterData.tags | orderBy:\'-count\'"> <input type="checkbox" ng-checked="filterParams.tags.includes(tag.tag_id)"> <label> <span class="crm-sidebar__check-icon"> <i class="material-icons"> check </i> </span> <p class="crm-sidebar__check-name">{{tag.name}}</p> <span class="crm-sidebar__check-count"> {{tag.count}} </span> </label> </div> <span class="crm-sidebar__add-button" ng-click="openTagEditor($event)"> <i class="material-icons"> add </i> <b>Add more</b> <crm-tag ng-if="isTagEditing"></crm-tag> </span> </div> </div> \x3c!-- ROLE --\x3e <div class="crm-sidebar__block" ng-init="roleCollapsed = true" ng-class="{\'sidebar__block--collapsed\': roleCollapsed}"> <h3 class="crm-sidebar__block-title" ng-click="roleCollapsed = !roleCollapsed"> Role <span class="crm-sidebar__block-title__icon"> <i class="material-icons"> keyboard_arrow_up </i> </span> </h3> <div class="crm-sidebar__block-body"> <div class="crm-sidebar__check" ng-click="setFilter(\'role\', role.name, false)" ng-repeat="role in filterData.roles | orderBy:\'-count\'">
38 <input type="checkbox" ng-checked="filterParams.role === role.name"> <label> <span class="crm-sidebar__check-icon"> <i class="material-icons"> check </i> </span> <p class="crm-sidebar__check-name">{{role.name}}</p> <span class="crm-sidebar__check-count"> {{role.count}} </span> </label> </div> </div> </div> \x3c!-- PROVIDER --\x3e <div class="crm-sidebar__block" ng-init="providerCollapsed = true" ng-class="{\'sidebar__block--collapsed\': providerCollapsed}"> <h3 class="crm-sidebar__block-title" ng-click="providerCollapsed = !providerCollapsed"> Provider <span class="crm-sidebar__block-title__icon"> <i class="material-icons"> keyboard_arrow_up </i> </span> </h3> <div class="crm-sidebar__block-body"> <div class="crm-sidebar__check" ng-click="setFilter(\'providers\', provider.name, false)" ng-repeat="provider in filterData.providers | orderBy:\'-count\'"> <input type="checkbox" ng-checked="filterParams.providers === provider.name"> <label> <span class="crm-sidebar__check-icon"> <i class="material-icons"> check </i> </span> <p class="crm-sidebar__check-name">{{provider.name}}</p> <span class="crm-sidebar__check-count"> {{provider.count}} </span> </label> </div> </div> </div> \x3c!-- SIDEBAR CLEAR BUTTON --\x3e <span class="crm-sidebar__clear-button" ng-click="resetFilter()" ng-show="!isFilterEmpty()"> Clear filters </span> </div> </custom-scroller> </div> \x3c!-- CRM BODY --\x3e <div class="crm-body"> <div class="crm-body__header"></div> <div class="crm-table-controls crm-table-controls--inline"> \x3c!-- TABLE SEARCH --\x3e <div class="crm-table-search"> <span ng-click="tableFilterActive = !tableFilterActive"> <i class="material-icons"> search </i> Search </span> </div> <h3 class="crm-title"> Audience <span class="crm-title__counter"> {{totalPersons}} person<b ng-if="totalPersons > 1">s</b> </span> </h3> <ul ng-if="totalPersons > pagination.options.limit" uib-pagination total-items="totalPersons" ng-model="pagination.currentPage" max-size="5" items-per-page="pagination.options.limit" class="crm-pagination" boundary-link-numbers="true" ng-change="pageChanged()" direction-links="false" rotate="false" ng-click="$event.stopPropagation()"></ul> </div> <div class="crm-table-wrapper"> \x3c!-- TABLE ACTIONS --\x3e <div class="crm-table-actions" id="tableControls" ng-class="{\'crm-table-actions--active\': selectedPersons.length}"> <span class="crm-table-actions__delete" ng-click="deletePersons()" title="Delete persons"> <i class="material-icons"> delete </i> </span> \x3c!-- <span\n class="crm-table-actions__merge"\n ng-if="selectedPersons.length > 1"\n ng-click="mergePersons()"\n title="Merge persons"\n >\n <i class="material-icons"> merge_type </i>\n </span> --\x3e <span class="crm-table-actions__tags" ng-click="editTags()"> <i title="Edit tags" class="material-icons"> loyalty </i> <crm-tags-editor ng-if="isTagsEditing"></crm-tags-editor> </span> </div> \x3c!-- AUDIANCE TABLE --\x3e <table class="crm-table" ng-mousemove="setControlsPosition($event)"> <thead> <tr class="crm-table__header"> <th class="crm-table__checkbox" ng-click="selectAllPersons()" style="width: 42px"> <input type="checkbox" ng-checked="isAllPersonsSelected()"> <label> <i class="material-icons"> check </i> </label> </th> <th style="width: 38px"> \x3c!-- image --\x3e </th> <th> <span class="crm-table_col-name"> Name </span> </th> <th> <span class="crm-table_col-name"> Tags </span> </th> <th style="width: 50px; text-align: center"> <span class="crm-table_col-name"> # </span> </th> <th> <span class="crm-table_col-name"> Last Message </span> </th> <th> <span class="crm-table_col-name"> Date </span> </th> <th ng-if="sentimentEnabled" style="text-align: center"> <span class="crm-table_col-name"> Sentiment </span> </th> <th ng-if="happy2BuyEnabled" style="text-align: center"> <span class="crm-table_col-name"> Happy2Buy </span> </th> </tr> <tr class="crm-table__header crm-table__header-search" ng-if="tableFilterActive"> <th style="width: 42px"></th> <th style="width: 38px"> \x3c!-- image --\x3e </th> <th> <input type="text" ng-model-options="{ debounce: 1000 }" ng-model="filterParams.name" placeholder="Name..."> </th> <th></th> <th style="width: 50px"> <input type="text" ng-model-options="{ debounce: 1000 }" ng-model="filterParams[\'statistics.send\'].value" placeholder="#"> </th> <th> <input type="text" ng-model-options="{ debounce: 1000 }" ng-model="filterParams[\'statistics.last_message.text\'].value[0]" placeholder="Message..."> </th> <th></th> <th ng-if="sentimentEnabled"></th> <th ng-if="happy2BuyEnabled"></th> </tr> </thead> <tbody> <tr ng-repeat="person in persons" ng-class="{\'selected-row\': person.selected || slider.person.id === person.id, \'crm-table--person_negative\': person.scores.negative}" ng-click="getPerson(person.id, $index)"> <td class="crm-table__checkbox" ng-click="selectPerson($event, person)"> <input type="checkbox" ng-checked="isPersonSelected(person)"> <label> <i class="material-icons"> check </i> </label> </td> <td class="crm-table__avatar"> <img src="{{getPersonAvatar(person)}}" alt=""> </td> <td> <span class="crm-table--ellipsis"> {{person.profile.name}} </span> </td> <td class="crm-table__tags"> <span class="crm-table__tag" ng-repeat="tag in person.tags"> <i class="crm-table__tag-color" ng-style="{ background: tag.color }"></i> <span class="crm-table__tag-name"> {{tag.name}} </span> </span> </td> <td style="text-align: center"> <span> {{person.statistics.send}} </span> </td> <td> <span class="crm-table--ellipsis"> {{person.statistics.last_message.text}} </span> </td> <td> <span> {{person.statistics.last_sent | date:\'dd/MM, HH:mm:ss\'}}
38 </span> </td> <td ng-if="sentimentEnabled" class="crm-table__rating-cell"> <span class="crm-table--ellipsis crm-table__rating" ng-class="getScoreClass(person.scores.sentiment)"> {{person.scores.sentiment | number:0}} </span> </td> <td ng-if="happy2BuyEnabled" class="crm-table__rating-cell"> <span class="crm-table--ellipsis crm-table__rating" ng-class="getScoreClass(person.scores.happy_2_buy)"> {{person.scores.happy_2_buy | number:0}} </span> </td> </tr> </tbody> <tfoot> <tr ng-if="inProgress && !persons.length"> <td colspan="{{numberOfColumns}}">Loading...</td> </tr> <tr ng-if="!inProgress && !persons.length"> <td colspan="{{numberOfColumns}}">No clients found...</td> </tr> </tfoot> </table> </div> <div class="crm-body__footer crm-body__footer--inline"> \x3c!-- PAGINATION --\x3e <span class="pagination-settings"> show <b ng-click="setPaginationLimit(50)" ng-class="{\'active\' : pagination.options.limit === 50}">50</b> / <b ng-click="setPaginationLimit(100)" ng-class="{\'active\' : pagination.options.limit === 100}">100</b> / <b ng-click="setPaginationLimit(200)" ng-class="{\'active\' : pagination.options.limit === 200}">200</b> by page </span> <ul ng-if="totalPersons > pagination.options.limit" uib-pagination total-items="totalPersons" ng-model="pagination.currentPage" max-size="5" items-per-page="pagination.options.limit" class="crm-pagination" boundary-link-numbers="true" ng-change="pageChanged()" direction-links="false" rotate="false" ng-click="$event.stopPropagation()"></ul> </div> <div class="new-messages-notification"> <div class="new-messages-notification__button" ng-if="activity.isDetected" ng-click="goToFirstPage()"> <div class="notification-button__body"> <h4>There are new messages</h4> <p>Show now...</p> </div> <i class="material-icons"> send </i> </div> </div> </div> </div> <div id="crm-slider" class="crm-slider__animate" ng-if="slider.isOpen"> <div class="crm-slider__header"> <div class="crm-slider__header-controls"> <i class="material-icons header-control__prev" ng-click="prevPerson()"> keyboard_arrow_left </i> <i class="material-icons header-control__delete" ng-click="deletePerson(slider.person.id)"> delete </i> <i class="material-icons header-control__next" ng-click="nextPerson()"> keyboard_arrow_right </i> </div> <div class="crm-slider__header-tabs"> <span class="header-tab" ng-class="{\'header-tab--active\': slider.activeTab === 0}" ng-click="slider.activeTab = 0"> Chat </span> <span class="header-tab" ng-class="{\'header-tab--active\': slider.activeTab === 1}" ng-click="slider.activeTab = 1"> Info </span> </div> <div class="crm-slider__header-controls"> <i class="material-icons header-control__close" ng-click="closeSlider()"> close </i> </div> </div> <div class="crm-slider__body crm-slider__body--chat" ng-if="slider.activeTab === 0"> <crm-chat-p person="slider.person"></crm-chat-p> </div> <div class="crm-slider__body crm-slider__profile" ng-if="slider.activeTab === 1"> <img src="{{getPersonAvatar(slider.person)}}" alt="" class="crm-slider__profile-avatar"> <h3 class="crm-slider__profile-name">{{slider.person.profile.name}}</h3> <div class="crm-slider__profile-info"> <div class="profile-info__lead" ng-if="slider.person.lead">Lead</div> <div class="profile-info__finished" ng-if="slider.person.lead.closed"> Finished </div> <div class="profile-info__not-finished" ng-if="slider.person.lead && !slider.person.lead.closed"> Not finished </div> </div> <h4 class="crm-slider__profile-title">Tags</h4> \x3c!-- PERSON TAGS --\x3e <person-tags person="slider.person" tags="filterData.tags"></person-tags> \x3c!-- --\x3e <h4 class="crm-slider__profile-title">Email</h4> <div class="crm-slider__profile-input"> <input type="text" ng-model-options="{ debounce: 1000 }" ng-change="updatePersonInfo();" placeholder="[email protected]" ng-model="slider.person.profile.email"> </div> <h4 class="crm-slider__profile-title">Phone</h4> <div class="crm-slider__profile-input"> <input type="text" ng-model-options="{ debounce: 1000 }" ng-change="updatePersonInfo();" placeholder="+1 234 555 6677" ng-model="slider.person.profile.phone"> </div> <h4 class="crm-slider__profile-title">Address</h4> <div class="crm-slider__profile-input"> <input type="text" ng-model-options="{ debounce: 1000 }" ng-change="updatePersonInfo();" placeholder="Shipping address" ng-model="slider.person.profile.address"> </div> <h4 class="crm-slider__profile-title">Linked accounts</h4> <div class="crm-slider__profile-accounts"> <div class="crm-slider__profile-account" ng-repeat="account in slider.person.clients"> <div class="crm-slider__profile-account-info"> <p>{{account.provider}}</p> <img ng-src="{{getChannelIcon(account.provider)}}" alt="{{account.provider}}"> </div>
38 <span class="crm-slider__profile-account-control crm-slider__profile-account-control--disabled"> <i class="material-icons"> delete </i> </span> </div> </div> </div> </div>'),a.put("views/crm-tag-group.html",'<div class="tag-group" ng-click="closeAllOpenPopups($event)"> <p class="tag-group__header" ng-if="tagGroupEditingIndex >= 0"> Edit Group <i class="material-icons" ng-click="removeTagGroup()"> delete </i> </p> <p class="tag-group__header" ng-if="tagGroupEditingIndex < 0"> New Group </p> <div class="tag-group__section"> <label for="tagGroupEditing.name" class="tag-group__section-title"> Title </label> <input type="text" class="tag-group__input" id="tagGroupEditing.name" ng-model="tagGroupEditing.name"> </div> <div class="tag-group__section"> <p class="tag-group__section-title tag-group__section-title--green"> Include tags </p> <div class="tag-group__tags-list"> <span class="tag-group__tag" ng-repeat="tag in tagGroupEditing.filter.match" ng-click="editTagInTagGroup(tag, $event)"> <i class="tag-group__tag-color" ng-style="{\'background-color\':getTagColor(tag)}"></i> {{getTagName(tag)}} <div class="tag-group__tag-editor" ng-if="isTagEditing(tag)"> <ul class="tag-group__tag-colors"> <li ng-repeat="color in tagColors" ng-style="{\'background-color\':color}" ng-click="setTagColor(tag, color)"> <span class="tag-color__check" ng-if="isColorSelected(tag, color)"> <i class="material-icons" ng-style="{\'color\':color}"> check </i> </span> </li> </ul> <span class="tag-group__tag-remove-button"> <i class="material-icons" ng-click="removeTagFromGroup(tag, true, $event)"> delete </i> </span> </div> </span> <span ng-click="openMatchList($event)" ng-if="filterData.tags.length !== (tagGroupEditing.filter.match.length + tagGroupEditing.filter.not_match.length)" class="tag-group__tag tag-group__tag-add"> <i class="material-icons"> add </i> Select tag <ul class="tag-group__select-list" ng-if="matchListOpened"> <div class="tag-group__select-list--inner"> <li class="tag-group__select-list-item" ng-repeat="tag in filterData.tags" ng-if="isTagAvaliable(tag.tag_id)" ng-click="addTagToMatchList(tag.tag_id, $event)"> <i class="tag-group__tag-color" ng-style="{\'background-color\':getTagColor(tag.tag_id)}"></i> {{tag.name}} </li> </div> </ul> </span> </div> </div> <div class="tag-group__section"> <p class="tag-group__section-title tag-group__section-title--red"> Exclude tags </p> <div class="tag-group__tags-list"> <span class="tag-group__tag" ng-repeat="tag in tagGroupEditing.filter.not_match" ng-click="editTagInTagGroup(tag, $event)"> <i class="tag-group__tag-color" ng-style="{\'background-color\':getTagColor(tag)}"></i> {{getTagName(tag)}} <div class="tag-group__tag-editor" ng-if="isTagEditing(tag)"> <ul class="tag-group__tag-colors"> <li ng-repeat="color in tagColors" ng-style="{\'background-color\':color}" ng-click="setTagColor(tag, color)"> <span class="tag-color__check" ng-if="isColorSelected(tag, color)"> <i class="material-icons" ng-style="{\'color\':color}"> check </i> </span> </li> </ul> <span class="tag-group__tag-remove-button"> <i class="material-icons" ng-click="removeTagFromGroup(tag, false, $event)"> delete </i> </span> </div> </span> <span ng-click="openNotMatchList($event)" ng-if="filterData.tags.length !== (tagGroupEditing.filter.match.length + tagGroupEditing.filter.not_match.length)" class="tag-group__tag tag-group__tag-add"> <i class="material-icons"> add </i> Select tag <ul class="tag-group__select-list" ng-if="notMatchListOpened"> <div class="tag-group__select-list--inner"> <li class="tag-group__select-list-item" ng-repeat="tag in filterData.tags" ng-if="isTagAvaliable(tag.tag_id)" ng-click="addTagToNotMatchList(tag.tag_id, $event)"> <i class="tag-group__tag-color" ng-style="{\'background-color\':getTagColor(tag.tag_id)}"></i> {{tag.name}} </li> </div> </ul> </span> </div> </div> </div>'),a.put("views/crm-tag.html",'<div class="tag-group"> <p class="tag-group__header"> New Tag </p> <div class="tag-group__section" style="min-height: 0"> <input type="text" class="tag-group__input" id="tagEditing.name" ng-model="tagEditing.name" placeholder="Title..."> </div> </div>'),a.put("views/crm-tags-editor.html",'<div class="tag-group tag-editor" ng-click="closeAllOpenPopups($event)"> <p class="tag-group__header">Edit Tags</p> <div class="tag-group__section"> <p class="tag-group__section-title tag-group__section-title--green"> Add tag </p> <div class="tag-group__tags-list"> <span class="tag-group__tag" ng-repeat="tag in tags.add" ng-click="editTagInTagGroup(tag, $event)"> <i class="tag-group__tag-color" ng-style="{\'background-color\':getTagColor(tag)}"></i> {{getTagName(tag)}} <div class="tag-group__tag-editor" ng-if="isTagEditing(tag)"> <ul class="tag-group__tag-colors"> <li ng-repeat="color in tagColors" ng-style="{\'background-color\':color}" ng-click="setTagColor(tag, color)"> <span class="tag-color__check" ng-if="isColorSelected(tag, color)"> <i class="material-icons" ng-style="{\'color\':color}"> check </i> </span> </li> </ul> <span class="tag-group__tag-remove-button"> <i class="material-icons" ng-click="removeTagFromGroup(tag, true, $event)"> delete </i> </span> </div> </span> <span ng-click="openAddList($event)" ng-if="filterData.tags.length !== (tagGroupEditing.filter.match.length + tagGroupEditing.filter.not_match.length)" class="tag-group__tag tag-group__tag-add"> <i class="material-icons"> add </i> Select tag <ul class="tag-group__select-list" ng-if="addListOpened"> <div class="tag-group__select-list--inner"> <li class="tag-group__select-list-item" ng-repeat="tag in filterData.tags" ng-if="isTagAvaliable(tag.tag_id)" ng-click="addTagToAddList(tag.tag_id, $event)"> <i class="tag-group__tag-color" ng-style="{\'background-color\':getTagColor(tag.tag_id)}"></i> {{tag.name}} </li> </div> </ul> </span> </div> </div> <div class="tag-group__section"> <p class="tag-group__section-title tag-group__section-title--red"> Remove tag </p> <div class="tag-group__tags-list"> <span class="tag-group__tag" ng-repeat="tag in tags.remove" ng-click="editTagInTagGroup(tag, $event)"> <i class="tag-group__tag-color" ng-style="{\'background-color\':getTagColor(tag)}"></i> {{getTagName(tag)}} <div class="tag-group__tag-editor" ng-if="isTagEditing(tag)"> <ul class="tag-group__tag-colors"> <li ng-repeat="color in tagColors" ng-style="{\'background-color\':color}" ng-click="setTagColor(tag, color)"> <span class="tag-color__check" ng-if="isColorSelected(tag, color)"> <i class="material-icons" ng-style="{\'color\':color}"> check </i> </span> </li> </ul> <span class="tag-group__tag-remove-button"> <i class="material-icons" ng-click="removeTagFromGroup(tag, false, $event)"> delete </i> </span> </div> </span> <span ng-click="openRemoveList($event)" ng-if="filterData.tags.length !== (tagGroupEditing.filter.match.length + tagGroupEditing.filter.not_match.length)" class="tag-group__tag tag-group__tag-add"> <i class="material-icons"> add </i> Select tag <ul class="tag-group__select-list" ng-if="removeListOpened"> <div class="tag-group__select-list--inner"> <li class="tag-group__select-list-item" ng-repeat="tag in filterData.tags" ng-if="isTagAvaliable(tag.tag_id)" ng-click="addTagToRemoveList(tag.tag_id, $event)"> <i class="tag-group__tag-color" ng-style="{\'background-color\':getTagColor(tag.tag_id)}"></i> {{tag.name}} </li> </div> </ul> </span> </div> </div> </div>'), 39a.put("views/crm.html",'<div id="isc"> <div class="container"> <div class="nav-sidebar nav-sidebar--crm"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <span class="nav-sidebar-clear round-btn zoom-in" ng-click="resetFilter()" ng-show="!isFilterEmpty()" ng-class="{\'zoom-in-active\': !isFilterEmpty()}"> <i class="material-icons">close</i> </span> <custom-scroller is-shadow="true" paddings="22px 10px 0px 51px"> <div class="nav-sidebar-content-ofset">
39 \x3c!-- New --\x3e \x3c!-- Filters --\x3e <h2> Filters </h2> <div class="mb-title" style="margin-top: -20px; margin-bottom: 70px"> <custom-input placeholder="Messages per dialog" ng-model-options="{debounce:500}" ng-model="filterParams[\'statistics.send\']" title="Messages per dialog" is-back-placeholder="true"> </custom-input> </div> \x3c!-- TEST --\x3e \x3c!-- \t\t\t\t\t\t<div ng-click="addFilter()">\n\t\t\t\t\t\t\t+ Add\n\t\t\t\t\t\t</div> --\x3e \x3c!-- New --\x3e \x3c!-- Dates signed --\x3e <h2 class="skills-form_more-button {{ statusVisible.messaging_period ? \'filter_more-link\' : \'filter_less-link\' }}" ng-click="changeVisible(\'messaging_period\')"> Messaging period </h2> <div ng-show="statusVisible.messaging_period" class="mb-title" style="margin-top: -20px; margin-bottom: 70px"> <custom-date-range range-option="datePicker.options" date-picker="datePicker" ng-model="datePicker.date"> </custom-date-range> </div> <h2 class="skills-form_more-button {{ statusVisible.tags_filter ? \'filter_more-link\' : \'filter_less-link\' }}" ng-click="changeVisible(\'tags_filter\')"> Tags filter </h2> <div class="mb-title" ng-show="statusVisible.tags_filter"> <div class="card-checker" ng-click="setTagGroupFilter(tagGroup.name)" ng-repeat="tagGroup in filterData.tag_filters | orderBy:\'-count\'"> <input type="checkbox" ng-checked="filterParams.tag_filter === tagGroup.name"> <label> <span class="checker-ico"> </span> <span>{{tagGroup.name}}</span> <span class="item-counter">{{tagGroup.count}}</span> </label> <span class="tag__settings" ng-click="openTagGroupEditor($index, tagGroup.name, $event)"> <i class="material-icons">settings</i> </span> <crm-tag-group ng-if="isTagGroupEditing($index)"></crm-tag-group> </div> <p class="add-tag-group-button" ng-click="openTagGroupEditor(-1, tagGroup.name, $event)"> <i class="material-icons">add</i> Add more <crm-tag-group ng-if="isTagGroupEditing(-1)"></crm-tag-group> </p> </div> \x3c!-- Old --\x3e \x3c!-- Tags --\x3e <h2 class="skills-form_more-button {{ statusVisible.tags ? \'filter_more-link\' : \'filter_less-link\' }}" ng-click="changeVisible(\'tags\')" ng-if="filterData.tags.length"> {{main.translations.tags}} </h2> <div ng-if="filterData.tags.length" ng-show="statusVisible.tags" class="mb-title" ng-class="{\'no-data\' : filterData.tags.length == 0}"> <div class="card-checker" ng-repeat="tag in filterData.tags | orderBy:\'-count\'" ng-click="setTagsFilter(tag.tag_id)"> <input type="checkbox" ng-checked="filterParams.tags.includes(tag.tag_id)"> <label> <span class="checker-ico"> </span> <span>{{tag.name}}</span> <span class="item-counter">{{tag.count}}</span> </label> \x3c!-- <span\n class="tag__settings"\n ng-click="openTagSettings(tag, $event)"\n >\n <i class="material-icons">settings</i>\n </span> --\x3e </div> </div> \x3c!-- Old --\x3e \x3c!-- Dates signed --\x3e <h2 class="skills-form_more-button {{ statusVisible.role ? \'filter_more-link\' : \'filter_less-link\' }}" ng-click="changeVisible(\'role\')" ng-if="filterData.roles.length"> {{main.translations.role}} </h2> <div ng-if="filterData.roles.length" ng-show="statusVisible.role" class="mb-title" ng-class="{\'no-data\' : filterData.roles.length == 0}"> <div class="card-checker" ng-repeat="role in filterData.roles | orderBy:\'-count\'" ng-click="setFilter(\'role\', role.name)"> <input type="checkbox" ng-checked="role.name === filterParams.role"> <label> <span class="checker-ico"> </span> <span>{{role.name}}</span> <span class="item-counter">{{role.count}}</span> </label> </div> </div> <h2 class="skills-form_more-button {{ statusVisible.sentiment ? \'filter_more-link\' : \'filter_less-link\' }}" ng-click="changeVisible(\'sentiment\')"> Sentiment </h2> <div ng-show="statusVisible.sentiment" class="mb-title" style="margin-top: -20px; margin-bottom: 70px"> <div class="card-checker" style="margin-top: 20px"> <div> <div class="sentiment-label">From</div> <input class="sentiment-input" type="number" ng-model="sentimentPostFilter.sentiment.value[0]" onkeydown="return true" style="margin-right: 24px"> </div> <div> <div class="sentiment-label">To</div> <input class="sentiment-input" type="number" ng-model="sentimentPostFilter.sentiment.value[1]" onkeydown="return true"> </div> </div> \x3c!--\n\t\t\t\t\t\t\t<div class="card-checker">\n\t\t\t\t\t\t\t\t<custom-input type="number" placeholder="From"\n\t\t\t\t\t\t\t\t\tng-model="sentimentPostFilter.sentiment.value[0]" title="From"\n\t\t\t\t\t\t\t\t\tis-back-placeholder="true">\n\t\t\t\t\t\t\t\t</custom-input>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<div class="card-checker">\n\t\t\t\t\t\t\t\t<custom-input type="number" placeholder="To"\n\t\t\t\t\t\t\t\t\tng-model="sentimentPostFilter.sentiment.value[1]" title="To"\n\t\t\t\t\t\t\t\t\tis-back-placeholder="true">\n\t\t\t\t\t\t\t\t</custom-input>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t--\x3e </div> \x3c!-- Old --\x3e \x3c!-- Providers --\x3e <h2 class="skills-form_more-button {{ statusVisible.provider ? \'filter_more-link\' : \'filter_less-link\' }}" ng-click="changeVisible(\'provider\')" ng-if="filterData.providers.length"> {{main.translations.provider}} </h2> <div ng-if="filterData.providers.length" ng-show="statusVisible.provider" class="mb-title" ng-class="{\'no-data\' : filterData.providers.length == 0}"> <div class="card-checker" ng-repeat="provider in filterData.providers | orderBy:\'-count\'" ng-click="setFilter(\'providers\', provider.name)"> <input type="checkbox" ng-checked="provider.name === filterParams.providers"> <label> <span class="checker-ico"> </span> <span>{{provider.name}}</span> <span class="item-counter">{{provider.count}}</span> </label> </div> </div>
39 \x3c!-- Old --\x3e \x3c!-- Genders --\x3e <h2 class="skills-form_more-button {{ statusVisible.gender ? \'filter_more-link\' : \'filter_less-link\' }}" ng-click="changeVisible(\'gender\')" ng-if="filterData.gender.length"> {{main.translations.gender}} </h2> <div ng-if="filterData.gender.length" ng-show="statusVisible.gender" class="mb-title" ng-class="{\'no-data\' : filterData.genders.length == 0}"> <div class="card-checker" ng-repeat="gender in filterData.gender | orderBy:\'-count\'" ng-click="setFilter(\'gender\', gender.name)"> <input type="checkbox" ng-checked="gender.name === filterParams.gender"> <label> <span class="checker-ico"> </span> <span>{{gender.name}}</span> <span class="item-counter">{{gender.count}}</span> </label> </div> </div> \x3c!-- New --\x3e \x3c!-- Status --\x3e <h2 class="skills-form_more-button {{ statusVisible.status ? \'filter_more-link\' : \'filter_less-link\' }}" ng-click="changeVisible(\'status\')" ng-if="filterData.status.length"> Status </h2> <div ng-if="filterData.status.length" ng-show="statusVisible.status" class="mb-title" ng-class="{\'no-data\' : filterData.status.length == 0}"> <div class="card-checker" ng-repeat="status in filterData.status | orderBy:\'-count\'" ng-click="setFilter(\'status\', status.name)"> <input type="checkbox" ng-checked="status.name === filterParams.status"> <label> <span class="checker-ico"> </span> <span>{{status.name}}</span> <span class="item-counter">{{status.count}}</span> </label> </div> </div> <h2 class="skills-form_more-button {{ statusVisible.order_status ? \'filter_more-link\' : \'filter_less-link\' }}" ng-click="changeVisible(\'order_status\')" ng-if="filterData.order_statuses.length"> Order Status </h2> <div ng-if="filterData.order_statuses.length" ng-show="statusVisible.order_status" class="mb-title" ng-class="{\'no-data\' : filterData.order_statuses.length == 0}"> <div class="card-checker" ng-repeat="status in filterData.order_statuses | orderBy:\'-count\'" ng-click="setFilter(\'order_statuses\', status.name)"> <input type="checkbox" ng-checked="status.name === filterParams.order_statuses"> <label> <span class="checker-ico"> </span> <span>{{status.name}}</span> <span class="item-counter">{{status.count}}</span> </label> </div> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <h2 class="mb60 statistic-heder crm-header"> {{main.translations.audience}} <span>{{totalClients}} {{main.translations.clients}}</span> <span class="pagination-settings"> show <b ng-click="setPaginationLimit(50)" ng-class="{\'active\' : pagination.options.limit === 50}">50</b> / <b ng-click="setPaginationLimit(100)" ng-class="{\'active\' : pagination.options.limit === 100}">100</b> / <b ng-click="setPaginationLimit(200)" ng-class="{\'active\' : pagination.options.limit === 200}">200</b> by page </span> </h2> \x3c!-- pagination --\x3e <ul ng-if="totalClients > pagination.options.limit" uib-pagination total-items="totalClients" ng-model="pagination.currentPage" max-size="5" items-per-page="pagination.options.limit" class="crm-pagination" boundary-link-numbers="true" ng-change="pageChanged()" direction-links="false" rotate="false" ng-click="$event.stopPropagation()"></ul> \x3c!-- notification button --\x3e <button class="brn-btn brn-primary crm-notification-button" ng-if="activity.isDetected" ng-click="goToFirstPage();$event.stopPropagation()"> New Messages </button> \x3c!-- New --\x3e \x3c!-- Table controls --\x3e \x3c!-- Must appear if any row is selected --\x3e <div class="table-actions" ng-if="selectedClients.length"> \x3c!-- \t\t\t\t<span>\n\t\t\t\t\t<i class="material-icons">contact_mail</i>\n\t\t\t\t</span> --\x3e <span data-target="#editTags" data-toggle="modal" title="Edit tags"> <i class="material-icons">loyalty</i> </span> \x3c!-- \t\t\t\t<span>\n\t\t\t\t\t<i class="material-icons">rss_feed</i>\n\t\t\t\t</span> --\x3e <span title="Delete client" ng-click="deleteClients()"> <i class="material-icons">delete</i> </span> </div> <div class="table-actions" ng-if="!selectedClients.length"> <span data-target="#editTagsList" data-toggle="modal" title="Edit tags list"> <i class="material-icons">loyalty</i> </span> </div> <div class="brn-table-wrap t-modern t-crm mb30"> <span class="round-btn" ng-click="swapFilter()" ng-class="{\'round-btn-search\' : !filters.isActive, \'round-btn-cancel\' : filters.isActive}"> <i class="material-icons" ng-if="filters.isActive">close</i> <i class="material-icons" ng-if="!filters.isActive">search</i> </span> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table audience image-table" style="width: 1074px"> <tbody> <tr class="header-image"> \x3c!-- Header checbox here --\x3e <td class="table-row--checkbox" ng-click="onTableSelectAll()" ng-class="{\'control-fixed--hidden\' : !clients.length}"> <div class="card-checker"> <input type="checkbox" ng-checked="isAllClientsSelected"> <label> <span class="checker-ico"> </span> </label> </div> </td> <td style="width: 48px"></td> <td style="width: 26%; padding-left: 2px"> {{main.translations.title_name}} </td> \x3c!--<td>--\x3e \x3c!--SMS--\x3e \x3c!--</td>--\x3e <td style="width: 26%; padding-left: 2px"> Tags </td> <td ng-repeat="attr in visibleAttributes"> {{attr.label}} </td> <td title="Number of messages"> # </td> <td> Last message </td> <td> Date </td> <td title="Sentiment"> 😊 </td> <td></td> </tr> \x3c!-- Table filters --\x3e <tr class="no-hover filters" ng-class="{\'filters-active\' : filters.isActive}"> <td style="padding: 0px"></td> <td style="padding: 0px"></td> <td style="padding: 0px 10px 0px 0px"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}"> <custom-input placeholder="Name" ng-model="filterParams.name" title="Name" is-back-placeholder="true"> </custom-input> </div> </td> \x3c!--<td style="padding: 0px;">--\x3e \x3c!--</td>--\x3e <td style="padding: 0px"></td> <td ng-repeat="attr in visibleAttributes" style="padding: 0px 10px 0px 20px"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}"> <custom-dropdown ng-if="attr.selectable && attr.type != \'mixed\'" ng-model="filterParams[attr.name]" array="attr.values" opt-description="" opt-value="" title="{{attr.label}}" is-model-init="true" placeholder="All" is-back-placeholder="true"> </custom-dropdown> <custom-dropdown ng-if="attr.selectable && attr.type == \'mixed\'" ng-model="filterParams[attr.name]" array="attr.values" opt-description="{{attr.schema.key}}" opt-value="{{attr.schema.key}}" title="{{attr.label}}" is-model-init="true" placeholder="All" is-back-placeholder="true"> </custom-dropdown> <custom-input ng-if="(attr.type==\'string\' || attr.type==\'number\') && !attr.selectable" placeholder="{{attr.label}}" ng-model="filterParams[attr.name]" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> <div class="card-checker" style="margin-top: 25px; margin-left: 7px" ng-if="attr.type==\'boolean\' && !attr.selectable"> <input type="checkbox" ng-model="filterParams[attr.name]" id="filter_checker_{{attr.name}}"> <label for="filter_checker_{{attr.name}}"> <span class="checker-ico"></span> </label> </div> <custom-date-range-single title="" ng-if="attr.type==\'date\' && !attr.selectable" ng-model="filterParams[attr.name]" timepicker="false"> </custom-date-range-single> </div> </td> <td style="padding: 0px"></td> <td style="padding: 0px"></td> <td style="padding: 0px"></td> <td style="padding: 0px"></td> <td style="padding: 0px"></td> </tr> <tr ng-repeat="(key, client) in clients" style="cursor: pointer" ng-class="{\'first-line-image\' : key == 0, \'row--active\': $index === sliderClient.client_index}" ng-click="getClientById(client, $index)">
39 \x3c!-- New --\x3e \x3c!-- Row checbox here --\x3e <td class="table-row--checkbox" ng-click="onTableSelect($event, client)"> <div class="card-checker"> <input type="checkbox" ng-checked="client.tableSelected"> <label> <span class="checker-ico"> </span> </label> </div> </td> <td style="padding-left: 30px; width: 92px"> <img src="{{client.avatar}}" alt=""> </td> <td style="padding-left: 2px"> {{client.name}} </td> \x3c!--<td>--\x3e \x3c!--<button ng-if="!client.statistics.last" class="brn-btn brn-primary"--\x3e \x3c!--ng-click=" $event.stopPropagation(); startSms(client)">START</button>--\x3e \x3c!--</td>--\x3e <td style="padding-left: 2px"> <span ng-repeat="tag in client.tags">{{tag.name}}<br></span> </td> <td ng-repeat="attr in visibleAttributes"> <span ng-if="attr.multiple"> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> <span ng-repeat="value in client.customer.profile[attr.name]"> {{value ? value : \'\'}} <br> </span> </span> <span ng-repeat="value in client.customer.profile[attr.name]" ng-if="attr.type==\'date\'" ng-bind="value | date:\'dd.MM.yyyy\'"> </span> <span ng-if="attr.type==\'mixed\'"> <span ng-repeat="value in client.customer.profile[attr.name]"> {{value[attr.schema.key]}} <br> </span> </span> <span ng-if="attr.type==\'boolean\'"> <span ng-repeat="value in client.customer.profile[attr.name]"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"> </ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"> </ng-include> </span> </span> </span> <span ng-if="!attr.multiple"> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> {{(client.customer.profile[attr.name]) ? client.customer.profile[attr.name] : \'\'}} </span> <span ng-if="attr.type==\'mixed\'"> {{client.customer.profile[attr.name][attr.schema.key]}} </span> <span ng-if="attr.type==\'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="client.customer.profile[attr.name]"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="!client.customer.profile[attr.name]"></ng-include> </span> <span ng-if="attr.type==\'date\'" ng-bind="client.customer.profile[attr.name] | date:\'dd.MM.yyyy\'"> </span> </span> </td> <td style="text-align: right">{{client.statistics.send}}</td> <td>{{client.statistics.last_message.text}}</td> <td> <span ng-if="client.statistics.last_sent" ng-bind="client.statistics.last_sent | date:\'dd/MM, HH:mm:ss\'"></span> </td> <td style="text-align: right">{{client.sentiment}}</td> <td class="td-top-align"></td> </tr> </tbody> <tfoot ng-if="!clients.length && !inProgress"> <tr> <td colspan="12">{{main.translations.noClients}}</td> </tr> </tfoot> <tfoot ng-if="inProgress"> <tr> <td colspan="12"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tfoot> </table> </custom-scroller> </div> \x3c!-- New --\x3e \x3c!-- Table controls --\x3e \x3c!-- Must appear if any row is selected --\x3e <div class="table-actions" ng-if="selectedClients.length"> \x3c!-- \t\t\t\t<span>\n\t\t\t\t\t<i class="material-icons">contact_mail</i>\n\t\t\t\t</span> --\x3e <span data-target="#editTags" data-toggle="modal" title="Edit tags"> <i class="material-icons">loyalty</i> </span> \x3c!-- \t\t\t\t<span>\n\t\t\t\t\t<i class="material-icons">rss_feed</i>\n\t\t\t\t</span> --\x3e <span title="Delete client" ng-click="deleteClients()"> <i class="material-icons">delete</i> </span> </div> <div class="table-actions" ng-if="!selectedClients.length"> <span data-target="#editTagsList" data-toggle="modal" title="Edit tags list"> <i class="material-icons">loyalty</i> </span> </div> <ul ng-if="totalClients > pagination.options.limit" uib-pagination total-items="totalClients" ng-model="pagination.currentPage" max-size="5" items-per-page="pagination.options.limit" class="crm-pagination" boundary-link-numbers="true" ng-change="pageChanged()" direction-links="false" rotate="false" ng-click="$event.stopPropagation()"></ul> </div> </div> </div> \x3c!-- TAGS MODAL --\x3e <div id="editTagsAuto" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="tag-modal"> <div class="tag-modal__body"> <h2 class="tag-modal__title"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Apply Automatically if </h2> <div class="tag-modal__targets"> <div class="tag-modal__target"></div> <div class="tag-modal__target-add-button"> <span> <i class="material-icons">add</i> Add more </span> </div> </div> </div> <div class="tag-modal__footer"> <custom-dropdown ng-model="tagOption" ng-init="{name:main.translations.newTag,value:\'new\'}" array="[{name:main.translations.newTag,value:\'new\'},{name:main.translations.existingTags,value:\'old\'}]" opt-value="value" opt-description="name" title="{{main.translations.tag}} {{main.translations.type}}" placeholder="" is-back-placeholder="false"> </custom-dropdown> <custom-input placeholder="{{main.translations.catalog_textPlaceholder}}" ng-model="audience.tag" title="{{main.translations.tag}} {{main.translations.title_name}}" required is-back-placeholder="true"> </custom-input>
39 <div class="tag-modal__footer-controls"> <button type="button" class="brn-btn brn-primary"> Save </button> <button type="button" class="brn-btn brn-delete-transparent"> Delete </button> </div> </div> </div> </div> </div> </div> </div> \x3c!-- TAGS MODAL OLD --\x3e <div id="editTags" class="modal fade" role="dialog"> <div class="modal-dialog"> <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> {{main.translations.editTags}} </div> <div class="mb-title"> <custom-dropdown ng-model="tagOption" ng-init="{name:main.translations.newTag,value:\'new\'}" array="[{name:main.translations.newTag,value:\'new\'},{name:main.translations.existingTags,value:\'old\'},{name:\'Delete\',value:\'delete\'}]" opt-value="value" opt-description="name" title="{{main.translations.tag}} {{main.translations.type}}" placeholder="" is-back-placeholder="false"> </custom-dropdown> <custom-input ng-if="tagOption==\'new\'" placeholder="{{main.translations.catalog_textPlaceholder}}" ng-model="audience.tag" title="{{main.translations.tag}} {{main.translations.title_name}}" required is-back-placeholder="true"> </custom-input> <custom-dropdown ng-if="tagOption==\'old\'" ng-model="audience.tag" array="tags" opt-description="name" opt-value="name" title="{{main.translations.tag}} {{main.translations.title_name}}" is-back-placeholder="true" placeholder="Choose tag"> </custom-dropdown> <custom-dropdown ng-if="tagOption==\'delete\'" ng-model="audience.tag" array="tags" opt-description="name" opt-value="tag_id" title="{{main.translations.tag}} {{main.translations.title_name}}" is-back-placeholder="true" placeholder="Choose tag"> </custom-dropdown> <button type="button" class="brn-btn brn-primary" ng-click="setTag()"> {{tagOption != \'delete\' ? main.translations.addTag : \'Remove\'}} </button> </div> </div> \x3c!--<div class="tags-container">--\x3e \x3c!--<span class="title">Applied {{main.translations.tags}}</span>--\x3e \x3c!--<div ng-repeat="tag in selectedClientsTags">--\x3e \x3c!--<span>{{tag.name}}</span>--\x3e \x3c!--<i class="material-icons close-icon" ng-click="removeTag(tag)">--\x3e \x3c!--close--\x3e \x3c!--</i>--\x3e \x3c!--</div>--\x3e \x3c!--</div>--\x3e </div> </div> </div> </div> </div> \x3c!-- TAGS MODAL OLD --\x3e <div id="editTagsList" class="modal fade" role="dialog"> <div class="modal-dialog"> <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Edit tags list </div> <div class="mb-title"> <custom-input placeholder="{{main.translations.catalog_textPlaceholder}}" ng-model="newTag" title="{{main.translations.tag}} {{main.translations.title_name}}" required is-back-placeholder="true"> </custom-input> <button type="button" class="brn-btn brn-primary" ng-click="createTag()"> {{main.translations.addTag}} </button> <div class="mt25"> <p ng-repeat="tag in tags"> {{tag.name}} <i class="material-icons" style="float: right;\n font-size: 14px;\n color: #ff5555;\n cursor: pointer" ng-click="deleteTag(tag)"> close </i> </p> </div> </div> </div> </div> </div> </div> </div> </div> \x3c!-- New --\x3e \x3c!-- Slide-menu for user details --\x3e <slide-menu visibility="isSliderOpen" class="slide-menu--user slide-menu--crm" align="right"> <div class="crm-slide"> \x3c!-- Slider controls --\x3e <div class="crm-slide__controls"> <div class="crm-slide__controls--nav"> <span class="crm-slide__control" ng-click="prevClient()"> <i class="material-icons"> keyboard_arrow_left </i> </span> <span class="crm-slide__control--del"> <i class="material-icons"> delete </i> </span> <span class="crm-slide__control" ng-click="nextClient()"> <i class="material-icons"> keyboard_arrow_right </i> </span> </div> <div class="crm-slide__controls--close"> <span class="crm-slide__close-button" ng-click="closeSlider($event)"> <i class="material-icons"> close </i> close </span> </div> </div> \x3c!-- Slider user info --\x3e <div class="crm-slide__header"> <img src="{{sliderClient.avatar}}" alt="--" class="crm-slide__avatar"> <h3 class="crm-slide__username"> {{sliderClient.name}} </h3> </div> \x3c!-- Slider tabs --\x3e <div class="crm-slide__tabs"> <span class="crm-slide__tab" ng-click="switchSliderTab(\'lead\')" ng-class="{\'crm-slide__tab--active\':\n\t\t\tcurrentSliderTab===\'lead\'}" ng-if="sliderClient.lead.data.length"> Lead data </span> <span class="crm-slide__tab" ng-click="switchSliderTab(\'orders\')" ng-class="{\'crm-slide__tab--active\':\n\t\t\t\t\t\tcurrentSliderTab===\'orders\'}" ng-if="customerOrders.length && sliderClient.customer.customer_id"> Orders </span> <span class="crm-slide__tab" ng-click="switchSliderTab(\'favorites\')" ng-class="{\'crm-slide__tab--active\':\n\t\t\t\t\t\tcurrentSliderTab===\'favorites\'}" ng-if="customerFavorites.length && sliderClient.customer.customer_id"> Favorites </span> <span class="crm-slide__tab" ng-click="switchSliderTab(\'viewed\')" ng-class="{\'crm-slide__tab--active\':\n\t\t\t\t\t\tcurrentSliderTab===\'viewed\'}" ng-if="customerViewed.length && sliderClient.customer.customer_id"> Viewed </span> <span class="crm-slide__tab" ng-click="switchSliderTab(\'messages\')" ng-class="{\'crm-slide__tab--active\':\n\t\t\t\t\t\tcurrentSliderTab===\'messages\'}"> Messages </span> <span class="crm-slide__tab" ng-click="switchSliderTab(\'contacts\')" ng-class="{\'crm-slide__tab--active\':\n\t\t\t\t\t\tcurrentSliderTab===\'contacts\'}"> Contacts </span> </div> \x3c!-- Contacts --\x3e <div class="crm-slide__contacts-wrapper" ng-if="currentSliderTab===\'contacts\'"> <div class="crm-slide__contacts-col"> \x3c!-- \t\t\t\t<custom-dropdown\n\t\t\t\t\t\tng-model="sliderClient.role"\n\t\t\t\t\t\ttitle="Role"\n\t\t\t\t\t\tis-model-init="true"\n\t\t\t\t\t\tplaceholder="Role"\n\t\t\t\t\t\tis-back-placeholder="true">\n\t\t\t\t</custom-dropdown> --\x3e <custom-input placeholder="Location" ng-model="sliderClient.contacts.location" title="Location" is-back-placeholder="true"> </custom-input> <custom-input class="custom-input--readonly" placeholder="Provider" ng-model="sliderClient.provider" title="Provider" is-back-placeholder="true" is-readonly="true"> </custom-input> \x3c!-- \t\t\t\t<custom-dropdown\n\t\t\t\t\t\tng-model=""\n\t\t\t\t\t\ttitle="Gender"\n\t\t\t\t\t\tis-model-init="true"\n\t\t\t\t\t\tplaceholder="Gender"\n\t\t\t\t\t\tis-back-placeholder="true">\n\t\t\t\t</custom-dropdown> --\x3e <custom-input placeholder="Age" ng-model="sliderClient.contacts.age" title="Age" is-back-placeholder="true"> </custom-input> </div> <div class="crm-slide__contacts-col"> <custom-input placeholder="Country" ng-model="sliderClient.contacts.country" title="Country" is-back-placeholder="true"> </custom-input> <custom-input placeholder="City" ng-model="sliderClient.contacts.city" title="City" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Province" ng-model="sliderClient.contacts.province" title="Province" is-back-placeholder="true"> </custom-input> </div> <div class="crm-slide__contacts-col"> <custom-input placeholder="Email" ng-model="sliderClient.contacts.email" title="Email" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Phone" ng-model="sliderClient.contacts.phone" title="Phone" is-back-placeholder="true"> </custom-input> <custom-input class="custom-input--readonly" placeholder="Purchases" ng-model="sliderClient.customer.statistics.orders" ng-if="sliderClient.customer.customer_id" title="Purchases" is-back-placeholder="true" is-readonly="true"> </custom-input> </div> </div> \x3c!-- lead data --\x3e <div class="crm-slide__leads" ng-if="currentSliderTab===\'lead\'"> <div class="brn-table-wrap t-modern" style="max-width: 100%; min-width: 220px" ng-if="sliderClient.lead.data.length"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table"> <tbody> <tr class="header-image"> <td style="width: 50%"> Question </td> <td> Answer </td> </tr> <tr ng-repeat="(key, lead) in sliderClient.lead.data track by $index" ng-class="{\'first-line\' : key == 0}"> <td style="cursor: pointer"> <span>{{lead.question}}</span> </td> <td style="cursor: pointer"> {{lead.answer}} </td> </tr> <tr ng-if="inProgress"> <td> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!sliderClient.lead.data.length && !inProgress"> <tr> <td colspan="2">No data found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> \x3c!-- Orders --\x3e <div class="crm-slide__orders" ng-if="currentSliderTab===\'orders\' && sliderClient.customer.customer_id && customerOrders.length"> <div ng-if="customerOrder" class="customer-order"> <div class="order-title"> <label>Order ID:</label> {{ customerOrder.order_id }}
39 </div> <div class="w32 column-line" auto-close="outsideClick" uib-dropdown class="dropdown-toggle"> <label>Status:</label> <span id="dropdown-order-status" uib-dropdown-toggle ng-if="orderStatuses[customerOrder.order_status]" ng-style="{color: orderStatuses[customerOrder.order_status].color, \'text-decoration\': \'underline\', cursor: \'pointer\'}">{{customerOrder.order_status}}</span> <div class="dropdown-menu" role="menu" aria-labelledby="dropdown-order-status" ng-if="orderStatuses[customerOrder.order_status]"> <a ng-repeat="status in orderStatuses" ng-style="{color: status.color}" style="display: block; margin: 5px; cursor: pointer" ng-click="changeOrderStatus(customerOrder, status)"> {{status.title}} </a> </div> <span ng-if="!orderStatuses[customerOrder.order_status]">{{customerOrder.order_status}}</span> </div> <div class="mb10" ng-repeat="(key, product) in customerOrder.products"> <hr> <div class="product-id"> <label>Product ID:</label> {{ product.product_id }} </div> <div class="product-title"> <label>Name:</label> {{ product.name }} </div> <div class="w32 column-line"> <custom-input placeholder="Price" title="Price" ng-model="customerOrder.products[key].price" is-required="true" is-back-placeholder="true" ng-disabled="true"> </custom-input> </div> <div class="w32 column-line"> <custom-input placeholder="Count" title="Count" ng-model="customerOrder.products[key].count" type="number" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="w32 column-line btn-icon-delete"> <span class="icon" style="padding: 0; top: 4px; left: 8px" title="Delete Product" ng-click="deleteProduct(key); $event.stopPropagation();"> <i class="material-icons">delete</i> </span> </div> </div> <div ng-show="!isAddProduct" class="add-product" ng-click="addProduct()"> + add product </div> <div ng-show="isAddProduct" class="add-product-select"> <div class="w32 column-line"> <custom-dropdown ng-model="newProduct" array="listProducts" opt-description="name" opt-value="product_id" title="Product" is-model-init="true" placeholder="Select product" is-back-placeholder="true" is-required="false"> </custom-dropdown> </div> <div class="w32 column-line"> <span class="btn-add-new-product" ng-click="saveProduct(newProduct)">+ Add</span> </div> </div> <div class="btn-block"> <button ng-click="saveOrder()" class="brn-btn brn-primary"> Save Order </button> <button ng-click="cancelEditOrder(); event.stopPropagation();" class="brn-btn btn-cancel"> Cancel </button> </div> </div> <div class="brn-table-wrap t-modern" style="max-width: 100%; min-width: 220px" ng-if="!customerOrder"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-disable-filters="true"> <table class="brn-table brn-table-orders" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <tbody> <tr class="header-image"> <td style="padding: 0px"></td> <td style="width: 150px"> Order ID </td> <td> Image </td> <td> Price </td> <td> Count </td> <td> Status </td> <td> Date </td> </tr> <tr ng-repeat="(key, order) in customerOrders"> <td style="padding: 0"> <span class="btn-icon" style="padding: 0; top: 4px; left: 8px" title="Delete Order" ng-click="deleteOrder(order); $event.stopPropagation();"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </span> <span class="btn-icon btn-icon-edit" title="Edit Order" ng-click="editOrder(key, order); $event.stopPropagation();"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </span> </td> <td> {{order.order_id}} </td> <td> <img style="width: 72px" src="{{order.image||\'https://api.brn.ai/img/default-client-avatar.png\'}}" alt="-"> </td> <td> {{order.amount}} </td> <td> {{order.count}} </td> <td auto-close="outsideClick" uib-dropdown class="dropdown-toggle"> <span id="dropdown-order-status" uib-dropdown-toggle ng-if="orderStatuses[order.order_status]" ng-style="{color: orderStatuses[order.order_status].color, \'text-decoration\': \'underline\', cursor: \'pointer\'}">{{order.order_status}}</span> <div class="dropdown-menu" role="menu" aria-labelledby="dropdown-order-status" ng-if="orderStatuses[order.order_status]"> <a ng-repeat="status in orderStatuses" ng-style="{color: status.color}" style="display: block; margin: 5px; cursor: pointer" ng-click="changeOrderStatus(order, status)"> {{status.title}} </a> </div> <span ng-if="!orderStatuses[order.order_status]">{{order.order_status}}</span> </td> <td> <span ng-bind="order.date | date:\'dd.MM.yyyy\'"> </span> </td> </tr> </tbody> <tfoot ng-if="!customerOrders.length && !inProgress"> <tr ng-if="inProgress"> <td colspan="7"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> <tr> <td colspan="7">No orders</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> \x3c!-- Favorites --\x3e <div class="crm-slide__favorites" ng-if="currentSliderTab===\'favorites\' && sliderClient.customer.customer_id && customerFavorites.length"> <div class="brn-table-wrap t-modern" style="max-width: 100%; min-width: 220px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-disable-filters="true"> <table class="brn-table" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <tbody> <tr class="header-image"> <td style="width: 150px"> {{main.translations.title_name}} </td> <td> Image </td> <td> Price </td> <td> Date </td> <td> Views </td> <td> Slug </td> </tr> <tr ng-repeat="product in customerFavorites"> <td> {{product.name}} </td> <td> <img style="width: 72px" src="{{product.image||\'https://api.brn.ai/img/default-client-avatar.png\'}}" alt="-"> </td> <td> {{product.price}} </td> <td> <span ng-bind="product.date | date:\'dd.MM.yyyy\'"> </span> </td> <td> {{product.views}} </td> <td> {{product.slug}} </td> </tr> </tbody> <tfoot ng-if="!customerFavorites.length && !inProgress"> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> <tr> <td colspan="6">No favorites</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> \x3c!-- Viewed --\x3e <div class="crm-slide__viewed" ng-if="currentSliderTab===\'viewed\' && sliderClient.customer.customer_id && customerViewed.length"> <div class="brn-table-wrap t-modern" style="max-width: 100%; min-width: 220px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-disable-filters="true"> <table class="brn-table" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <tbody> <tr class="header-image"> <td style="width: 150px"> {{main.translations.title_name}} </td> <td> Image </td> <td> Price </td> <td> Date </td> <td> Views </td> <td> Slug </td> </tr> <tr ng-repeat="product in customerViewed"> <td> {{product.name}} </td> <td> <img style="width: 72px" src="{{product.image||\'https://api.brn.ai/img/default-client-avatar.png\'}}" alt="-"> </td> <td> {{product.price}} </td> <td> <span ng-bind="product.created | date:\'dd.MM.yyyy\'"> </span> </td> <td> {{product.views}} </td> <td> {{product.slug}} </td> </tr> </tbody> <tfoot ng-if="!customerViewed.length && !inProgress"> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> <tr> <td colspan="6">No favorites</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> \x3c!-- Messagess --\x3e <div class="crm-slide__messages" ng-if="currentSliderTab===\'messages\'"> \x3c!-- <div class="messages-wrapper"> --\x3e <crm-chat ng-if="sliderClient.client_id" client="sliderClient"></crm-chat> \x3c!-- <div class="widget-header">\n <div class="client">
39\n <span class="img-wrap">\n <img src="{{sliderClient.avatar}}" />\n </span>\n <div class="client-info">\n <span style="font-size: 14px; color: #000000;"\n >{{sliderClient.name}}</span\n >\n <p\n style="font-size: 12px; color: #d3d3d3; display: block;"\n ng-if="!isOnline(sliderClient.last_seen)"\n >\n last seen\n <span am-time-ago="sliderClient.last_seen"></span>\n </p>\n <p\n style="font-size: 12px; color: #94cc25;"\n ng-if="isOnline(sliderClient.last_seen)"\n >\n Online\n </p>\n </div>\n\n <span\n ng-if="sliderClient.sentiment <= -5"\n class="sentiment-score"\n style="\n width: 40px;\n height: 30px;\n background: #f2c5ce;\n text-align: center;\n line-height: 30px;\n border-radius: 13px;\n color: #bc1a27;\n margin-right: 19px;\n "\n >\n -{{sliderClient.sentiment}}\n </span>\n\n <span\n ng-if="sliderClient.sentiment > -5 && sliderClient.sentiment < 0"\n class="sentiment-score"\n style="\n width: 40px;\n height: 30px;\n background: #f7e9ce;\n text-align: center;\n line-height: 30px;\n border-radius: 13px;\n color: #f7ad3a;\n margin-right: 19px;\n "\n >\n -{{sliderClient.sentiment}}\n </span>\n <span\n ng-if="sliderClient.sentiment >= 0 && sliderClient.sentiment < 5"\n class="sentiment-score"\n style="\n width: 40px;\n height: 30px;\n background: #f7e9ce;\n text-align: center;\n line-height: 30px;\n border-radius: 13px;\n color: #f7ad3a;\n margin-right: 19px;\n "\n >\n +{{sliderClient.sentiment}}\n </span>\n <span\n ng-if="sliderClient.sentiment >= 5"\n class="sentiment-score"\n style="\n width: 40px;\n height: 30px;\n background: #e2eeca;\n text-align: center;\n line-height: 30px;\n border-radius: 13px;\n color: #89bd1d;\n margin-right: 19px;\n "\n >\n +{{sliderClient.sentiment}}\n </span>\n\n <span\n class="client-mode"\n ng-if="clientMode"\n ng-click="changeDialogMode()"\n ng-class="{\'client-mode--manual\': clientMode === \'manual\'}"\n >\n <i class="client-mode__icon" ng-show="clientMode === \'manual\'">\n M\n </i>\n <i class="client-mode__icon" ng-show="clientMode !== \'manual\'">\n A\n </i>\n </span>\n </div>\n </div> --\x3e \x3c!-- <div class="conversation">\n <div class="conversations-dialogs">\n <div class="dialogs-list">\n <div class="brn-widget">\n <div class="brn-body-wrap">\n <div\n class="brn-widget-body"\n id="widgetBody"\n scrolltop="loadMoreClientMessages()"\n style="\n overscroll-behavior-y: contain;\n display: flex;\n flex-direction: column-reverse;\n "\n >\n <widget-message\n ng-repeat="message in clientMessages track by $index"\n type="{{message}}"\n image="false"\n curent-index="{{$index}}"\n check-is-last="checkIsLast"\n new-intent-modal="newIntentModal"\n exist-intent-modal="existIntentModal"\n exist-intent-as-response-modal="existIntentAsResponseModal"\n hide-image="true"\n >\n </widget-message>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="widget-footer">\n <form ng-submit="sendTextMessage()">\n <div class="extra">\n <i class="material-icons">\n add\n </i>\n <ul class="extra-inner">\n <li\n ngf-select="addAttachment($file, $invalidFiles, sliderClient)"\n ngf-max-size="5MB"\n >\n <i class="material-icons">\n insert_drive_file\n </i>
39\n <span>\n File\n </span>\n </li>\n <li\n ngf-select="addAttachment($file, $invalidFiles, sliderClient)"\n ngf-max-size="5MB"\n >\n <i class="material-icons">\n image\n </i>\n <span>\n Image\n </span>\n </li>\n <li\n ngf-select="addAttachment($file, $invalidFiles, sliderClient)"\n ngf-max-size="5MB"\n >\n <i class="material-icons">\n local_movies\n </i>\n <span>\n Video\n </span>\n </li>\n <li\n ngf-select="addAttachment($file, $invalidFiles, sliderClient)"\n ngf-max-size="5MB"\n >\n <i class="material-icons">\n music_note\n </i>\n <span>\n Audio\n </span>\n </li>\n <li>\n <i class="material-icons">\n shopping_cart\n </i>\n <span>\n Product\n </span>\n </li>\n <li ng-if="scenarios.length">\n <i class="material-icons">archive</i>\n <span>Scenario</span>\n\n <div class="extra-inner-2">\n <ul class="maxHeight350 scenarios-list">\n <li ng-repeat="(key, value) in scenarios">\n <span ng-click="runScenario(value, sliderClient)"\n >{{ value.name | limitTo: 32 }}{{value.name.length >\n 32 ? \'...\' : \'\'}}</span\n >\n <i\n ng-hide="!checkScenarioStatus(value.scenario_id)"\n class="material-icons status"\n >done</i\n >\n </li>\n </ul>\n </div>\n </li>\n </ul>\n </div>\n <input\n type="text"\n ng-model="widgetMessage.text"\n ng-change="callSuggest(attr.name)"\n placeholder="{{main.translations.catalog_textPlaceholder}}"\n required\n />\n\n <div class="send-button" ng-click="sendTextMessage()">\n <i class="material-icons">\n send\n </i>\n </div>\n </form>\n </div> --\x3e \x3c!-- <div class="suggestions-container" ng-if="suggestions.length">\n <ul>\n <li\n class="item"\n ng-repeat="item in suggestions"\n ng-click="selectSuggest($event, item)"\n >\n <img\n src="{{item.image}}"\n alt="{{item.text}}"\n ng-if="item.image"\n />\n <span>{{item.text}}</span>\n </li>\n </ul>\n </div> --\x3e \x3c!-- </div> --\x3e </div> \x3c!-- \t\t\t<div class="slide-user__form">\n\n\t\t\t\t<div ng-repeat="(key,val) in sliderClient.contacts"\n\t\t\t\t\t\t style="text-transform: capitalize;">\n\t\t\t\t\t<custom-input\n\t\t\t\t\t\tplaceholder="{{key}}"\n\t\t\t\t\t\tng-model="sliderClient.contacts[key]"\n\t\t\t\t\t\ttitle="{{key}}"\n\t\t\t\t\t\tis-back-placeholder="true">\n\t\t\t\t\t</custom-input>\n\t\t\t\t</div>\n\t\t\t</div> --\x3e \x3c!-- \t\t\t<div class="slide-user__customer-form"\n\t\t\t\t\t ng-if="sliderClient.customer && sliderClient.customer.customer_id">\n\t\t\t\t<h2 class="slide-user__title" style="margin: 0 0 28px">\n\t\t\t\t\tCustomer info\n\t\t\t\t</h2>\n\t\t\t\t<h3 class="user-name">\n\t\t\t\t\t{{sliderClient.customer.name}}\n\t\t\t\t</h3>\n\n\t\t\t\t<div ng-repeat="attr in visibleAttributes"\n\t\t\t\t\t\t style="text-transform: capitalize;">\n\n\t\t\t\t\t<custom-dropdown\n\t\t\t\t\t\t\tng-if="attr.selectable && attr.type != \'mixed\'"\n\t\t\t\t\t\t\tng-model="sliderClient.customer.profile[attr.name]"\n\t\t\t\t\t\t\tarray="attr.values"\n\t\t\t\t\t\t\topt-description=""\n\t\t\t\t\t\t\topt-value=""\n\t\t\t\t\t\t\ttitle="{{attr.label}}"\n\t\t\t\t\t\t\tis-model-init="true"\n\t\t\t\t\t\t\tplaceholder="All"\n\t\t\t\t\t\t\tis-back-placeholder="true">\n\t\t\t\t\t</custom-dropdown>\n\n\t\t\t\t\t<custom-dropdown\n\t\t\t\t\t\t\tng-if="attr.selectable && attr.type == \'mixed\'"\n\t\t\t\t\t\t\tng-model="sliderClient.customer.profile[attr.name]"\n\t\t\t\t\t\t\tarray="attr.values"\n\t\t\t\t\t\t\topt-description="{{attr.schema.key}}"\n\t\t\t\t\t\t\topt-value="{{attr.schema.key}}"\n\t\t\t\t\t\t\ttitle="{{attr.label}}"\n\t\t\t\t\t\t\tis-model-init="true"\n\t\t\t\t\t\t\tplaceholder="All"\n\t\t\t\t\t\t\tis-back-placeholder="true">\n\t\t\t\t\t</custom-dropdown>\n\n\t\t\t\t\t<custom-input\n\t\t\t\t\t\t\tng-if="(attr.type==\'string\' || attr.type==\'number\') && !attr.selectable"\n\t\t\t\t\t\t\tplaceholder="{{attr.label}}"\n\t\t\t\t\t\t\tng-model="sliderClient.customer.profile[attr.name]"\n\t\t\t\t\t\t\ttitle="{{attr.label}}"\n\t\t\t\t\t\t\tis-back-placeholder="true">\n\t\t\t\t\t</custom-input>\n\n\t\t\t\t\t<div class="card-checker" style="margin-top: 25px; margin-left: 7px;" ng-if="attr.type==\'boolean\' && !attr.selectable">\n\t\t\t\t\t\t\t<input type="checkbox"\n\t\t\t\t\t\t\t\t\tng-model="sliderClient.customer.profile[attr.name]"\n\t\t\t\t\t\t\t\t\tid="filter_checker_{{attr.name}}">\n\t\t\t\t\t\t\t<label for="filter_checker_{{attr.name}}">\n\t\t\t\t\t\t\t\t\t<span class="checker-ico"></span>\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t<span>{{attr.label}}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<custom-date-range-single\n\t\t\t\t\t\t\ttitle=""\n\t\t\t\t\t\t\tng-if="attr.type==\'date\' && !attr.selectable"\n\t\t\t\t\t\t\tng-model="sliderClient.customer.profile[attr.name]"\n\t\t\t\t\t\t\ttimepicker="false" >\n\t\t\t\t\t</custom-date-range-single>\n\n </div>\n </div> --\x3e </div> </slide-menu>'), 40a.put("views/currentwidget.html",'<div class="widget-wrap current-widget {{widgetPosition == \'left\' ? \'widget-left-pos\': \'\'}}"> <div class="brn-widget {{widget_visibility ? \'\' : \'brn-hide\'}}"> <div class="brn-widget-header"> <div class="brn-widget-header-inner"> <div class="bot-header-info"> <div> <img ng-src="{{bot.image?(bot.image):(\'images/tf.png\')}}" alt=""> </div> {{bot.username}} </div> <div class="brn-widget-resize"> <i class="fa fa-{{!widgetResizeStatus ? \'expand\' : \'compress\'}}" ng-click="resizeWidget()"></i> </div> <div class="brn-widget-close"> <span ng-click="closeWidget()"></span> </div> </div> </div> <div class="brn-widget-main"> <div class="brn-widget-form-wrapper"> <div class="brn-widget-contacts-form" ng-if="mainForm"> <form ng-submit="sendContacts()"> <input type="text" placeholder="{{main.translations.title_name}}" required ng-model="additionalInfo.name" ng-focus="showAdditionalForm()" ng-blur="hideAdditionalForm()"> <div class="brn-widget-contacts-form-additional" ng-show="showAdditionalFormStatus"> <input type="email" placeholder="Email" required ng-model="additionalInfo.email"> <input type="text" placeholder="Phone" ng-model="additionalInfo.phone"> <button type="submit" class="brn-widget-form-submit">Send</button> </div> </form> </div> </div> <div class="brn-widget-body {{mainForm ? \'formed\' : \'\'}} {{showAdditionalFormStatus ? \'collapsed\': \'\'}}"> <widget-message ng-repeat="message in messages" type="{{message}}"> </widget-message> </div> </div> <div class="brn-widget-footer"> <form ng-submit="sendMessage()" id="widget"> <fieldset ng-disabled="formDisabled"> <input type="text" name="name" class="" ng-model="message.text" placeholder="{{welcomePlaceholder}}" required> <div class="widget-attachment"> <button type="button" class="card-type" ngf-select="addAttachment($file, $invalidFiles, dialog)" ngf-max-size="5MB" accept="*"> <i class="fa fa-plus" aria-hidden="true"></i> </button> <button type="button" class="card-type"> <i class="fa fa-microphone" aria-hidden="true" ng-show="voiceSupport && !voiceInProgress" ng-click="voiceStart()"></i> <i class="fa fa-volume-up" aria-hidden="true" ng-show="voiceSupport && voiceInProgress" ng-click="voiceEnd()"></i> </button> </div> </fieldset> </form> </div> </div> <div class="brn-widget-open {{widget_visibility ? \'brn-hide\' : \'\'}}" ng-click="widgetBtnsExpanded = ! widgetBtnsExpanded"> <span class="icon {{widgetBtnsExpanded ? \'icon-widget-logo-close\': \'icon-widget-logo\'}}"></span> <ul class="brn-widget-open-list" ng-if="widgetBtnsExpanded"> <li ng-if="botSocialsLinks.messenger"> <span class="brn-block-facebook" tooltip-placement="{{widgetPosition == \'right\' ? \'left\' : \'right\'}}" uib-tooltip="Launch Facebook Bot" ng-click="openSocial(botSocialsLinks.messenger)"> </span> </li> <li ng-if="botSocialsLinks.telegram"> <span class="brn-block-telegram" tooltip-placement="{{widgetPosition == \'right\' ? \'left\' : \'right\'}}" uib-tooltip="Launch Telegram Bot" ng-click="openSocial(botSocialsLinks.telegram)"> </span> </li> <li> <span class="brn-block-webchat" ng-click="openWidget()" tooltip-placement="{{widgetPosition == \'right\' ? \'left\' : \'right\'}}" uib-tooltip="Launch WebChat Bot"></span> </li> </ul> </div> <div class="brn-widget-event" ng-show="eventVisibility"> <div class="brn-widget-event-close" ng-click="closeWidget()"> <span class="brn-widget-close-icon"></span> </div> <div class="brn-widget-event-conversation"> <div class="brn-widget-conversation-avatar"> <img src="https://static.free-lancing.com/media/assets/thumbs1234/8/8d0accdec1e5a22fff0c9e0b55cd33f9.png" alt=""></div> <div class="brn-widget-conversation-message"> <div class="brn-widget-conversation-message-author"> {{bot.name}} </div> {{widget_settings.welcomeText}} </div> <div class="brn-widget-unread-count">1</div> </div> <div class="brn-widget-event-footer"> <input type="text" placeholder="{{welcomePlaceholder}}" class="brn-widget-event-input" ng-focus="openWidget(true)"> </div> </div> </div>'),a.put("views/custom-colorpicker.html",'<div class="custom-date-range"> <input colorpicker type="text" class="hidden-data-range" style="height: 50px" ng-model="data"> <div> <custom-input placeholder="{{title}}" ng-model="data" title="{{title}}" ng-blur="onBlur()" ng-click="clickRange()" is-back-placeholder="true"> <i class="material-icons calendar" ng-class="{\'active\' : isActive}">color_lens</i> </custom-input> </div> </div>'),a.put("views/custom-date-range.html",'<div class="custom-date-range"> <input date-range-picker options="rangeOption" type="text" class="hidden-data-range" hidedaterangepicker="hidePicker($event)" ng-model="date"> <div> <custom-input placeholder="From" ng-model="startDate" title="From" enter="enterDate()" ng-click="clickRange(\'from\')" ng-change="hidePickers()" is-back-placeholder="true"> <i class="material-icons calendar" ng-class="{\'active\' : isFromActive}">today</i> </custom-input> </div> <div> <custom-input placeholder="To" ng-model="endDate" title="To" enter="enterDate()" ng-click="clickRange(\'to\')" ng-change="hidePickers()" is-back-placeholder="true"> <i class="material-icons calendar" ng-class="{\'active\' : isToActive}">today</i> </custom-input> </div> </div>'),a.put("views/custom-date.html",'<div class="custom-date-range"> <div> <custom-input class="datepicker-here" placeholder="{{title}}" ng-model="dateInput" title="{{title}}" ng-disabled="isDisabled" ng-blur="onBlur()" ng-click="clickRange()" is-back-placeholder="true"> <i class="material-icons calendar" ng-class="{\'active\' : isActive}">{{icon ? icon :\'today\'}}</i> </custom-input> </div> </div>'),a.put("views/custom-dropdown.html",'<div class="custom-input" ng-mousedown="pressDropdown()" ng-mouseup="upDropdown()"> <div class="select-container" ng-class="{\'disabled\' : isDisabled}"> <span class="placeholder placeholder-small placeholder-active\'" ng-class="{\'disabled\' : isDisabled, \'placeholder-active\': model || isBackPlaceholderActive}" ng-if="isBackPlaceholder && (model || isBackPlaceholderActive)" ng-disabled="isDisabled"> {{::title}} </span> <div class="select" ng-class="{\'select-placeholder\': placeholder!=\'\' && isPlaceholder, \'active\' : isActive, \'disabled\' : isDisabled}" ng-click="toogleDropdown()" ng-blur="blurDropdown()" tabindex="-1" ng-disabled="isDisabled" ng-if="!isLocationObject" style="display: flex;overflow: visible"> <i ng-if="icon" style="color: #969696; margin: -2px 11px 0px -4px" class="material-icons">{{icon}}</i> <span>{{selectedValue}}</span> </div> <div class="select" ng-class="{\'select-placeholder\': placeholder!=\'\' && isPlaceholder, \'active\' : isActive, \'disabled\' : isDisabled}" ng-click="toogleDropdown()" ng-blur="blurDropdown()" tabindex="-1" ng-disabled="isDisabled" ng-if="isLocationObject"> Lat: {{selectedValue.coordinates[1]}}, Lng: {{selectedValue.coordinates[0]}} </div> <span class="bar" ng-if="!isDisabled"></span> <span class="arrow-btn" ng-click="toogleDropdown()" ng-class="{ \'active\' : isActive}"> <i class="material-icons">keyboard_arrow_down</i> </span> <div ng-if="firsEnter"> <ul class="select-options" ng-class="{\'active\' : isActive, \'single\': !hasCategories, \'multiply\' : hasCategories}" ng-show="isActive && !isDisabled" ng-scrollbars ng-scrollbars-config="::config"> <li ng-click="selectItem(-1)" ng-if="placeholder!=\'\'" class="select-placeholder" title="{{::placeholder}}"> {{::placeholder}} </li> <div ng-if="::!isFilter && !isLocationObject && !hasCategories"> <li ng-click="selectItem(key)" data-ng-repeat="(key, value) in array " title="{{value[optDescription]!=undefined ? value[optDescription]: value}}">{{value[optDescription]!=undefined ? value[optDescription]: value}}</li> </div> <div ng-if="::!isFilter && !hasCategories && isLocationObject"> <li ng-click="selectItem(key)" data-ng-repeat="(key, value) in array ">Lat: {{value.coordinates[1]}}, Lng: {{value.coordinates[0]}}</li> </div> <div ng-if="::isFilter && !hasCategories"> <li ng-click="selectItem(key)" data-ng-repeat="(key, value) in array " ng-if="::cronNumeralFilter">{{value | cronNumeral}}</li> <li ng-click="selectItem(key)" data-ng-repeat="(key, value) in array " ng-if="::cronMonthNameFilter">{{value | cronMonthName}}</li> <li ng-click="selectItem(key)" data-ng-repeat="(key, value) in array " ng-if="::cronDayNameFilter">{{value | cronDayName: cronStyle}}</li> </div> <div ng-if="hasCategories" class="dropdown_container"> <li data-ng-repeat="(key, value) in array " style="padding: 0"> <div class="main-select-option" ng-init="showSubitems = true" ng-click="showSubitems = !showSubitems; toogleSubDropdown()"> <span>{{value[optDescription]!=undefined ? value[optDescription]: value}}</span> <span class="subitem_arrow"> <i ng-if="showSubitems" class="material-icons">keyboard_arrow_down</i> <i ng-if="!showSubitems" class="material-icons">keyboard_arrow_up</i> </span> </div> <div class="sub-select-option" ng-if="showSubitems" ng-click="selectItem
40Category(key, k)" data-ng-repeat="(k, v) in value[optItems]" style="padding: 18px 28px 15px 34px"> {{v[optDescription]!=undefined ? v[optDescription]: v}} </div> </li> </div> </ul> </div> </div> </div>'),a.put("views/custom-input.html",'<div class="custom-input" ng-class="{\'active\' : isFocused, \'textarea-container\' : typeInput==\'textarea\'}"> <span class="placeholder" ng-if="isBackPlaceholder" ng-class="{\'disabled\' : isDisabled,\n \'placeholder-small\' : isTextExist || isFocused,\n \'placeholder-active\': isActive,\n \'placeholder-invalide\': invalide}"> {{title || isActive? title : placeholder}} </span> <input ng-if="typeInput!=\'textarea\'" type="{{::typeInput}}" step="any" ng-class="{\'no-right-padding\' : !transcluding && !invalide, \'invalide-input\' : invalide}" ng-model="$parent.text" placeholder="{{isBackPlaceholderShow? placeholder : \'\'}}" ng-disabled="isDisabled" ng-readonly="isReadonly" ng-required="::isRequired" ng-change="onChange()" ng-blur="blurInput()" ng-focus="focusInput()" ng-keyup="$event.keyCode == 13 && enter()"> <textarea ng-if="typeInput==\'textarea\'" class="textarea" ng-class="{\'no-right-padding\' : !transcluding && !invalide, \'active\' : isFocused, \'invalide-input\' : invalide}" ng-model="$parent.text" placeholder="{{isBackPlaceholderShow? placeholder : \'\'}}" ng-disabled="isDisabled" ng-readonly="isReadonly" ng-required="::isRequired" ng-change="onChange()" ng-blur="blurInput()" ng-focus="focusInput()" ng-keyup="$event.keyCode == 13 && enter()">\n </textarea> <div class="counter" ng-class="{\'max-char-warning\' : text.length > 630}" ng-if="typeInput==\'textarea\' && isFocused && !disableCounter">{{text.length}}</div> <span class="bar" ng-if="!isDisabled"></span> <div class="custom-input-container" ng-class="{\'valide\' : !invalide, \'active\' : isActive, \'text-exist\' : isTextExist}" ng-click="clickEnter()"> <ng-transclude></ng-transclude> <div class="scenario-step-error" ng-if="invalide && !transcluding && showError"> <i class="material-icons">priority_high</i> <div class="scenario-step-error-hint" ng-class="{\'scenario-step-error-hint-bottom\': hintPlacement==\'bottom\', \'scenario-step-error-hint\': hintPlacement!=\'bottom\'}"> <span class="hint-text">{{typeInput == \'email\' && !showHint? \'Invalide email\' : \'Empty or invalid data type\'}}</span> </div> </div> \x3c!-- <i ng-if="invalide && !transcluding" ng-class="{\'hint-invalide-icon\' : showHint}" class="material-icons invalide-icon" title="{{!showHint ? (typeInput == \'email\'? \'Invalide email\' : \'Empty or invalide data type\') : \'\'}}"> error_red </i>--\x3e </div> </div>'),a.put("views/custom-notification.html",'<div class="ui-notification custom-notification" ng-show="isNotification" ng-click="clickEvent()"> <i class="material-icons close" ng-click="kill($event)">close</i> <i class="material-icons notification-icon">new_releases</i> <div class="text-block"> <div class="title">{{messageTitle}}</div> <div class="message" ng-bind-html="message"> {{message}}</div> </div> </div>'),a.put("views/custom-scroller.html",'<div class="scroller" ng-class="{\'scroller-show\' : visibleScrols, \'scroller-table\' : isTable}" ng-style="style"> <div ng-scrollbars class="scroller-content" ng-scrollbars-config="::config"> <div ng-style="::paddingStyle"> <ng-transclude></ng-transclude> </div> </div> <div ng-if="isShadow" class="scroller-shadow" ng-class="{\'scroller-shadow-bottom\' : axis==\'y\', \'scroller-shadow-right\' : axis==\'x\'}"> </div> </div>'),a.put("views/customer-detail.html",'<div class="container"> <div class="flex-row" style="margin-left:0px"> <div> <h2 class="mb35">Client Info</h2> <div class="mb40 settings-card-wrap big670"> <div class="flex-row"> <div> <div class="settings-card medium210 mr20"> <div class="mb10"> <custom-input ng-model="customer.login" placeholder="Login" title="Login" is-back-placeholder="true"> </custom-input> </div> </div> <div class="settings-card medium210 mr20"> <div class="mb10"> <custom-input ng-model="customer.password" placeholder="Password" title="Password" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div ng-repeat="row in rows"> <div ng-repeat="(name, attr) in row" class="settings-card medium210 mr20" ng-class="{\'card-all\': attr.multiple && attr.type != \'mixed\' || attr.multiple && attr.type == \'mixed\'}"> <div ng-if="attr.selectable && attr.type != \'mixed\' && attr.type != \'location\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="customer.profile[name]" array="attr.values" opt-description="" opt-value="" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple && attr.type != \'mixed\'"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="customer.profile[name]" multiple theme="bootstrap" style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">{{$item}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div ng-bind-html="value | highlight: $select.search"></div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="attr.selectable && attr.type == \'location\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="customer.profile[name]" array="attr.values" opt-description="" opt-value="" is-location-object="true" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="customer.profile[name]" multiple theme="bootstrap" style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">Lat: {{$item.coordinates[1]}}, Lng: {{$item.coordinates[0]}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div>{{"Lat: "+value.coordinates[1]+", Lng: "+value.coordinates[0]}}</div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="attr.selectable && attr.type == \'mixed\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="customer.profile[name]" array="attr.values" opt-description="{{selectedCategory.profile[name].schema.key}}" opt-value="" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple && attr.type == \'mixed\'"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="customer.profile[name]" multiple style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">{{$item[selectedCategory.profile[name].schema.key]}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div ng-bind-html="value[selectedCategory.profile[name].schema.key] | highlight: $select.search"></div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="!attr.selectable"> <div class="mb10" ng-if="attr.type == \'mixed\'"> <span ng-click="showMixedForm(attr, customer.profile[attr.name])" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">add</i> </span> </div> <div class="mb10" ng-if="attr.type == \'string\' && attr.mainAttrName"> <custom-input ng-model="customer.profile[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'string\' && !attr.mainAttrName"> <custom-input ng-model="customer.profile[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'number\' && attr.mainAttrName"> <custom-input ng-model="customer.profile[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" type-input="number" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'number\' && !attr.mainAttrName"> <custom-input ng-model="customer.profile[name]" placeholder="{{attr.label}}" title="{{attr.label}}" type-input="number" is-back-placeholder="true"> </custom-input> </div> <div ng-if="attr.type == \'boolean\' && attr.mainAttrName" class="mt20"> <div class="card-checker"> <input type="checkbox" ng-model="customer.profile[attr.mainAttrName][name]" id="model_bool_{{name}}"> <label for="model_bool_{{name}}"> <span class="checker-ico"></span> <span>{{attr.label}}</span> </label> </div> </div> <div ng-if="attr.type == \'boolean\' && !attr.mainAttrName" class="mt20"> <div class="card-checker"> <input type="checkbox" ng-model="customer.profile[name]" id="model_bool_{{name}}_no"> <label for="model_bool_{{name}}_no"> <span class="checker-ico"></span> <span>{{attr.label}}</span> </label> </div> </div> <div class="mb10" ng-if="attr.type==\'date\' && attr.mainAttrName"> <custom-date-range-single title="{{attr.label}}" ng-model="customer.profile[attr.mainAttrName][name]"> </custom-date-range-single> </div> <div class="mb10" ng-if="attr.type==\'date\' && !attr.mainAttrName"> <custom-date-range-single title="{{attr.label}}" ng-model="customer.profile[name]"> </custom-date-range-single> </div> <div ng-if="attr.type==\'file\' && attr.mainAttrName"> <div class="mb10"> <custom-input ng-model="customer.profile[attr.mainAttrName][name]" ng-disabled="uploaders[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[attr.mainAttrName][name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name, attr.mainAttrName)" ng-disabled="uploaders[attr.mainAttrName][name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[attr.mainAttrName][name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'file\' && !attr.mainAttrName"> <div class="mb10"> <custom-input ng-model="customer.profile[name]" ng-disabled="uploaders[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="uploaders[name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'image\' && !attr.mainAttrName && !attr.multiple"> <div class="mb10"> <custom-input ng-model="customer.profile[name]" ng-disabled="uploaders[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name)" ng-disabled="uploaders[name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'image\' && attr.mainAttrName"> <div class="mb10"> <custom-input ng-model="customer.profile[attr.mainAttrName][name]" ng-disabled="uploaders[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name, attr.mainAttrName)" ng-disabled="uploaders[attr.mainAttrName][name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div class="mb10" ng-if="attr.type==\'color\' && attr.mainAttrName"> <custom-colorpicker ng-model="customer.profile[attr.mainAttrName][attr.name]" title="{{attr.label}}"> </custom-colorpicker> </div> <div class="mb10" ng-if="attr.type==\'color\' && !attr.mainAttrName"> <custom-colorpicker ng-model="customer.profile[attr.name]" title="{{attr.label}}"> </custom-colorpicker> </div> <div class="mb10" ng-if="attr.type==\'location\' && !attr.mainAttrName"> <span ng-click="showMapForm(attr, customer.profile[attr.name])" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">map</i> </span> </div> </div> </div> </div> </div> </div> <div> <button ng-click="updateCustomer()" class="brn-btn brn-primary">
40Update Client</button> </div> </div> <div class="settings-card-wrap" style="flex-basis: auto" ng-if="multipleImages.length"> <div class="settings-card mb25" style="max-width: max-content" ng-repeat="attr in multipleImages"> <h2 class="mb60"> {{attr.label}} </h2> <div class="catalog-screenshot-container mb60"> <div class="catalog-screenshot settings" ng-repeat="img in customer.profile[attr.name]"> <div class="delete-container"> <img src="{{img}}" alt=""> <div class="delete-hover" ng-click="deleteImage(img, attr.name)"> <div class="icon-container"> <i class="material-icons icon">remove_circle</i> <span class="text"> Remove photo </span> </div> </div> </div> </div> <div ng-if="attr.type==\'image\' && !attr.mainAttrName && attr.multiple" class="catalog-screenshot" ng-show="!uploaders[attr.name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFiles($file, \'image\', attr.name)"> <div class="add-item" style="width: 150px"> <div class="icon-container"> <i class="material-icons icon">add_circle</i> <span class="text"> Add photo </span> </div> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/date-range-new.html",'<div class="crm-input__text"> <input type="text" data-multiple-dates-separator=" - " placeholder="From - To"> </div>'),a.put("views/documentation.html",'<div class="container"> <div class="common-padding"> <p>This is the documentation view.</p> </div> </div>'), 41a.put("views/edit-category-attribute.html",'<div class="flex-row"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb35">Edit Attribute</h2> <div class="mb50"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="attribute.name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Lable" title="Lable" ng-model="attribute.label" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-class="{\'mb30\' : attribute.type!=\'mixed\'}"> <custom-dropdown ng-model="attribute.type" array="attributeTypes" opt-description="title" opt-value="name" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleChangeType()" ng-disabled="attribute.values.length" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb30" ng-if="attribute.type==\'mixed\' && attribute.selectable"> <custom-dropdown ng-model="$parent.schemaKey" array="schemaKeys" opt-description="name" opt-value="name" title="Schema Key" is-model-init="true" placeholder="Schema Key..." ng-change="handleChangeKey()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="card-checker"> <input type="checkbox" ng-model="attribute.visible" id="attributes_visible"> <label for="attributes_visible" style="text-transform: none"> <span class="checker-ico"></span>Visible </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="attribute.multiple" id="attributes_multiple"> <label for="attributes_multiple" style="text-transform: none"> <span class="checker-ico"></span>Multiple </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="attribute.selectable" id="attributes_selectable"> <label for="attributes_selectable" style="text-transform: none"> <span class="checker-ico"></span>Selectable </label> </div> </div> <button ng-click="addCategoryAttribute()" class="brn-btn brn-primary">Edit Attribute</button> </div> </div> <div> <div class="scenario-card max-size transparent" ng-if="attribute.type==\'mixed\'"> <div class="section no-padding mb60"> <h2 class="mb35">Schema</h2> <div ng-show="!isEmpty(attribute.schema.fields)"> <div class="flex-row mb5" ng-repeat="(name, schema) in attribute.schema.fields"> <div class="short-item"> <custom-input ng-model="attribute.schema.fields[name].name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="attribute.schema.fields[name].label" placeholder="Label" title="Label" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="attribute.schema.fields[name].type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container mt10"> <div class="delete-item" ng-click="deleteSchemaAttribute(name)" ng-if="$parent.schemaKey != name"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> <div class="flex-row mb5" ng-if="newSchemaAttr.show"> <div class="short-item"> <custom-input ng-model="newSchemaAttr.name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newSchemaAttr.label" placeholder="Label" title="Label" is-required="true" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newSchemaAttr.type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" ng-change="addSchemaAttribute()" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container mt10"> <div class="delete-item" ng-click="clearSchemaAttribute()"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot mt20" ng-click="showSchemaAttribute()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> <div class="settings-card-wrap big mb50" ng-if="attribute.selectable"> <h2 class="mb60">Values <a ng-if="attribute.type != \'location\'" class="add-bot" ng-click="addValue(category, attribute)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> <a ng-if="attribute.type == \'location\'" class="add-bot" ng-click="addMapValue(category, attribute)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:640px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:638px"> <tbody ng-if="attribute.type!=\'mixed\' && attribute.values.length"> <tr class="header-image"> <td style="width:45%"> {{main.translations.value}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in attribute.values" ng-class="{\'first-line\' : key == 0}"> <td> <span ng-if="attribute.type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include> </span> <img ng-src="{{value}}" ng-if="attribute.type==\'image\' && attribute.value.length" style="max-width: 100px"> <span ng-if="attribute.type==\'string\' || attribute.type==\'number\' || attribute.type==\'date\'"> {{value}} </span> <div ng-if="attribute.type==\'color\'" ng-style="{\'width\': \'15px\', \'height\': \'15px\', \'background-color\': value}"></div> <div ng-if="attribute.type==\'location\'">Lat: {{value.coordinates[1]}}, <br> Lng: {{value.coordinates[0]}}</div> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete element"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tbody ng-if="attribute.type==\'mixed\' && attribute.values.length"> <tr class="header-image"> <td ng-repeat="field in fields"> {{attribute.schema.fields[field].label}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in attribute.values" ng-class="{\'first-line\' : key == 0}"> <td ng-repeat="field in fields"> <span ng-if="attribute.schema.fields[field].type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value[field] == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value[field] != true"></ng-include> </span> <div ng-if="attribute.schema.fields[field].type == \'color\'" ng-style="{\'width\': \'20px\', \'height\': \'20px\', \'background-color\': value[field]}"> </div> <img ng-src="{{value[field]}}" ng-if="attribute.schema.fields[field].type==\'image\' && value[field].length" style="max-width: 100px"> <span ng-if="attribute.schema.fields[field].type==\'string\' || attribute.schema.fields[field].type==\'number\' || attribute.schema.fields[field].type==\'date\'"> {{value[field]}} </span> <span ng-if="attribute.schema.fields[field].type==\'location\'"> {{value[field].coordinates[1]}}, {{value[field].coordinates[0]}} </span> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete element"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tfoot ng-if="!attribute.values.length"> <tr> <td colspan="100%">No attribute values found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'),a.put("views/edit-customer-field.html",'<div class="flex-row"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb35">Edit Attribute</h2> <div class="mb50"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="newAttr.name" is-required="true" is-back-placeholder="true" ng-disabled="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Lable" title="Lable" ng-model="newAttr.label" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-class="{\'mb30\' : newAttr.type!=\'mixed\'}"> <custom-dropdown ng-model="newAttr.type" array="attributeTypes" opt-description="title" opt-value="name" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleChangeType()" ng-disabled="newAttr.values.length" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb30" ng-if="newAttr.type==\'mixed\'"> <custom-dropdown ng-model="$parent.schemaKey" array="schemaKeys" opt-description="name" opt-value="name" title="Schema Key" is-model-init="true" placeholder="Schema Key..." ng-change="handleChangeKey()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="card-checker"> <input type="checkbox" ng-model="newAttr.visible" id="attributes_visible"> <label for="attributes_visible" style="text-transform: none"> <span class="checker-ico"></span>Visible </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.multiple" id="attributes_multiple"> <label for="attributes_multiple" style="text-transform: none"> <span class="checker-ico"></span>Multiple </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.selectable" id="attributes_selectable"> <label for="attributes_selectable" style="text-transform: none"> <span class="checker-ico"></span>Selectable </label> </div> </div> <button ng-click="addAttribute()" class="brn-btn brn-primary">Edit Attribute</button> </div> </div> <div> <div class="scenario-card max-size transparent" ng-if="newAttr.type==\'mixed\'"> <div class="section no-padding mb60"> <h2 class="mb35">Schema</h2> <div ng-show="!isEmpty(newAttr.schema.fields)"> <div class="flex-row mb5" ng-repeat="(name, schema) in newAttr.schema.fields"> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].label" placeholder="Label" title="Label" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newAttr.schema.fields[name].type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container mt10"> <div class="delete-item" ng-click="deleteSchemaAttribute(name)" ng-if="$parent.schemaKey != name"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> <div class="flex-row mb5" ng-if="newSchemaAttr.show"> <div class="short-item"> <custom-input ng-model="newSchemaAttr.name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newSchemaAttr.label" placeholder="Label" title="Label" is-required="true" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newSchemaAttr.type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" ng-change="addSchemaAttribute()" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container mt10"> <div class="delete-item" ng-click="clearSchemaAttribute()"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot mt20" ng-click="showSchemaAttribute()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> <div class="settings-card-wrap big mb50" ng-if="newAttr.selectable"> <h2 class="mb60">Values <a ng-if="newAttr.type != \'location\'" class="add-bot" ng-click="addValue(attribute)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> <a ng-if="newAttr.type == \'location\'" class="add-bot" ng-click="addMapValue(newAttr)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:640px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:638px"> <tbody ng-if="newAttr.type!=\'mixed\' && newAttr.values.length"> <tr class="header-image"> <td style="width:45%"> {{main.translations.value}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in newAttr.values" ng-class="{\'first-line\' : key == 0}"> <td> <span ng-if="newAttr.type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include> </span> <img ng-src="{{value}}" ng-if="newAttr.type==\'image\' && newAttr.value.length" style="max-width: 100px"> <span ng-if="newAttr.type==\'string\' || newAttr.type==\'number\' || newAttr.type==\'date\'"> {{value}} </span> <span ng-if="newAttr.type==\'location\'"> Longitude: {{value.coordinates[0]}}, Latitude: {{value.coordinates[1]}} </span> <div ng-if="newAttr.type==\'color\'" ng-style="{\'width\': \'15px\', \'height\': \'15px\', \'background-color\': value}"></div> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete element"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tbody ng-if="newAttr.type==\'mixed\' && newAttr.values.length"> <tr class="header-image"> <td ng-repeat="field in fields"> {{newAttr.schema.fields[field].label}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in newAttr.values" ng-class="{\'first-line\' : key == 0}"> <
41td ng-repeat="field in fields"> <span ng-if="newAttr.schema.fields[field].type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value[field] == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value[field] != true"></ng-include> </span> <div ng-if="newAttr.schema.fields[field].type == \'color\'" ng-style="{\'width\': \'20px\', \'height\': \'20px\', \'background-color\': value[field]}"> </div> <img ng-src="{{value[field]}}" ng-if="newAttr.schema.fields[field].type==\'image\' && value[field].length" style="max-width: 100px"> <span ng-if="newAttr.schema.fields[field].type==\'string\' || newAttr.schema.fields[field].type==\'number\' || newAttr.schema.fields[field].type==\'date\'"> {{value[field]}} </span> <span ng-if="newAttr.schema.fields[field].type==\'location\'"> {{value[field].coordinates[1]}}, {{value[field].coordinates[0]}} </span> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete element"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tfoot ng-if="!newAttr.values.length"> <tr> <td colspan="100%">No attribute values found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'),a.put("views/edit-customer.html","<p>This is the edit-customer view.</p>"),a.put("views/edit-merchant-field.html",'<div class="flex-row"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb35">Edit Attribute</h2> <div class="mb50"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="newAttr.name" is-required="true" is-back-placeholder="true" ng-disabled="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Label" title="Label" ng-model="newAttr.label" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-class="{\'mb30\' : newAttr.type!=\'mixed\'}"> <custom-dropdown ng-model="newAttr.type" array="attributeTypes" opt-description="title" opt-value="name" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleChangeType()" ng-disabled="newAttr.values.length" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb30" ng-if="newAttr.type==\'mixed\'"> <custom-dropdown ng-model="$parent.schemaKey" array="schemaKeys" opt-description="name" opt-value="name" title="Schema Key" is-model-init="true" placeholder="Schema Key..." ng-change="handleChangeKey()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="card-checker"> <input type="checkbox" ng-model="newAttr.visible" id="attributes_visible"> <label for="attributes_visible" style="text-transform: none"> <span class="checker-ico"></span>Visible </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.multiple" id="attributes_multiple"> <label for="attributes_multiple" style="text-transform: none"> <span class="checker-ico"></span>Multiple </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.selectable" id="attributes_selectable"> <label for="attributes_selectable" style="text-transform: none"> <span class="checker-ico"></span>Selectable </label> </div> </div> <button ng-click="addAttribute()" class="brn-btn brn-primary">Edit Attribute</button> </div> </div> <div> <div class="scenario-card max-size transparent" ng-if="newAttr.type==\'mixed\'"> <div class="section no-padding mb60"> <h2 class="mb35">Schema</h2> <div ng-show="!isEmpty(newAttr.schema.fields)"> <div class="flex-row mb5" ng-repeat="(name, schema) in newAttr.schema.fields"> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].label" placeholder="Label" title="Label" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newAttr.schema.fields[name].type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container mt10"> <div class="delete-item" ng-click="deleteSchemaAttribute(name)" ng-if="$parent.schemaKey != name"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> <div class="flex-row mb5" ng-if="newSchemaAttr.show"> <div class="short-item"> <custom-input ng-model="newSchemaAttr.name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newSchemaAttr.label" placeholder="Label" title="Label" is-required="true" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newSchemaAttr.type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" ng-change="addSchemaAttribute()" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container mt10"> <div class="delete-item" ng-click="clearSchemaAttribute()"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot mt20" ng-click="showSchemaAttribute()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> <div class="settings-card-wrap big mb50" ng-if="newAttr.selectable"> <h2 class="mb60">Values <a ng-if="newAttr.type != \'location\'" class="add-bot" ng-click="addValue(attribute)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> <a ng-if="newAttr.type == \'location\'" class="add-bot" ng-click="addMapValue(newAttr)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:640px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:638px"> <tbody ng-if="newAttr.type!=\'mixed\' && newAttr.values.length"> <tr class="header-image"> <td style="width:45%"> {{main.translations.value}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in newAttr.values" ng-class="{\'first-line\' : key == 0}"> <td> <span ng-if="newAttr.type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include> </span> <img ng-src="{{value}}" ng-if="newAttr.type==\'image\' && newAttr.value.length" style="max-width: 100px"> <span ng-if="newAttr.type==\'string\' || newAttr.type==\'number\' || newAttr.type==\'date\'"> {{value}} </span> <span ng-if="newAttr.type==\'location\'"> Longitude: {{value.coordinates[0]}}, Latitude: {{value.coordinates[1]}} </span> <div ng-if="newAttr.type==\'color\'" ng-style="{\'width\': \'15px\', \'height\': \'15px\', \'background-color\': value}"></div> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete element"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tbody ng-if="newAttr.type==\'mixed\' && newAttr.values.length"> <tr class="header-image"> <td ng-repeat="field in fields"> {{newAttr.schema.fields[field].label}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in newAttr.values" ng-class="{\'first-line\' : key == 0}"> <td ng-repeat="field in fields"> <span ng-if="newAttr.schema.fields[field].type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value[field] == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value[field] != true"></ng-include> </span> <div ng-if="newAttr.schema.fields[field].type == \'color\'" ng-style="{\'width\': \'20px\', \'height\': \'20px\', \'background-color\': value[field]}"> </div> <img ng-src="{{value[field]}}" ng-if="newAttr.schema.fields[field].type==\'image\' && value[field].length" style="max-width: 100px"> <span ng-if="newAttr.schema.fields[field].type==\'string\' || newAttr.schema.fields[field].type==\'number\' || newAttr.schema.fields[field].type==\'date\'"> {{value[field]}} </span> <span ng-if="newAttr.schema.fields[field].type==\'location\'"> {{value[field].coordinates[1]}}, {{value[field].coordinates[0]}} </span> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete element"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tfoot ng-if="!newAttr.values.length"> <tr> <td colspan="100%">No attribute values found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'), 42a.put("views/edit-profile.html",'<div class="cards client-detail"> <div class="container"> <div class="nav-sidebar nav-sidebar-bottom-pd"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" height="calc(100% - 138px)" paddings="22px 50px 30px 52px"> <div style="flex: 1 1 auto" class="mb90"> <div class="bot-info-text"> <div class="bot-info-img"> <img ng-src="{{user.avatar}}" alt="client img" ng-if="user.avatar != \'https://api.brn.ai/img/default-client-avatar.png\'"> <img ng-src="images/no-avatar-user.png" alt="client img" ng-if="user.avatar == \'https://api.brn.ai/img/default-client-avatar.png\'"> </div> <div class="bot-info-name">
42 {{user.name}} </div> <div class="bot-info-url"> {{user.email}} </div> </div> </div> <div class="nav-sidebar-bottom" ng-class="{\'nav-sidebar-bottom-shadow\' : isButomShadow}"> <div class="settings-save" ng-click="updateUser()"> <span> <i class="material-icons">save</i> {{main.translations.save_btn}} </span> </div> <div class="settings-cancel" ui-sref="manage-users()"> <span> <i class="material-icons">cancel</i> Cancel </span> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="flex-row"> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb45">Profile</h2> <div class="mb10"> <custom-input placeholder="Name" ng-model="user.name" title="Name" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Nickname" ng-model="user.nickname" title="Nickname" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input ng-model="avatar" ng-disabled="uploaders.avatar" placeholder="Avatar" title="Avatar" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders.avatar" ng-max-size="5MB" ngf-select="addFile($file, $index, \'image\', \'avatar\')" ng-disabled="uploaders.avatar"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders.avatar" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> \x3c!--\n <div class="mb25">\n <custom-dropdown\n ng-model="user.role"\n array="roles | filter: $select.search"\n opt-description="title"\n opt-value="name"\n title="Role"\n is-model-init="true"\n placeholder="Select role"\n is-back-placeholder="true"\n is-required="true">\n </custom-dropdown>\n </div>\n --\x3e </div> </div> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb45">Change password</h2> <div class="mb10"> <custom-input placeholder="Enter old password" ng-model="tfid.old_password" title="Old password" is-back-placeholder="true" type-input="password"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Enter new password" ng-model="tfid.new_password" title="New password" is-back-placeholder="true" type-input="password"> </custom-input> </div> <div style="margin-bottom: 35px"> <custom-input placeholder="Repeat new password" ng-model="tfid.repeat_new_password" title="Repeat new password" is-back-placeholder="true" type-input="password"> </custom-input> </div> <button class="brn-btn brn-primary ng-click-active" ng-click="changePassword()"> Change </button> </div> </div> \x3c!--\n <div class="settings-card-wrap">\n <div class="settings-card mb50">\n <h2 class="mb45">Plan <i\n class="material-icons" style="font-size: 15px; margin-left: 10px; color: #cccccc; cursor: pointer;" ng-click="showChangePlanModal()">edit</i></h2>\n <div class="mb10">\n {{user.plan.title}} (<span ng-if="user.plan.mode == \'subscription\' && user.plan.bots.limit">{{user.plan.bots.active}} of {{user.plan.bots.limit}}</span><span ng-if="user.plan.mode != \'subscription\' || user.plan.status == \'free\' || user.plan.status == \'trial\'">unlimited</span>)\n </div>\n <div class="mb10" ng-if="user.plan.mode == \'balance\' && user.plan.balance
42!== undefined">\n Balance: <span>{{getBalance()}}</span>\n </div>\n <div class="mb-10" ng-if="user.plan.expires">\n Expires: {{user.plan.expires|date}}\n </div>\n </div>\n </div>\n <div class="settings-card-wrap">\n <div class="settings-card mb50">\n <h2 class="mb45">Portal</h2>\n <div class="mb10">\n <div class="custom-input dropdown open no-arrow">\n <custom-dropdown\n ng-model="user.portal_id"\n array="search_portals | filter: $select.search"\n opt-description="title"\n opt-value="portal_id"\n title="Portal"\n is-model-init="true"\n placeholder="Select portal"\n is-back-placeholder="true"\n is-required="true">\n </custom-dropdown>\n </div>\n </div>\n </div>\n </div>\n --\x3e </div> <div class="flex-row" ng-if="transactions.length"> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb45">Transactions</h2> <div class="brn-table-wrap t-modern mb60" style="min-width: 700px"> <table class="brn-table common-table audience image-table no-hover" infinite-scroll="loadMoreTransactions()" infinite-scroll-disabled="inProgressTransactions"> <tbody> <tr> <td style="width:20%">Date</td> <td style="width:25%; padding-left: 2px">Details</td> <td style="width:25%">Amount</td> <td style="width:10%">Type</td> </tr> <tr ng-repeat="transaction in transactions"> <td style="cursor: default; color: #000"> {{transaction.date.substring(0, 10)}} </td> <td style="white-space:normal; cursor: default; color: #000"> <div style="width: 300px"> {{transaction.description}} </div> </td> <td style="cursor: default; color: #000"> <span ng-if="transaction.type == \'payment\'">+ {{transaction.amount}} USD</span> <span ng-if="transaction.type == \'invoice\'">- {{transaction.amount}} USD</span> </td> <td ng-if="transaction.type == \'payment\' && transaction.data.status == \'succeeded\'" style="cursor: default; color: #000"> Income </td> <td ng-if="transaction.type == \'payment\' && transaction.data.status == \'pending\'" style="cursor: default; color: #000"> Pending </td> <td ng-if="transaction.type == \'payment\' && transaction.data.status == \'failed\'" style="cursor: default; color:red"> Failed </td> <td ng-if="transaction.type == \'invoice\'" style="cursor: default; color: #000"> Outcome </td> </tr> <tr ng-if="inProgressTransactions"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!transactions.length && !inProgressTransactions"> <tr> <td colspan="6">No Transactions found.</td> </tr> </tfoot> </table> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/edit-proxy.html",'<div class="brn-table-wrap learning-entities"> <div class="container"> <div class="nav-sidebar"> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="flex-row"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb35">Edit proxy</h2> <div class="mb50"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_host}}" title="{{main.translations.title_host}}" ng-model="proxy.host" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title_password}}" title="{{main.translations.title_password}}" ng-model="proxy.password" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title_port}}" title="{{main.translations.title_port}}" ng-model="proxy.port" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title_country}}" title="{{main.translations.title_country}}" ng-model="proxy.country" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <div class="custom-input dropdown open no-arrow"> <span class="placeholder" ng-class="{\'placeholder-small placeholder-active\' : selected.user || isActive}"> User </span> <input type="text" ng-model="selected_user" ng-blur="isActive=false" ng-focus="isActive=true" uib-typeahead="user as user.name for user in search_users | filter:$viewValue | limitTo:8"> <span class="bar"></span> </div> </div> </div> <button ng-click="editProxy()" class="brn-btn brn-primary">Save Proxy</button> </div> </div> </div> </div> </div> </div>'),a.put("views/edit-role.html",'<div class="edit-role"> <div class="edit-role-header"> <div> <custom-input placeholder="Group name" ng-model="group.name" title="Group name" is-back-placeholder="true"> </custom-input> <custom-dropdown ng-model="group.role" array="[\'admin\', \'subadmin\', \'user\']" title="Role" is-model-init="true" placeholder="" ng-change="handleChangeType()" is-back-placeholder="true"> </custom-dropdown> </div> <div style="margin-top: 26px;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex; justify-content: left"> <span ng-if="role" ng-click="saveRole()" class="edit-role-action edit-role-action-save"> <i class="material-icons"> check </i> Save </span> <span ng-if="role" ng-click="deleteRole()" class="edit-role-action edit-role-action-delete"> <i class="material-icons"> close </i> Delete </span> <span ng-if="!role" ng-click="createRole()" class="edit-role-action edit-role-action-save"> <i class="material-icons"> check </i> Create </span> <span ng-if="!role" ng-click="close()" class="edit-role-action edit-role-action-delete"> <i class="material-icons"> close </i> Cancel </span> </div> </div> <div class="edit-role-content"> <div class="edit-role-column" ng-repeat="(level, resources) in group.permissions" ng-if="group.role == \'admin\' || group.role == \'subadmin\' || (group.role == \'user\' && level == \'bot\')"> <h3 style="text-transform: capitalize">{{level}}</h3> <div ng-repeat="(resource, value) in resources" class="card-checker"> <input ng-if="role" type="checkbox" ng-checked="value" ng-click="toggleSelection(level, resource, value)" id="edit_role_{{level}}{{resource}}"> <input ng-if="!role" type="checkbox" ng-checked="false" ng-click="toggleSelection(level, resource, value)" id="edit_role_{{level}}{{resource}}"> <label for="edit_role_{{level}}{{resource}}"> <span class="checker-ico"></span> {{getResourceName(resource)}} </label> </div> </div> </div> </div>'),a.put("views/edit.html",'<link rel="stylesheet" type="text/css" href="styles/braincubator/main.css" ng-if="page_id == \'braincubator\'"> <link rel="stylesheet" type="text/css" href="styles/braincubator/main.css" ng-if="page_id == \'go\'"> <link rel="stylesheet" type="text/css" href="styles/braincubator/main.css" ng-if="page_id == \'shipbrain\'"> <link rel="stylesheet" type="text/css" href="styles/braincubator/main.css" ng-if="page_id == \'home\'"> <link rel="stylesheet" type="text/css" href="https://brn.ai/styles/landing1/main.css?v=1" ng-if="page_id == \'estate\'"> <link rel="stylesheet" type="text/css" href="https://brnds.co/css/main.css" ng-if="page_id == \'brnds.co\'"> <link rel="stylesheet" type="text/css" href="https://brn.ai/styles/brnds/fixes.css" ng-if="page_id == \'brnds.co\'"> <link rel="stylesheet" type="text/css" href="https://brn.ai/styles/rsl_landing/main.css" ng-if="page_id == \'realty-street-leads\'"> <link rel="stylesheet" type="text/css" href="https://brn.ai/styles/ml_landing/main.css" ng-if="page_id == \'mavens-list\'"> <link rel="stylesheet" type="text/css" href="https://brn.ai/styles/home_new/main.css?v=1" ng-if="page_id == \'home_new\'"> <link rel="stylesheet" type="text/css" href="https://brn.ai/styles/closr/css/main.css" ng-if="page_id == \'closr\'"> <div text-angular ng-model="page"> </div> <div style="padding-top: 50px; padding-bottom: 50px; margin: auto"> <button type="button" class="brn-btn brn-primary brn-lg" style="margin: auto" ng-click="save()">SAVE CHANGES</button> </div>'),a.put("views/editmainde.html",'<div text-angular ng-model="page"> </div> <div style="padding-top: 50px; padding-bottom: 50px; margin: auto"> <button type="button" class="brn-btn brn-primary brn-lg" style="margin: auto" ng-click="save()">SAVE CHANGES</button> </div>'),a.put("views/editscenario-simple.html",'<div class="container" style="padding-right: 0; margin-right: -36px; margin-top: -30px"> <div style="margin-left: -36px" class="other-scenario"> <div class="simple-scenario-container" style="padding-top: 30px"> <div class="scenario-wrapper"> <div class="simple-scenario-wrapper"> <div class="simple-step"> <div class="row"> <div class="step-component green left dropdown-toggle dropdown text" uib-dropdown auto-close
42="outsideClick" style="cursor:pointer" id="{{scenarios.scenario_id}}" uib-dropdown-toggle> {{scenarios.keywords[0]? scenarios.keywords[0] : main.translations.catalog_textPlaceholder}} <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="{{scenarios.scenario_id}}" ng-click="dropdownClick($event)"> <div style="width: 190px; overflow-y: auto" class="dropdown-container"> <div class="mb10" ng-repeat="val in scenarios.keywords track by $index "> <custom-input placeholder="{{$index == 0 ?\'Start Message\' : \'Alt #\' + $index}}" ng-model="scenarios.keywords[$index]" title="{{$index == 0 ?\'Start Message\' : \'Alt #\' + $index}}" is-back-placeholder="true"> <i class="material-icons delete-icon" ng-if="$index != 0" ng-click="scenarios.keywords.splice($index, 1)"> close </i> </custom-input> </div> <div style="margin-top: 27px; margin-left: -7px" class="add-bot mb10" ng-click="scenarios.keywords.push(\'\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> </div> </div> </div> </div> <ul dnd-list="scenarios.steps" class="scenario-wrapper" dnd-allowed-types="[\'step\']"> <li ng-repeat="step in scenarios.steps"> <div> <div class="heder-container"> <div class="divider"></div> <div class="heder-center-elements"> <div dnd-draggable="step" ng-if="!scenarios.template" dnd-moved="dndMoved($index)" dnd-type="\'step\'" dnd-effect-allowed="move" dnd-selected="selected = step" class="heder-btn move-btn" ng-class="{\'selected\': selected === step}"> <i class="material-icons">open_with</i> </div> <div ng-if="scenarios.template" style="cursor:not-allowed" class="heder-btn move-btn" ng-class="{\'selected\': selected === step}"> <i class="material-icons">open_with</i> </div> <div class="heder" ng-class="{\'advanced\' : !isAvialible(step.component)}"> <span style="margin-left:8px"> <span ng-if="$index < 9">0</span>{{$index+1}}. </span> <span style="color: #999999; text-transform: uppercase" ng-if="!isAvialible(step.component)"> PRO {{step.component}} </span> <resize-input ng-if="isAvialible(step.component)" is-required="true" ng-model="step.name"> </resize-input> </div> <div class="heder-btn remove-btn" ng-click="deleteComponent($index)"> <i class="material-icons">delete</i> </div> </div> </div> <div class="simple-scenario-wrapper"> <simple-step ng-model="step" is-avialible="isAvialible(step.component)" translations="main.translations" delete-component="deleteComponent($index)" autosave="autosave()" cler-widget="clerWidget()" scopes="scopes"> </simple-step> </div> </div> </li> </ul> <div class="mb60"> <div class="heder-container"> <div class="divider add-step"></div> <div class="heder-center-elements"> <div class="heder add-step" ng-class="{\'advanced\' : !isAvialible(step.component)}"> add step </div> </div> </div> <div class="add-step-container"> <div class="add-step-btn" ng-click="addComponent(\'text\' , \'text\')"> <div class="icon"> <i class="material-icons">format_align_left</i> </div> <div class="text"> text </div> </div> <div class="add-step-btn" ng-click="addComponent(\'attachment\' , \'image\')"> <div class="icon"> <i class="material-icons">image</i> </div> <div class="text"> image </div> </div> <div class="add-step-btn" ng-click="addComponent(\'attachment\' , \'audio\')"> <div class="icon"> <i class="material-icons">music_note</i> </div> <div class="text"> audio </div> </div> <div class="add-step-btn" ng-click="addComponent(\'attachment\' , \'video\')"> <div class="icon"> <i class="material-icons">videocam</i> </div> <div class="text"> video </div> </div> <div class="add-step-btn" ng-click="addComponent(\'attachment\' , \'file\')"> <div class="icon"> <i class="material-icons">insert_drive_file</i> </div> <div class="text"> file </div> </div> <div class="add-step-btn" ng-click="addComponent(\'card\' , \'card\')"> <div class="icon"> <i class="material-icons">view_day</i> </div> <div class="text"> card </div> </div> <div class="add-step-btn" ng-click="addComponent(\'card\' , \'gallery\')"> <div class="icon"> <i class="material-icons">view_carousel</i> </div> <div class="text"> gallery </div> </div> <div class="add-step-btn" ng-click="addComponent(\'delay\' , \'delay\')"> <div class="icon"> <i class="material-icons">watch_later</i> </div> <div class="text"> delay </div> </div> <div class="add-step-btn" ng-click="addComponent(\'input\' , \'input\')"> <div class="icon"> <i class="material-icons">edit</i> </div> <div class="text"> input </div> </div> <div class="add-step-btn" ng-click="addComponent(\'offer\' , \'offer\')"> <div class="icon"> <i class="material-icons">add_shopping_cart</i> </div> <div class="text"> offer </div> </div> </div> </div> <div class="simple-scenario-right"> </div> </div> <div class="simple-widget-container"> <div class="simple-widget conversation"> <simple-test-widget is-new-scenario="!scenario_id? true : false" options="testOptions"> </simple-test-widget></div> </div> </div> </div>'), 43a.put("views/editscenario-simple2.html",'<div class="container" style="padding-right: 0; margin-right: -36px; margin-top: -30px"> <div style="margin-left: -36px" class="ig-scenario"> <div class="simple-scenario-container"> \x3c!-- <div class="scenario-wrapper">\n <div class="simple-scenario-wrapper">\n <div class="simple-step">\n <div class="row" >\n <div class="step-component green left dropdown-toggle dropdown text"\n uib-dropdown \n auto-close
43="outsideClick"\n style="cursor:pointer;" \n id="{{scenarios.scenario_id}}"\n uib-dropdown-toggle >\n\n {{scenarios.keywords[0]? scenarios.keywords[0] : main.translations.catalog_textPlaceholder}}\n\n <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="{{scenarios.scenario_id}}"\n ng-click="dropdownClick($event)">\n <div style="width: 190px; overflow-y: auto;" class="dropdown-container">\n <div class="mb10" ng-repeat="val in scenarios.keywords track by $index ">\n <custom-input \n placeholder="{{$index == 0 ?\'Start Message\' : \'Alt #\' + $index}}" \n ng-model="scenarios.keywords[$index]"\n title="{{$index == 0 ?\'Start Message\' : \'Alt #\' + $index}}"\n is-back-placeholder="true">\n <i class="material-icons delete-icon"\n ng-if="$index != 0"\n ng-click="scenarios.keywords.splice($index, 1)">\n close\n </i>\n </custom-input>\n </div>\n <div style="margin-top: 27px; margin-left: -7px;"\n class="add-bot mb10" \n ng-click="scenarios.keywords.push(\'\')">\n <i ng-include="\'images/svg/plus_icon.svg\'"></i>\n {{main.translations.addMore}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div> --\x3e <ul dnd-list="scenarios.steps" class="scenario-wrapper" dnd-allowed-types="[\'step\']"> <li dnd-draggable="step" dnd-moved="dndMoved($index)" dnd-type="\'step\'" dnd-selected="selected = step" ng-repeat="step in scenarios.steps" ng-if="step.component != \'scenario\'"> <div> <div class="simple-scenario-wrapper" ng-class="{\'is-card\' : step.component == \'card\' && !step.category}"> <div ng-if="!scenarios.template" style="position: relative" ng-class="{\'selected\': selected === step}"> <div class="pointer remove-btn" ng-class="{\'input-btn\' : step.component == \'input\'}" ng-click="deleteComponent($index)"> <i class="material-icons">close</i> </div> <simple-step2 ng-model="step" is-avialible="isAvialible(step.component)" scenarios-list="scenariosList" translations="main.translations" delete-component="deleteComponent($index)" autosave="autosave()" cler-widget="clerWidget()" scopes="scopes"> </simple-step2> </div> <div ng-if="scenarios.template" style="position: relative"> <div ng-if="step.component != \'offer\'" class="pointer remove-btn" ng-class="{\'input-btn\' : step.component == \'input\'}" ng-click="deleteComponent($index)"> <i class="material-icons">close</i> </div> <simple-step2 ng-model="step" is-avialible="isAvialible(step.component)" scenarios-list="scenariosList" translations="main.translations" delete-component="deleteComponent($index)" autosave="autosave()" cler-widget="clerWidget()" reinit-slider="reinitSlider(step)" scopes="scopes"> </simple-step2> </div> </div> <div class="heder-container" ng-if="isAvialible(step.component) &&\n step.component == \'input\'"> <div class="divider"></div> <div class="heder-center-elements"> <div class="heder"> <span style="color: #3d3d3d"> Waiting for Reply </span> </div> </div> </div> </div> </li> </ul> <div class="mb60"> <div class="heder-container"> <div class="divider add-step"></div> <div class="heder-center-elements"> <div class="heder add-step advanced"> add item </div> </div> </div> <div class="add-step-container" style="padding: 0 41px"> <div class="add-step-btn" ng-click="addComponent(\'text\' , \'text\')"> <div class="icon"> <i class="material-icons">format_align_left</i> </div> <div class="text"> text </div> </div> <div class="add-step-btn" ng-click="addComponent(\'attachment\' , \'media\')"> <div class="icon"> <i class="material-icons">photo_filter</i> </div> <div class="text"> media </div> </div> <div class="add-step-btn" ng-click="addComponent(\'attachment\' , \'audio\')"> <div class="icon"> <i class="material-icons">music_note</i> </div> <div class="text"> audio </div> </div> <div class="add-step-btn" ng-click="addComponent(\'input\' , \'menu\')"> <div class="icon"> <i class="material-icons">format_list_numbered</i> </div> <div class="text"> menu </div> </div> <div class="add-step-btn" ng-click="addComponent(\'input\' , \'input\')"> <div class="icon"> <i class="material-icons">edit</i> </div> <div class="text"> input </div> </div> <div class="add-step-btn" ng-click="addComponent(\'delay\' , \'delay\')"> <div class="icon"> <i class="material-icons">watch_later</i> </div> <div class="text"> delay </div> </div> <div class="add-step-btn" ng-click="addComponent(\'card\' , \'gallery\')"> <div class="icon"> <i class="material-icons">view_carousel</i> </div> <div class="text"> gallery </div> </div> <div class="add-step-btn" ng-click="addComponent(\'attachment\' , \'file\')"> <div class="icon"> <i class="material-icons">insert_drive_file</i> </div> <div class="text"> file </div> </div> <div class="add-step-btn" ng-click="addComponent(\'offer\' , \'offer\')"> <div class="icon"> <i class="material-icons">shopping_cart</i> </div> <div class="text"> product </div> </div> <div class="add-step-btn" ng-click="addComponent(\'card\' , \'store\', \'category_id\')"> <div class="icon"> <i class="material-icons">add_shopping_cart</i> </div> <div class="text"> store </div> </div> <div class="add-step-btn" ng-click="addComponent(\'tag\' , \'tag\')"> <div class="icon"> <i class="material-icons">loyalty</i> </div> <div class="text"> tag </div> </div> </div> </div> <div ng-class="{\'mb60\' : !isLastScenario}"> <div class="heder-container pointer" ng-click="addComponent(\'scenario\' , \'scenario\')"> <div class="divider add-step"></div> <div class="heder-center-elements"> <div class="heder add-step advanced"> <div class="circle-icon-container"> <i class="material-icons circle-icon" ng-class="{\'active\' : isLastScenario}">ic_check_circle</i> </div> <span>continue to another scenario</span> </div> </div> </div> <div class="simple-scenario-wrapper" ng-if="isLastScenario"> <div class="simple-step"> <div class="row"> <div class="step-component ligth attachment delay pointer" uib-dropdown auto-close
43="outsideClick" id="next_step" uib-dropdown-toggle> <div class="attachment-container"> <i class="material-icons" style="width: 20px;left: -135px" ng-class="{\'active\' : lastScenario.properties.scenario}">ic_reply_all</i> <span>{{lastScenarioName? lastScenarioName: \'select next scenario\'}}</span> </div> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="next_step" ng-click="dropdownClick($event)"> <div class="dropdown-container" style="width: 225px; font-weight: 400"> <custom-scroller is-shadow="false" paddings="10px 0px 10px 01px" axis="y" visible-scrols="true" is-table="false" style="max-height: 150px" height="auto"> \x3c!-- height="{{ 42 + 23*scenariosList.length > 150 ? \'150\' : 42 + 23*scenariosList.length}}px" --\x3e <div style="color: #969696; font-size: 12px; font-style: italic" class="mb5"> Run scenario on selection </div> <div ng-repeat="scenario in scenariosList track by $index" class="scenario-lis-item" ng-class="{\'active\': scenario.value == lastScenario.properties.scenario}" ng-click="switchMenuStepScenario(scenario)"> {{scenario.name}} </div> </custom-scroller> </div> </div> </div> </div> </div> </div> </div> <div class="simple-scenario-right2"> </div> </div> <div class="simple-widget-container" style="display:flex; width: calc(100% - 780px)"> <div class="simple-preview-container"> <div class="simple-preview"> <div> <div class="preview-heder"> Preview </div> <div class="demo-btn" ng-click="TestWidget()"> Live Demo </div> </div> <div class="simple-preview-content"> <div class="header" style="box-shadow: 0px 3px 7px 0 rgba(0, 0, 0, 0.15); background: #0084ff; color: #fff !important; height: 45px"> <div class="header-firsline" style="height: 45px;display: inline-block"> <i class="material-icons left-icon" style="color: #fff; top: 12px; font-size: 20px; right: -2px">arrow_back</i> <img src="{{botNav.botInfo.image}}" class="avatar" style="left: 28px;top: 7px"> \x3c!-- <img src="images/other/cam.png" class="right-icon"> --\x3e <span style="position: relative; left: 33px; top: 7px">{{botNav.botInfo.name}}</span> </div> \x3c!--\n <div class="header-secondline">\n \n </div>\n --\x3e </div> <div class="warper"> <custom-scroller is-shadow="false" paddings="14px 11px" axis="y" visible-scrols="true" is-table="false" style="max-height: 100%" height="100%"> <div class="warper-container"> <div class="messages-container"> <div class="user-message"> User messages to bot </div> </div> <div ng-repeat="step in scenarios.steps" class="messages-container"> <div ng-if="step.component==\'text\'"> <img src="{{botNav.botInfo.image}}" class="avatar" ng-if="$index == lastAvatarStepIndex"> <div ng-if="step.properties.content" class="system-message" style="{{$index != lastAvatarStepIndex? \'left: 37px;\': \'\'}}"> {{step.properties.content}} </div> <div ng-if="!step.properties.content" class="system-error" style="{{$index != lastAvatarStepIndex? \'left: 37px;\': \'\'}}"> <span class="error-ico-container"> <i class="material-icons">ic_error</i> </span> <span>Empty message</span> </div> </div> <div ng-if="step.component==\'attachment\'"> <img src="{{botNav.botInfo.image}}" class="avatar" ng-if="$index == lastAvatarStepIndex"> <div ng-if="step.properties.type == \'image\' && step.properties.url"> <img src="{{step.properties.url}}" class="system-message" style="{{$index != lastAvatarStepIndex? \'left: 37px; padding: 0;\': \'padding: 0;\'}}"> </div> <div ng-if="step.properties.type == \'video\' && step.properties.url"> <video class="system-message" style="{{$index != lastAvatarStepIndex? \'left: 37px; padding: 0;\': \'padding: 0;\'}}" controls src="{{trustSrc(step.properties.url)}}"> </video> </div> <div ng-if="step.properties.type == \'audio\' && step.properties.url"> <audio class="system-message" style="{{$index != lastAvatarStepIndex? \'left: 37px; padding: 0;\': \'padding: 0;\'}};border:0" controls src="{{trustSrc(step.properties.url)}}"> </audio> </div> <div class="system-message downloadFile" ng-if="step.properties.type==\'file\' && step.properties.url" style="{{$index != lastAvatarStepIndex? \'left: 37px;\': \'\'}};
43display: table-cell; vertical-align: middle;;width:200px;padding-top: 0 !important"> <i class="material-icons" style="color: #94cc01;position: relative;top: 15px">file_download</i> <span>{{trustSrcName(step.properties.url)}} </span> <div class="download-file df-widget" ng-click="downloadFile(step.properties.url)">Download</div> </div> <div ng-if="!step.properties.url" class="system-error" style="{{$index != lastAvatarStepIndex? \'left: 37px;\': \'\'}}"> <span class="error-ico-container"> <i class="material-icons">ic_error</i> </span> <span>Missing media</span> </div> </div> <div ng-if="step.component==\'input\'"> <img src="{{botNav.botInfo.image}}" class="avatar" style="display: inline-block" ng-if="$index == lastAvatarStepIndex"> <div ng-if="step.properties.reply_type == \'action\'"> <div ng-if="!step.properties.quick_replies_error"> <div class="messages-container inline-container"> <img ng-if="step.properties.image" src="{{step.properties.image}}" class="system-message" style="{{$index != lastAvatarStepIndex? \'left: 37px; padding: 0;\': \'padding: 0;\'}}"> <div ng-if="!step.properties.image" class="system-message" style="{{$index != lastAvatarStepIndex? \'left: 37px;\': \'\'}}"> <div ng-repeat="reply in step.properties.quick_replies track by $index"> {{$index+1}}. {{reply.content}} </div> </div> </div> <div class="messages-container inline-container" style="float: right"> <div class="user-message"> User replies as expected </div> </div> </div> <div ng-if="step.properties.quick_replies_error" class="system-error" style="{{$index != lastAvatarStepIndex? \'left: 37px;\': \'\'}}"> <span class="error-ico-container"> <i class="material-icons">ic_error</i> </span> <span>Missing option</span> </div> </div> <div ng-if="step.properties.reply_type != \'action\'"> <div ng-if="step.properties.reply_type && step.properties.question"> <div class="messages-container inline-container"> <div class="system-message" style="{{$index != lastAvatarStepIndex? \'left: 37px;\': \'\'}}"> {{step.properties.question}} </div> </div> <div class="messages-container inline-container" style="float: right"> <div class="user-message"> User replies as expected </div> </div> </div> <div ng-if="!step.properties.question" class="system-error" style="{{$index != lastAvatarStepIndex? \'left: 37px;\': \'\'}}"> <span class="error-ico-container"> <i class="material-icons">ic_error</i> </span> <span>Empty message</span> </div> <div ng-if="!step.properties.reply_type" class="system-error" style="{{!step.properties.question || $index != lastAvatarStepIndex? \'left: 37px; margin-right: 35px;\': \'margin-right: 30px;\'}}"> <span class="error-ico-container"> <i class="material-icons">ic_error</i> </span> <span>Missing Reply type</span> </div> </div> </div> <div ng-if="step.component == \'offer\'"> <img src="{{botNav.botInfo.image}}" class="avatar" style="display: inline-block" ng-if="$index == lastAvatarStepIndex"> <div class="product-card" ng-if="step.properties.product_id" style="left: 37px; width: 196px; height: 195px; position: relative; margin-bottom: 12px; border-color: #efefef"> <div class="product-header" style="height: 87px;background-image: url({{step.properties.image}})"> \x3c!-- <img ng-src="{{step.properties.image}}" alt="" class="img product-img" style="height: 87px !important;">--\x3e </div> <div class="product-body" style="padding:12px; background-color: #efefef; min-height: 82px"> <div class="product-title" style="font-size: 14px">{{step.properties.name}}</div> <div class="product-description" style="font-size: 12px;margin-bottom: 0px;max-height: 43px;\n overflow: hidden">{{step.properties.text}}</div> </div> <div class="product-footer" style="height: 27px;\n line-height: 27px;\n bottom: 0;\n width: 100%;\n border-bottom-right-radius: 20px;\n border-bottom-left-radius: 20px"> {{step.properties.button_title}} </div> </div> <div ng-if="!step.properties.product_id" class="system-error" style="{{$index != lastAvatarStepIndex? \'left: 37px;\': \'\'}}"> <span class="error-ico-container"> <i class="material-icons">ic_error</i> </span> <span>Missing product</span> </div> </div> <div class="step-store step-card" ng-if="step.component==\'card\'"> <img src="{{botNav.botInfo.image}}" class="avatar" style="display: inline-block" ng-if="$index == lastAvatarStepIndex"> \x3c!-- <ui-carousel\n slides="step.properties.elements"\n slides-to-show="2"\n slides-to-scroll="1"\n initial-slide="1"\n autoplay="false"\n\n dots="false"> --\x3e \x3c!-- ng-if="slickDataLoad" --\x3e <slick settings="slickConfig" ng-if="!step.isSliderLoaded" style="margin-bottom: 12px"> <div class="slick-slide preview-card" ng-repeat="element in step.properties.elements"> <div ng-if="element.image" class="preview-card__header" style="background-image: url({{element.image}})"> </div> <div class="preview-card__body"> <p class="preview-card__title"> {{element.title}} </p> <p class="preview-card__description"> {{element.text}} </p> </div> <div class="preview-card__buttons" ng-if="element.buttons && element.buttons.length"> <a class="preview-card__button" ng-repeat="button in element.buttons"> {{button.title}} \x3c!-- if button is empty --\x3e <span ng-if="!button.title"> No title </span> </a> \x3c!-- if button is empty --\x3e </div> </div> </slick>
43 \x3c!-- <carousel-item>\n <div class="product-header" style="height: 87px;background-image: url({{item.image}})">\n </div>\n\n <div class="product-body" style="padding:12px; background-color: #efefef; min-height: 82px;">\n <div class="product-title" style="font-size: 14px;">{{item.title}}</div>\n\n <div class="product-description" style="font-size: 12px;margin-bottom: 0px;max-height: 43px;\n overflow: hidden;">Lorem ipsum dolor sit amet, consectetur adipiscing eli</div>\n </div>\n\n <div class="product-footer" style="position: absolute; height: 27px; line-height: 27px; bottom: 0; width: 100%; border-bottom-right-radius: 44%; border-bottom-left-radius: 44%;">\n Buy now for {{item.text}}\n </div>\n </carousel-item> --\x3e \x3c!-- </ui-carousel> --\x3e </div> </div> </div> </custom-scroller> </div> </div> </div> </div> <div class="simple-widget conversation" ng-show="isShowTest" id="simple_test_widget_container"> <div class="resizer" id="simple_test_widget_resizer"></div> <simple-test-widget is-show="isShowTest" is-new-scenario="!scenario_id? true : false" options="testOptions"> </simple-test-widget></div> </div> </div> </div>'),a.put("views/editscenario.html",'<div class="container scenario-wrapper" style="padding-right: 0; margin-right: -36px; margin-top: -30px"> <div class="scenario-wrapper" style="margin-left: -86px"> <div class="scenario-container" style="border-top: none"> <div class="scenario-card-container"> <div class="scenario-card" style="margin-top: 36px"> <div class="section section-header"> <span class="step-header"> <span>Step 0.</span> </span> <span class="step-name"> Start Messages </span> </div> <div class="section-container active"> <div class="section"> <div class="mb20 flex-row" ng-repeat="val in scenarios.keywords track by $index"> <div class="medium-item mb10"> <custom-input placeholder="Start Message" ng-model="scenarios.keywords[$index]" title="Start Message" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container" ng-if="$index != 0"> <div class="delete-item" ng-click="scenarios.keywords.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb10"> <div class="add-bot" ng-click="scenarios.keywords.push(\'\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> </div> </div> <div class="scenario-card-helper"> <div class="scenario-wrapper"> <div class="simple-scenario-wrapper"> <div class="simple-step"> <div class="row"> <div class="step-component green left dropdown-toggle dropdown text pro-heder"> {{scenarios.keywords[0]}} </div> </div> </div> </div> </div> </div> </div> <div dnd-list="scenarios.steps" dnd-drop="dropCallback(index, item, external, type)" class="scenario-list" style="background-color: #fafafa"> <div ng-repeat="step in scenarios.steps track by $index" class="scenario-container"> <div class="scenario-card-container"> <scenario-component component="{{step}}" folder="scenarios" index="{{$index}}" is-open="{{newStepIndex[$index]}}"> </scenario-component> </div> <div class="scenario-card-helper"> <scenario-helper-component component="{{step}}" index="{{$index}}" translations="main.translations" options="scenarioHelperOptions"> </scenario-helper-component> </div> </div> <div class="scenario-container" style="height: 100vh; border-top: none"> <div class="scenario-card-container"> </div> <div class="scenario-card-helper"> </div> </div> </div> </div> </div>'),a.put("views/email.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">Email</h2> </div> <form ng-submit="updateConnection()"> <div class="mb30"> <custom-input placeholder="Email" ng-model="email.provider_data.email" title="Email" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Username" ng-model="email.provider_data.username" title="Username" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input type-input="password" placeholder="Password" ng-model="email.provider_data.password" title="Password" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Imap Host" ng-model="email.provider_data.host" title="Imap Host" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Imap Port" ng-model="email.provider_data.port" title="Port" is-required="true" is-back-placeholder="true"> </custom-input> <custom-dropdown ng-model="email.provider_data.tls" array="tls" opt-description="name" opt-value="value" title="TLS" ng-init="tls[0]" placeholder="" is-back-placeholder="true"> </custom-dropdown> <custom-input placeholder="SMTP Host" ng-model="email.provider_data.smtp_host" title="SMTP Host" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="SMTP Port" ng-model="email.provider_data.smtp_port" title="SMTP Port" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="email.provider_data.password" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/entity-detail.html",'\x3c!-- <div class="row edit-entity">\n <div class="col-lg-4 col-xs-12">\n <div class="fixed-card">\n <h3 class="text-center">Edit entity</h3>\n \n <input ng-model="entity.name" type="text">\n <br><br>\n \n <div class="add-entity">\n <input ng-model="query" type="text" placeholder="Search user expressions...">\n \n <img src="/images/searchicon.png" class="add-icon" ng-click="addValue()">\n </div> \n <br><br>\n \n <div class="add-entity">\n <input ng-model="new_entity_value" type="text" placeholder="Add values..." ng-keyup="$event.keyCode == 13 && addValue()">\n \n <img src="/images/ic_add_3x.png" class="add-icon" ng-click="addValue()">\n </div> \n </div>\n </div>\n \n <div class="col-lg-4 col-xs-12">\n <div class="fixed-card">\n <h3 class="text-center">Values</h3>\n <div class="custom-chips">\n <div class="default-chip" ng-repeat="value in entity.values | filter:query track by $index ">\n {{value}}\n <img src="images/svg/letter-x.svg" ng-click="entity.values.splice($index, 1)" class="remove-chip">\n </div>\n </div>\n </div>\n </div>\n</div> --\x3e <div class="flex-row"> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb50">Edit entity</h2> <div class="mb40"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="entity.name" title="{{main.translations.title_name}}" enter="updateEntity()" is-required="true" is-back-placeholder="true"> </custom-input> </div> <button class="brn-btn brn-primary" ng-click="updateEntity()"> {{main.translations.save_btn}} </button> </div> </div> <div class="settings-card-wrap"> <div class="settings-card big mb50"> <h2 class="mb50">User expressions</h2> <div class="mb40 flex-row"> <div class="inline-block top"> <custom-input placeholder="User Expression" ng-model="new_entity_value" enter="addValue()" title="User Expression" is-back-placeholder="true"> </custom-input> </div> <div class="inline-block top"> <button class="brn-btn brn-primary minimal" ng-click="addValue()"> Add </button> </div> </div> </div> <div class="brn-table-wrap t-modern table-54 minimal mb60"> <span class="round-btn" ng-click="swapFilter()" ng-class="{\'round-btn-search\' : !filters.isActive, \'round-btn-cancel\' : filters.isActive}"> <i class="material-icons" ng-if="filters.isActive">close</i> <i class="material-icons" ng-if="!filters.isActive">search</i> </span> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-auto-table-btn-padding="true"> <table class="brn-table"> <tbody> <tr class="header-image"> <td> Message </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr class="no-hover"> <td colspan="2" class="filters" ng-class="{\'filters-active\' : filters.isActive}"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}"> <div class="inline-block top"> <custom-input placeholder="Search" ng-model="filters.searchKeyword" title="Search" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px"> search </i> </custom-input> </div> </div> </td> </tr> <tr ng-repeat="(key, value) in entity.values | filter:filters.searchKeyword" ng-class="{\'first-line\' : key == 0}"> <td> {{value}} </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(key)" title="Delete element"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-show="inProgress"> <td colspan="2"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!entity.values.length || (entity.values | filter:filters.searchKeyword).length == 0"> <tr> <td colspan="2">No Expressions yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div>'),a.put("views/expression-edit.html",'<div class="modal-header text-center"> <h3 class="modal-title">Expression title</h3> </div> <div class="modal-body facebook-modal"> <select ng-model="currentEntity.entity_id" ng-init="currentEntity.entity_id = currentEntity.entity_id || entities[0].entity_id" ng-options="option.entity_id as option.name for option in entities"></select> <pre>{{intent.expressions | json}}</pre> <br> <button type="button" class="brn-btn brn-primary" ng-click="addExpression()">create</button> </div>'), 44a.put("views/facebook.html",'<div class="flex-row create-bot flex-row-start"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{currentPage? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">{{$resolve.translations.facebook}}</h2> </div> <div class="mb20"> <custom-dropdown ng-model="selectedPage" array="pages" opt-description="name" opt-value="" ng-init="currentPage? selectedPage : null" title="{{$resolve.translations.facebookPage}}" placeholder="{{$resolve.translations.facebookPage}}" inactive-placeholder="true" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <div class="mb20"> <custom-input placeholder="{{$resolve.translations.activateBy}}" ng-model="page.get_started.content" title="{{$resolve.translations.activateBy}}" is-back-placeholder="true"> </custom-input> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="page.get_started.status" id="enable_start_keyword"> <label for="enable_start_keyword"> <span class="checker-ico"></span> <span>{{$resolve.translations.activate}}</span> </label> </div> </div> <div class="mb20"> <div class="mb20"> <custom-input placeholder="Welcome text" ng-model="page.greeting_text.content" title="Welcome text" is-back-placeholder="true"> </custom-input> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="page.greeting_text.status" id="enable_greeting_text"> <label for="enable_greeting_text"> <span class="checker-ico"></span> <span>{{$resolve.translations.activate}}</span> </label> </div> </div> <div class="mb20"> <div class="mb10 tags-container"> <span class="title">{{$resolve.translations.persistanceMenu}}</span> </div> <div class="mb10 card-checker"> <input type="checkbox" ng-model="page.menu.content.input_disabled" id="menu_input_disabled"> <label for="menu_input_disabled"> <span class="checker-ico"></span> <span>{{$resolve.translations.setting_conections_fb_disableInputCheckbox}}</span> </label> </div> <div class="mb10 card-checker"> <input type="checkbox" ng-model="page.menu.status" id="menu_status"> <label for="menu_status"> <span class="checker-ico"></span> <span>{{$resolve.translations.setting_conections_fb_enableMenuCheckbox}}</span> </label> </div> </div> <div class="section-bottom-toogle" ng-class="{active : aditional}"> <div ng-click="toogleAditional()"> <span>{{$resolve.translations.additionalOptions}}</span> <i class="material-icons">keyboard_arrow_down</i> </div> </div> <div class="section-bottom" ng-class="{active : aditional}"> <div class="dropdown-container" ng-class="{active : aditional}"> <div class="mb20"> <div class="tags-container"> <span class="bootom-text">{{$resolve.translations.whitelisted_domains}}</span> </div> <div ng-repeat="domain in page.whitelisted_domains track by $index"> <div> <custom-input placeholder="{{$resolve.translations.url}}" ng-model="page.whitelisted_domains[$index]" http-prefix title="{{$resolve.translations.url}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb20"> <div class="delete-smal" ng-click="deleteDomainFromArray($index)"> <i class="material-icons"> close </i> {{$resolve.translations.store_remove}} </div> </div> </div> <div class="add-smal" ng-click="addDomain()"> <i class="material-icons"> add </i> {{$resolve.translations.addDomain}} </div> </div> <div class="mb20"> <div class="tags-container"> <span class="bootom-text">{{$resolve.translations.buttons}}</span> </div> <div ng-repeat="btn in page.menu.content.buttons track by $index"> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.title}}" ng-model="btn.title" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-change="handleTypeBtn(btn)" ng-model="btn.type" array="btnTypes" opt-description="name" opt-value="value" ng-init="btn.type == btnTypes[0].value? btnTypes[0] : btn.type == btnTypes[1].value? btnTypes[1] : btnTypes[2]" title="{{$resolve.translations.facebookPage}}" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb30" ng-show="btn.type == \'web_url\'"> <custom-input placeholder="{{$resolve.translations.url}}" ng-model="btn.url" title="{{$resolve.translations.url}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-show="btn.type == \'postback\'"> <custom-input placeholder="{{$resolve.translations.postback}}" ng-model="btn.payload" title="{{$resolve.translations.postback}}" is-back-placeholder="true"> </custom-input> </div> <div class="submenu-btn mb10" ng-show="btn.type == \'nested\' && btn.call_to_actions.length < 5"
44ng-click="showSubMenu(btn, 1, $index)"> {{$resolve.translations.submenu}} <i class="material-icons">keyboard_arrow_right</i> </div> <div ng-show="btn.type == \'web_url\'"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="btn.messenger_extensions" id="enable_messenger_extensions_{{$index}}"> <label for="enable_messenger_extensions_{{$index}}"> <span class="checker-ico"></span> <span>{{$resolve.translations.webview}}</span> </label> </div> </div> <div class="mb20"> <div class="delete-smal" ng-click="deleteBtnFromArray(page.menu.content.buttons, $index, 0)"> <i class="material-icons"> close </i> {{$resolve.translations.store_remove}} </div> </div> </div> <div class="add-smal" ng-click="addBtn()"> <i class="material-icons"> add </i> {{$resolve.translations.addButton}} </div> </div> <div class="mb20"> <div class="tags-container"> <span class="bootom-text">{{$resolve.translations.pushNotifications}}</span> </div> <div class="mb10"> <custom-dropdown ng-model="page.notifications.text" array="NotificationsTypes" opt-description="name" opt-value="value" title="{{$resolve.translations.text}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-dropdown ng-model="page.notifications.cards" array="NotificationsTypes" opt-description="name" opt-value="value" title="{{$resolve.translations.cards}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-dropdown ng-model="page.notifications.buttons" array="NotificationsTypes" opt-description="name" opt-value="value" title="{{$resolve.translations.buttons}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-dropdown ng-model="page.notifications.attachments" array="NotificationsTypes" opt-description="name" opt-value="value" title="{{$resolve.translations.store_attachments}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <button ng-click="saveConnection()" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px"> {{$resolve.translations.save_btn}} </button> <button ng-if="currentPage" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px"> {{$resolve.translations.delete}} </button> </div> </div> </div> <div class="flex-col-small" ng-if="subBtn"> <div class="create-bot-wrap"> <div class="mb30"> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="cancelSubBtn()"> close </i> {{$resolve.translations.settings_conections_editSubmenu}} </div> </div> <div class="mb10"> <div ng-repeat="secondBtn in subBtn.call_to_actions"> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.title}}" ng-model="secondBtn.title" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-change="handleTypeBtn(secondBtn)" ng-model="secondBtn.type" array="btnTypes" opt-description="name" opt-value="value" ng-init="secondBtn.type == btnTypes[0].value? btnTypes[0] : secondBtn.type == btnTypes[1].value? btnTypes[1] : btnTypes[2]" title="{{$resolve.translations.facebookPage}}" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-show="secondBtn.type == \'web_url\'"> <custom-input placeholder="{{$resolve.translations.url}}" ng-model="secondBtn.url" title="{{$resolve.translations.url}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-show="secondBtn.type == \'postback\'"> <custom-input placeholder="{{$resolve.translations.postback}}" ng-model="secondBtn.payload" title="{{$resolve.translations.postback}}" is-back-placeholder="true"> </custom-input> </div> <div class="submenu-btn mb10" ng-show="secondBtn.type == \'nested\' && secondBtn.call_to_actions.length < 5" ng-click="showSubMenu(secondBtn, 2, $index)"> {{$resolve.translations.submenu}} <i class="material-icons">keyboard_arrow_right</i> </div> <div class="mb20"> <div class="delete-smal" ng-click="deleteBtnFromArray(subBtn, $index, 1)"> <i class="material-icons"> close </i> {{$resolve.translations.store_remove}} </div> </div> </div> <div class="add-smal" ng-click="addBtnsToBtn(subBtn)"> <i class="material-icons"> add </i> {{$resolve.translations.addButton}} </div> </div> <div> <button ng-click="applySubBtn()" class="brn-btn brn-primary" style="min-width: 0px"> {{$resolve.translations.apply}} </button> </div> </div> </div> <div class="flex-col-small" ng-if="subBtnLvl2"> <div class="create-bot-wrap"> <div class="mb30"> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="cancelSubBtnLvl2()"> close </i> {{$resolve.translations.Submenu_lvl2}} </div> </div> <div class="mb10"> <div ng-repeat="lastBtn in subBtnLvl2.call_to_actions"> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.title}}" ng-model="lastBtn.title" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-change="handleTypeBtn(lastBtn)" ng-model="lastBtn.type" array="btnTypesLvl2" opt-description="name" opt-value="value" ng-init="lastBtn.type == btnTypesLvl2[0].value? btnTypesLvl2[0] : btnTypesLvl2[1]" title="{{$resolve.translations.facebookPage}}" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-show="lastBtn.type == \'web_url\'"> <custom-input placeholder="{{$resolve.translations.url}}" ng-model="lastBtn.url" title="{{$resolve.translations.url}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-show="lastBtn.type == \'postback\'"> <custom-input placeholder="{{$resolve.translations.postback}}" ng-model="lastBtn.payload" title="{{$resolve.translations.postback}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb20"> <div class="delete-smal" ng-click="deleteBtnFromArray(subBtnLvl2, $index, 2)"> <i class="material-icons"> close </i> {{$resolve.translations.store_remove}} </div> </div> </div> <div class="add-smal" ng-click="addBtnsToBtn(subBtnLvl2)"> <i class="material-icons"> add </i> {{$resolve.translations.addButton}} </div> </div> <div> <button ng-click="applySubBtnLvl2()" class="brn-btn brn-primary" style="min-width: 0px"> {{$resolve.translations.apply}} </button> </div> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/footer-registration.html",'<div> <div class="white-label" ng-show="isRegistrationPanel"> <div class="background"></div> <h2 class="center mb60">WHITE LABEL PARTNER REGISTRATION</h2> <div class="text-center mb50"> <p>Selling chatbots without worrying about the technology and the development. Lets us take care of all the technological aspects while you concentrate on doing what you do best - sales.</p> </div> <div class="inline-block fb-text">to register with one click, just</div> <div id="fb-messenger_witlabel_registration_panel" class="inline-block fb-btn"> <div class="_3mc8"> <a href="https://www.messenger.com/t/1237860396355276" target="_blank" class="_17n5 _
4417n8"> <span class="_5x83"> <span class="_31ab"> <i class="_h2g img sp_h3zxooCWEsA sx_b375aa"></i> Message Us </span> </span> </a> </div> </div> <div class="inline-block fb-text">with your account</div> </div> \x3c!--\n <div class="footer-registration" ng-show="isRegistrationPanel">\n <div class="footer-container">\n <div class="inline mb10">\n <custom-input \n placeholder="Name"\n ng-model="name"\n title="Name"\n enter="send()"\n is-back-placeholder="true">\n </custom-input>\n </div>\n <div class="inline">\n <custom-input \n placeholder="Email"\n ng-model="email"\n title="Email"\n type-input="email"\n enter="send()"\n is-back-placeholder="true">\n </custom-input>\n </div>\n <button ng-if="!isWhiteLabelBtn" class="brn-btn brn-transparent-reverce inline" ng-click="send()" onClick="ga([\'_trackEvent\', \'KnopkaWL\', \'WhiteLabel\']);">\n Register for White Label\n </button>\n <button ng-if="isWhiteLabelBtn" class="brn-btn brn-transparent-reverce inline" ng-click="send()" onClick="ga([\'_trackEvent\', \'KnopkaWL2\', \'WhiteLabel2\']);">\n Register for White Label\n </button>\n\n <div class="fb-btn-container inline">\n <button ng-if="!isWhiteLabelBtn" class="brn-btn brn-transparent-reverce inline" ng-click="send()" onClick="ga([\'_trackEvent\', \'KnopkaWL\', \'WhiteLabel\']);">\n Register for White Label\n </button>\n <button ng-if="isWhiteLabelBtn" class="brn-btn brn-transparent-reverce inline" ng-click="send()" onClick="ga([\'_trackEvent\', \'KnopkaWL2\', \'WhiteLabel2\']);">\n Register for White Label\n </button>\n <div id="fb-footer-registration-Btn" class="fb-btn">\n </div>\n </div> \n\n </div>\n </div>\n--\x3e <div class="contact-us contact-us-p-section" ng-if="isContactUsPanel" ng-class="{\'short-form\' : !isRegistrationPanel}"> <div class="contact-us-tf"> <img src="images/other/tf_smal2.png" alt=""> </div> <span class="copyright">2020 © TechFunder. All rights reserved.</span> <p> <a href="tel:+4922167785187">+49 221 677 85 187</a> <a href="tel:+491711254074">+49 171 125 40 74</a> <a href="mailto:[email protected]">[email protected]</a> </p> <p class="mb10"> <a href="https://app.brnz.ai" target="" ng-if="!isHomePage">Home</a> <a href="https://app.brnz.ai/blog/" target="_blank">Blog</a> <a href="https://app.brnz.ai/docs/" target="_blank">Documentation</a> <a href="/privacy" target="">Privacy Policy</a> <a href="/imprint" target="">Imprint</a> \x3c!-- <a href="/en/whitelabel" target="">White Label</a> --\x3e </p> </div> </div>'),a.put("views/forbidden.html","<div class=\"service-page\"> <div class=\"service-text\"> <h1>403</h1> <h3>{{main.currentLang === 'de'? 'Sie sind nicht dafür autorisiert': 'You are not authorized for this'}}</h3> <a ui-sref=\"home\" class=\"brn-btn brn-transparent\" ng-click=\"back()\"> {{main.currentLang === 'de'? 'Zurück zur Startseite': 'Back to home'}} </a> </div> </div>"),a.put("views/getstarted.html",'<div class="modal-header"> <h3>Get started</h3> </div> <div class="modal-body"> <form class="row row-flex" name="vm.form" novalidate> <div class="col-xs-12 col-md-6"> <div class="row"> <div class="col-xs-12"> <input type="text" ng-model="vm.name" placeholder="{{main.translations.title_name}}" name="name"> </div> <div class="col-xs-12"> <input type="email" ng-model="vm.email" placeholder="Email" name="email"> </div> <div class="col-xs-12"> <input type="text" ng-model="vm.url" placeholder="Url" name="url"> </div> </div> </div> <div class="col-xs-12 col-md-6"> <div class="row"> <div class="col-xs-12"> <div class="captcha"> <input type="text" ng-model="vm.captcha" placeholder="Captcha"> </div> </div> <div class="col-xs-12"> <textarea placeholder="{{main.translations.settings_question}}" ng-model="vm.question"></textarea> </div> <div class="col-xs-12"> <button type="submit" class="brn-btn brn-primary" ng-disabled="vm.form.$invali
44d">Send</button> </div> </div> </div> </form> <pre>\n {{vm.form | json }}\n </pre> </div>'),a.put("views/growth-fb-comments.html",'<div> <div class="bots-empty fb-empty" ng-if="!isFBConnection"> <div class="bots-empty-container" ng-click="createConection()"> <img class="bots-empty-img" ng-src="../images/growth-empty.png" alt=""> <div class="bots-empty-text"> <div class="text-first-line"> Facebook connection required </div> <div class="text-second-line"> Click here to open setup wizard </div> </div> </div> </div> <div class="flex-row" ng-if="isFBConnection"> <div class="settings-card"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb40">Coments Auto Reply</h2> <div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="comments.active" id="isActiveChecker" class="ng-pristine ng-untouched ng-valid"> <label for="isActiveChecker"> <span class="checker-ico"></span> Enable autoreply in Posts </label> </div> </div> <div ng-if="posts.length > 0"> <div class="mb25" ng-if="!posts[0].message"> <custom-dropdown ng-model="comments.post" array="posts" opt-description="story" opt-value="" title="Selected post" is-model-init="true" placeholder="For all posts" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb25" ng-if="posts[0].message"> <custom-dropdown ng-model="comments.post" array="posts" opt-description="message" opt-value="" title="Selected post" is-model-init="true" placeholder="For all posts" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div ng-if="posts.length == 0"> <div class="mb25"> <custom-dropdown ng-model="comments.post" array="posts" opt-description="" opt-value="" title="Selected post" is-model-init="true" placeholder="For all posts" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div ng-if="comments.post"> <div class="fb-posts" ng-if="comments.post" style="margin-top: 15px; margin-bottom: 10px"> <div class="mb10" style="font-size: 12px;text-align: left; color: #94cc25"> Post detail </div> <div class="post-block" style="width: 100%"> <div class="post-data"> <span>Submitted </span><span am-time-ago="comments.post.created_time"></span> </div> <div class="post-text mb20"> <a ng-if="comments.post.link" href="{{comments.post.link}}" target="_blank"> <p ng-if="comments.post.message">{{comments.post.message}}</p> <p ng-if="!comments.post.message">{{comments.post.story}}</p> </a> <a ng-if="!comments.post.link" href="https://www.facebook.com/{{connection.provider_data.page_id}}" target="_blank"> <p ng-if="comments.post.message">{{comments.post.message}}</p> <p ng-if="!comments.post.message">{{comments.post.story}}</p> </a> </div> </div> </div> </div> <div> <div ng-class="{\'mb10\' : comments.keywords.length > 0}" style="font-size: 12px;text-align: left; color: #94cc25"> React on keywords </div> <div> <div ng-repeat="(key, value) in comments.keywords" style="margin-right: 5px; display: inline-block"> <span>{{value}} <span class="delete-item" ng-click="deleteKeyword(key)"> <i class="material-icons"> close </i> </span> </span> </div> </div> <div class="mb20"> <custom-input placeholder="Add keyword..." ng-model="newKeyword.keyword" title="New keyword" enter="addKeyword()" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px"> add </i> </custom-input> </div> </div> <div class="mb40 two-line"> <custom-input placeholder="Reply message" ng-model="comments.answer" title="Reply message" type-input="textarea" is-back-placeholder="true"> </custom-input> </div> <div> <button class="brn-btn brn-primary" ng-click="saveConnections()">{{main.translations.save_btn}}</button> </div> </div> </div> </div> </div> </div>'),a.put("views/growth-general.html",'<div class="bots-wrapper"> <div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <span class="nav-sidebar-clear round-btn zoom-in" ng-click="resetFilter()" ng-if="isFilterActive"> <i class="material-icons">close</i> </span> <custom-scroller is-shadow="false" height="100%" paddings="22px 10px 0px 51px"> <div class="nav-sidebar-content-ofset mb30" style="flex: 1 1 auto"> <h2 class="mb40"> Facebook </h2> <div class="card-checker" ng-class="{\'disable\' : !isFBConnection}" ng-click="goto(\'bot-settings.growth-fb-comments\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'bot-settings.growth-fb-comments\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span> Coment Auto Reply</span> </label> </div> \x3c!-- <div class="card-checker disable"\n ng-click="goto(\'bot-settings.growth-fb-comments\',botNav.botInfo.bot_id)">\n <input type="checkbox" ng-checked="check(\'bot-settings.growth-fb-comments\')">\n <label>
44\n <span class="checker-ico checker-ico-right">\n </span>\n <span>Welcome Message</span>\n </label>\n </div>\n <div class="card-checker disable"\n ng-click="goto(\'bot-settings.growth-fb-comments\',botNav.botInfo.bot_id)">\n <input type="checkbox" ng-checked="check(\'bot-settings.growth-fb-comments\')">\n <label>\n <span class="checker-ico checker-ico-right">\n </span>\n <span> Main Menu</span>\n </label>\n </div>\n <div class="card-checker disable"\n ng-click="goto(\'bot-settings.growth-fb-comments\',botNav.botInfo.bot_id)">\n <input type="checkbox" ng-checked="check(\'bot-settings.growth-fb-comments\')">\n <label>\n <span class="checker-ico checker-ico-right">\n </span>\n <span>Keywords</span>\n </label>\n </div> --\x3e </div> \x3c!-- <div class="nav-sidebar-content-ofset mb40" style="flex: 1 1 auto;" ng-if="main.isAdmin">\n <h2 class="mb30">\n Instagram\n </h2>\n\n <div class="card-checker" ng-class="{\'disable\' : !isInstagramConnection}"\n ng-click="goto(\'bot-settings.growth-instagram-task\',botNav.botInfo.bot_id)">\n <input type="checkbox" ng-checked="check(\'bot-settings.growth-instagram-task\')">\n <label>\n <span class="checker-ico checker-ico-right">\n </span>\n <span> Actions</span>\n </label>\n </div>\n <div class="card-checker" ng-class="{\'disable\' : !isInstagramConnection}"\n ng-click="goto(\'bot-settings.growth-instagram-post\',botNav.botInfo.bot_id)">\n <input type="checkbox" ng-checked="check(\'bot-settings.growth-instagram-post\')">\n <label>\n <span class="checker-ico checker-ico-right">\n </span>\n <span> Post</span>\n </label>\n </div>\n <div class="card-checker" ng-click="goto(\'bot-settings.growth-instagram-settings\',botNav.botInfo.bot_id)">\n <input type="checkbox" ng-checked="check(\'bot-settings.growth-instagram-settings\')">\n <label>\n <span class="checker-ico checker-ico-right">\n </span>\n <span> Settings</span>\n </label>\n </div>\n </div> --\x3e </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="bots-empty fb-empty" ng-if="!isInstagramConnection && activeLink != \'bot-settings.growth-fb-comments\'"> <div class="bots-empty-container" ng-click="createConectionInstagram()"> <img class="bots-empty-img" ng-src="../images/instagram-empty.png" alt="" style="width: 338px; height: 338px"> <div class="bots-empty-text instagram-text"> <div class="text-first-line"> Instagram connection required </div> <div class="text-second-line"> Click here to open setup wizard </div> </div> </div> </div> <div ui-view=""> </div> </div> </div> </div>'),a.put("views/growth-instagram-post.html",'<div ng-if="isInstagramConnection"> <div> <h2 class="mb45">Post</h2> <div class="instagram-card-container mb40"> <div class="instagram-card" ng-click="tumbPost()" ng-class="{active : insagramActions.properties.actions.post}"> <div class="icon-container"> <i class="material-icons icon">insert_photo</i> </div> <div class="text-container"> Add post </div> </div> </div> </div> <div class="mb54" ng-if="insagramActions.properties.actions.post"> <h2 class="mb40">Add post</h2> <div class="mb20"> <div class="input-group open-custom-input"> <input type="text" ng-model="insagramActions.properties.post.content.url" ng-disabled="disabledImg" placeholder="{{main.translations.post_add_image}}" class="form-control custom-input"> <span ng-show="!disabledImg" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="disabledImg" class="input-group-addon" style="background-color: unset; border: 1px solid #ebebeb"> <ng-include src="\'images/svg/ic_file_upload_black_24px.svg\'"></ng-include> </span> </div> </div> <div class="mb5"> <div class="mb20 open-custom-input inline-block"> <custom-input placeholder="{{main.translations.catalog_textPlaceholder}}" ng-model="insagramActions.properties.post.content.caption" title="" type-input="textarea" is-back-placeholder="true"> </custom-input> </div> </div> <div class="mb75"> <h2 class="mb40">Hashtags</h2> <div class="instagram-short-title down">
44Hashtags list (one on each line)</div> <div class="mb20 open-custom-input"> <custom-input placeholder="Example: myfriends" ng-model="insagramActionsDefaut.hashtags" title="" type-input="textarea" is-back-placeholder="true"> </custom-input> </div> </div> <button class="brn-btn brn-primary mb40" ng-disabled="disabledBtnCreate" ng-click="saveActions()"> Create </button> </div> </div>'),a.put("views/growth-instagram-settings.html",'<div class="instagram-settings"> <div> <h2 class="mb45">Settings</h2> </div> <div class="mb54"> <div ng-if="autochallenge" ng-click="disableBotAutoChallenge(botId)" class="disable-bot"> <ng-include src="\'images/svg/ic_check_box_black_24px_menu.svg\'"></ng-include> <span>Auto challenge</span> </div> <div ng-if="!autochallenge" ng-click="enableBotAutoChallenge(botId)" class="enable-bot"> <ng-include src="\'images/svg/ic_check_box_outline_blank_black_24px_menu.svg\'"></ng-include> <span>Auto challenge</span> </div> </div> </div>'), 45a.put("views/growth-instagram-task.html",'<div ng-if="isInstagramConnection"> <div> <h2 class="mb45">Actions</h2> <div class="instagram-card-container mb40"> <div class="instagram-card" ng-click="tumbLike()" ng-class="{active : insagramActions.properties.actions.likes}"> <div class="icon-container"> <i class="material-icons icon">thumb_up</i> </div> <div class="text-container"> Like </div> </div> <div class="instagram-card" ng-click="tumbFollow()" ng-class="{active : insagramActions.properties.actions.follows}"> <div class="icon-container"> <i class="material-icons icon">person</i> </div> <div class="text-container"> Follow </div> </div> <div class="instagram-card" ng-click="tumbUnfollow()" ng-class="{active : insagramActions.properties.actions.unfollows}"> <div class="icon-container"> <i class="material-icons icon">person_outline</i> </div> <div class="text-container"> Unfollow </div> </div> <div class="instagram-card" ng-click="tumbComments()" ng-class="{active : insagramActions.properties.comments.length > 0}"> <div class="icon-container"> <i class="material-icons icon">chat</i> </div> <div class="text-container"> Comments </div> </div> </div> </div> \x3c!-- <div>\n <h2 class="mb45">Source</h2>\n <div class="instagram-card-container mb40">\n <div class="instagram-card">\n <div class="icon-container">\n <i class="material-icons icon">location_on</i>\n </div>\n <div class="text-container">\n Location\n </div>\n </div>\n <div class="instagram-card">\n <div class="icon-container">\n <span class="icon" style="top: 3px;">#</span>\n </div>\n <div class="text-container">\n Hashtag\n </div>\n </div>\n <div class="instagram-card">\n <div class="icon-container">\n <i class="material-icons icon">face</i>\n </div>\n <div class="text-container">\n User\n </div>\n </div>\n <div class="instagram-card">\n <div class="icon-container">\n <i class="material-icons icon">group</i>\n </div>\n <div class="text-container">\n Users List\n </div>\n </div>\n </div>\n </div> --\x3e <div class="mb54" ng-if="insagramActions.properties.comments.length > 0"> <h2 class="mb40">Comments</h2> <div class="mb5"> <div class="mb20 open-custom-input inline-block" ng-repeat="comment in insagramActions.properties.comments track by $index"> <custom-input placeholder="{{main.translations.catalog_textPlaceholder}}" ng-model="insagramActions.properties.comments[$index]" title="" type-input="textarea" is-back-placeholder="true"> <i class="material-icons icon" style="color:red; font-size: 18px" ng-click="removeComments($index)">close</i> </custom-input> </div> </div> <div class="mb10"> <a class="add-bot" style="margin-left: -7px" ng-click="addComments()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </div> </div> <div class="mb75"> <h2 class="mb40">Hashtags</h2> <div> <div class="card-checker mb20"> <input type="checkbox"> <label> <span class="checker-ico checker-ico-right"> </span> <span style="text-transform: none"> <span class="inline-block"> Work only with posts not older than </span> <span style="width:108px; margin-top: -28px" class="inline-block custom-input-minimal">
45 <custom-input placeholder="" ng-model="postPeriod" title="" type-input="number" is-back-placeholder="false"> <span style="position: relative; left: -8px">days</span> </custom-input> </span> </span> </label> </div> </div> <div class="instagram-short-title down">Hashtags list (one on each line)</div> <div class="mb20 open-custom-input"> <custom-input placeholder="Example: myfriends" ng-model="insagramActionsDefaut.hashtags" title="" type-input="textarea" is-back-placeholder="true"> </custom-input> </div> </div> <div class="block-title"> <h4>Filters</h4> <p style="max-width: 250px"> Define a list of Hashtags or specific Location that Bot will follow and comment. </p> </div> <div class="flex-row settings-connections"> <div class="settings-card-wrap big500"> <div class="card-checker mb10" ng-click="filter(\'hashtags\')"> <input type="checkbox" ng-checked="isHashtagsActive" ng-model="isHashtagsActive" value="true"> <label> <span class="checker-ico"></span> <span style="text-transform: none">Hashtags (Found post)</span> <br> <span class="subtext">Each Hashtag has to be on separate line. </span> </label> </div> <div class="card-checker mb10" ng-click="filter(\'hash_tags\')"> <input type="checkbox" ng-checked="isHashTagsLastActive" ng-model="isHashTagsLastActive" value="true"> <label> <span class="checker-ico"></span> <span style="text-transform: none">Hashtags (Last post of found user)</span> <br> <span class="subtext">Each Hashtag has to be on separate line. </span> </label> </div> <div class="card-checker mb10" ng-click="filter(\'location\')"> <input type="checkbox" ng-checked="isLocationActive" ng-model="isLocationActive" value="true"> <label> <span class="checker-ico"></span> <span style="text-transform: none">Locations</span> <br> <span class="subtext">Select prefered locations from the list. </span> </label> </div> <div class="card-checker mb10" ng-click="filter(\'tagged_users\')"> <input type="checkbox" ng-checked="isTaggedUsersActive" ng-model="isTaggedUsersActive" value="true"> <label> <span class="checker-ico"></span> <span style="text-transform: none">Tagged users</span> <br> <span class="subtext">Type a tag and find everyone he\'s tagged.</span> </label> </div> <div class="card-checker mb10" ng-click="filter(\'followed_by\')"> <input type="checkbox" ng-checked="isFollowedByActive" ng-model="isFollowedByActive" value="true"> <label> <span class="checker-ico"></span> <span style="text-transform: none">Followers of</span> <br> <span class="subtext">Type a @username and find all followers of this user.</span> </label> </div> <div class="card-checker mb20" ng-click="filter(\'commented_post\')"> <input type="checkbox" ng-checked="isCommentedPostActive" ng-model="isCommentedPostActive" value="true"> <label> <span class="checker-ico"></span> <span style="text-transform: none">Commented post</span> <br> <span class="subtext">Collect all users who commented selected post.</span> </label> </div> <div ng-show="isLocationActive"> <div> <div class="mb40"> <div class="inline-block"> <div class="custom-location-search"> <div class="custom-input dropdown open no-arrow"> <span class="placeholder" ng-class="{\'placeholder-small placeholder-active\' : searchLocationKeyword || isActive}"> Type location name... </span> <input type="text" ng-model="searchLocationKeyword" ng-keyup="$event.keyCode == 13 && addLocation()" ng-change="searchLocation()" ng-blur="isActive=false" ng-focus="isActive=true" uib-typeahead="location as location.title for location in searchLocations | filter:$viewValue | limitTo:8"> <span class="bar"></span> </div> <div class="custom-input-container"> <a ng-click="addLocation()" class="button button-raised"> <span class="button-inner">Add</span> </a> </div> </div> </div> </div> </div> <div class="brn-table-wrap t-modern minimal mb30" style="max-width:418px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table location-table" style="width:416px"> <tbody> <tr class="header-image"> <td> Locations </td> <td> \x3c!--span class="clicabel-table-link "\n ng-click="deleteAllLocation()"\n style="width: 100px;">\n Delete all\n </span--\x3e </td> <td class="control-fixed control-fixed-heder clicabel-table-link" style="z-index: -1"> </td> </tr> <tr ng-repeat="(key, location) in growData.properties.locations track by $index" ng-class="{\'first-line\' : key == 0}"> <td> <span class="title">{{location.title}} </span> </td> <td class="control-fixed"> <a class="btn-icon" title="Delete locations" ng-click="deleteLocation($index)"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tfoot ng-if="!growData.properties.locations.length"> <tr> <td colspan="2" class="no-locations-yet">No Locations yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> <div class="input-textarea" style="height: 212px" ng-show="isHashtagsActive || isHashTagsLastActive"> <textarea ng-change="prepareTags()" placeholder="Type here..." ng-model="add_tag" id="textarea"></textarea> </div> <div class="custom-input" ng-show="isTaggedUsersActive"> <span class="placeholder" ng-class="{\'placeholder-small placeholder-active\' : searchLocationKeyword || isActive || growData.properties.tag != \'\'}"> Type tag... </span> <input type="text" ng-model="growData.properties.tag" ng-keyup="$event.keyCode == 13" ng-blur="isActive=false" ng-focus="isActive=true"> </div> <div class="custom-input" ng-show="isFollowedByActive"> <span class="placeholder" ng-class="{\'placeholder-small placeholder-active\' : searchLocationKeyword || isActive || growData.properties.user_id != \'\'}">
45 Type username... </span> <input type="text" ng-model="growData.properties.user_id" ng-keyup="$event.keyCode == 13" ng-blur="isActive=false" ng-focus="isActive=true"> </div> <div class="custom-input" ng-show="isCommentedPostActive"> <span class="placeholder" ng-class="{\'placeholder-small placeholder-active\' : searchLocationKeyword || isActive || growData.properties.post_url != \'\'}"> Type post link... </span> <input type="text" ng-model="growData.properties.post_url" ng-keyup="$event.keyCode == 13" ng-blur="isActive=false" ng-focus="isActive=true"> </div> </div> </div> <div class="mb60"> <h2 class="mb20">Limits</h2> <div> <div class="mb30" style="width: 200px"> <custom-input type-input="number" placeholder="Amount of actions" ng-model="insagramActions.properties.comments_per_day" title="Amount of actions" is-back-placeholder="true"> </custom-input> </div> \x3c!-- <div class="card-checker">\n <input type="checkbox" >\n <label>\n <span class="checker-ico checker-ico-right">\n </span>\n <span style="text-transform: none;">\n Skip users that has been processed already \n </span>\n </label>\n </div> --\x3e </div> </div> \x3c!-- <div class="mb40">\n <h2 class="mb40">Filters</h2>\n <div class="card-checker mb20">\n <input type="checkbox" >\n <label>\n <span class="checker-ico checker-ico-right">\n </span>\n <span style="text-transform: none;">\n Use custom filters\n </span>\n </label>\n </div>\n <div class="mb40">\n <div class="inline-block" style="margin-right: 26px;">\n <div class="instagram-short-title down">\n Userâs followers\n </div>\n <div>\n <div class="inline-block pdr5 bottom">\n From\n </div>\n <div class="inline-block instagram-short-input">\n <custom-input \n placeholder="" \n ng-model="hashtags"\n title=""\n ng-disabled="true"\n type-input="number"\n is-back-placeholder="false">\n </custom-input>\n </div>\n <div class="inline-block pdr5 bottom">\n To\n </div>\n <div class="inline-block instagram-short-input">\n <custom-input \n placeholder="" \n ng-model="hashtags"\n title=""\n ng-disabled="true"\n type-input="number"\n is-back-placeholder="false">\n </custom-input>\n </div>\n </div>\n </div>\n\n <div class="inline-block" style="margin-right: 26px;">\n <div class="instagram-short-title down">\n User follows\n </div>\n <div>\n <div class="inline-block pdr5 bottom">\n From\n </div>\n <div class="inline-block instagram-short-input">\n <custom-input \n placeholder="" \n ng-model="hashtags"\n title=""\n ng-disabled="true"\n type-input="number"\n is-back-placeholder="false">\n </custom-input>\n </div>\n <div class="inline-block pdr5 bottom">\n To\n </div>\n <div class="inline-block instagram-short-input">\n <custom-input \n placeholder="" \n ng-model="hashtags"\n title=""\n ng-disabled="true"\n type-input="number"\n is-back-placeholder="false">\n </custom-input>\n </div>\n </div>\n </div>\n\n <div class="inline-block" style="margin-right: 26p
45x;">\n <div class="instagram-short-title down">\n Amount of posts\n </div>\n <div>\n <div class="inline-block pdr5 bottom">\n From\n </div>\n <div class="inline-block instagram-short-input">\n <custom-input \n placeholder="" \n ng-model="hashtags"\n title=""\n ng-disabled="true"\n type-input="number"\n is-back-placeholder="false">\n </custom-input>\n </div>\n <div class="inline-block pdr5 bottom">\n To\n </div>\n <div class="inline-block instagram-short-input">\n <custom-input \n placeholder="" \n ng-model="hashtags"\n title=""\n ng-disabled="true"\n type-input="number"\n is-back-placeholder="false">\n </custom-input>\n </div>\n </div>\n </div>\n <div class="inline-block" style="margin-right: 26px;">\n <div class="instagram-short-title down">\n Last activity\n </div>\n <div>\n <div class="inline-block instagram-short49-input pdr5">\n <custom-input\n placeholder=""\n ng-model="hashtags"\n title=""\n ng-disabled="true"\n type-input="number"\n is-back-placeholder="false">\n </custom-input>\n </div>\n <div class="inline-block no-padding bottom">\n Days ago\n </div>\n </div>\n </div>\n \n </div>\n <div class="mb20">\n <div class="inline-block">\n <div class="instagram-short-title down">Keywords whitelist</div>\n <div class="mb20 open-custom-input">\n <custom-input \n placeholder="One keyword or phrase on each line..." \n ng-model="hashtags"\n title=""\n type-input="textarea"\n is-back-placeholder="true">\n </custom-input>\n </div>\n </div>\n <div class="inline-block">\n <div class="instagram-short-title down">Keywords blacklist</div>\n <div class="mb20 open-custom-input">\n <custom-input \n placeholder="One keyword or phrase on each line..." \n ng-model="hashtags"\n title=""\n type-input="textarea"\n is-back-placeholder="true">\n </custom-input>\n </div>\n </div>\n\n </div>\n <div class="card-checker mb10">\n <input type="checkbox" >\n <label>\n <span class="checker-ico checker-ico-right">\n </span>\n <span style="text-transform: none;">\n User has an avatar\n </span>\n </label>\n </div>\n </div> --\x3e \x3c!-- <div class="mb50">\n <h2 class="mb40">Timer</h2>\n <div class="card-checker">\n <input type="checkbox" >\n <label>\n <span class="checker-ico checker-ico-right">\n </span>\n <span style="text-transform: none;">\n Use timer\n </span>\n </label>\n </div>\n <div class="mb60">\n <div class="mb20">\n <div ng-repeat="timeValue in datatimes track by $index">\n <div class="inline-block instagram-short-input" style="width: 131px;padding: 0px; margin-right: 20px;">\n <custom-date-range-single title=""\n date-format="DD.MM.YYYY"\n ng-model="datatimes[$index]">\n </custom-date-range-single>\n </div>\n <div class="inline-block instagram-short-input" style="width: 106px;padding: 0px;margin-right: 20px;">\n <custom-date-range-single \n title=""\n icon="access_time"\n date-format="hh:ii"\n timepicker="true"\n date-classes="datepicker-only-timer"\n is-only-timepicker="true"\n ng-model="datatimes[$index]">\n </custom-date-range-single>\n </div>\n <div class="inline-block">\n <i class="material-icons close-icon "\n style="top: 6px;"\n ng-click="DeleteTimer($index)">\n close\n </i> \n </div>\n </div>\n </div>\n <a class="add-bot"\n style="margin-left: -7px;"\n ng-click="addMoreTimer()">\n <i ng-include="\'images/svg/plus_icon.svg\'"></i>\n {{main.translations.addMore}}\n </a>\n </div>\n </div> --\x3e <button class="brn-btn brn-primary mb40" ng-click="saveActions()"> Save </button> </div>'),a.put("views/gui.html",'<div> <div style="height: 8px;position: fixed; width: 100%; top: 120px;left: 0px;z-index: 100" ng-mouseenter="topScroll()" ng-mouseleave="endScroll()"> </div> <div style="height:100%; position:fixed; width:8px; top:128px;left: 266px;z-index: 99" ng-if="windowWidth>=768" ng-mouseenter="leftScroll()" ng-mouseleave="endScroll()"> </div> <div style="height:100%; position:fixed; width:8px; top:128px; left:0px; z-index:99" ng-if="windowWidth<768" ng-mouseenter="leftScroll()" ng-mouseleave="endScroll()"> </div> <div style="height:100%; position:fixed; width:8px; top: 128px; right:0px; z-index:100" ng-mouseenter="rightScroll()" ng-mouseleave="endScroll()"> </div> <div class="scenario-wrapper" style="flex-grow: 1; position: relative"> <js-plumb steps="scenarios.steps" callback="saveModel" modal="openStep" mousepress="mousePress" mouseup="mouseUp" id="plumb"> </js-plumb> </div> <div style="height:8px; position:fixed; left: 0px; width:100%; bottom:0px; z-index:100" ng-mouseenter="bottomScroll()" ng-mouseleave="endScroll()"> </div> <test-widget is-show="isShowTest"> </test-widget> </div>'),a.put("views/gui/attachment.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
45 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.type" array="::attachments" opt-description="name" opt-value="value" title="Attachment type" is-model-init="true" ng-change="handleAttachmentChange($index, step.properties.type)" is-disabled="step.properties.spinnerLoading" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Url" ng-model="step.properties.url" is-disabled="step.properties.spinnerLoading" title="Url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.type == \'file\'"> <custom-input placeholder="File name" ng-model="step.properties.name" title="File name" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row"> <ng-form name="attachmentForm"> <div ng-if="step.properties.type == \'image\'"> <div class="drop-box" ng-class="{\'loader-container\' : step.properties.elements[activeCardElement].spinnerLoading}" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index)"> <div class="google-loader" ng-show="step.properties.spinnerLoading"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="25" fill="#d7d7d7" stroke-width="20" stroke-miterlimit="10"> </circle> <circle class="path" cx="50" cy="50" r="22" fill="white" stroke-width="0" stroke-miterlimit="0"> </circle> </svg> </div> <div class="drop-box-icon" ng-show="!step.properties.spinnerLoading"> <i class="material-icons">cloud_upload</i> </div> <div ng-show="!step.properties.spinnerLoading" class="drop-box-text">Upload</div> </div> </div> <div ng-if="step.properties.type == \'audio\'"> <div class="drop-box" ngf-pattern="\'audio/*\'" ngf-accept="\'audio/*\'" ng-class="{\'loader-container\' : step.properties.elements[activeCardElement].spinnerLoading}" ngf-select="addFile($file, $index)"> <div class="google-loader" ng-show="step.properties.spinnerLoading"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="25" fill="#d7d7d7" stroke-width="20" stroke-miterlimit="10"> </circle> <circle class="path" cx="50" cy="50" r="22" fill="white" stroke-width="0" stroke-miterlimit="0"> </circle> </svg> </div> <div class="drop-box-icon" ng-show="!step.properties.spinnerLoading"> <i class="material-icons">cloud_upload</i> </div> <div ng-show="!step.properties.spinnerLoading" class="drop-box-text">Upload</div> </div> </div> <div ng-if="step.properties.type == \'video\'"> <div class="drop-box" ng-class="{\'loader-container\' : step.properties.elements[activeCardElement].spinnerLoading}" ngf-select="addFile($file, $index)"> <div class="google-loader" ng-show="step.properties.spinnerLoading"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="25" fill="#d7d7d7" stroke-width="20" stroke-miterlimit="10"> </circle> <circle class="path" cx="50" cy="50" r="22" fill="white" stroke-width="0" stroke-miterlimit="0"> </circle> </svg> </div> <div class="drop-box-icon" ng-show="!step.properties.spinnerLoading"> <i class="material-icons">cloud_upload</i> </div> <div ng-show="!step.properties.spinnerLoading" class="drop-box-text">Upload</div> </div> </div> </ng-form> </div> </div> <div class="section-bottom-toogle" ng-class="{active : aditional}"> <div ng-click="toogleAditional()"> <span>Additional options</span> <i class="material-icons">keyboard_arrow_down</i> </div> </div> <div class="section-bottom" ng-class="{active : aditional}"> <div class="dropdown-container section" ng-class="{active : aditional}"> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.quick_replies.length == 0 || !step.properties.quick_replies}"> <span>Quick replys</span> </div> <div class="flex-row mb20" ng-repeat="replie in step.properties.quick_replies track by $index"> <div class="short-item mb10"> <custom-dropdown ng-model="replie.type" array="quickRepliesTypes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleQuickRepliesTypes(replie.type, $index)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{$resolve.translations.title}}" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" t
45ype-input="url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.quick_replies.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == step.properties.quick_replies.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot" ng-click="handleAddParam($index, \'addQuickReply\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/blockchain.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.action" array="blockchainActionList" opt-description="name" opt-value="value" placeholder="" title="Action type" is-model-init="true" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="step.properties.action===\'create\'"> <custom-input placeholder="Password" ng-model="step.properties.password" title="Password" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.saveTo_text}}" ng-model="step.properties.save.param" is-required="true" title="{{$resolve.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.save.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'), 46a.put("views/gui/card.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} <span class="card-items-container" ng-if="step.properties.type == \'static\'"> <div ng-repeat="item in step.properties.elements track by $index" class="item item-selector" ng-class="{\'active\' : activeCardElement == $index}" ng-click="switchCard($index)"> </div> <div class="item"> <i class="material-icons add-icon" ng-click="addCard()">add</i> </div> </span> </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
46 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20" ng-if="step.properties.type == \'dynamic\'"> <div class="short-item mb10"> <custom-input placeholder="Data key" ng-model="step.properties.data.key" title="Data key" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="scopes" opt-description="name" opt-value="value" title="To Storage " is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text" ng-if="step.properties.type == \'dynamic\'"> <span>Card template (use property name to output value of the any property of object)</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.type" array="cardType" ng-change="handleCardType(step.properties.type)" opt-description="name" opt-value="value" title="Card type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div ng-if="step.properties.type == \'dynamic\'"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.template.type" array="cardTempalteType" ng-change="handleAddParam($index, \'card\')" opt-description="name" opt-value="value" title="Template type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="step.properties.template.type === \'list\'"> <custom-dropdown ng-model="step.properties.template.options.top_element_style" array="topElement" opt-description="name" opt-value="value" title="Top element style" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> <div class="flex-row mb10" ng-if="step.properties.type == \'dynamic\'"> <div class="short-item mb10"> <custom-input placeholder="Image url" ng-model="step.properties.image" title="Image url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title}}" ng-model="step.properties.title" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Title link" ng-model="step.properties.link" title="Title link" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb10" ng-if="step.properties.type == \'dynamic\'"> <div class="medium-item mb20"> <custom-input placeholder="Text" ng-model="step.properties.text" title="Text" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row" ng-if="step.properties.type == \'static\'"> <div> <div class="drop-box" style="margin-bottom: 15px" ng-class="{\'image-container\' : step.properties.elements[activeCardElement].image && !step.properties.elements[activeCardElement].spinnerLoading, \'loader-container\' : step.properties.elements[activeCardElement].spinnerLoading}" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="uploadCardImage($file, activeCardElement)"> <div ng-if="!step.properties.elements[activeCardElement].image || step.properties.elements[activeCardElement].spinnerLoading"> <div class="google-loader" ng-show="step.properties.elements[activeCardElement].spinnerLoading"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="25" fill="#d7d7d7" stroke-width="20" stroke-miterlimit="10"> </circle> <circle class="path" cx="50" cy="50" r="22" fill="white" stroke-width="0" stroke-miterlimit="0"> </circle> </svg> </div> <div class="drop-box-icon" ng-show="!step.properties.elements[activeCardElement].spinnerLoading"> <i class="material-icons">cloud_upload</i> </div> <div ng-show="!step.properties.elements[activeCardElement].spinnerLoading" class="drop-box-text">Upload</div> </div> <img ng-src="{{step.properties.elements[activeCardElement].image}}" ng-if="step.properties.elements[activeCardElement].image && !step.properties.elements[activeCardElement].spinnerLoading"> </div> </div> </div> <div class="flex-row" ng-if="step.properties.type == \'static\'"> <div class="short-item mb20"> <custom-input placeholder="{{$resolve.translations.title}}" ng-model="step.properties.elements[activeCardElement].title" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row" ng-if="step.properties.type == \'static\'"> <div class="medium-item mb40"> <custom-input placeholder="Text" ng-model="step.properties.elements[activeCardElement].text" title="Text" type-input="textarea" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="section-bottom-toogle" ng-class="{active : aditional}"> <div ng-click="toogleAditional()"> <span>Additional options</span> <i class="material-icons">keyboard_arrow_down</i> </div> </div> <div class="section-bottom" ng-class="{active : aditional}"> <div class="dropdown-container section" ng-class="{active : aditional}"> <div ng-if="step.properties.type == \'dynamic\'"> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.collapse.length == 0}"> <span>Collapse buttons</span> </div> <div class="flex-row mb20" ng-repeat="collapse in step.properties.collapse"> <div class="short-item mb10"> <custom-input ng-model="collapse.title" placeholder="{{$resolve.translations.title}}" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="collapse.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.collapse.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional">
46 <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.collapse\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.collapse\')" ng-class="{disable : $index == step.properties.collapse.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="handleAddParam($index, \'collapse\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : (step.properties.buttons | filter: {type: \'link\'}).length == 0}"> <span>Link buttons</span> </div> <div class="flex-row mb20" ng-repeat="link in step.properties.buttons" ng-if="link.type == \'link\'"> <div class="short-item mb10"> <custom-input ng-model="link.title" placeholder="{{$resolve.translations.title}}" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="link.url" placeholder="Url" title="Url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container checker-marging"> <div class="checker-container"> <div class="card-checker"> <input type="checkbox" ng-model="link.webview" id="enable_messenger_extensions_link_{{$index}}"> <label for="enable_messenger_extensions_link_{{$index}}"> <span class="checker-ico"></span>{{$resolve.translations.webview}} </label> </div> </div> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.buttons.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.buttons\', \'link\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.buttons\', \'link\')" ng-class="{disable : $index == step.properties.buttons.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'linkBtn\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : (step.properties.buttons | filter: {type: \'suggest\'}).length == 0}"> <span>Suggest buttons</span> </div> <div class="flex-row mb20" ng-repeat="suggest in step.properties.buttons" ng-if="suggest.type == \'suggest\'"> <div class="short-item mb10"> <custom-input ng-model="suggest.title" placeholder="{{$resolve.translations.title}}" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="suggest.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.buttons.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.buttons\', \'suggest\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.buttons\', \'suggest\')" ng-class="{disable : $index == step.properties.buttons.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="handleAddParam($index, \'suggestBtn\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> </div> <div ng-if="step.properties.type == \'static\'"> <div class="bootom-text" ng-class="{\'mb20\' : (step.properties.elements[activeCardElement].buttons | filter: {type: \'link\'}).length == 0}"> <span>Link buttons</span> </div> <div class="flex-row mb20" ng-repeat="link in step.properties.elements[activeCardElement].buttons" ng-if="link.type == \'link\'"> <div class="short-item mb10"> <custom-input ng-model="link.title" placeholder="{{$resolve.translations.title}}" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="link.url" placeholder="Url" title="Url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container checker-marging"> <div class="checker-container"> <div class="card-checker"> <input type="checkbox" ng-model="link.webview" id="enable_messenger_extensions_link_{{$index}}"> <label for="enable_messenger_extensions_link_{{$index}}"> <span class="checker-ico"></span>{{$resolve.translations.webview}} </label> </div> </div> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.elements[activeCardElement].buttons.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional">
46 <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.elements.{{activeCardElement}}.buttons\', \'link\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.elements.{{activeCardElement}}.buttons\', \'link\')" ng-class="{disable : $index == step.properties.elements[\'{{activeCardElement}}\'].buttons.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'linkBtn\', activeCardElement)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : (step.properties.elements[activeCardElement].buttons | filter: {type: \'suggest\'}).length == 0}"> <span>Suggest buttons</span> </div> <div class="flex-row mb20" ng-repeat="suggest in step.properties.elements[activeCardElement].buttons" ng-if="suggest.type == \'suggest\'"> <div class="short-item mb10"> <custom-input ng-model="suggest.title" placeholder="{{$resolve.translations.title}}" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="suggest.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.elements[activeCardElement].buttons.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.elements.{{activeCardElement}}.buttons\', \'suggest\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.elements.{{activeCardElement}}.buttons\', \'suggest\')" ng-class="{disable : $index == step.properties.elements[\'{{activeCardElement}}\'].buttons.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="handleAddParam($index, \'suggestBtn\', activeCardElement)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.quick_replies.length == 0 || !step.properties.quick_replies}"> <span>Quick replys</span> </div> <div class="flex-row mb20" ng-repeat="replie in step.properties.quick_replies track by $index"> <div class="short-item mb10"> <custom-dropdown ng-model="replie.type" array="quickRepliesTypes" opt-description="name" opt-value="value" title="{{$resolve.translations.type}}" is-model-init="true" placeholder="" ng-change="handleQuickRepliesTypes(replie.type, $index)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{$resolve.translations.title}}" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" type-input="url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.quick_replies.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton( \'down\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == step.properties.quick_replies.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot" ng-click="handleAddParam($index, \'addQuickReply\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/cart.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
46 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" array="commandsList" opt-description="name" opt-value="value" title="Command" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text" ng-if="step.properties.command != \'view\'"> <span>Information about product</span> </div> <div class="mb30 flex-row" ng-if="step.properties.command != \'view\'"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.product_id.key" title="Product id" is-required="step.properties.command == \'add\'" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.product_id.scope" array="scopesList" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="mb30 flex-row" ng-if="step.properties.command == \'add\'"> <div class="short-item mb10"> <custom-input placeholder="Count" ng-model="step.properties.count" title="Count" is-required="false" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Response</span> </div> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.result.key" title="Result" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.result.scope" array="scopesList" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/category.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.leftMenu_category}}" ng-model="step.properties.category" title="{{$resolve.translations.leftMenu_category}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Offset" ng-model="step.properties.offset" title="Offset" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.saveTo_text}}
46" ng-model="step.properties.input.key" title="{{$resolve.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/collection.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.collection" array="::collections" opt-description="name" opt-value="value" title="Collection" is-model-init="true" ng-change="doFields(step.properties.collection, $parent.$index)" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" array="::collectionCommands" opt-description="name" opt-value="value" title="Command" is-model-init="true" placeholder="" ng-change="collectionCommandsChange($index, step.properties.command)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb10" ng-if="step.properties.command == \'insert\'"> <div class="short-item mb10"> <custom-input placeholder="Data storage key" ng-model="step.properties.data.key" title="Data storage key" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="::scopes" opt-description="name" opt-value="value" title="Data storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.command == \'find\'"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.sort.field" array="::collectionFieldsList[step.properties.collection]" opt-description="title" opt-value="name" title="Sort by Fields" is-model-init="true" placeholder="Default" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.sort.direction" array=":: [{name : \'Asc\', value : \'asc\'}, {name : \'Desc\', value : \'desc\'}]" opt-description="name" opt-value="value" title="Sort by Direction" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text" ng-if="step.properties.command == \'find\'" ng-class="{\'mb20\' : step.properties.filters.length == 0}"> <span>Custom Filters</span> </div> <div class="flex-row mb10" ng-if="step.properties.command == \'find\'" ng-repeat="filter in step.properties.filters"> <div class="short-item mb10"> <custom-dropdown ng-model="filter.field" array="::collectionFieldsList[step.properties.collection]" opt-description="title" opt-value="name" title="Field" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="filter.condition" array="::conditionsFilter" opt-description="name" opt-value="value" title="Condition" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.value}}" ng-model="filter.value" title="{{$resolve.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="deleteCustomFilter($parent.$index, $index)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional">
46 <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.filters\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.filters\')" ng-class="{disable : $index == step.properties.filters.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30" ng-if="step.properties.command == \'find\'"> <div class="add-bot" ng-click="addCustomFilter($parent.$index, $index)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="flex-row mb10" ng-if="step.properties.command == \'find\'"> <div class="short-item mb10"> <custom-input placeholder="Save result key" ng-model="step.properties.input.key" title="Save result key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="::scopes" opt-description="name" opt-value="value" title="To storage" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Offset" ng-model="step.properties.offset" title="Offset" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'), 47a.put("views/gui/condition.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.key}}" ng-model="step.properties.value.param" is-required="true" title="{{$resolve.translations.key}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.value.scope" array="::scopesSystem" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.operator" array="::conditions" opt-description="value" opt-value="name" title="Condition operator" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Target value" ng-model="step.properties.target.value" title="Target value" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/customer.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
47 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.type" array="customerCollections" opt-description="name" opt-value="value" title="Customer type" is-model-init="true" ng-change="handleCustomerChange($index, step.properties.type)" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.type != \'logout\'"> <div class="short-item mb10"> <custom-input placeholder="Login" ng-model="step.properties.login.key" title="Login" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.login.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.type != \'logout\'"> <div class="short-item mb10"> <custom-input placeholder="Password" ng-model="step.properties.password.key" title="Password" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.password.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.type == \'register\'"> <div class="short-item mb10"> <custom-input placeholder="Profile" ng-model="step.properties.profile.key" title="Profile" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.profile.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Response token" ng-model="step.properties.token.key" title="Response token" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.token.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Error message" ng-model="step.properties.error_message.key" title="Error message" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.error_message.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/data.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
47 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="bootom-text"> <span>Stringify json using templater</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Data from" ng-model="step.properties.stringify.value.key" title="Data from" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.stringify.value.data.scope" array="::scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" ng-change="dataCommand(step.properties.command, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Save value to" ng-model="step.properties.stringify.data.key" title="Save value to" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.stringify.data.scope" array="::scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" ng-change="dataCommand(step.properties.command, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb30"> <div class="medium-item mb10"> <custom-input placeholder="Template" ng-model="step.properties.stringify.template" title="Template" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Split string with separator to list</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Data from" ng-model="step.properties.split.value.key" title="Data from" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.split.value.scope" array="::scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" ng-change="dataCommand(step.properties.command, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Save value to" ng-model="step.properties.split.array.key" title="Save value to" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.split.array.scope" array="::scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" ng-change="dataCommand(step.properties.command, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb30"> <div class="medium-item mb10"> <custom-input placeholder="Separator" ng-model="step.properties.split.separator" title="Separator" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Join list elements to string with separator</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Data from" ng-model="step.properties.join.value.key" title="Data from" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.join.value.scope" array="::scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" ng-change="dataCommand(step.properties.command, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Save value to" ng-model="step.properties.join.array.key" title="Save value to" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.join.array.scope" array="::scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" ng-change="dataCommand(step.properties.command, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb30"> <div class="medium-item mb10"> <custom-input placeholder="Separator" ng-model="step.properties.join.separator" title="Separator" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="section-bottom-toogle" ng-class="{active : aditional}"> <div ng-click="toogleAditional()"> <span>Additional options</span> <i class="material-icons">keyboard_arrow_down</i> </div> </div> <div class="section-bottom" ng-class="{active : aditional}"> <div class="dropdown-container section" ng-class="{active : aditional}"> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.save.length == 0}"> <span>Save variable to storage</span> </div> <div class="flex-row mb20" ng-repeat="saveParam in step.properties.save"> <div class="short-item mb10">
47 <custom-input ng-model="saveParam.key" placeholder="Key" is-required="true" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="saveParam.value" placeholder="{{$resolve.translations.value}}" title="{{$resolve.translations.value}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.save.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.save\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.save\')" ng-class="{disable : $index == step.properties.save.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'saveParam\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.push.length == 0}"> <span>Push element to list</span> </div> <div class="flex-row mb20" ng-repeat="saveParam in step.properties.push"> <div class="short-item mb10"> <custom-input ng-model="saveParam.array.key" placeholder="Array key" is-required="true" title="Array key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.array.scope" array="::scopes" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input ng-model="saveParam.value.key" placeholder="{{$resolve.translations.valueKey}}" title="{{$resolve.translations.valueKey}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.value.scope" array="::scopes" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties[\'push\'].splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.push\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.push\')" ng-class="{disable : $index == step.properties.push.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'pushParam\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.pull.length == 0}"> <span>Remove element from list</span> </div> <div class="flex-row mb20" ng-repeat="saveParam in step.properties.pull"> <div class="short-item mb10"> <custom-input ng-model="saveParam.array.key" placeholder="Array key" is-required="true" title="Array key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.array.scope" array="::scopes" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input ng-model="saveParam.value.key" placeholder="{{$resolve.translations.valueKey}}" title="{{$resolve.translations.valueKey}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.value.scope" array="::scopes" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties[\'pull\'].splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional">
47 <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.pull\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.pull\')" ng-class="{disable : $index == step.properties.pull.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'pullParam\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.set.length == 0}"> <span>Set value to another variable</span> </div> <div class="flex-row mb20" ng-repeat="saveParam in step.properties.set"> <div class="short-item mb10"> <custom-input ng-model="saveParam.from.key" placeholder="From key" is-required="true" title="From key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.from.scope" array="::scopesSystem" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input ng-model="saveParam.to.key" placeholder="To key" title="To key" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.to.scope" array="::scopes" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.set.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.set\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.set\')" ng-class="{disable : $index == step.properties.set.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'setParam\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.drop.length == 0}"> <span>Drop variable from storage</span> </div> <div class="flex-row mb20" ng-repeat="dropParam in step.properties.drop"> <div class="short-item mb10"> <custom-input ng-model="dropParam.key" placeholder="Key" is-required="true" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="dropParam.scope" array="::scopes" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.drop.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.drop\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.drop\')" ng-class="{disable : $index == step.properties.drop.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'drop\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/date.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
47 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Input date" ng-model="step.properties.input" title="Input date" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.operator" array="::dateOperators" opt-description="name" opt-value="value" title="Operator " is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Difference</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Year(s)" ng-model="step.properties.date.year" title="Year(s)" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Month(s)" ng-model="step.properties.date.month" title="Month(s)" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Week(s)" ng-model="step.properties.date.week" title="Week(s)" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Day(s)" ng-model="step.properties.date.day" title="Day(s)" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Hour(s)" ng-model="step.properties.date.hour" title="Hour(s)" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Minute(s)" ng-model="step.properties.date.minute" title="Minute(s)" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.saveTo_text}}" ng-model="step.properties.save.key" is-required="true" title="{{$resolve.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.save.scope" array="::scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.output" array="::outputFormat" opt-description="name" opt-value="value" title="Output date format" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="step.properties.output == \'format\'"> <custom-input placeholder="Format" ng-model="step.properties.format" is-required="true" title="Format" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/delay.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
47 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="Delay (ms)" type-input="number" ng-model="step.properties.delay" title="Delay (ms)" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'), 48a.put("views/gui/elasticsearch.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" array="::elasticTypes" ng-change="esCommand(step.properties.command, $index)" opt-description="value" opt-value="name" title="Command" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.value}}" ng-model="step.properties.index.value" is-required="true" title="{{$resolve.translations.value}}" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Index params fields value" ng-model="step.properties.fields.value" is-required="true" title="Index params fields value" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Index params fields type name" ng-model="step.properties.type" is-required="true" title="Index params fields type name" is-back-placeholder="true"> </custom-input> </div> </div> <div ng-switch="step.properties.command"> <div ng-switch-when="index"> <div class="bootom-text"> <span>Data to index</span> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.data.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Unique field to use as ID" ng-model="step.properties.id" title="Unique field to use as ID" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div ng-switch-when="like"> <div class="bootom-text"> <span>Get must ids list from storage</span> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.must.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.must.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Get must not ids list from storage</span> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.must_not.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.must_not.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Score value" ng-model="step.properties.score.value" title="Score value" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Get ID of item from storage</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.data.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Fields value" ng-model="step.properties.fields.value" is-required="true" title="Fields value" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.input.ke
48y" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> <div ng-switch-when="search"> <div class="bootom-text"> <span>Get search query from storage</span> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.data.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Save search result to storage</span> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.input.ke
48y" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> <div ng-switch-when="ids"> <div class="bootom-text"> <span>Get search query from storage</span> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.data.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Save search result to storage/span> </span></div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.input.ke
48y" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/entity.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="bootom-text"> <span>Check and save entities</span> </div> <div class="flex-row mb10" ng-repeat="item in step.properties.items"> <div class="short-item mb10"> <custom-dropdown ng-model="item.entity" array="::entitiesList" opt-description="name" opt-value="entity_id" title="Entity" is-model-init="true" is-disabled="entitiesList.length == 0" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.saveTo_text}}" ng-model="item.save.key" title="{{$resolve.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="item.save.scope" array="::scopes" opt-description="name" opt-value="value" title="To Storage " is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="checker-container"> <div class="card-checker"> <input type="checkbox" ng-model="item.multiple" id="item_multiple_{{$index}}"> <label for="item_multiple_{{$index}}"> <span class="checker-ico"></span>Multiple </label> </div> </div> <div class="delete-item" ng-click="deleteEntity($parent.$index, $index)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="addEntity($index)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/existence.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
48 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.params.length == 0}"> <span>Check existence of the following data</span> </div> <div class="flex-row mb20" ng-repeat="exParam in step.properties.params"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="exParam.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="exParam.scope" array="::scopes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.params.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="handleAddParam($index, \'existence\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/expression.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="medium-item mb10"> <custom-input placeholder="Expression" ng-model="step.properties.expression" title="Expression" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.saveTo_text}}" ng-model="step.properties.save.key" title="{{$resolve.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.save.scope" array="::scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/input.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
48 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="medium-item mb10"> <custom-input placeholder="Request with message" ng-model="step.properties.question" title="Request with message" type-input="textarea" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.saveTo_text}}" ng-model="step.properties.save.param" title="{{$resolve.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.save.scope" array="::scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.reply_type" array="replyTypes" opt-description="name" opt-value="value" title="Data type" is-model-init="true" placeholder="All types" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Retry message" title="Retry message" ng-change="clerWidget()" ng-model="step.properties.retry_message" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="section-bottom-toogle" ng-class="{active : aditional}"> <div ng-click="toogleAditional()"> <span>Additional options</span> <i class="material-icons">keyboard_arrow_down</i> </div> </div> <div class="section-bottom" ng-class="{active : aditional}"> <div class="dropdown-container section" ng-class="{active : aditional}"> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.phrases.length == 0}"> <span>Phrases</span> </div> <div class="flex-row mb20" ng-repeat="phrase in step.properties.phrases track by $index"> <div class="medium-item mb10"> <custom-input ng-model="phrase" is-required="true" enter="editPhrase($parent.$index, $index, phrase)" ng-blur="editPhrase($parent.$index, $index, phrase)" placeholder="Phrase #{{$index +1}}" title="Phrase #{{$index +1}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.phrases.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.phrases\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.phrases\')" ng-class="{disable : $index == step.properties.phrases.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="addPhrase($parent.$index, $index)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.quick_replies.length == 0 || !step.properties.quick_replies}"> <span>Quick replys</span> </div> <div class="flex-row mb20" ng-repeat="replie in step.properties.quick_replies track by $index"> <div class="short-item mb10"> <custom-dropdown ng-model="replie.type" array="quickRepliesTypes" opt-description="name" opt-value="value" title="{{$resolve.translations.type}}" is-model-init="true" placeholder="" ng-change="handleQuickRepliesTypes(replie.type, $index)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{$resolve.translations.title}}" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" t
48ype-input="url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.quick_replies.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == step.properties.quick_replies.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="handleAddParam($index, \'addQuickReply\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.buttons.length == 0}" ng-init="fixTextBtn()"> <span>Buttons</span> </div> <div class="flex-row mb20" ng-repeat="btn in step.properties.buttons"> <div class="short-item mb10"> <custom-dropdown ng-model="btn.type" array="cardBtnTypes" opt-description="name" opt-value="value" title="{{$resolve.translations.type}}" ng-change="switchCardBtnTypes($index)" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input ng-model="btn.title" placeholder="{{$resolve.translations.title}}" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="btn.content.value" placeholder="{{$resolve.translations.value}}" title="{{$resolve.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container checker-marging" ng-if="btn.type == \'link\'"> <div class="checker-container"> <div class="card-checker"> <input type="checkbox" ng-model="btn.webview" id="enable_messenger_extensions{{$index}}"> <label for="enable_messenger_extensions{{$index}}"> <span class="checker-ico"></span>{{$resolve.translations.webview}} </label> </div> </div> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.buttons.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.buttons\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.buttons\')" ng-class="{disable : $index == step.properties.buttons.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'addBtnToInput\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text"> <span>Get buttons from array</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="With key" ng-model="step.properties.buttons_data.key" title="With key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.buttons_data.scope" array="::scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.titleTemplate}}" ng-model="step.properties.title_template" title="{{$resolve.translations.titleTemplate}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Content template" ng-model="step.properties.content_template" title="Content template" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/intent.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
48 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/mail.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Email" ng-model="step.properties.email" title="Email" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.name" array="mailList" opt-description="title" opt-value="name" title="Template" ng-change="deleteMailVariables(step)" is-model-init="true" placeholder="Select template" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.name"> <div class="short-item mb10" ng-repeat="item in getMailVariables(step.properties.name)"> <custom-input placeholder="{{item}}" ng-model="step.properties.scope[item]" title="{{item}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/mode.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Reply" ng-model="step.properties.reply" title="Reply" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.operator" array="::operators" opt-description="name" opt-value="value" title="Operator" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'), 49a.put("views/gui/nested.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
49 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20" ng-if="scenariosList.length"> <div class="medium-item mb10"> <custom-dropdown ng-model="step.properties.scenario" array="scenariosList" ng-init="::step.properties.scenario = findScenarioIdByName(step.properties.scenario)" opt-description="name" opt-value="value" title="Other scenario name" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/notification.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.type" array="::[{name:\'Push\', value: \'push\'}, {name:\'Email\', value: \'email\'}]" opt-description="name" opt-value="value" title="{{main.translations.type}}" ng-change="typeSwitchOnNotification($index)" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="step.properties.type == \'email\'"> <custom-input placeholder="Email" ng-model="step.properties.email" title="Email" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.type == \'push\'"> <custom-dropdown ng-model="step.properties.user" array="::operators" opt-description="name" opt-value="value" title="User" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title}}" ng-model="step.properties.title" title="{{$resolve.translations.title}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="medium-item mb10"> <custom-input placeholder="Message" ng-model="step.properties.message" is-required="true" title="Message" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/order.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
49 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" array="orderCollections" opt-description="name" opt-value="value" title="Customer type" is-model-init="true" ng-change="handleOrderChange($index, step.properties.command)" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.command == \'variable\'"> <div class="short-item mb10"> <custom-input placeholder="Products" ng-model="step.properties.products.key" title="Products" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.products.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.command == \'variable\' || step.properties.command == \'cart\'"> <div class="short-item mb10"> <custom-input placeholder="Attachments" ng-model="step.properties.attachments.key" title="Attachments" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.attachments.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Response result" ng-model="step.properties.result.key" title="Response result" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.result.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/output.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="medium-item mb10"> <custom-input placeholder="Message template" ng-model="step.properties.template" title="Message template" type-input="textarea" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Data key" ng-model="step.properties.data.key" title="Data key" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="::scopes" opt-description="name" opt-value="value" title="To Storage " is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.type" array="::types" opt-description="name" opt-value="value" title="Data type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/pattern.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
49 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="medium-item mb10"> <custom-input placeholder="Regex pattern" is-required="true" ng-model="step.properties.regex" title="Regex pattern" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.save.length == 0}"> <span>Save matches as</span> </div> <div class="flex-row mb20" ng-repeat="saveParamPattern in step.properties.save"> <div class="short-item mb10"> <custom-input is-required="true" ng-model="saveParamPattern.param" placeholder="With Key" title="With Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParamPattern.scope" array="::scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.save.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'save\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/product.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.leftMenu_category}}" ng-model="step.properties.category" title="{{$resolve.translations.leftMenu_category}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Offset" ng-model="step.properties.offset" title="Offset" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Sort By</span> </div> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.sort.field" array="::sortsFilter" opt-description="name" opt-value="value" title="Fields" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.sort.direction" array="::sortsDirectionFilter" opt-description="name" opt-value="value" title="Direction" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Filter form variable</span> </div> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="Variable" ng-model="step.properties.filter.key" title="Variable" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.filter.scope" array="::storageFilter" opt-description="name" opt-value="value" title="Storage" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-input placeholder="Saving to" ng-model="step.properties.input.ke
49y" title="Saving to" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="::storageFilter" opt-description="name" opt-value="value" title="To Storage" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/rest.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Request url" ng-model="step.properties.url" is-required="true" title="Request url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.method" array="::methods" opt-description="name" opt-value="value" title="Method type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text" class="mb20"> <span>Headers</span> </div> <div class="flex-row mb20" ng-repeat="(key, value) in step.properties.headers track by $index"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="key" is-required="true" ng-blur="handleHeadersChange($parent.$index,key,value,$index)" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.value}}" ng-model="value" is-required="true" title="{{$resolve.translations.value}}" ng-blur="handleHeadersChange($parent.$index,key,value, null)" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container" ng-if="!$first"> <div class="delete-item" ng-click="deleteHeaderRest($parent.$parent.$index, key)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'header\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.authorization.type" array="::authArray" opt-description="name" opt-value="value" title="Auth type" is-model-init="true" placeholder="Auth type" ng-change="authHandle($index, step.properties.authorization.type)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="step.properties.authorization.type == \'Basic\'"> <custom-input placeholder="User" ng-model="step.properties.authorization.data.user" is-required="true" title="User" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.authorization.type == \'Basic\'"> <custom-input placeholder="Password" ng-model="step.properties.authorization.data.password" is-required="true" title="Password" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.authorization.type == \'Digest\'"> <custom-input placeholder="User" ng-model="step.properties.authorization.data.user" is-required="true" title="User" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.authorization.type == \'Digest\'"> <custom-input placeholder="Password" ng-model="step.properties.authorization.data.password" is-required="true" title="Password" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.authorization.type == \'Bearer\'"> <custom-input placeholder="Key from storage" ng-model="step.properties.authorization.data.key" is-required="true" title="Key from storage" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.authorization.type == \'Bearer\'"> <custom-dropdown ng-model="step.properties.authorization.data.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="data_type" array="dataRest" opt-description="name" opt-value="value" title="Data type" is-model-init="false" ng-init="step.properties.data?dataRest[0] :dataRest[1]" placeholder="" ng-change="handleRaw($index, data_type)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.content" array="[{name:\'Raw\', value:\'raw\'}, {name:\'Form\', value:\'form\'}]" opt-description="name" opt-value="value" title="Content type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="!step.properties.data"> <div class="medium-item mb10"> <custom-input placeholder="Raw request body" ng-model="step.properties.raw.body" is-required="true" title="Raw request body" is-back-placeholder="true"> </custom-input> </div> </div> <div ng-if="step.properties.data"> <div class="bootom-text mb20"> <span>Properties with static value</span> </div> <div class="flex-row mb10" ng-repeat="dataItem in step.properties.data | filter: {type: \'static\'} track by $index"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="dataItem.key" is-required="true" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.value}}" ng-model="dataItem.value" is-required="true" title="{{$resolve.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.data.splice(step.properties.data.indexOf(dataItem), 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'static\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text mb20"> <span>Properties With Values From Storage</span> </div> <div class="flex-row mb10" ng-repeat="dataItem in step.properties.data | filter: {type: \'variable\'} track by $index"> <div class="short-item mb10"> <custom-input placeholder="Property" ng-model="dataItem.key" is-required="true" title="Property" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="dataItem.param" is-required="true" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="dataItem.scope" array="::scopes" opt-description="name" opt-value="value" title="From storage" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.data.splice(step.properties.data.indexOf(dataItem), 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'variable\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> </div> <div class="flex-row mb20"> <div class="medium-item mb10"> <custom-dropdown ng-model="step.save_type" array="::saveTypes" opt-description="name" opt-value="value" title="Save type" is-model-init="true" placeholder="" ng-change="handleRadio(step.save_type, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb30" ng-if="step.save_type == \'input\'"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.input.ke
49y" is-required="true" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div ng-if="step.save_type == \'save\'" class="mb10"> <div class="flex-row mb10" ng-repeat="param in step.properties.save track by $index"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="param.key" is-required="true" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Param" ng-model="param.param" is-required="true" title="Param" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="param.scope" array="::scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.save.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'saveType\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/scenario.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10" ng-if="isScenariosList"> <custom-dropdown ng-model="step.properties.scenario" array="scenariosList" ng-init="::step.properties.scenario = findScenarioIdByName(step.properties.scenario)" opt-description="name" opt-value="value" title="Scenario" is-model-init="true" placeholder="" ng-change="step.properties.step = stepsList[step.properties.scenario][0].id" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="isStepsList"> <custom-dropdown ng-model="step.properties.step" array="stepsList[step.properties.scenario]" opt-description="name" opt-value="id" title="Step" is-model-init="true" ng-init="::step.properties.step = findStepIdByName(step.properties.step, step.properties.scenario)" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'), 50a.put("views/gui/schedule.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
50 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" ng-change="scheduleCommand(step.properties.command, $index)" array="::commands" opt-description="name" opt-value="value" title="Command" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Job name" ng-model="step.properties.tag" title="Job name" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="medium-item mb10"> <custom-input placeholder="Success message" ng-model="step.properties.reply" type-input="textarea" title="Success message" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="isScenariosList && step.properties.command !=\'stop\'"> <custom-dropdown ng-model="step.properties.scenario" array="scenariosList" ng-init="::step.properties.scenario = findScenarioIdByName(step.properties.scenario)" opt-description="name" opt-value="value" title="Name of scenario to run" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text" ng-if="step.properties.command == \'start\'"> <span>Period in Cron-style format</span> </div> <div ng-if="step.properties.command == \'start\'"> <cron-selection ng-model="step.properties.period" template="views/scenarios/custom-cron-selection.html"></cron-selection> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/soap.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Wsdl url" ng-model="step.properties.url" title="Wsdl url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Method" ng-model="step.properties.method" title="Method" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="medium-item mb10"> <custom-input placeholder="Json format data" ng-model="step.properties.raw.body" title="Json format data" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.saveTo_text}}
50" ng-model="step.properties.input.key" title="{{$resolve.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="::scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/subscription.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Reply" ng-model="step.properties.reply" is-required="true" title="Reply" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" array="::subscriptionCommands" opt-description="name" opt-value="value" title="Command" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.command == \'enable\'"> <div class="short-item mb10" ng-if="step.properties.autoposting"> <custom-dropdown ng-model="step.properties.autoposting.command" array="autopostingCommands" opt-description="name" opt-value="value" title="Autoposting Command" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <div class="checker-container" style="{{step.properties.autoposting? \'bottom: -25px;\' : \'bottom: -5px;\'}} position: relative"> <div class="card-checker" ng-click="autopostingTumb()"> <input type="checkbox" ng-checked="step.properties.autoposting"> <label> <span class="checker-ico"></span>Autoposting </label> </div> </div> </div> </div> <div ng-if="step.properties.autoposting && step.properties.command == \'enable\'"> <div class="bootom-text mb10"> <span>Autoposting Collections:</span> </div> <div class="flex-row mb10" ng-repeat="autopostingItem in step.properties.autoposting.collections track by $index"> <div class="short-item mb10"> <div style="position: relative; top: 2px">{{getAutopostingName(autopostingItem)}}</div> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="removeAutopostinCollection($index)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb40" ng-if="step.properties.autoposting.collections[0] !==\'*\'"> <custom-dropdown ng-model="virualAutopost.filterModel" array="virualAutopost.filterArray" opt-description="name" opt-value="value" ng-change="autopostingChangeItem(virualAutopost.filterModel)" title="{{main.translations.addMore}} Collections" is-model-init="false" placeholder="All" is-back-placeholder="true" is-back-placeholder-active="true"> </custom-dropdown> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/switch.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
50 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div ng-repeat="(key, switch) in step.properties.switch" class="mb10"> <div class="bootom-text"> <span>Case #{{$index + 1}}</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input ng-model="switch.name" placeholder="{{$resolve.translations.title_name}}" title="{{$resolve.translations.title_name}}" is-required="true" ng-focus="renameCaseStart(switch.name)" ng-blur="renameCaseEnd(switch.name, $parent.$index, $index)" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="switch.operator" array="::[{name:\'AND\',value:\'and\'}, {name:\'OR\',value:\'or\'},]" opt-description="name" opt-value="value" title="Logic operator" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="deleteCase($parent.$index, $index)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="bootom-text" ng-class="{\'mb20\' :switch.conditions.length == 0}"> <span>Conditions</span> </div> <div class="flex-row mb10" ng-repeat="condition in switch.conditions"> <div class="short-item mb10"> <custom-input placeholder="Parameter" ng-model="condition.value.param" title="Parameter" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="condition.value.scope" array="::scopes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="condition.operator" array="::[{name:\'equal\',value:\'EQUAL\'},{name:\'ne\',value:\'NE\'},{name:\'gt\',value:\'GT\'},{name:\'gte\',value:\'GTE\'},{name:\'lt\',value:\'LT\'},{name:\'lte\',value:\'LTE\'},{name:\'regex\',value:\'REGEX\'},{name:\'contains\',value:\'CONTAINS\'}]" opt-description="value" opt-value="name" title="TCondition " is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.value}}" is-required="true" ng-model="condition.target" title="{{$resolve.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="checker-container"> <div class="card-checker"> <input type="checkbox" ng-true-value="false" ng-false-value="true" ng-model="condition.true" id="condition_{{$parent.$parent.$index}}_{{$parent.$index}}_{{$index}}"> <label for="condition_{{$parent.$parent.$index}}_{{$parent.$index}}_{{$index}}"> <span class="checker-ico"></span>Inverted value </label> </div> </div> <div class="delete-item" style="margin-right: 0px" ng-click="deleteSwitchCondition($parent.$parent.$index,$parent.$index, $index)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="addSwitchCondition(key)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> Add condition </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="addSwitchCase($parent.$index, $index)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> Add case </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/text.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
50 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="medium-item mb10"> <custom-input placeholder="Output message" ng-model="step.properties.content" type-input="textarea" type-input="textarea" title="Output message" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="section-bottom-toogle" ng-class="{active : aditional}"> <div ng-click="toogleAditional()"> <span>Additional options</span> <i class="material-icons">keyboard_arrow_down</i> </div> </div> <div class="section-bottom" ng-class="{active : aditional}"> <div class="dropdown-container section" ng-class="{active : aditional}"> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.phrases.length == 0}"> <span>Phrases</span> </div> <div class="flex-row mb20" ng-repeat="phrase in step.properties.phrases track by $index"> <div class="medium-item mb10"> <custom-input ng-model="phrase" is-required="true" placeholder="Phrase #{{$index +1}}" enter="editPhrase($parent.$index, $index, phrase)" ng-blur="editPhrase($parent.$index, $index, phrase)" title="Phrase #{{$index +1}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.phrases.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.phrases\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.phrases\')" ng-class="{disable : $index == step.properties.phrases.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="addPhrase($parent.$index, $index)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.buttons.length == 0}" ng-init="fixTextBtn()"> <span>Buttons</span> </div> <div class="flex-row mb20" ng-repeat="btn in step.properties.buttons"> <div class="short-item mb10"> <custom-dropdown ng-model="btn.type" array="cardBtnTypes" opt-description="name" opt-value="value" title="{{$resolve.translations.type}}" ng-change="switchCardBtnTypes($index)" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input ng-model="btn.title" is-required="true" placeholder="{{$resolve.translations.title}}" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="btn.content.value" is-required="true" placeholder="{{$resolve.translations.value}}" title="{{$resolve.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container checker-marging" ng-if="btn.type == \'link\'"> <div class="checker-container"> <div class="card-checker"> <input type="checkbox" ng-model="btn.webview" id="enable_messenger_extensions{{$index}}"> <label for="enable_messenger_extensions{{$index}}"> <span class="checker-ico"></span>{{$resolve.translations.webview}} </label> </div> </div> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.buttons.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton(\'up\', $index, \'properties.buttons\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton(\'down\', $index, \'properties.buttons\')" ng-class="{disable : $index == step.properties.buttons.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'addBtnToInput\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.quick_replies.length == 0 || !step.properties.quick_replies}"> <span>Quick replys</span> </div> <div class="flex-row mb20" ng-repeat="replie in step.properties.quick_replies track by $index"> <div class="short-item mb10"> <custom-dropdown ng-model="replie.type" array="quickRepliesTypes" opt-description="name" opt-value="value" title="{{$resolve.translations.type}}" is-model-init="true" placeholder="" ng-change="handleQuickRepliesTypes(replie.type, $index)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{$resolve.translations.title}}" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" t
50ype-input="url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.quick_replies.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == step.properties.quick_replies.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot" ng-click="handleAddParam($index, \'addQuickReply\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{$resolve.translations.addMore}} </div> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/gui/transaction.html",'<div class="flex-row create-bot flex-row-centered"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb20"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{step.component}} </div> </div> <div class="scenario-card mb20"> <div class="section"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="step.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.action" array="transactionActionList" opt-description="name" opt-value="value" placeholder="" title="Action type" is-model-init="true" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="value" ng-model="step.properties.value" title="value" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.action === \'transfer\'"> <custom-input placeholder="Transfer to" ng-model="step.properties.to" title="Transfer to" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="firstStepStatus" checked id="firstStep" ng-change="setStepAsFirst()"> <label for="firstStep"> <span class="checker-ico"> </span> <span>Is first step</span> </label> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:12px">{{$resolve.translations.save_btn}}</button> <button ng-if="!step.isNewStep" ng-click="removeStep()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div>'),a.put("views/guimodal.html",'<div class="scenario-wrapper gui-modal-wrap"> <div class="cards flex-row"> <form class="" ng-submit="saveStep()" name="scenarioForm" novalidate> <scenario-component component="{{step}}" folder="gui"></scenario-component> </form> </div> </div>'),a.put("views/hints.html",'<div id="crm-wrapper" class="hints-wrapper"> <div class="crm-body"> <div class="hints-new-category"> <resize-input2 ng-model="newCategory" enter="addCategory()" multiline="false" placeholder="New category" style="float: left"> </resize-input2> <i ng-click="addCategory()" class="material-icons">add</i> </div> <div ng-repeat="category in categories"> <h3 class="crm-title">{{category.name}}</h3> <div class="hints-list"> <div ng-repeat="hint in hints" ng-if="hint.category && hint.category.id == category.id" ng-click="editHint(hint)" class="hints-list__block"> <h4 class="hints-list__block-title">{{hint.name}}</h4> <div ng-bind-html="hint.preview" class="hints-list__block-body"></div> <a ng-if="hint.link" ng-href="{{getUrl(hint.link)}}" target="_blank" ng-click="$event.stopPropagation()" class="learn-more"> <span>Learn more</span> <span class="material-icons">
50 navigate_next </span> </a> </div> <div ng-click="addHint(category)" class="hints-list__block_new"> <i class="material-icons">add_circle_outline</i> <span>New hint</span> </div> </div> </div> <div> <h3 class="crm-title">Uncategorized</h3> <div class="hints-list"> <div ng-repeat="hint in hints" ng-if="!hint.category" ng-click="editHint(hint)" class="hints-list__block"> <h4 class="hints-list__block-title">{{hint.name}}</h4> <div ng-bind-html="hint.preview" class="hints-list__block-body"></div> <a ng-if="hint.link" ng-href="{{getUrl(hint.link)}}" target="_blank" ng-click="$event.stopPropagation()" class="learn-more"> <span>Learn more</span> <span class="material-icons"> navigate_next </span> </a> </div> <div ng-click="addHint()" class="hints-list__block_new"> <i class="material-icons">add_circle_outline</i> <span>New hint</span> </div> </div> </div> </div> </div> <div id="crm-slider" class="crm-slider__animate hints-slider" ng-if="slider.isOpen"> <div class="crm-slider__header"> <div class="crm-slider__header-controls"> \x3c!--<i class="material-icons header-control__prev">--\x3e \x3c!--keyboard_arrow_left--\x3e \x3c!--</i>--\x3e <i ng-if="slider.hint.id" ng-click="deleteHint()" class="material-icons header-control__delete"> delete </i> \x3c!--<i class="material-icons header-control__next">--\x3e \x3c!--keyboard_arrow_right--\x3e \x3c!--</i>--\x3e </div> <div class="crm-slider__header-tabs"> </div> <div class="crm-slider__header-controls"> <i class="material-icons header-control__confirm" ng-click="updateHint()"> check </i> <i class="material-icons header-control__close" ng-click="closeSlider()"> close </i> </div> </div> <div class="crm-slider__body crm-slider__profile"> <h3 class="crm-slider__profile-name">Editing hint</h3> <h4 class="crm-slider__profile-title">Key</h4> <div class="crm-slider__profile-input"> <input type="text" ng-model="slider.hint.key" placeholder="Type here"> </div> <h4 class="crm-slider__profile-title">Name</h4> <div class="crm-slider__profile-input"> <input type="text" ng-model="slider.hint.name" placeholder="Type here"> </div> <h4 class="crm-slider__profile-title">Category</h4> <div class="crm-slider__profile-input"> <custom-dropdown ng-model="slider.hint.category" array="categories" opt-description="name" opt-value="id" is-model-init="true" placeholder="Select category…" is-back-placeholder="true"> </custom-dropdown> </div> <h4 class="crm-slider__profile-title">Preview (html)</h4> <div class="crm-slider__profile-input crm-slider__profile-input_resize"> <resize-input2 ng-model="slider.hint.preview" placeholder="Type here" multiline="true" max-width="317"> </resize-input2> </div> <h4 class="crm-slider__profile-title">Link</h4> <div class="crm-slider__profile-input"> <input type="text" ng-model="slider.hint.link" placeholder="Type here"> </div> </div> </div>'), 51a.put("views/hotelbot/hotelbot.html",'<div id="pageWrapper"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link rel="stylesheet" type="text/css" href="styles/hotelbot/main.css"> <nav id="nav"> <div class="nav"> <a href="#" class="logo"> <span>Hotel</span>Bot </a> <div id="nav-button"> <span></span> </div> <ul class="nav-menu" id="nav-menu"> \x3c!-- nav link example --\x3e \x3c!-- \t\t\t\t\t<li>\n <a href="#" class="link">\n link\n </a>\n </li> --\x3e <li class="devider"> <main-menu-direct translations="translations" authenticated="false" style="margin-top: -10px" is-not-main="true"> </main-menu-direct> </li> \x3c!-- \t\t\t\t\t\t<li>\n <a href="http://brain.tfid.me/" class="button button-flat">\n <span>Sign In</span>\n </a>\n </li>\n \n <li>\n <a href="http://brain.tfid.me/register" class="button button-float">
51\n <span>Register</span>\n </a>\n </li> --\x3e <li> <div class="auth-block"> <span class="auth-container"> <a href="http://hotelbot2.tfid.me/" class="signIn">Sign In</a> <a href="http://hotelbot2.tfid.me/enter" class="signUp"> <i class="material-icons"> person_add </i> </a> </span> </div> </li> <li class="nav-form"> <form id="contactForm" method="post" action="mail.php"> <h5>Feel free to contact us</h5> <div class="input-wrapper"> <input type="email" name="email" placeholder="Your email" required autocomplete="off"> <button type="submit"> <i class="material-icons"> send </i> </button> </div> </form> </li> </ul> </div> </nav> <section id="start"> <div class="container"> <h1>Facebook ChatBot <br>for your <span>Hotel</span></h1> <h2>24/7 personalized attention via an automated chat. <br> Connect your guests with your hotel via Facebook Messenger</h2> <a href="http://hotelbot2.tfid.me/enter" class="button button-float button-start"> <span>Get started for free</span> </a> </div> </section> <section id="pros"> <div class="container"> <div class="pros-container"> <div class="item"> <img src="images/hotelbot/ic_check.png" alt="easy setup"> <h3>Easy setup</h3> <p>Have your hotelâs bot ready and answering guests in less than 20 minutes.</p> </div> <div class="item"> <img src="images/hotelbot/ic_facebook.png" alt="facebook"> <h3>On your <br>Facebook page</h3> <p> Without downloads or <br> registering. Your guests can communicate with the hotel via Facebook Messenger and theyâll only have to search for the name of the hotel. </p> </div> <div class="item"> <img src="images/hotelbot/ic_trans.png" alt="multi-language AI"> <h3>Multi-language AI</h3> <p> Automatic answers in the language you decide. The Bot learns from its interactions to provide more accurate answers each time. </p> </div> </div> </div> </section> <section id="solution"> <div class="container"> <h3 class="section-title">One solution for all devices</h3> <div class="solution-wrapper"> <img src="images/hotelbot/img_s_1.png" alt="solution"> <img src="images/hotelbot/img_s_2.png" alt="solution" class="solution-float"> </div> </div> </section> <section id="guest-service"> <div class="container"> <h3 class="section-title">Personalized Guest Service</h3> <p> Connect our hotel reservation bot platform to your hotel CRM and deliver personalized <br> services to your guests around hotel preferences, customized room bookings and more. </p> <img src="images/hotelbot/img_s_3.png" alt="solution"> </div> </section> <section id="help"> <div class="container"> <h3 class="section-title">We\'ll Help You Build The Best Hotel Chatbot</h3> <p> The rise of artificial intelligence and machine learning has led to a wide range of online hotel <br> marketing solutions that are driving higher conversions and improved customer service. </p> <br> <br> <p> In the hotel industry the arrival of the âhotel booking botâ has revolutionized the way guests <br> can interact with a company before, during and after their stay. This trend is set to dominate <br> the industry in 2017, so itâs time you discovered how to make a hotel chatbot. </p> <br> <br> <p> Let HotelBot be the chatbot developer for your hotel and help you build <br> the best hotel booking chat bot! </p> </div> </section> <section id="features"> <div class="container"> <h3 class="section-title">Engage With Customers</h3> <div class="features-container"> <div class="feature"> <div class="feature-logo"> <img src="images/hotelbot/ic_display.png" alt="display"> </div> <h4 class="block-title">Front Desk</h4> <p class="block-text"> Manage reservations, transactions and guest information with HotelBot smart guest profiling system. Ensure guest satisfaction with detailed visit histories and customer preferences. </p> </div> <div class="feature"> <div class="feature-logo"> <img src="images/hotelbot/ic_chat.png" alt="chat"> </div> <h4 class="block-title">Efficient Services</h4> <p class="block-text"> Improve and streamline business operations by integrating services, improve guest experience, attend to their needs and wants, all effortlessly in sync with the FrontDesk & Feedback. </p> </div> <div class="feature"> <div class="feature-logo"> <img src="images/hotelbot/ic_message.png" alt="message"> </div> <h4 class="block-title">Feedback Management</h4> <p class="block-text"> With HotelBot Realtime Feedback system, start tapping into your guest's preferences and expectations; get instant negative-sentiment alerts and generate analysis to understand your customer behavior. </p> </div> <div class="feature"> <div class="feature-logo"> <img src="images/hotelbot/ic_grow.png" alt="grow"> </div> <h4 class="block-title">Powerful Analytics</h4> <p class="block-text"> Enhance customer information and preferences with HotelBot Analytics Tool. Customize offers that appeal to customers with the smart mapping feature. Create âWOWâ moments for customers and maximize customer spend. </p> </div> </div> </div> </section> \x3c!-- WHITE LABEL --\x3e <div class="section section-white-label"> <div class="container"> <h3 class="white-label__title"> White label partner registration </h3> <p class="white-label__text"> Selling chatbots without worrying about the technology and the development. Lets us take care of all the technological aspects while you concentrate on doing what you do best - sales. </p> <p class="white-label__link"> <span>to register with one click, just </span> <a class="white-label__link-button" target="_blanc" href="https://m.me/1237860396355276"> <i></i> Message Us </a> <span> with your account</span> </p> </div> </div> <div class="contact-us" style="padding: 49px 108px 36px 108px !important"> <div class="contact-us-tf"><img src="images/other/tf_smal.png" alt=""></div> <span class="copyright">2018 (c) TechFunder. All rights reserved.</span> <p> <a href="tel:+4922167785187">+49 221 677 85 187</a> <a href="tel:+491711254074">+49 171 125 40 74</a> <a href="mailto:[email protected]">[email protected]</a> </p> <p class="mb10"> <a href="https://app.brnz.ai" target="">Home</a> <a href="/blog" target="">Blog</a> <a href="https://app.brnz.ai/docs/" target="_blank">Documentation</a> <a href="/privacy" target="">Privacy Policy</a> <a href="/imprint" target="">Imprint</a> </p> </div> </div> <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"><\/script> <script>var navButton=$("#nav-button"),navMenu=$("#nav-menu"),displayWidth;navButton.on("click",function(){$(this).hasClass("nav-button--active")?($
51(this).removeClass("nav-button--active"),navMenu.slideUp(200)):($(this).addClass("nav-button--active"),navMenu.slideDown({start:function(){$(this).css({display:"flex"})}}))}),$(window).on("resize",function(){displayWidth=window.innerWidth,navButton.hasClass("nav-button--active")&&(navButton.removeClass("nav-button--active"),navMenu.slideUp(200)),displayWidth>768?navMenu.css({display:"flex"}):navMenu.css({display:"none"})}),$("#contactForm").submit(function(n){n.preventDefault(),$.ajax({url:"mail.php",type:"post",data:$("#contactForm").serialize(),success:function(){$("#contactForm")[0].reset()}})});<\/script>'),a.put("views/imprint.html",'<div ng-if="loaded"> <div ng-bind-html="page"> </div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/insta-direct/insta-direct.html",'<div id="pageWrapper"> <link rel="stylesheet" type="text/css" href="styles/insta-direct/main.css"> <link rel="icon" type="image/x-icon" href="images/insta_direct/img/favicon.ico"> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-125252359-1"><\/script> <script>window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag(\'js\', new Date());\n\n gtag(\'config\', \'UA-125252359-1\');<\/script> <nav id="nav"> <div class="nav"> <a href="http://instadirect.tfid.me" class="logo"> <span>Insta.</span>Direct </a> <div id="nav-button"> <span></span> </div> <ul class="nav-menu" id="nav-menu"> \x3c!-- nav link example --\x3e \x3c!-- \t\t\t\t\t<li>\n <a href="#" class="link">\n link\n </a>\n </li> --\x3e \x3c!-- --\x3e <li class="devider"> <main-menu-direct translations="translations" authenticated="false" style="margin-top: -10px" is-not-main="true"> </main-menu-direct> </li> \x3c!-- \t\t\t\t\t\t<li>\n <a href="http://brain.tfid.me/" class="button button-flat">\n <span>Sign In</span>\n </a>\n </li>\n\n <li>\n <a href="http://brain.tfid.me/register" class="button button-float">\n <span>Register</span>\n </a>\n </li> \n <li style="margin-right: 20px">\n <div class="auth-block">\n\t\t\t\t\t\t\t\t<span class="auth-container">\n\t\t\t\t\t\t\t\t\t<a href="http://instadirect.tfid.me" class="signIn">Sign In</a>\n\t\t\t\t\t\t\t\t\t<a href="http://instadirect.tfid.me/enter" class="signUp">\n\t\t\t\t\t\t\t\t\t\t<i class="material-icons">\n\t\t\t\t\t\t\t\t\t\t\tperson_add\n\t\t\t\t\t\t\t\t\t\t</i>\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t</span>\n </div>\n </li>\n --\x3e <li class="nav-form" style="display: none"> <form id="contactForm" method="post" action="mail.php"> <h5>I want a White Label Version of Insta.Direct</h5> <div class="input-wrapper"> <input type="email" name="email" placeholder="Your email" required autocomplete="off"> <button type="submit"> <i class="material-icons"> send </i> </button> </div> </form> </li> </ul> </div> </nav> <section id="start"> <div class="container"> <h1>Meet <span>Instagram</span><br>Marketing</h1> <h2>Insta.Direct lets you create an Instagram bot for marketing, sales and support. It`s easy and fast.</h2> <a href="#whiteLabel" class="button button-float button-start"> <span>Get started for free</span> </a> </div> </section> <section id="bot"> <div class="container"> <div class="col-image"> <div class="bot-chat-img"> <img src="images/insta_direct/img/img_chat.png" alt="chat"> </div> </div> <div class="col-info"> <h4 class="block-title"> What is an Instagram bot? </h4> <p class="block-text"> Try a conversation with Insta.Direct bot now and see exactly how your business can level up marketing, sales and support using Instagram. </p> <a href="#whiteLabel" class="button button-float button-start"> <span>Begin conversation</span> </a> </div> </div> </section> <section id="platform"> <div class="container"> <h3 class="section-title">bot platform</h3> <h4 class="block-title text-center">Create and connect your bot to your Instagram account in no time</h4> <p class="block-text text-center"> Use Insta.Direct visual drag`n`drop builder to easy and fun setup your Instagram bot. No programming required! Just 2 minutes without coding and you are ready to go. </p> <img src="images/insta_direct/img/img_steps.png" alt="steps"> </div> </section> <section id="features"> <div class="container"> <div class="features-container"> <div class="feature"> <div class="feature-logo"> <img src="images/insta_direct/img/ic_grow.png" alt="grow"> </div> <h4 class="block-title">Grow your Instagram followers</h4> <p class="block-text"> Instagram has 58 times more engagement per follower than Facebook. Insta.Direct makes it easy to grow your Instagram audience with Instagram bot by providing a complete set of tools to engage your followers. Whether you already have a following or just starting out - we`ve got you covered. </p> </div> <div class="feature"> <div class="feature-logo"> <img src="images/insta_direct/img/ic_chat.png" alt="chat"> </div> <h4 class="block-title">Send messages to your followers via Direct</h4> <p class="block-text"> Your message should be heard. Over 60 percent of users log in to Instagram daily, making it the second most engaged social network after Facebook. With direct messages high open rates Instagram is the best place to make that happen. </p> </div> <div class="feature"> <div class="feature-logo"> <img src="images/insta_direct/img/ic_message.png" alt="message"> </div> <h4 class="block-title">Stay personal with Insta.Direct Live Chat</h4> <p class="block-text"> Bots are better with a human touch. And Direct is better with bots! Whether it`s a high-ticket sale or a difficult support question - our integrated Live Chat notifies you when your attention is needed and makes it easy to have a conversation with your followers. Set up automated answers or answer in manual mode - keep all your chats in one place! </p> </div> <div class="feature"> <div class="feature-logo"> <img src="images/insta_direct/img/ic_goal.png" alt="goal"> </div> <h4 class="block-title">Automate your Instagram marketing</h4> <p class="block-text"> Nurture leads right inside Instagram with our automated Sequences. Insta.Direct will send messages based on user actions or a time delay, so you can sit back, relax, and enjoy higher conversions. </p> </div> </div> </div> </section> <section id="instagram"> <div class="container"> <div class="col-image"> <div class="instagram-img"> <img src="images/insta_direct/img/img_insta.png" alt="instagram"> </div> </div> <div class="col-info"> <h4 class="block-title"> Why Instagram? </h4> <p class="block-text"> Instagram is the #1 app in the US and Canada with over 1 billion active users. </p> <p class="block-text"> It is the most engaging channel with average 80% open rates and 4 to 10 times higher CTRs compared to email. Your audience already uses Instagram everyday and your business should be a part of that conversation. </p> <div class="col-info-footer"> <div class="col-info-footer-item"> <h4>1 Billion</h4> <p>Active users</p> </div> <div class="col-info-footer-item"> <h4>80%</h4> <p>Open Rates</p> </div> <div class="col-info-footer-item"> <h4>x4-10</h4> <p>CTRS</p> </div> </div> </div> </div> </section> <section id="whiteLabel"> <div class="container"> <h3 class="section-title">White label partner registration</h3> <p class="block-text text-center"> Selling chatbos without worrying about the technology and the<br> development. Lets us take care of all the technological aspects<br> while you concentrate on doing what you do best - sales </p> <div class="white-label-footer"> <h3>TO REGISTER WITH ONE CLICK, JUST</h3> <a class="white-label-button" href="https://m.me/1237860396355276" target="_blank"> <span>Message Us</span> </a> <h3>WITH YOUR ACCOUNT</h3> </div> </div> </section> <section id="questions"> <div class="container"> <h3 class="section-title">Common questions</h3> <div class="questions-container"> <div class="question"> <h4 class="block-title">What is an Instagram bot?</h4> <p class="block-text"> A bot is an Instagram Account that sends out messages and responds to users automatically. </p> <p class="block-text"> Youâll need an existing Instagram Account to set up its bot functionality. </p> </div> <div class="question"> <h4 class="block-title">What can an Instagram bot do?</h4> <p class="block-text"> The basic functionality lets you welcome new users, send them content, schedule posts, set up keyword auto-responses (text, pictures, videos), automatically broadcast your RSS feed and much more. </p> </div> <div class="question"> <h4 class="block-title">Why do I need an Instagram bot?</h4> <p class="block-text"> Every day itâs becoming harder to reach your audience. People open less email and social media is so noisy you can barely see your own posts. Instagram bot solves this problem by providing a private channel of communication with each user. Itâs instant and interactive, and no message is ever lost. </p> </div> <div class="question"> <h4 class="block-title">How to create an Instagram bot?</h4> <p class="block-text"> Youâll need an existing Instagram Account to manage it. Use Insta.Direct to create your bot in 2 minutes without coding. Just press the âCreate Botâ button and youâll be up and running in no time. </p> </div> </div> </div> </section> <div class="contact-us" style="padding: 49px 108px 36px 108px !important"> <div class="contact-us-tf"><img src="images/other/tf_smal.png" alt=""></div> <span class="copyright">2018 (c) TechFunder. All rights reserved.</span> <p> <a href="tel:+4922167785187">+49 221 677 85 187</a> <a href="tel:+491711254074">+49 171 125 40 74</a> <a href="mailto:[email protected]">[email protected]</a> </p> <p class="mb10"> <a href="https://app.brnz.ai" target="">Home</a> <a href="/blog" target="">Blog</a> <a href="https://app.brnz.ai/docs/" target="_blank">Documentation</a> <a href="/privacy" target="">Privacy Policy</a> <a href="/imprint" target="">Imprint</a> </p> </div> </div> <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"><\/script> <script>function checScroll(){\n $("#nav").offset().top>20?$("#nav").addClass("navbar-shrink"):$("#nav").removeClass("navbar-shrink")\n }\n $(window).scroll(function(){\n checScroll()\n });\n $(document).on("load",function(){\n checScroll()\n });\n var navButton=$("#nav-button"),navMenu=$("#nav-menu"),displayWidth;
51\n navButton.on("click",function() {\n if ($(this).hasClass("nav-button--active")) {\n $(this).removeClass("nav-button--active");\n navMenu.slideUp(200);\n } else {\n $(this).addClass("nav-button--active");\n navMenu.slideDown({\n start: function () {\n $(this).css({display: "flex"})\n }\n });\n }\n });\n $(window).on("resize",function(){\n displayWidth=window.innerWidth;\n if (navButton.hasClass("nav-button--active")) {\n navButton.removeClass("nav-button--active");\n navMenu.slideUp(200);\n }\n if (displayWidth>768) {\n navMenu.css({display:"flex"});\n } else {\n navMenu.css({display:"none"});\n }\n });\n $("#contactForm").submit(function(n){\n n.preventDefault();\n $.ajax({\n url:"mail.php",\n type:"post",\n data:$("#contactForm").serialize(),\n success:function(){\n console.log("success");\n $("#contactForm")[0].reset()\n }\n })\n });<\/script>'),a.put("views/instagram.html",'<div class="flex-row create-bot flex-row-centered"> \x3c!-- <div class="flex-col-small"> --\x3e <div> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px;\n margin-right: 2px;\n top: 5px;\n font-size: 21px" ng-click="close()"> close </i> {{exist? !instagram.provider_data.challenge && !instagram.provider_data.renewal_required? $resolve.translations.settings_conections_editExsistConection: $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color: #94cc25; top: -12px"> {{$resolve.translations.instagram}} </h2> </div> <div ng-if="!connectionType && !isProgres"> <button style="width: 100%" class="brn-btn brn-primary" ng-click="selectConnectionType(\'official\')"> Official connection </button> <button style="width: 100%" class="brn-btn brn-primary" ng-click="selectConnectionType(\'unofficial\')"> Unofficial connection </button> </div> \x3c!-- --------------------- Unofficial connection form ---------------------- --\x3e <form ng-submit="updateConnection()" ng-if="isUnofficial()"> <div class="mb10"> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.userName}}" ng-model="instagram.provider_data.username" title="{{$resolve.translations.userName}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.store_password}}" ng-model="instagram.provider_data.password" title="{{$resolve.translations.store_password}}" type-input="password" is-back-placeholder="true"> </custom-input> </div> <div class="mb5"> <custom-input placeholder="Feed check interval" ng-model="instagram.provider_data.feed_check_interval" title="Feed check interval" type-input="number" is-back-placeholder="true"> </custom-input> </div> <div class="mb30"> <custom-dropdown ng-model="instagram.provider_data.realtime_mode" array="realtimeModes" title="Realtime mode" is-model-init="true" placeholder="Select mode" inactive-placeholder="true" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb5 card-checker"> <input type="checkbox" step="any" ng-model="instagram.provider_data.process_media" ng-change="onChange()" ng-keyup="$event.keyCode == 13 && enter()" id="id-checkbox-process-media"> <label for="id-checkbox-process-media"> <span class="checker-ico"></span> <span>Process Media</span> </label> </div> <div class="mb5 card-checker"> <input type="checkbox" step="any" ng-model="instagram.provider_data.is_custom_proxy" ng-change="onChange();checkCheckbox();" ng-keyup="$event.keyCode == 13 && enter()" id="id-checkbox-is-custom-proxy"> <label for="id-checkbox-is-custom-proxy"> <span class="checker-ico"></span> <span>{{ $resolve.translations.is_custom_proxy }}</span> </label> </div> <div class="mb30" ng-class="{ hidden : !instagram.provider_data.is_custom_proxy }"> <custom-input placeholder="{{$resolve.translations.proxy}}" ng-model="instagram.provider_data.proxy" title="{{$resolve.translations.proxy}}" http-prefix is-back-placeholder="true"> </custom-input> </div> <div class="card-checker"> <input type="checkbox" step="any" ng-model="instagram.provider_data.disallow_proxy_change" ng-change="onChange()" ng-keyup="$event.keyCode == 13 && enter()" id="id-checkbox-disallow-proxy-change"> <label for="id-checkbox-disallow-proxy-change"> <span class="checker-ico"></span> <span>{{ $resolve.translations.disallow_proxy_change }}</span> </label> </div> <div class="modal-red-message" ng-if="isCode"> {{$resolve.translations.settings_conections_instagramModalText}} </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right: 10px"> {{$resolve.translations.save_btn}} </button> <button ng-if="instagram.provider_data.username && exist" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px"> {{$resolve.translations.delete}} </button> </div> </form> \x3c!-- --------------------- Official connection form ---------------------- --\x3e <form ng-submit="updateConnection()" ng-if="isOfficial()"> <div ng-if="fbAuthDone"> <div class="mb30"> <custom-dropdown ng-model="instagramOfficial.provider_data.page_id" array="connectedFacebookPages" opt-description="name" opt-value="id" is-model-init="true" title="{{$resolve.translations.facebookPage}}" placeholder="{{$resolve.translations.facebookPage}}" inactive-placeholder="true" is-back-placeholder="true"> </custom-dropdown> </div> <div ng-if="advancedPermissions && instagramOfficial.provider_data.page_id"> \x3c!-- Use unofficial fallback --\x3e <div class="mb5 card-checker"> <input type="checkbox" step="any" ng-model="instagramOfficial.provider_data.unofficial_fallback" id="id-checkbox-unofficial-fallback"> <label for="id-checkbox-unofficial-fallback"> <span class="checker-ico"></span> <span>Use unofficial fallback</span> </label> </div> <div ng-if="instagramOfficial.provider_data.unofficial_fallback"> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.userName}}" ng-model="instagramOfficial.provider_data.username" title="{{$resolve.translations.userName}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.store_password}}" ng-model="instagramOfficial.provider_data.password" title="{{$resolve.translations.store_password}}" type-input="password" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb30"> <custom-input placeholder="{{$resolve.translations.proxy}}" ng-model="instagramOfficial.provider_data.proxy" title="{{$resolve.translations.proxy}}" is-required="true" http-prefix is-back-placeholder="true"> </custom-input> </div> </div> </div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right: 10px"> {{$resolve.translations.save_btn}} </button> <button ng-if="exist" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px"> {{$resolve.translations.delete}} </button> </div> <div ng-if="!fbAuthDone && !exist"> <span ng-click="initFbAuth()" class="brn-btn brn-primary" style="min-width: 0px; margin-right: 10px"> Connect Facebook page </span> </div> <div ng-if="!fbAuthDone && exist"> <div class="mb10"> <custom-input is-readonly="true" placeholder="{{$resolve.translations.facebookPage}}" ng-model="connectedPageName" title="{{$resolve.translations.facebookPage}}" is-back-placeholder="true"> </custom-input> </div> <span ng-click="initFbAuth()" class="brn-btn brn-primary" style="min-width: 0px; width: 100%"> Change Facebook page </span> <span ng-click="deleteConnection()" class="brn-btn brn-delete-transparent" style="min-width: 0px; width: 100%; margin-top: 12px"> Delete connection </span> </div> </form> </div> </div> <div style="width: 100%; height: 100%; position: absolute; top: 0; left: 0" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'), 52a.put("views/intent-detail.html",'<div class="flex-row" ng-click="closePopups()"> <div class="settings-card-wrap" style="margin-right: 32px"> <div class="settings-card mb50" style="max-width: 320px; width: 100%"> <h2 class="mb50">Edit intent</h2> <div class="mb20"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="intent.name" title="{{main.translations.title_name}}" enter="handleIntentNameChange()" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb50"> <custom-dropdown ng-model="intent.response.type" array="intent_types" opt-description="label" opt-value="type" is-model-init="true" title="Response type" placeholder="" ng-change="handleTypeChange()" is-back-placeholder="true"> </custom-dropdown> </div> <h2> Tags <span class="tag-add-button" data-target="#editTag" data-toggle="modal">+ add more</span> </h2> <div class="intent-tags"> <div class="intent-tags__section mb20"> <p class="intent-tags__section-title intent-tags__section-title--green"> Add </p> <div class="intent-tags__tags-list"> <span class="intent-tags__tag" ng-repeat="tag in intent.response.tags.add" ng-click="editTag(tag, $event)"> <i class="intent-tags__tag-color" ng-style="{\'background-color\':tag.color}"></i> {{tag.name}} <div class="intent-tags__tag-editor" ng-if="isTagEditing(tag.tag_id)"> <ul class="intent-tags__tag-colors"> <li ng-repeat="color in tagColors" ng-style="{\'background-color\':color}" ng-click="setTagColor(color, $event)"> <span class="tag-color__check" ng-if="color === tag.color"> <i class="material-icons" ng-style="{\'color\':color}"> check </i> </span> </li> </ul> <span class="intent-tags__tag-remove-button"> <i class="material-icons" ng-click="removeTagFromIntent(tag.tag_id, \'add\', $event)"> delete </i> </span> </div> </span> <span ng-click="openAddList($event)" ng-if="tags.length !== (intent.response.tags.add.length + intent.response.tags.remove.length)" class="intent-tags__tag intent-tags__tag-add"> <i class="material-icons"> add </i> Select tag <ul class="intent-tags__select-list" ng-if="addListOpened"> <div class="intent-tags__select-list--inner"> <li class="intent-tags__select-list-item" ng-repeat="tag in tags" ng-if="isTagAvaliable(tag.tag_id)" ng-click="addTagToAddList(tag, $event)"> <i class="intent-tags__tag-color" ng-style="{\'background-color\':tag.color}"></i> {{tag.name}} <i class="material-icons intent-tags__tag--delete" ng-click="deleteTag(tag, $event)"> close </i> </li> </div> </ul> </span> </div> </div> <div class="intent-tags__section mb30"> <p class="intent-tags__section-title intent-tags__section-title--red"> Remove </p> <div class="intent-tags__tags-list"> <span class="intent-tags__tag" ng-repeat="tag in intent.response.tags.remove" ng-click="editTag(tag, $event)"> <i class="intent-tags__tag-color" ng-style="{\'background-color\':tag.color}"></i> {{tag.name}} <div class="intent-tags__tag-editor" ng-if="isTagEditing(tag.tag_id)"> <ul class="intent-tags__tag-colors"> <li ng-repeat="color in tagColors" ng-style="{\'background-color\':color}" ng-click="setTagColor(color, $event)"> <span class="tag-color__check" ng-if="color === tag.color"> <i class="material-icons" ng-style="{\'color\':color}"> check </i> </span> </li> </ul> <span class="intent-tags__tag-remove-button"> <i class="material-icons" ng-click="removeTagFromIntent(tag.tag_id, \'remove\', $event)"> delete </i> </span> </div> </span> <span ng-click="openRemoveList($event)" ng-if="tags.length !== (intent.response.tags.add.length + intent.response.tags.remove.length)" class="intent-tags__tag intent-tags__tag-add"> <i class="material-icons"> add </i> Select tag <ul class="intent-tags__select-list" ng-if="removeListOpened"> <div class="intent-tags__select-list--inner"> <li class="intent-tags__select-list-item" ng-repeat="tag in tags" ng-if="isTagAvaliable(tag.tag_id)" ng-click="addTagToRemoveList(tag, $event)"> <i class="intent-tags__tag-color" ng-style="{\'background-color\':tag.color}"></i> {{tag.name}} </li> </div> </ul> </span> </div> </div> </div> <button class="brn-btn brn-primary" ng-click="handleIntentNameChange()"> {{main.translations.save_btn}} </button> </div> </div> <div class="settings-card-wrap" style="margin-right: 32px"> <div class="settings-card big mb50"> <h2 class="mb50">User expressions</h2> <div class="mb40 flex-row"> <div class="inline-block top"> <custom-input placeholder="User Expression" ng-model="expression" enter="addExpression()" title="User Expression" is-back-placeholder="true"> </custom-input> </div> <div class="inline-block top"> <button class="brn-btn brn-primary minimal" ng-click="addExpression()"> Add </button> </div> </div> </div> <div class="brn-table-wrap t-modern table-54 minimal mb60"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-auto-table-btn-padding="true"> <table class="brn-table"> <tbody> <tr class="header-default"> <td> Message </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, expression) in intent.expressions" ng-class="{\'first-line\' : key == 0}"> <td ng-click="selectExpression(key)" data-toggle="modal" style="cursor: pointer" data-target="#editEntities"> {{expression.text}} </td> <td class="control-fixed"> <a class="btn-icon" data-toggle="modal" title="Edit expression" data-target="#editEntities" ng-click="selectExpression(key)"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteExpression(key)" title="Delete expression"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-show="inProgress"> <td colspan="10"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!intent.expressions.length"> <tr> <td colspan="2">No Expressions yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> <div class="settings-card-wrap" style="margin-right: 32px"> <div class="settings-card big mb50"> <h2 class="mb50">Replies</h2> <div class="mb20 flex-row" ng-if="intent.response.type==\'reply\'"> <div class="input-group open-custom-input"> <input type="text" ng-model="reply.url" ng-disabled="disabledImg" placeholder="{{main.translations.post_add_image}}" class="form-control custom-input"> <span ng-show="!disabledImg" ng-max-size="10MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="disabledImg" class="input-group-addon" style="background-color: unset; border: 1px solid #ebebeb"> <ng-include src="\'images/svg/ic_file_upload_black_24px.svg\'"></ng-include> </span> </div> </div> <div class="mb40 flex-row" ng-if="intent.response.type==\'reply\'"> <div class="inline-block top"> <custom-input placeholder="Reply" ng-model="$parent.reply.text" title="Reply" is-back-placeholder="true"> </custom-input> </div> <div class="inline-block top"> <button class="brn-btn brn-primary minimal" ng-click="addReply()"> Add </button> </div> </div> <div class="mb40 flex-row" ng-if="intent.response.type==\'scenario\'"> <div class="inline-block top"> <custom-dropdown ng-model="$parent.intent.response.scenario_id" array="bot_scenarios" opt-description="name" opt-value="scenario_id" title="Response type" is-model-init="true" placeholder="Select an Scenario..." ng-change="handleScenarioChange()" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> <div class="brn-table-wrap t-modern table-54 minimal mb60" ng-if="intent.response.type==\'reply\'"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-auto-table-btn-padding="true"> <table class="brn-table"> <tbody> <tr class="header-default"> <td> Message </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, reply) in intent.response.replies" ng-class="{\'first-line\' : key == 0}"> <td ng-click="selectReplays(reply, key)"
52 data-target="#editReplies" data-toggle="modal" style="cursor: pointer"> <img class="header-avatar" ng-if="reply.type == \'image\'" src="{{reply.url}}" alt="{{reply.text}}"> {{ reply.text ? reply.text : reply }} </td> <td class="control-fixed"> <a class="btn-icon" data-toggle="modal" title="Edit repaly" data-target="#editReplies" ng-click="selectReplays(reply, key)"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteReply(key)" title="Delete reply"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-show="inProgress"> <td colspan="10"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!intent.response.replies.length"> <tr> <td colspan="2">No Replies yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> <div id="editEntities" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb15"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> <h2>Edit user expression</h2> </div> <div> <custom-input placeholder="User Expression" type-input="textarea" disable-counter="true" ng-model="selected_expression.text" title="User Expression" is-back-placeholder="true" is-required="true"> </custom-input> \x3c!-- <div style="cursor: pointer;" class="mb10">\n <highlight\n text="selected_expression.text"\n data="selected_expression.entities"\n callback="handleSelectedText"\n index="selected_expression.index"\n ></highlight>\n </div>\n <div class="labels mb30">\n Select text with a mouse to add a new entity\n </div> --\x3e <div ng-repeat="entity in selected_expression.entities"> <div class="dropdown-container mb15"> <custom-dropdown ng-model="entity.entity_id" array="entities" opt-description="name" opt-value="entity_id" title="{{entity.value}}" is-model-init="true" placeholder="Entity type" is-back-placeholder="true"> </custom-dropdown> <i class="material-icons close-icon" style="font-size: 16px" ng-click="deleteEntity( $index)"> close </i> </div> </div> </div> <button type="button" class="brn-btn brn-primary" ng-click="handleEntityChange()"> {{main.translations.save_btn}} </button> </div> </div> </div> </div> </div> </div> <div id="editReplies" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb15"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> <h2>Edit user replies</h2> </div> <div class="mb20 flex-row"> <custom-input placeholder="Message" type-input="textarea" disable-counter="true" ng-model="selected_replies.text" title="Message" is-back-placeholder="true"> </custom-input> </div> <div class="mb20 flex-row"> <div class="input-group"> <input type="text" ng-model="selected_replies.url" ng-disabled="disabledImg" placeholder="{{main.translations.post_add_image}}" class="form-control custom-input"> <span ng-show="!disabledImg" ng-max-size="10MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="disabledImg" class="input-group-addon" style="background-color: unset; border: 1px solid #ebebeb"> <ng-include src="\'images/svg/ic_file_upload_black_24px.svg\'"></ng-include> </span> </div> </div> <div style="position: absolute; bottom: 90px"> <div class="inline-block"> <button type="button" class="brn-btn brn-primary minimal" ng-click="replayChanged()" data-dismiss="modal"> {{main.translations.save_btn}} </button> </div> <div class="inline-block" style="margin-right: -40px"> <button type="button" class="brn-btn brn-delete-transparent minimal" data-dismiss="modal"> {{main.translations.store_close}} </button> </div> </div> </div> </div> </div> </div> </div> </div> <div id="editTag" class="modal fade" role="dialog"> <div class="modal-dialog"> <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap" style="min-height: auto"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Create new tag </div> <div class="mb-title"> <custom-input placeholder="{{main.translations.catalog_textPlaceholder}}" ng-model="newTagName" title="{{main.translations.tag}} {{main.translations.title_name}}" required is-back-placeholder="true"> </custom-input> <button type="button" class="brn-btn brn-primary" ng-click="createTag()"> Create new tag </button> </div> </div> </div> </div> </div> </div> </div> '),a.put("views/jsPlumb.html",'<div id="gui-scenarios"> <div class="showbox" style="position: fixed;bottom: unset" ng-if="loader"> <div class="google-loader" style="width: 100px; height: 100px"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div>'),a.put("views/keywords.html",'<div> <div class="row-flex"> <div class="flex-col flex-col-p col-all"> <h2 class="mb50">Most common keywords mentioned</h2> </div> </div> <div class="row-flex"> <div class="flex-col-p"> <div class="mb-card"> <div class="brn-table-wrap mb-card t-modern mb60"> <table class="brn-table common-table"> <tbody> <tr class="header-default"> <td ng-repeat="th in tableHeaders" class="active-heder"> <span> {{th.name}} </span> </td> </tr> <tr ng-repeat="keyword in keywordsInfo"> <td>{{keyword.keyword}}</td> <td>{{keyword.count}}</td> </tr> <tr ng-if="inProgress"> <td colspan="2"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!keywordsInfo.length && !inProgress"> <tr> <td colspan="2">No data</td> </tr> </tfoot> </table> </div> </div> </div> <div class="flex-col-p"> <div class="mb-card"> <div class="card card-64"> <div class="card-body"> <pie-chart data="pieKeywords" style="width: 100%; display: block"></pie-chart> </div> </div> </div> </div> </div> </div>'),a.put("views/kik.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">{{$resolve.translations.kik}}</h2> </div> <form ng-submit="updateConnection()"> <div class="mb30"> <custom-input placeholder="{{$resolve.translations.userName}}" ng-model="kik.provider_data.username" title="{{$resolve.translations.userName}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.apiKey}}" ng-model="kik.provider_data.api_key" title="{{$resolve.translations.apiKey}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="kik.provider_data.api_key" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/label-input.html",'<div class="resize-input-container"> <span class="tag" ng-repeat="label in labels track by $index" ng-click="labels.splice($index, 1);onChange();"> <i class="material-icons tag-icon" ng-if="labelId == 1">add</i> <i class="material-icons tag-icon" ng-if="labelId == 2">clear</i> <span class="tag-title">{{label | decorate : allLabels}}</span> </span> <span class="new-tag-block"> <span ng-click="completeAll()" ng-show="hasNotAddedLabels()"> <span class="plus-tag">+</span> <span class="select-tag">{{placeholder}}</span> </span> <div class="scenario-pop-up" ng-if="hasFilterLabels()"> <ul> <li ng-repeat="label in filterLabels" ng-click="fillTextbox(label.t
52itle)"> <span class="tag-text">{{label.title}}</span> </li> </ul> </div> </span> </div>'),a.put("views/landing.html",'<link rel="stylesheet" type="text/css" href="styles/landing/main.css?e=1"> <div ng-if="loaded"> <div ng-bind-html="page"> </div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div> <script src="/landings/main.js"><\/script>'),a.put("views/landing2.html",'<link rel="stylesheet" type="text/css" href="styles/landing2/main.css?e=1"> <div ng-if="loaded"> <div ng-bind-html="page"> </div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/landingde.html",'<div text-angular ng-model="page"> </div> <div style="padding-top: 50px; padding-bottom: 50px; margin: auto"> <button type="button" class="brn-btn brn-primary brn-lg" style="margin: auto" ng-click="save()">SAVE CHANGES</button> </div>'),a.put("views/landingen.html",'<div text-angular ng-model="page"> </div> <div style="padding-top: 50px; padding-bottom: 50px; margin: auto"> <button type="button" class="brn-btn brn-primary brn-lg" style="margin: auto" ng-click="save()">SAVE CHANGES</button> </div>'),a.put("views/landings/assist.html",'<link rel="stylesheet" type="text/css" href="https://brn.ai/styles/landing4/main.css?v=1"> <div ng-if="loaded"> <div ng-bind-html="page"> </div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/landings/engage.html",'<link rel="stylesheet" type="text/css" href="https://brn.ai/styles/landing4/main.css?v=1"> <div ng-if="loaded"> <div ng-bind-html="page"> </div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/landings/leads.html",'<link rel="stylesheet" type="text/css" href="https://brn.ai/styles/landing4/main.css?v=1"> <div ng-if="loaded"> <div ng-bind-html="page"> </div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/landings/mavens_list.html",'<link rel="stylesheet" type="text/css" href="https://brn.ai/styles/ml_landing/main.css?v=1"> <div ng-if="loaded"> <div ng-bind-html="page"> </div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/landings/real_estate.html",'<link rel="stylesheet" type="text/css" href="https://brn.ai/styles/landing1/main.css?v=1"> <div ng-if="loaded"> <div ng-bind-html="page"> </div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/landings/realty_street_leads.html",'<link rel="stylesheet" type="text/css" href="https://brn.ai/styles/rsl_landing/main.css?v=1"> <script src="https://brn.ai/styles/rsl_landing/main.js"><\/script> <div ng-if="loaded"> <div ng-bind-html="page"> </div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/landings/recruit.html",'<link rel="stylesheet" type="text/css" href="https://brn.ai/styles/landing4/main.css?v=1"> <div ng-if="loaded"> <div ng-bind-html="page"> </div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/landings/support_bot.html",'<link rel="stylesheet" type="text/css" href="https://brn.ai/styles/landing1/main.css?v=1"> <div ng-if="loaded"> <div ng-bind-html="page"> </div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/lead.html",'<div infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 10px 0px 51px"> <div class="nav-sidebar-content-ofset"> <div class="lead-user"> <img src="{{client.avatar}}" alt="--" class="lead-photo"> <h3 class="lead-name"> {{client.name}} </h3> <div class="lead-contlols"> <span class="lead-contlol--chat" ui-sref="conversations({id: botId, user: client})"> <i class="material-icons"> chat_bubble </i> </span> <span class="lead-contlol--delete"> <i class="material-icons"> delete </i> </span> </div> </div> <custom-input class="input-capitalise" placeholder="Provider" ng-model="client.provider" title="Provider" is-back-placeholder="true" is-readonly="true"> </custom-input> <custom-input class="input-capitalise" placeholder="Role" ng-model="client.role" title="Role" is-back-placeholder="true" is-readonly="true"> </custom-input> <h2 style="margin-top: 48px">Contacts</h2> <div ng-repeat="(key,val) in client.contacts" style="text-transform: capitalize"> <custom-input placeholder="{{key}}" ng-model="client.contacts[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="inline-wrapper mb60"> <h2 class="statistic-heder" ng-repeat="state in tableState" ng-class="{\'active\':state.selected}" ng-click="selectTable(state)"> {{state.name}} </h2> </div>
52 \x3c!-- New --\x3e \x3c!-- Lead data --\x3e <div class="brn-table-wrap t-modern mb60" style="max-width:1605px" ng-if="tableStateCurrent===\'Lead data\'"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:1603px"> <tbody> <tr class="header-image"> <td style="width:35%"> Question </td> <td> Answer </td> </tr> <tr ng-repeat="(key, lead) in client.lead.data track by $index" ng-class="{\'first-line\' : key == 0}"> <td style="cursor: pointer"> <span>{{lead.question}}</span> </td> <td style="cursor: pointer"> {{lead.answer}} </td> </tr> <tr ng-if="inProgress"> <td> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!client.lead.data.length && !inProgress"> <tr> <td colspan="2">No data found.</td> </tr> </tfoot> </table> </custom-scroller> </div> \x3c!-- New --\x3e \x3c!-- Orders --\x3e <div class="brn-table-wrap t-modern mb60" style="max-width:1605px" ng-if="tableStateCurrent===\'Orders\'"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-disable-filters="true"> <table class="brn-table" style="width:1603px" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <tbody> <tr class="header-image"> <td style="width: 150px"> {{main.translations.title_name}} </td> <td> Image </td> <td> Price </td> <td> Date </td> <td> Count </td> <td> Status </td> </tr> <tr ng-repeat="product in products"> <td> {{product.name}} </td> <td style="width: 300px"> <img style="width: 220px" src="{{product.image}}" alt="-"> </td> <td> {{product.price}} </td> <td> <span ng-bind="product.date | date:\'dd.MM.yyyy\'"> </span> </td> <td> {{product.count}} </td> <td> {{product.order_status}} </td> </tr> </tbody> <tfoot ng-if="!products.length && !inProgress"> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> <tr> <td colspan="6">No orders</td> </tr> </tfoot> </table> </custom-scroller> </div> \x3c!-- New --\x3e \x3c!-- Favorites --\x3e <div class="brn-table-wrap t-modern mb60" style="max-width:1605px" ng-if="tableStateCurrent===\'Favorites\'"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-disable-filters="true"> <table class="brn-table" style="width:1603px" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <tbody> <tr class="header-image"> <td style="width: 150px"> {{main.translations.title_name}} </td> <td> Image </td> <td> Price </td> <td> Date </td> <td> Views </td> <td> Slug </td> </tr> <tr ng-repeat="product in favorites" ui-sref="store.product-detail({id: botId, category: product.category_id, product: product.product_id})"> <td> {{product.name}} </td> <td style="width: 300px"> <img style="width: 220px" src="{{product.image}}" alt="-"> </td> <td> {{product.price}} </td> <td> <span ng-bind="product.created | date:\'dd.MM.yyyy\'"> </span> </td> <td> {{product.views}} </td> <td> {{product.slug}} </td> </tr> </tbody> <tfoot ng-if="!products.length && !inProgress"> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> <tr> <td colspan="6">No favorites</td> </tr> </tfoot> </table> </custom-scroller> </div> \x3c!-- New --\x3e \x3c!-- Viewed --\x3e <div class="brn-table-wrap t-modern mb60" style="max-width:1605px" ng-if="tableStateCurrent===\'Viewed\'"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-disable-filters="true"> <table class="brn-table" style="width:1603px" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <tbody> <tr class="header-image"> <td style="width: 150px"> {{main.translations.title_name}} </td> <td> Image </td> <td> Price </td> <td> Date </td> <td> Views </td> <td> Slug </td> </tr> <tr ng-repeat="product in viewed"> <td> {{product.name}} </td> <td style="width: 300px"> <img style="width: 220px" src="{{product.image}}" alt="-"> </td> <td> {{product.price}} </td> <td> <span ng-bind="product.date | date:\'dd.MM.yyyy\'"> </span> </td> <td> {{product.views}} </td> <td> {{product.slug}} </td> </tr> </tbody> <tfoot ng-if="!products.length && !inProgress"> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> <tr> <td colspan="6">No views</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'),a.put("views/learning-entities.html",'<div class="brn-table-wrap learning-entities"> <h2 class="mb60"> Entities <a class="add-bot" data-toggle="modal" data-target="#addEntityModal"> <i ng-include="\'images/svg/plus_icon.svg\'\0></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1379px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:1377px"> <tbody> <tr class="header-image"> <td> Entity </td> <td class="control-fixed control-fixed-heder"> </td> </tr> <tr ng-repeat="(key, entity) in entities" ng-class="{\'first-line\' : key == 0}"> <td ui-sref="entity-detail({id: botNav.botInfo.bot_id, entity: entity.entity_id})" style="cursor: pointer"> <span>{{entity.name}} </span> </td> <td class="control-fixed"> <a class="btn-icon" title="Edit entity" ui-sref="entity-detail({id: botNav.botInfo.bot_id, entity: entity.entity_id})"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteEntity(entity)" title="Delete entity"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-show="inProgress"> <td colspan="2"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!entities.length"> <tr> <td colspan="2">No expressions yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> <div id="addEntityModal" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap" style="max-height: 280px; min-height: 280px"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Add entity </div> <div class="mb-title"> <custom-input placeholder="Type entity name..." ng-model="entity" title="Entity Name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div style="position: absolute"> <button type="button" class="brn-btn brn-primary" ng-click="addEntity()"> {{main.translations.save_btn}} </button> </div> </div> </div> </div> </div> </div> </div>'), 53a.put("views/learning-history.html",'<div class="learning-history" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <h2 class="mb60 statistic-heder"> Training </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1379px"> <span class="round-btn" ng-click="swapFilter()" ng-class="{\'round-btn-search\' : !filters.isActive, \'round-btn-cancel\' : filters.isActive}"> <i class="material-icons" ng-if="filters.isActive">close</i> <i class="material-icons" ng-if="!filters.isActive">search</i> </span> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:1377px"> <tbody> <tr class="header-image"> <td style="width:30%">Text</td> <td style="width:20%">Intents</td> <td style="width:20%">Entities</td> <td style="width:15%">Created</td> <td style="width:10%"> Matched </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr class="no-hover"> <td colspan="6" class="filters" ng-class="{\'filters-active\' : filters.isActive}"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}"> <div class="inline-block top"> <custom-dropdown ng-model="filters.selectedMatch" array="matchFilters" opt-description="name" placeholder="" is-back-placeholder="false" style="width:185px" ng-init="matchFilters[0]"> </custom-dropdown> </div> <div class="inline-block top"> <custom-dropdown ng-model="filters.selectedStatus" array="statusFilters" opt-description="name" placeholder="" is-back-placeholder="false" ng-init="statusFilters[0]" style="width:185px"> </custom-dropdown> </div> </div> </td> </tr> <tr ng-repeat="(key, client) in clients" ng-mouseover="showBtns=true" ng-mouseleave="showBtns=false" ng-class="{\'first-line\' : key == 0}"> <td ng-if="client.client_id" ui-sref="conversations({id: botNav.botInfo.bot_id, client_id: client.client_id})" style="cursor: pointer"> <img ng-if="client.avatar" ng-src="{{client.avatar}}" alt=""> {{client.text}} </td> <td ng-if="!client.client_id"> <img ng-if="client.avatar" ng-src="{{client.avatar}}" alt=""> {{client.text}} </td> <td> <div ng-if="client.intent"> <span class="entities"><a ui-sref="intent-detail({id: botNav.botInfo.bot_id, intent: client.intent.intent_id})">{{client.intent.name}}</a></span> </div> </td> <td> <div ng-repeat="(k, entity) in client.entities"> <div> \x3c!-- <span ng-if="key==\'name\'" ng-repeat="(key, value) in entity" class="entities">{{value}} </span> --\x3e <span ng-if="key==\'value\'" ng-repeat="(key, value) in entity">{{value}} </span> <br> </div> </div> </td> <td> <span>{{client.created | date:\'yyyy-MM-dd HH:mm\'}}</span> </td> <td> {{client.matched === true ? main.translations.yes : main.translations.no }}</td> <td class="control-fixed"> <a class="btn-icon" title="Accept expression" ng-click="acceptExpression(client)" ng-disabled="{{client.intent == null}}"> <div class="control-fixed-shadow"></div> <i class="material-icons">check_circle</i> </a> <a class="btn-icon" title="Edit intent" ng-click="matchIntent(client)"> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteExpression(client)" title="Delete expression"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-show="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!clients.length"> <tr style="height: 90px"> <td colspan="6">No expressions yet</td> </tr> </tfoot> </table> </custom-scroller></div> </div>'),a.put("views/learning-import.html",'<div class="row learning-understanding"> <div class="col-xs-12 col-lg-12"> <div class="fixed-card"> <h3 class="text-center">Import</h3> </div> </div> <div class="col-xs-12 col-lg-7"> <div class="fixed-card"> <h3 class="text-center">Upload File</h3> <p> Some text for file format and other information and an upload button: </p> <div class="up-buttons"> <div ngf-select="upload($file)" ngf-drop="upload($file)" ng-model="importFile" class="drop-box" ngf-pattern=".csv" accept=".csv" style="background: #F8F8F8;\n border: 5px dashed #DDD;\n text-align: center;\n padding: 50px 10px;\n margin-left: 10px">Select File <span> or Drop File</span> </div> </div> </div> </div> <div class="col-xs-12 col-lg-5"> <div class="fixed-card"> <h3 class="text-center">Results</h3> <p> There is a result of uploading: </p> <b>Status: {{uplStatus}}</b> </div> </div> </div>'),a.put("views/learning-intents.html",'<div class="brn-table-wrap learning-entities"> <h2 class="mb60">Intents <a class="add-bot" data-toggle="modal" data-target="#addIntentModal"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1380px"> <span class="round-btn" ng-click="swapFilter()" ng-class="{\'round-btn-search\' : !filters.isActive, \'round-btn-cancel\' : filters.isActive}"> <i class="material-icons" ng-if="filters.isActive">close</i> <i class="material-icons" ng-if="!filters.isActive">search</i> </span> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table" style="width:1377px" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <tbody> <tr class="header-image"> <td width="30%"> Intent </td> <td width="30%"> Expressions </td> <td width="30%"> Response </td> <td class="control-fixed control-fixed-heder"> </td> </tr> <tr class="no-hover"> <td colspan="6" class="filters" ng-class="{\'filters-active\' : filters.isActive}"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}"> <div class="inline-block top"> <custom-input placeholder="Search" ng-model-options="{debounce:500}" ng-model="filters.searchKeyword" title="Search" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px"> search </i> </custom-input> </div> </div> </td> </tr> <tr ng-repeat="(key, intent) in intents" ng-class="{\'first-line\' : key == 0}"> <td class="td-top-align" ui-sref="intent-detail({id: botNav.botInfo.bot_id, intent: intent.intent_id})" style="cursor: pointer"> <span>{{intent.name}}</span> </td> <td class="td-top-align" ui-sref="intent-detail({id: botNav.botInfo.bot_id, intent: intent.intent_id})" style="cursor: pointer"> <span ng-repeat="expression in intent.expressions">"{{expression.text}}"<br></span> </td> <td class="td-top-align" ui-sref="intent-detail({id: botNav.botInfo.bot_id, intent: intent.intent_id})" style="cursor: pointer"> <span ng-if="intent.response.scenario_id !== undefined"> <a ui-sref="edit-scenarios({id: botNav.botInfo.bot_id, scenario: intent.response.scenario_id})" class="scenario-link"> {{intent.response.name || null}} </a> </span> <div ng-if="intent.response.replies !== undefined"> <p ng-repeat="reply in intent.response.replies"> <img class="header-avatar" ng-if="reply.type == \'image\'" src="{{reply.url}}" alt="{{reply.text}}"> "{{ reply.text ? reply.text : reply }}
53" </p> </div> </td> <td class="control-fixed"> <a class="btn-icon" title="Edit intent" ui-sref="intent-detail({id: botNav.botInfo.bot_id, intent: intent.intent_id})"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteIntent(intent)" title="Delete intent"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-show="inProgress"> <td colspan="4"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!intents.length"> <tr> <td colspan="6">No expressions yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> <div id="addIntentModal" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap" style="max-height: 280px; min-height: 280px"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Add Intent </div> <div class="mb-title"> <custom-input placeholder="Type intent name..." ng-model="intent.name" title="Intent Name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div style="position: absolute"> <button type="button" class="brn-btn brn-primary" ng-click="createIntent()"> {{main.translations.save_btn}} </button> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/learning-mind.html",'<div class="brn-table-wrap learning-mind"> <h2 class="mb60"> Mind </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1380px"> <span class="round-btn" ng-click="swapFilter()" ng-class="{\'round-btn-search\' : !filters.isActive, \'round-btn-cancel\' : filters.isActive}"> <i class="material-icons" ng-if="filters.isActive">close</i> <i class="material-icons" ng-if="!filters.isActive">search</i> </span> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:1377px"> <tbody> <tr class="header-image"> <td> Intents </td> <td colspan="2"> Expressions </td> <td colspan="2"> Replies <span class="control-fixed"></span> </td> </tr> <tr class="no-hover"> <td colspan="6" class="filters" ng-class="{\'filters-active\' : filters.isActive}"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}"> <div class="inline-block top"> <custom-dropdown ng-model="filters.selectedReplies" array="repliesFilters" opt-description="name" placeholder="" title="Response" is-back-placeholder="true" style="width:150px" ng-init="repliesFilters[0]" ng-change="filterMinds(\'reply\')"> </custom-dropdown> </div> <div class="inline-block top"> <custom-dropdown ng-model="filters.selectedMind" array="mindFilters" opt-description="title" placeholder="" title="Mind" is-back-placeholder="true" ng-init="mindFilters[0]" style="width:150px" ng-change="filterMinds(\'mind\')"> </custom-dropdown> </div> <div class="inline-block top" ng-hide="!categoryFilters.length > 0"> <custom-dropdown ng-model="filters.selectedCategory" array="categoryFilters" opt-description="title" placeholder="" title="{{main.translations.leftMenu_category}}" is-back-placeholder="true" ng-init="categoryFilters[0]" style="width:150px" ng-change="filterMinds(\'category\')"> </custom-dropdown> </div> <div class="inline-block top"> <custom-input placeholder="Search" ng-model="filters.searchKeyword" ng-model-options="{debounce:500}" title="Search" style="width:150px" is-back-placeholder="true" ng-change="filterMinds(\'search\')"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px"> search </i> </custom-input> </div> </div> </td> </tr> <tr ng-repeat="(key, intent) in intents" ng-class="{\'first-line\' : key == 0}" class="inputs"> <td class="td-top-align"> <span>{{intent.name}}</span> </td> <td class="td-top-align" colspan="2"> <span ng-repeat="expression in intent.expressions">"{{expression.text}}"<br></span> </td> <td colspan="2"> <div ng-if="intent.type==\'system\'"> <div class="input-container"> <input next-on-enter id="{{intent.name + \'0\'}}
53" ng-model="intent.new_reply" type="text" placeholder="Add replies..." ng-keyup="$event.keyCode == 13 && addIntent(intent)"> <span class="control-fixed"> <img src="/images/ic_add_3x.png" class="icon-right" ng-click="addIntent(intent)"> </span> </div> </div> <div ng-if="intent.type!=\'system\'"> <div ng-if="intent.response.type==\'scenario\'"> <span ng-if="intent.response.scenario_id !== undefined"> <a ui-sref="edit-scenarios({id: intent.bot_id, scenario: intent.response.scenario_id})">{{intent.response.name || "Scenario"}}</a> </span> </div> <div ng-if="intent.response.type==\'reply\'"> <div ng-repeat="(key, value) in intent.response.replies"> <div class="input-container"> <input next-on-enter id="{{intent.name + key}}" ng-model="value" type="text" ng-keyup="$event.keyCode == 13 && updateIntent(intent, key, value, false)"> <span class="control-fixed"> <span ng-include src="\'images/svg/ic_mode_edit_black_24px.svg\'" class="icon-right icon-right-edit" ng-click="updateIntent(intent, key, value, false)"></span> <span class="icon-right icon-right-delete" ng-click="deleteReply(intent, key)"> <ng-include src="\'images/svg/rubbish-bin-delete-button.svg\'"></ng-include> </span> </span> </div> </div> <div class="input-container"> <input focus-on-enter id="{{intent.name+\'_last\'}}" ng-model="value" type="text" placeholder="Add replies..." ng-keyup="$event.keyCode == 13 && updateIntent(intent, 0 , value, true)"> <span class="control-fixed"> <img src="/images/ic_add_3x.png" class="icon-right" ng-click="updateIntent(intent, 0 , value, true)"> </span> </div> </div> </div> </td> </tr> <tr ng-show="inProgress"> <td colspan="5"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!intents.length"> <tr style="height: 90px"> <td colspan="5">No expressions yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div>'),a.put("views/learning-understanding.html",'<div class="row learning-understanding"> <div class="col-xs-12 col-lg-4"> <div class="fixed-card"> <h3 class="text-center">Try your bot</h3> <div class="search-understanding"> <input ng-keyup="$event.keyCode == 13 && parse()" type="text" ng-model="expression" placeholder="Type phrase to analyze..." required> <img src="/images/searchicon.png" id="search_img" ng-click="parse()"> </div> <div class="search-info" ng-if="info"> <div>Analyzing phrase:</div> <highlight text="info" data="entities" callback="handleSelectedText"></highlight> </div> </div> </div> <div class="col-xs-12 col-lg-6"> <div class="fixed-card"> <h3 class="text-center">Results</h3> <div class="intents"> INTENT </div> \x3c!--\n <div ng-if="intents.length"> \n <div ng-repeat="intent in intents">\n <div class="analyze-item">{{intent.name}}</div>\n <div class="analyze-item">{{intent.match * 100}}%</div>\n\n </div> \n </div>\n --\x3e <div ng-if="!intent"> Intent not found </div> <div ng-if="intent"> <div class="analyze-item">{{intent.name}}</div> </div> <br><br> <div class="entities"> ENTITIES </div> <div ng-if="entities.length"> <div ng-repeat="entity in entities"> <div class="analyze-item">{{entity.name}}</div> <div class="analyze-item"> <span ng-repeat="(key,value) in entity.meta">{{key}}({{value}}) </span> </div> <div class="analyze-item">{{entity.value}}</div> </div> </div> <div ng-if="!entities.length"> Entities not found </div> </div> </div> </div>'),a.put("views/learning.html",'<div class="bots-wrapper"> <div class="container"> \x3c!-- <div class="col-xs-12 col-md-5 col-lg-3">\n <div class="block-nav">\n <ul>\n <li>\n <a ui-sref="learning-training({id: botNav.botInfo.bot_id})"\n ui-sref-active="active">Training</a>\n </li>\n <li>\n <a ui-sref="learning-intents({id: botNav.botInfo.bot_id})"\n ui-sref-active="active">Intents</a>\n </li>\n <li>\n <a ui-sref="learning-entities({id: botNav.botInfo.bot_id})"\n ui-sref-active="active">Entities</a>\n </li>\n <li>\n <a ui-sref="learning-understanding({id: botNav.botInfo.bot_id})"\n ui-sref-active="active">Understanding</a>\n </li>\n <li>\n <a ui-sref="learning-import({id: botNav.botInfo.bot_id})"\n ui-sref-active="active">Import</a>\n </li>\n <li>\n <a ui-sref="learning-mind({id: botNav.botInfo.bot_id})"\n ui-sref-active="active">Mind</a>\n </li>\n </ul>\n </div>\n </div> --\x3e <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <span class="nav-sidebar-clear round-btn zoom-in" ng-click="resetFilter()" ng-if="isFilterActive"> <i class="material-icons">close</i> </span> <custom-scroller is-shadow="true" height="calc(100% - 140px)" paddings="22px 10px 0px 51px"> <div class="nav-sidebar-content-ofset" style="flex: 1 1 auto"> <h2 class="mb40"> Cateories </h2> <div class="card-checker" ng-click="goto(\'learning-training\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'learning-training\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Training</span> </label> </div> <div class="card-checker" ng-click="goto(\'learning-intents\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'learning-intents\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Intents</span> </label> </div> <div class="card-checker" ng-click="goto(\'learning-entities\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'learning-entities\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Entities</span> </label> </div> <div class="card-checker" ng-click="goto(\'learning-mind\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'learning-mind\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Mind</span> </label> </div> </div> <div class="nav-sidebar-bottom" ng-class="{\'nav-sidebar-bottom-shadow\' : isButomShadow}"> <a class="settings" data-toggle="modal" data-target="#testingBot"> <i ng-include="\'images/svg/ic_face_black_18px.svg\'"></i> <span> Test Bot</span> </a> <div style="margin-top: 8px"> <a class="settings" data-toggle="modal" ng-click="openUpl()" data-target="#uploadData"> <i ng-include="\'images/svg/ic_file_upload_black_18px.svg\'"></i> <span>Import Data</span> </a> </div> <div style="margin-top: 8px"> <a class="settings" ng-click="export()"> <i ng-include="\'images/svg/ic_file_download_black_18px.svg\'"></i> <span>Export Data</span> </a> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="" ui-view=""> </div> </div> </div> </div> <div id="uploadData" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div class="bots-list-item-name mb50"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> <span class="bottom-line"> Import data </span> </div> <div ngf-select="upload($file)" ngf-drop="upload($file)" ng-click="openUpl()" class="drop-box" ngf-pattern=".csv" accept=".csv"> <div class="drop-box-icon"> <i class="material-icons">cloud_upload</i> </div> <div class="drop-box-text"> Select file to upload </div> </div> <div> <div>Result:</div> <span ng-if="uplActive"> <span ng-if="uplStatus" style="color: #94cc25"> Data imported successfully </span> <span ng-if="!uplStatus" style="color: #fd7b7b"> Import failed: {{errorText}} </span> </span> <span ng-if="!uplActive && progress!=0"> Progress: {{progress}}% </span> </div> </div> </div> </div> </div> </div> <div id="testingBot" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div class="bots-list-item-name mb50"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> <span class="bottom-line"> Testing bot </span> </div> <div class="tags-container"> <div class="title"> Analyzing phrase: </div> <div style="position: relative; top: -20px; margin-bottom: 24px"> <custom-input placeholder="{{main.translations.catalog_textPlaceholder}}" ng-model="expression" title="" enter="parse()" is-back-placeholder="false"> </custom-input> </div> <div style="margin-bottom:30px"> <span class="title"> Intent </span> <div> {{intent.name}} </div> </div> <div> <span class="title"> Entities </span> <div ng-repeat="entity in entities track by $index"> <span>{{entity.name}} : </span><span>{{entity.value}}</span> </div> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/line.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">Line</h2> </div> <form ng-submit="updateConnection()"> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.channelId}}" ng-model="line.provider_data.channel_id" title="{{$resolve.translations.channelId}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.secretKey}}" ng-model="line.provider_data.channel_secret" title="{{$resolve.translations.secretKey}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.settings_token}}" ng-model="line.provider_data.channel_token" title="{{$resolve.translations.settings_token}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.botLink}}" ng-model="line.provider_data.link" title="{{$resolve.translations.botLink}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.botAPI}}" ng-model="line.redirect_url" title="{{$resolve.translations.botAPI}}" is-readonly="true" is-back-placeholder="true"> </custom-input> <div class="bots-list-text"> {{$resolve.translations.settings_conections_lineModalText}} </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="line.provider_data.channel_token" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/linkedin.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">LinkedIn</h2> </div> <form ng-submit="updateConnection()"> <div class="mb10"> <custom-input placeholder="Username" ng-model="linkedin.provider_data.username" title="Username" is-required="true" is-back-placeholder="true"> </custom-input> <div class="bots-list-text"> www.linkedin.com/in/{{linkedin.provider_data.username}} </div> <custom-input placeholder="Login (email)" ng-model="linkedin.provider_data.login" title="Login (email)" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Password" ng-model="linkedin.provider_data.password" title="Password" type-input="password" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="linkedin.provider_data.login" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/mail-template-editor.html",'<div class="custom-input" ng-class="{\'active\' : isFocused, \'textarea-container\' : typeInput==\'textarea\'}" style="height: auto; margin-top: 48px"> <span class="placeholder higher-top" ng-if="isBackPlaceholder" ng-class="{\'disabled\' : isDisabled, \
53n \'placeholder-small\' : isTextExist || isFocused,\n \'placeholder-active\': isActive}"> {{title || isActive? title : placeholder}} </span> <div class="input mail-editor" id="contentbox" contenteditable="true" ng-blur="blurInput()" ng-focus="focusInput()"> </div> <div class="helper animations animations-opacity" ng-show="isShowHelper"> {{helperMessage}} </div> <span class="bar"></span> </div>'),a.put("views/mails-admin.html",'<div class="flex-row"> <div class="settings-card-wrap"> <div class="settings-card big mb50" style="max-width: 782px"> <h2 class="mb65">{{main.translations.emailTemplates_title}} <a class="add-bot" ng-if="isBotPage" ng-click="addMail()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div ng-if="main.isAdmin" class="settings-card mb60 mt-30"> <custom-dropdown ng-model="filters.selectedPortal" array="portals" opt-description="name" opt-value="portal_id" title="Portals" ng-change="filterChanges()" is-model-init="true" placeholder="" is-back-placeholder-active="true" is-back-placeholder="true"> </custom-dropdown> </div> <div class="brn-table-wrap t-modern mb60" style="max-width:740px; min-width: 740px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:738px"> <tbody> <tr class="header-default"> <td style="width: 35%"> {{main.translations.title_name}} </td> <td style="width: 55%"> {{main.translations.emailTemplates_subject}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, mail) in mails track by $index" ng-class="{\'first-line\' : key == 0}"> <td ng-click="selectForEditMail(mail)" style="cursor: pointer"> <span>{{setNameColumn(mail.name)}}</span> </td> <td ng-click="selectForEditMail(mail)" style="cursor: pointer"> <span>{{mail.title}}</span> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteMail(mail)" title="Delete template" ng-if="mail.type === \'custom\'"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="2"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!mails.length && !inProgress"> <tr> <td colspan="5">{{main.translations.emailTemplates_noData}}</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> <div class="settings-card-wrap big" ng-if="selectedMailName || isNewMail"> <div class="settings-card big420 mb50"> <h2 class="mb50">{{main.translations.emailTemplates_edit}}</h2> <div class="mb10"> <custom-input placeholder="{{main.translations.emailTemplates_subject}}" ng-model="selectedMail.title" title="{{main.translations.emailTemplates_subject}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <mail-template-editor ng-model="selectedMail.template" placeholder="{{main.translations.emailTemplates_message}}" title="{{main.translations.emailTemplates_message}}" helper-message="{{helperMessage}}" is-back-placeholder="true"> </mail-template-editor> </div> <div> <div ng-if="isNewMail"> <button class="brn-btn brn-primary" ng-click="createMail()"> {{main.translations.save_btn}} </button> </div> <div ng-if="!isNewMail"> <button class="brn-btn brn-primary" ng-click="editMail()"> {{main.translations.save_btn}} </button> </div> </div> </div> </div> </div>'),a.put("views/mails.html",'<div class="flex-row"> <div class="settings-card-wrap"> <div class="settings-card big mb50" style="max-width: 782px"> <h2 class="mb65">{{main.translations.emailTemplates_title}} <a class="add-bot" ng-if="isBotPage" ng-click="addMail()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:740px; min-width: 740px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:738px"> <tbody> <tr class="header-default"> <td style="width: 35%"> {{main.translations.title_name}} </td> <td style="width: 55%"> {{main.translations.emailTemplates_subject}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, mail) in mails track by $index" ng-class="{\'first-line\' : key == 0}"> <td ng-click="selectForEditMail(mail)" style="cursor: pointer"> <span>{{setNameColumn(mail.name)}}</span> </td> <td ng-click="selectForEditMail(mail)" style="cursor: pointer"> <span>{{mail.title}}</span> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteMail(mail)" title="Delete template" ng-if="mail.type === \'custom\'"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="2"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!mails.length && !inProgress"> <tr> <td colspan="5">{{main.translations.emailTemplates_noData}}</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> <div class="settings-card-wrap big" ng-if="selectedMailName || isNewMail"> <div class="settings-card big420 mb50"> <h2 class="mb50">{{main.translations.emailTemplates_edit}}</h2> <div class="mb10"> <custom-input placeholder="{{main.translations.emailTemplates_subject}}" ng-model="selectedMail.title" title="{{main.translations.emailTemplates_subject}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <mail-template-editor ng-model="selectedMail.template" placeholder="{{main.translations.emailTemplates_message}}" title="{{main.translations.emailTemplates_message}}" helper-message="{{helperMessage}}" is-back-placeholder="true"> </mail-template-editor> </div> <div> <div ng-if="isNewMail"> <button class="brn-btn brn-primary" ng-click="createMail()"> {{main.translations.save_btn}} </button> </div> <div ng-if="!isNewMail"> <button class="brn-btn brn-primary" ng-click="editMail()"> {{main.translations.save_btn}} </button> </div> </div> </div> </div> </div>'), 54a.put("views/main.html",'\x3c!-- <link\n rel="stylesheet"\n type="text/css"\n href="https://brn.ai/styles/home_new/main.css?v=1"\n/> --\x3e <style>#page-container {\n display: flex;
54\n align-items: center;\n justify-content: center;\n height: 80vh;\n }\n\n #page-container h4 {\n font-size: 32px;\n }</style> <div> \x3c!-- <div ng-bind-html="page" style="margin-top: -30px"></div> --\x3e <div id="page-container"> <h4>Service temporarily unavailable</h4> </div> \x3c!-- <widget bot-name=\'Alex Galert\'\n bot-image=\'https://api.brn.ai/upload/img/bots/Zf1KSupA0c.png\'\n show-by-timer="main.showWidgetMessageWindow"\n input-placeholder="{{main.translations.widget_placeholder}}"\n welcome-text="{{main.translations.widget_welcomeText}}">\n </widget>\n --\x3e \x3c!-- <footer-registration\n translations="main.translations"\n source-name="home"\n is-registration-panel="false"\n is-contact-us-panel="true"\n is-home-page="true"\n >\n </footer-registration> --\x3e </div> \x3c!-- <script src="https://brn.ai/scripts/home_new/main.js"><\/script> --\x3e'),a.put("views/manage-translation.html",'<div class="bots-wrapper"> <div class="container"> <div class="empty-nav-sidebar" ng-if="isShortSidebar"> <span class="nav-sidebar-back round-btn" ng-click="goBack()"> <i class="material-icons">arrow_back</i> </span> </div> <div class="nav-sidebar" ng-if="!isShortSidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 20px 45px 51px" height="100%"> <div class="nav-sidebar-content-ofset" style="padding-right: 0px"> <div class="mb10"> <h2 class="mb40">Categories</h2> <div ng-repeat="page in pages" class="card-checker" ng-click="goto(page)"> <input type="checkbox" ng-checked="check(page)"> <label> <span class="checker-ico checker-ico-right"> </span> <span> {{page}}</span> </label> </div> </div> </div> <a style="margin-left: -6px" ng-if="main.isAdmin" class="add-bot" data-toggle="modal" data-target="#createCategory"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <h2 class="mb60"> translations <a data-toggle="modal" style="{{check(\'all\')? \'cursor: not-allowed;\' : \'\'}}" data-target="#editTranslations{{check(\'all\')? \'Disabled\' : \'\'}}" class="add-bot" ng-click="newTranslations()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div ng-if="!loading"> <div class="brn-table-wrap t-modern mb60" style="max-width:1360px"> <span class="round-btn" ng-click="swapFilter()" ng-class="{\'round-btn-search\' : !filters.isActive, \'round-btn-cancel\' : filters.isActive}"> <i class="material-icons" ng-if="filters.isActive">close</i> <i class="material-icons" ng-if="!filters.isActive">search</i> </span> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-auto-table-btn-padding="true" is-disable-filters="true"> <table class="brn-table" style="min-width:1357px" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <tbody> <tr class="header-image"> <td style="max-width:15%" ng-if="isAllPages"> {{main.translations.leftMenu_category}} </td> <td style="max-width:20%"> {{main.translations.title_name}} </td> <td style="max-width:10%" ng-if="main.isAdmin"> Portal </td> <td ng-repeat="lang in langs track by $index" style="min-width: 160px"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="lang.active" ng-change="savelang(lang)" id="lang_{{lang.code}}"> <label for="lang_{{lang.code}}" style="text-transform: none"> <span class="checker-ico"></span> {{lang.name}} </label> </div> </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr class="no-hover filters" ng-class="{\'filters-active\' : filters.isActive}"> <td ng-repeat="attr in filterAtt" style="padding: 0px 10px 0px 20px" ng-if="attr.type==\'portal\' && main.isAdmin || attr.type!=\'portal\'"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}" style="float: left"> <custom-input ng-if="attr.type==\'text\'" placeholder="{{attr.label}}" ng-model="elementsFilter[attr.name]" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> <custom-dropdown ng-if="attr.type==\'portal\'" ng-model="filters.selectedPortal" array="portals" opt-description="name" opt-value="portal_id" title="{{attr.label}}" ng-change="filterChanges()" is-model-init="true" placeholder="All" is-back-placeholder-active="true" is-back-placeholder="true"> </custom-dropdown> <custom-input ng-if="attr.type==\'translations\'" placeholder="{{attr.label}}
54" ng-change="checkTranslationFilter(attr.name)" ng-model="elementsFilter.translations[attr.name]" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> </td> <td style="padding: 0px"> </td> </tr> <tr ng-repeat="(key, element) in elements | filter: elementsFilter" ng-class="{\'first-line\' : key == 0}"> <td ng-if="isAllPages"> {{element.category}} </td> <td> {{element.text}} </td> <td ng-if="main.isAdmin"> {{getPortalName(element.portal_id)}} </td> <td ng-repeat="(key, lang) in langs" data-toggle="modal" data-target="#editTranslations" ng-click="selectTranslations(element)" style="padding-left: 42px; cursor: pointer"> {{element.translations[lang.code]}} </td> <td class="control-fixed"> <a class="btn-icon" data-toggle="modal" data-target="#editTranslations" ng-click="selectTranslations(element)" title="Edit translation element"> <i class="material-icons">edit</i> <div class="control-fixed-shadow"></div> </a> <a class="btn-icon" ng-click="deleteTranslations(element)" title="Delete Translations"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-show="inProgress"> <td colspan="10"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!elements.length"> <tr style="height: 90px"> <td colspan="100%">No elements yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div> </div> <div id="editTranslations" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> <h2> {{isNewTranslations? \'Create translations\': \'Edit translations\'}} </h2> </div> <div class="lang-container"> <div class="mb20" ng-if="isNewTranslations"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="selectedElement.text" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb20" ng-if="main.isAdmin && !isNewTranslations"> <custom-dropdown ng-model="editWindow.type" array="filters.elementState" opt-description="name" opt-value="value" ºitle="Action type" is-model-init="true" placeholder="" is-back-placeholder-active="true" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb20" ng-if="main.isAdmin && isNewTranslations || main.isAdmin && editWindow.type == \'new\'"> <custom-dropdown ng-model="editWindow.elementPortal" array="portals" opt-description="name" opt-value="portal_id" title="Portal" ng-change="elementPortalChanges()" is-model-init="true" placeholder="" is-back-placeholder-active="true" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb20" ng-repeat="(key, lang) in langs"> <custom-input placeholder="{{lang.name}}" ng-model="selectedElement.translations[lang.code]" title="{{lang.name}}" type-input="textarea" disable-counter="true" is-back-placeholder="true"> </custom-input> </div> </div> <div class="mb15" ng-if="!isNewTranslations && editWindow.type != \'new\'"> <button type="button" class="brn-btn brn-primary" ng-click="saveTranslations()"> {{main.translations.save_btn}} </button> </div> <div class="mb15" ng-if="isNewTranslations || editWindow.type == \'new\'"> <button type="button" class="brn-btn brn-primary" ng-click="createTranslations()"> {{main.translations.save_btn}} </button> </div> </div> </div> </div> </div> </div> </div> <div id="createCategory" class="modal fade" role="dialog"> <div class="modal-dialog"> <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> <h2> Create category </h2> </div> <div class="lang-container mb90"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="newCategoryName" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> <div class="mb10"> <button type="button" class="brn-btn brn-primary" ng-click="createCategory()"> {{main.translations.save_btn}} </button> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/match-intent.html",'<div class="flex-row create-bot flex-row-start"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div class="mb40"> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 5px; font-size: 21px" ng-click="close()"> close </i> Match intent <div style="position: relative; color:#94cc25; top: 12px">{{expression.text}}</div> </div> <span class="bots-list-item-text">Selected expression text. Choose an existing intent</span> </div> <div> <custom-dropdown ng-model="intent.intenty_id" array="intents" is-model-init="true" opt-description="name" opt-value="intent_id" title="Intent" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb20"> <button data-dismiss="modal" class="brn-btn brn-primary" type="button" ng-click="addExpression(client)"> Match </button> </div> <div class="mb10"> <div class="mb30"> <span class="bots-list-item-text">Or add new intent</span> </div> <custom-input placeholder="{{translations.title_name}}" ng-model="newIntent.name" title="{{translations.title_name}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-model="newIntent.response.type" array="intent_types" is-model-init="true" opt-description="label" opt-value="type" title="Intent" placeholder="" ng-change="handleTypeChange()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-input ng-if="newIntent.response.type==\'reply\'" placeholder="Reply name" ng-model="reply.name" title="Reply name" enter="addReply()" is-back-placeholder="true"> <i class="material-icons" ng-click="addReply()" style="font-size: 20px; opacity: 0.6; position: relative; top: 2px; right: 6px"> add </i> </custom-input> <custom-dropdown ng-if="newIntent.response.type==\'scenario\'" ng-model="newIntent.response.scenario_id" array="bot_scenarios" opt-description="name" opt-value="scenario_id" title="Scenario name" placeholder="Add Sce
54nario..." ng-change="handleScenarioChange()" is-back-placeholder="true"> </custom-dropdown> </div> <div ng-class="{\'mb30\': newIntent.response.replies.length && newIntent.response.type==\'reply\'}"> <button data-dismiss="modal" class="brn-btn brn-primary" ng-click="addNewIntent(client)"> Add intent </button> </div> <div class="tags-container" ng-if="newIntent.response.replies.length && newIntent.response.type==\'reply\'"> <span class="title">Replies</span> <div ng-repeat="reply in newIntent.response.replies"> <span>{{reply}}</span> <i class="material-icons close-icon" ng-click="deleteReply($index)"> close </i> </div> </div> </div> </div> </div>'),a.put("views/merchant-detail.html",'<div class="container"> <div class="flex-row" style="margin-left:0px"> <div> <h2 class="mb35">Edit Merchant</h2> <div class="mb40 settings-card-wrap big670"> <div class="flex-row"> <div> <div class="settings-card medium210 mr20"> <div class="mb10"> <custom-input ng-model="merchant.login" placeholder="Login" title="Login" is-back-placeholder="true"> </custom-input> </div> </div> <div class="settings-card medium210 mr20"> <div class="mb10"> <custom-input ng-model="merchant.password" placeholder="Password" title="Password" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div ng-repeat="row in rows"> <div ng-repeat="(name, attr) in row" class="settings-card medium210 mr20" ng-class="{\'card-all\': attr.multiple && attr.selectable}"> <div ng-if="attr.selectable && attr.type != \'mixed\' && attr.type != \'location\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="merchant.profile[name]" array="attr.values" opt-description="" opt-value="" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple && attr.type != \'mixed\'"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="merchant.profile[name]" multiple theme="bootstrap" style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">{{$item}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div ng-bind-html="value | highlight: $select.search"></div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="attr.selectable && attr.type == \'location\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="merchant.profile[name]" array="attr.values" opt-description="" opt-value="" is-location-object="true" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="merchant.profile[name]" multiple theme="bootstrap" style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">Lat: {{$item.coordinates[1]}}, Lng: {{$item.coordinates[0]}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div>{{"Lat: "+value.coordinates[1]+", Lng: "+value.coordinates[0]}}</div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="attr.selectable && attr.type == \'mixed\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="merchant.profile[name]" array="attr.values" opt-description="{{clientShema.schema[name].schema.key}}" opt-value="" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple && attr.type == \'mixed\'"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="merchant.profile[name]" multiple style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">{{$item[clientShema.schema[name].schema.key]}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div ng-bind-html="value[clientShema.schema[name].schema.key] | highlight: $select.search"></div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="!attr.selectable"> <div class="mb10" ng-if="attr.multiple && attr.type != \'mixed\' && attr.type != \'image\'" style="cursor: pointer" ng-click="showSimpleMultipleModal(attr, merchant.profile[attr.name])"> <div class="custom-input"> <span class="placeholder" ng-class="{\'placeholder-small\' : merchant.profile[attr.name] && merchant.profile[attr.name].length}"> {{attr.label}} </span> <span style="max-height: 40px; height: 40px; display: block; position: absolute; top: 20px; right: 0"> <i class="material-icons" style="position: relative; top: 5px">add</i> </span> <input ng-disabled="true" value="{{merchant.profile[attr.name].join(\', \')}}"> <span class="bar"></span> </div> </div> <div class="mb10" ng-if="attr.type == \'mixed\'"> <span ng-click="showMixedForm(attr, merchant.profile[attr.name])" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">add</i> </span> </div> <div class="mb10" ng-if="attr.type == \'string\' && attr.mainAttrName && !attr.multiple"> <custom-input ng-model="merchant.profile[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'string\' && !attr.mainAttrName && !attr.multiple"> <custom-input ng-model="merchant.profile[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'number\' && attr.mainAttrName && !attr.multiple"> <custom-input ng-model="merchant.profile[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" type-input="number" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'number\' && !attr.mainAttrName && !attr.multiple"> <custom-input ng-model="merchant.profile[name]" placeholder="{{attr.label}}" title="{{attr.label}}" type-input="number" is-back-placeholder="true"> </custom-input> </div> <div ng-if="attr.type == \'boolean\' && attr.mainAttrName && !attr.multiple" class="mt20"> <div class="card-checker"> <input type="checkbox" ng-model="merchant.profile[attr.mainAttrName][name]" id="model_bool_{{name}}"> <label for="model_bool_{{name}}"> <span class="checker-ico"></span> <span>{{attr.label}}</span> </label> </div> </div> <div ng-if="attr.type == \'boolean\' && !attr.mainAttrName && !attr.multiple" class="mt20"> <div class="card-checker"> <input type="checkbox" ng-model="merchant.profile[name]" id="model_bool_{{name}}_no"> <label for="model_bool_{{name}}_no"> <span class="checker-ico"></span> <span>{{attr.label}}</span> </label> </div> </div> <div class="mb10" ng-if="attr.type==\'date\' && attr.mainAttrName && !attr.multiple"> <custom-date-range-single title="{{attr.label}}" ng-model="merchant.profile[attr.mainAttrName][name]"> </custom-date-range-single> </div> <div class="mb10" ng-if="attr.type==\'date\' && !attr.mainAttrName && !attr.multiple"> <custom-date-range-single title="{{attr.label}}" ng-model="merchant.profile[name]"> </custom-date-range-single> </div> <div ng-if="attr.type==\'file\' && attr.mainAttrName && !attr.multiple"> <div class="mb10"> <custom-input ng-model="merchant.profile[attr.mainAttrName][name]" ng-disabled="uploaders[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[attr.mainAttrName][name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name, attr.mainAttrName)" ng-disabled="uploaders[attr.mainAttrName][name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[attr.mainAttrName][name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'file\' && !attr.mainAttrName && !attr.multiple"> <div class="mb10"> <custom-input ng-model="merchant.profile[name]" ng-disabled="uploaders[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="uploaders[name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'image\' && !attr.mainAttrName && !attr.multiple"> <div class="mb10"> <custom-input ng-model="merchant.profile[name]" ng-disabled="uploaders[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name)" ng-disabled="uploaders[name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'image\' && attr.mainAttrName"> <div class="mb10"> <custom-input ng-model="merchant.profile[attr.mainAttrName][name]" ng-disabled="uploaders[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name, attr.mainAttrName)" ng-disabled="uploaders[attr.mainAttrName][name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div class="mb10" ng-if="attr.type==\'color\' && attr.mainAttrName && !attr.multiple"> <custom-colorpicker ng-model="merchant.profile[attr.mainAttrName][attr.name]" title="{{attr.label}}"> </custom-colorpicker> </div> <div class="mb10" ng-if="attr.type==\'color\' && !attr.mainAttrName && !attr.multiple"> <custom-colorpicker ng-model="merchant.profile[attr.name]" title="{{attr.label}}"> </custom-colorpicker> </div> <div class="mb10" ng-if="attr.type==\'location\' && !attr.mainAttrName && !attr.multiple"> <span ng-click="showMapForm(attr, merchant.profile[attr.name])" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">map</i> </span> </div> </div> </div> </div> </div> </div> <div> <button ng-click="updateMerchant()" class="brn-btn brn-primary">
54Update</button> </div> </div> <div class="settings-card-wrap" style="flex-basis: auto" ng-if="multipleImages.length"> <div class="settings-card mb25" style="max-width: max-content" ng-repeat="attr in multipleImages"> <h2 class="mb60"> {{attr.label}} </h2> <div class="catalog-screenshot-container mb60"> <div class="catalog-screenshot settings" ng-repeat="img in merchant.profile[attr.name]"> <div class="delete-container"> <img src="{{img}}" alt=""> <div class="delete-hover" ng-click="deleteImage(img, attr.name)"> <div class="icon-container"> <i class="material-icons icon">remove_circle</i> <span class="text"> Remove photo </span> </div> </div> </div> </div> <div ng-if="attr.type==\'image\' && !attr.mainAttrName && attr.multiple" class="catalog-screenshot" ng-show="!uploaders[attr.name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFiles($file, \'image\', attr.name)"> <div class="add-item" style="width: 150px"> <div class="icon-container"> <i class="material-icons icon">add_circle</i> <span class="text"> Add photo </span> </div> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/messages.html",'<div> <div class="row-flex"> <div class="flex-col flex-col-p col-all"> <div class="mb-card"> <h2 class="mb50">Messages timeline</h2> <div class="card card-all"> <div class="card-body"> <basic-line data="baseUsers" style="display: block; width: 100%"></basic-line> </div> </div> </div> </div> </div> <div class="row-flex"> <div class="flex-col flex-col-p col-all"> <div class="mb-card"> <h2 class="mb50">Messages per provider</h2> <div class="card card-all"> <div class="card-body"> <basic-line data="usersPerWidget" style="display: block; width: 100%"></basic-line> </div> </div> </div> </div> </div> </div>'),a.put("views/mind-detail.html",'<div class="common-padding portals"> <div class="container"> <div class="nav-sidebar nav-sidebar-bottom-pd"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" height="calc(100% - 218px)" paddings="22px 50px 30px 52px"> <div style="flex: 1 1 auto"> <div class="bot-info-text"> <div class="bot-info-img" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="uploadFile($file)" style="cursor:pointer"> <img ng-src="{{mind.logo?(mind.logo):(\'images/tf.png\')}}"> </div> <div class="mb10"> <custom-input placeholder="Mind title" ng-model="mind.title" title="Mind title" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="nav-sidebar-bottom" ng-class="{\'nav-sidebar-bottom-shadow\' : isButomShadow}"> <div class="settings-save" ng-click="onSubmit()"> <span> <i class="material-icons">save</i> {{main.translations.save_btn}} </span> </div> <div class="settings-cancel" ui-sref="mind-settings()"> <span> <i class="material-icons">cancel</i> Cancel </span> </div> <div class="settings-delete" ng-click="deleteMind()" style="margin-left: -1px"> <span> <i class="material-icons">delete_forever</i> Delete </span> </div> <div style="margin-top: 8px; margin-left: 2px"> <a class="settings" ngf-select="importMind($file)" ngf-accept="\'.csv\'" ngf-pattern="\'.csv\'"> <i ng-include="\'images/svg/ic_file_upload_black_18px.svg\'"></i> <span>Import Data</span> </a> </div> <div style="margin-top: 6px; margin-left: 2px"> <a class="settings" ng-click="exportMind()"> <i ng-include="\'images/svg/ic_file_download_black_18px.svg\'"></i> <span>Export Data</span> </a> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <h2 class="mb60"> Mind Categories <span class="add-bot" data-toggle="modal" data-target="#createMind"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </span> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1076px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table no-hover" style="width:1074px"> <tbody> <tr class="header-default"> <td style="width:40%">Category title</td> <td style="width:40%">Category name</td> <td class="control-fixed control-fixed-heder"> </td> </tr> <tr ng-repeat="(key, value) in mind.categories" ng-class="{\'first-line\' : key == 0}"> <td style="padding-bottom: 4px"> <div style="margin-top: -25px; padding-bottom: 20px"> <custom-input placeholder="" ng-model="value.title" title="" ng-blur="updateCategory(value)" is-required="true" is-back-placeholder="false"> </custom-input> </div> </td> <td style="padding-bottom: 4px"> <div style="margin-top: -25px; padding-bottom: 20px"> <custom-input placeholder="" ng-model="value.name" title="" ng-blur="updateCategory(value)" is-required="true" is-back-placeholder="false"> </custom-input> </div> </td> <td class="control-fixed"> <a class="btn-icon btn-icon-no-top" title="Save edited mind values" ng-click="updateCategory(value)"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a>
54 <a class="btn-icon btn-icon-no-top" ng-click="deleteCategory(key)" title="Delete row"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="3"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!mind.categories.length && !inProgress"> <tr> <td colspan="6">No data found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div> <div id="createMind" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name mb10"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Create mind category </div> <div class="mb-title"> <div class="mb10"> <custom-input placeholder="{{main.translations.title}}" ng-model="newCategory.title" title="{{main.translations.title}}" required is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="newCategory.name" title="{{main.translations.title_name}}" required is-back-placeholder="true"> </custom-input> </div> </div> <button type="button" class="brn-btn brn-primary" ng-click="addCategory(true)"> Create </button> </div> </div> </div> </div> </div> </div>'), 55a.put("views/mind-intents.html",'<div class="brn-table-wrap learning-entities"> <h2 class="mb60">{{mind.title}} intents <a class="add-bot" data-toggle="modal" data-target="#addIntentModal"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1380px"> <span class="round-btn" ng-click="swapFilter()" ng-class="{\'round-btn-search\' : !filters.isActive, \'round-btn-cancel\' : filters.isActive}"> <i class="material-icons" ng-if="filters.isActive">close</i> <i class="material-icons" ng-if="!filters.isActive">search</i> </span> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table no-hover" style="width:1377px"> <tbody> <tr class="header-image"> <td style="width:30%"> Intent </td> <td style="width:30%"> Expressions </td> <td style="width:25%"> {{main.translations.leftMenu_category}} </td> <td class="control-fixed control-fixed-heder"> </td> </tr> <tr class="no-hover"> <td colspan="4" class="filters" ng-class="{\'filters-active\' : filters.isActive}"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}"> <div class="inline-block top"> <custom-dropdown ng-model="filters.category" array="categoryFilters" opt-description="title" opt-value="name" placeholder="" is-model-init="true" is-back-placeholder="false" style="width:185px"> </custom-dropdown> </div> <div class="inline-block top"> <custom-input placeholder="Search" ng-model="filters.searchKeyword" title="Search" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px"> search </i> </custom-input> </div> </div> </td> </tr> <tr ng-repeat="(key, intent) in intents" ng-class="{\'first-line\' : key == 0}"> <td class="td-top-align" style="padding-bottom: 4px"> <div style="margin-top: -20px; padding-bottom: 15px"> <custom-input placeholder="" next-on-enter id="{{intent.intent_id + \'_name\'}}" ng-model="intent.name" title="" ng-blur="updateIntent(intent)" is-required="true" is-back-placeholder="false"> </custom-input> </div> </td> <td class="td-top-align" style="padding-bottom: 4px"> <div style="margin-top: -20px; padding-bottom: 15px" ng-repeat="(key, expression) in intent.expressions"> <custom-input placeholder="" next-on-enter id="{{intent.intent_id + \'_expression_\' + key}}" ng-model="expression.text" title="" ng-blur="updateIntent(intent)" is-required="true" is-back-placeholder="false"> <i class="material-icons" ng-click="deleteExpression(intent, key)" style="font-size: 17px; opacity: 0.4; position: relative; top: 4px"> delete </i> </custom-input> </div> <div style="margin-top: -20px; padding-bottom: 15px">
55 <custom-input placeholder="" focus-on-enter id="{{intent.intent_id + \'last_expression\'}}" ng-model="intent.new_expression" title="" enter="addExpression(intent, intent.new_expression)" is-required="true" is-back-placeholder="false"> <i class="material-icons" ng-click="addExpression(intent, intent.new_expression)" style="font-size: 17px; opacity: 0.4; position: relative; top: 4px"> add </i> </custom-input> </div> </td> <td class="td-top-align"> <div style="margin-top: -20px; padding-bottom: 15px"> <custom-dropdown ng-model="intent.category" array="mind.categories" opt-description="title" opt-value="name" placeholder="" is-model-init="true" is-back-placeholder="false" ng-change="categoryChange(intent)"> </custom-dropdown> </div> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteIntent(intent)" title="Delete intent"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-show="inProgress"> <td colspan="4"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!intents.length && !inProgress"> <tr> <td colspan="4">No expressions yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> <div id="addIntentModal" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Add Intent </div> <div class="mb-title"> <custom-input placeholder="Type intent name..." ng-model="newIntent.name" title="Intent Name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div style="position: absolute;bottom: 120px"> <button type="button" class="brn-btn brn-primary" ng-click="createIntent()"> {{main.translations.save_btn}} </button> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/mind-settings.html",'<div class="bots" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <div class="bots-wrapper"> <div class="container"> <div class="empty-nav-sidebar"></div> <div class="row margin-rest"> <div> <div class="bots-header"> <div> <h2>Manage minds <span class="add-bot" ng-click="openModal()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </span> </h2> </div> </div> </div> </div> <div ng-if="main.isAdmin" class="row margin-rest mb45 mt-30"> <custom-dropdown ng-model="filters.selectedPortal" array="portals" opt-description="name" opt-value="portal_id" title="Portals" ng-change="filterChanges()" is-model-init="true" placeholder="" is-back-placeholder-active="true" style="max-width: 210px" is-back-placeholder="true"> </custom-dropdown> </div> <div class="margin-rest mb60"> <div class="bots-list"> \x3c!-- loader start --\x3e <div class="bots-list-item" ng-show="loader"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div>
55 \x3c!-- laoder end --\x3e <div class="bots-list-item" ng-repeat="mind in minds"> <div class="bots-list-item-wrapper"> <div class="top-container"> <div class="bots-list-item-img"> <img ng-src="{{mind.logo?(mind.logo):(\'images/tf.png\')}}"> </div> <div class="bots-list-item-name"> {{mind.title}} </div> </div> <div class="wrapper-overley"> <div class="top-container"> <div class="bots-list-item-img" ui-sref="mind-intents({id: mind.mind_id})"> <img ng-src="{{mind.logo?(mind.logo):(\'images/tf.png\')}}"> </div> <div class="bots-list-item-name" ui-sref="mind-intents({id: mind.mind_id})"> {{mind.title}} </div> </div> <div class="bots-list-bottom"> <span class="bots-list-bottom-buttons visability-btn" ui-sref="mind-detail({id: mind.mind_id})"> <i class="material-icons" style="font-size: 22px">settings</i> </span> </div> </div> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/mind.html",'<div class="bots-wrapper"> <div class="container"> <div class="empty-nav-sidebar"> <span class="nav-sidebar-back round-btn" ng-click="goBack()"> <i class="material-icons">arrow_back</i> </span> </div> <div class="row margin-rest" ui-view=""> </div> </div> </div>'),a.put("views/modern/bot-detail.html",'<div> <div class="bot-detailed"> <div class="row-flex"> <div class="nav-sidebar nav-sidebar-bottom-pd"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" height="calc(100% - 139px)" paddings="22px 10px 30px 52px"> <div style="flex: 1 1 auto"> <div class="bot-info-text"> <div ng-if="main.permissions.bot.settings" class="bot-info-img" ui-sref="bot-settings.settings-general({id: botNav.botInfo.bot_id})" style="cursor:pointer"> <img ng-src="{{botNav.botInfo.image}}" alt="bot img"> </div> <div ng-if="!main.permissions.bot.settings" class="bot-info-img" style="cursor:pointer"> <img ng-src="{{botNav.botInfo.image}}" alt="bot img"> </div> <div class="bot-info-name"> {{botNav.botInfo.name}} </div> <div class="bot-info-url"> <a ui-sref="bot-settings.settings-general({id: botNav.botInfo.bot_id})"> @{{botNav.botInfo.username}} </a> </div> </div> <div class="mb54" ng-if="warnings"> <h2>Found Issues</h2> <div class="mb5"> <div ng-repeat="(key, warning) in warnings"> <div ng-if="warning.type == \'error\' && warning.hint" class="mb10" style="display: flex; align-items: center; line-height: 1"> <i class="material-icons" style="margin-right: 4px; color: #f66060">error</i> <span>{{warning.hint.name}}</span> </div> </div> <div ng-repeat="(key, warning) in warnings"> <div ng-if="warning.type == \'warning\' && warning.hint" class="mb10" style="display: flex; align-items: center; line-height: 1"> <i class="material-icons" style="margin-right: 4px; color: #f5a623">report_problem</i> <span>{{warning.hint.name}}</span> </div> </div> <div ng-repeat="(key, warning) in warnings"> <div ng-if="warning.type == \'recommendation\' && warning.hint" class="mb10" style="display: flex; align-items: center; line-height: 1"> <i class="material-icons" style="margin-right: 4px; color: rgba(0, 0, 0, .3)">info</i> <span>{{warning.hint.name}}</span> </div> </div> </div> </div> <h2>{{main.translations.leftMenu_platforms}}</h2> <div class="add-platform" ng-show="(botInfo.links | json) == \'{}\'" ui-sref="bot-settings.settings-connections({id:bot_id})"> <i class="material-icons">add</i> Connect channel </div> <div ng-show="(botInfo.links | json) != \'{}\'" class="bot-info-socials" ng-class="{\'no-data\' : !widgetsLoaded}"> <ul class="main-socials settings-social nav-sidebar-block" ng-if="widgetsLoaded"> <li ng-repeat="(platform, link) in botInfo.links" class="{{platform}}"> <a href="{{link}}" target="_blank"> <span> <img src="images/socials/{{platform}}.png" alt=""> <span> {{main.translations[platform]}} </span> </span> </a> </li> \x3c!--\n <li class="telegram" ng-if="botSocials.telegram.isActivated">\n <a href="{{botInfo.links.telegram}}" target="_blank">
55\n <span ng-class="{inactive: botSocials.telegram.isActivated==false}">\n <img src="images/socials/telegram.png" alt="">\n <span>\n {{main.translations[botSocials.telegram.name]}}\n </span>\n </span>\n </a>\n </li>\n\n <li class="code" ng-if="botSocials.widget.isActivated">\n <a href="{{botInfo.links.widget}}" target="_blank">\n <span ng-class="{inactive: botSocials.widget.isActivated==false}">\n <img src="images/socials/widget.svg" alt="">\n <span>\n {{main.translations[botSocials.widget.name]}}\n </span>\n </span>\n </a>\n </li>\n\n <li class="kik" ng-if="botSocials.kik.isActivated">\n <a href="{{botInfo.links.kik}}" target="_blank">\n <span ng-class="{inactive: botSocials.kik.isActivated==false}">\n <img src="images/socials/kik.png" alt="">\n <span>\n {{main.translations[botSocials.kik.name]}}\n </span>\n </span>\n </a>\n </li>\n\n <li class="slack" ng-if="botSocials.slack.isActivated">\n <a href="{{botInfo.links.slack}}" target="_blank">\n <span ng-class="{inactive: botSocials.slack.isActivated==false}">\n <img src="images/socials/slack.png" alt="">\n <span>\n {{main.translations[botSocials.slack.name]}}\n </span>\n </span>\n </a>\n </li>\n\n <li class="line" ng-if="botSocials.line.isActivated">\n <a href="{{botInfo.links.line}}" target="_blank">\n <span ng-class="{inactive: botSocials.line.isActivated==false}">\n <img src="images/socials/line.png" alt="">\n <span>\n {{main.translations[botSocials.line.name]}}\n </span>\n </span>\n </a>\n </li>\n\n <li class="skype" ng-if="botSocials.skype.isActivated">\n <a href="{{botInfo.links.skype}}" target="_blank">\n <span ng-class="{inactive: botSocials.skype.isActivated==false}">\n <img src="images/socials/skype.png" alt="">\n <span>\n {{main.translations[botSocials.skype.name]}}\n </span>\n </span>\n </a>\n </li>\n\n <li class="wechat" ng-if="botSocials.wechat.isActivated">\n <a href="{{botInfo.links.wechat}}" target="_blank">
55\n <span ng-class="{inactive: botSocials.wechat.isActivated==false}">\n <img src="images/socials/we-chat.png" alt="">\n <span>\n {{main.translations[botSocials.wechat.name]}}\n </span>\n </span>\n </a>\n </li>\n\n <li class="viber" ng-if="botSocials.viber.isActivated">\n <a href="{{botInfo.links.viber}}" target="_blank">\n <span ng-class="{inactive: botSocials.viber.isActivated==false}">\n <img src="images/socials/viber.png" alt="">\n <span>\n {{main.translations[botSocials.viber.name]}}\n </span>\n </span>\n </a>\n </li>\n\n <li class="twitter" ng-if="botSocials.twitter.isActivated">\n <a href="{{botInfo.links.twitter}}" target="_blank">\n <span ng-class="{inactive: botSocials.twitter.isActivated==false}">\n <img src="images/socials/twitter.png" alt="">\n <span>\n {{main.translations[botSocials.twitter.name]}}\n </span>\n </span>\n </a>\n </li>\n\n <li class="twitter" ng-if="botSocials.instagram.isActivated">\n <a href="{{botInfo.links.instagram}}" target="_blank">\n <span ng-class="{inactive: botSocials.instagram.isActivated==false}">\n <img src="images/socials/instagram.png" alt="">\n <span>\n {{main.translations[botSocials.instagram.name]}}\n </span>\n </span>\n </a>\n </li>\n <li class="email" ng-if="botSocials.email.isActivated">\n <a href="{{botInfo.links.email}}" target="_blank">\n <span ng-class="{inactive: botSocials.email.isActivated==false}">\n <img src="images/socials/email.png" alt="">\n <span>\n Email\n </span>\n </span>\n </a>\n </li>\n <li class="email" ng-if="botSocials.linkedin.isActivated">\n <a href="{{botInfo.links.linkedin}}" target="_blank">\n <span ng-class="{inactive: botSocials.linkedin.isActivated==false}">\n <img src="images/socials/linkedin.png" alt="">\n <span>\n LinkedIn\n </span>\n </span>\n </a>\n </li>\n <li class="reddit" ng-if="botSocials.reddit.isActivated">\n <a href="{{botInfo.links.reddit}}" target="_blank">
55\n <span ng-class="{inactive: botSocials.reddit.isActivated==false}">\n <img src="images/socials/reddit.png" alt="">\n <span>\n Reddit\n </span>\n </span>\n </a>\n </li>\n <li class="pinterest" ng-if="botSocials.pinterest.isActivated">\n <a href="{{botInfo.links.pinterest}}" target="_blank">\n <span ng-class="{inactive: botSocials.pinterest.isActivated==false}">\n <img src="images/socials/pinterest.png" alt="">\n <span>\n Pinterest\n </span>\n </span>\n </a>\n </li>\n --\x3e </ul> </div> <div class="card-notifications mb54" ng-if="botInfo.warnings && botInfo.warnings.length"> <h2>{{main.translations.bot_menu_notificationErrors}}</h2> <div class="mb5"> <div class="mb10" ng-repeat="warning in botInfo.warnings|limitTo:7" title="{{warning.text}}"> <div class="round-item"> <sapn class="round-item-container">{{warning.text[0]}}</sapn> </div> <div class="round-item-text"> {{warning.text}} </div> </div> </div> </div> </div> <h2 ng-if="main.permissions.bot.team">{{main.translations.leftMenu_team}}</h2> <div ng-if="main.permissions.bot.team"> <div class="bot-admin" style="margin-top: 44px"> <span> <img class="avatar" ng-src="{{botCreator.avatar?(botCreator.avatar):(\'images/no-avatar-user.png\')}}"> <span> {{botCreator}} </span> </span> </div> <ul ng-if="team" class="bot-team"> <li ng-repeat="member in team"> <div> <img class="avatar" ng-src="{{member.avatar?(member.avatar):(\'images/no-avatar-user.png\')}}"> <span style="position: absolute; top: 7px; left: 48px"> {{member.name}} </span> </div> </li> </ul> </div> <div class="nav-sidebar-bottom" ng-class="{\'nav-sidebar-bottom-shadow\' : isButomShadow}"> <a ng-if="main.permissions.bot.settings" class="settings" ui-sref="bot-settings.settings-general({id: botInfo.bot_id})"> <i ng-include="\'images/svg/ic_settings_black_24px.svg\'"></i> <span> {{main.translations.bot_menu_settings}}</span> </a> <div ng-switch="botInfo.settings.notifications" ng-click="handleClick()" class="muted"> <span ng-switch-when="true"> <i class="on" ng-include="\'images/svg/ic_notifications_black_24px.svg\'"></i> {{main.translations.leftMenu_mute}} </span> <span ng-switch-when="false" class="off"> <i ng-include="\'images/svg/turn-notifications-off-button.svg\'"></i> {{main.translations.leftMenu_muted}} </span> </div> </div> </custom-scroller> </div> </div> <div class="flex-col nav-sidebar-margin-rest"> <div class="row-flex"> <div class="flex-col-p col-half"> <h2 class="inline-block mb50">{{main.translations.topUsers_title}}</h2> <a class="inline-block all" ui-sref="bot-abstract.crm({id:bot_id})"> ANALYZE ALL USERS <span><i class="material-icons" aria-hidden="true">arrow_forward</i></span> </a> <div class="brn-table-wrap mb-card t-modern"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table" style="width:640px"> <tbody> <tr class="header-default"> <td style="width:30%"> {{main.translations.title_name}} </td> <td style="width:20%"> {{main.translations.title_messages}} </td> <td style="width:25%"> {{main.translations.title_last}} </td> <td style="width:15%"> {{main.translations.title_sessions}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, client) in usersInfo" style="cursor:pointer" ng-class="{\'first-line\' : key == 0}" ng-click="goto(botNav.botInfo.bot_id)"> <td>{{client.name}}</td> <td>{{client.messages}}</td> <td><span am-time-ago="client.last"></span></td> <td>{{client.sessions}}</td> <td class="control-fixed"> <a ui-sref="conversations({id: botNav.botInfo.bot_id, user: client})" class="btn-icon btn-icon-no-top" title="{{main.translations.title_botConversations}}"> <div class="control-fixed-shadow"></div> <ng-include src="\'images/svg/ic_forum_black_24px.svg\'"></ng-include> </a> </td> </tr> </tbody> <tfoot ng-if="!usersInfo.length && !inProgress"> <tr> <td colspan="6">{{main.translations.topUsers_noData}}</td> </tr> </tfoot> </table> </custom-scroller> </div> <div class="mb-card"> <h2 class="inline-block mb50">Scenarios</h2> <a class="inline-block all" ui-sref="bot-abstract.bot-functions({id: botNav.botInfo.bot_id})"> CREATE/EDIT SCENARIOS <span><i class="material-icons" aria-hidden="true">arrow_forward</i></span> </a> <div class="bot-info-features bot-detail t-modern"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table no-hover" style="width:640px"> <tbody> <tr class="header-default"> <td style="width:30%"> {{main.translations.title_name}} </td> <td style="width:45%"> {{main.translations.title_keywords}} </td> <td style="width:25%"> {{main.translations.title_default}} </td> </tr> <tr ng-repeat="(key, scenarios) in bot_scenarios | limitTo: 5 track by $index" ng-class="{\'first-line\' : key == 0}"> <td> {{scenarios.name}} </td> <td> <span ng-repeat="keyword in scenarios.keywords track by $index">{{keyword}} </span> </td> <td> {{scenarios.default ? main.translations.yes : main.translations.no }} </td> </tr> </tbody> <tfoot ng-if="!bot_scenarios.length && !inProgress"> <tr> <td colspan="3">{{main.translations.functions_noData}}</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> <div class="mb-card"> <div class="bot-info-features bot-detail"> <h2 class="inline-block mb50">{{main.translations.title_messages}}</h2> <a class="inline-block all" ui-sref="conversations({id:bot_id})"> VIEW ALL DIALOGS <span><i class="material-icons" aria-hidden="true">arrow_forward</i></span> </a> <div class="brn-table-wrap t-modern"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table no-hover" style="width:640px"> <tbody> <tr class="header-default"> <td style="width:75%"> {{main.translations.title_message}} </td> <td style="width:25%"> {{main.translations.title_count}} </td> </tr> <tr ng-repeat="(key, message) in botMessages | limitTo: 5 track by $index" ng-class="{\'first-line\' : key == 0}"> <td> {{message.text}} </td> <td> {{message.count}} </td> </tr> </tbody> <tfoot ng-if="!botMessages.length && !inProgress"> <tr> <td colspan="2">{{main.translations.messages_noData}}</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> <div class="mb-card" ng-if="links.length"> <div class="bot-info-features bot-detail"> <h2 class="inline-block mb50">Links</h2> <div class="brn-table-wrap t-modern"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table no-hover" style="width:640px"> <tbody> <tr class="header-default"> <td style="width:75%"> Link </td> </tr> <tr ng-repeat="(key, link) in links track by $index" ng-class="{\'first-line\' : key == 0}"> <td> {{link}} </td> </tr> </tbody> </table> </custom-scroller> </div> </div> </div> </div> <div class="flex-col-p col-half"> <div class="mb-card"> <h2 class="mb50 inline-block">{{main.translations.totalMessages_title}}</h2> <a class="inline-block all" ui-sref="messages({id: botNav.botInfo.bot_id})"> MESSAGES STATISTIC <span><i class="material-icons" aria-hidden="true">arrow_forward</i></span> </a> <div class="card card-64"> <div class="card-body"> <pie-chart data="pieMessages.data" style="width: 100%; display: block"></pie-chart> </div> </div> </div> <div class="mb-card"> <h2 class="mb50 inline-block">{{main.translations.totalUsers_title}}</h2> <a class="inline-block all" ui-sref="users({id: botNav.botInfo.bot_id})"> USER STATISTIC <span><i class="material-icons" aria-hidden="true">arrow_forward</i></span> </a> <div class="card card-64"> <div class="card-body"> <pie-chart data="pieUsers.data" style="width: 100%; display: block"></pie-chart> </div> </div> </div> </div> </div> </div> </div> </div> </div>'), 56a.put("views/modern/main-abstract.html",'<header class="header-auth" ng-class="{\'header-white\' : isShortHeader, \'header-modern\' : true}"> <div role="navigation" class="navbar navbar-default navbar-custom"> <div class="containerfluid"> <div> <div class="navbar-header"> <div class="menu-button" ng-if="!isShortHeader" ng-class="{\'active-button\' : isMainMenuOpen}" ng-click="toogleMainMenuBtn()"> <div class="menu-button-inner"></div> </div> \x3c!-- <div class="languages">\n <img src="images/en.png" ng-class="{\'active\': main.currentLang === \'en\'}"\n alt="en flag" ng-click="main.setLang(\'en\')">\n\n <img src="images/de.png" ng-class="{\'active\': main.currentLang === \'de\'}
56"\n alt="de flag"ng-click="main.setLang(\'de\')">\n </div> --\x3e <div class="navbar-brand" ng-if="main.authenticated" ng-class="{\'header-white\' : isShortHeader}"> \x3c!-- <a\n style="cursor: pointer"\n ui-sref="home"\n ng-click="isShortHeader = false"\n > --\x3e <a style="cursor: pointer" ng-click="isShortHeader = false"> <img ng-src=" {{portalLogo}}" alt="" style="width: 50px"> {{portalName}} <i class="material-icons arrow-icon" style="left: 12px; top: 8px">keyboard_arrow_right </i> </a> </div> </div> <div class="collapse navbar-collapse height collapse-menu" style="padding-right: 0px" ng-class="{\'open\' : isMainMenuOpen ,\'in\' : windowWidth < 768}" ng-if="!isShortHeader"> <div class="navbar-wrap" ng-class="{\'navbar-wrap-unoutorize\' : !main.authenticated}"> <div ui-view="menu"></div> <div ui-view="subMenu" class="sub-menu" ng-if="main.authenticated"></div> <ul class="nav navbar-nav main-menu main-menu-rigth" ng-if="main.isNotLoginUrl"> <li style="margin-right: 20px" ng-if="!main.authenticated"> <div style="position: relative; bottom: 4px"> <div class="brn-btn brn-primary sigin-btn" style="padding: 0px; height: 40px; text-align: left"> <a class="sigin-container" target="_blank" href="{{authUrl}}"> <div class="sigin">Sign In</div> </a> <a class="register-container" href="{{registerhUrl}}"> <div class="register"> <i class="material-icons">person_add</i> <div class="background"></div> </div> </a> </div> </div> </li> \x3c!--\n <li style="padding: 0px; z-index:5;" ng-if="main.isNotLoginUrl">\n <div class="send-email-main" ng-class="{\'logined\' : main.authenticated}">\n <input\n ng-model="main.message" \n class="top-input"\n id="emailSendMessage"\n >\n <custom-input \n ng-model="main.email"\n placeholder="{{main.translations.menu_rightPanel_placeholder}}"\n type-input="email"\n title=""\n style="margin-top: 4px;"\n is-back-placeholder="false"\n enter="main.sentMessage()"\n is-back-placeholder-show="true">\n <i class="material-icons send-icon" >\n send\n </i>\n </custom-input>\n </div>\n </li>\n --\x3e </ul> </div> </div> </div> </div> </div> </header> <div ui-view class="containerfluid content-new" ng-class="{\'content-modern\' : main.curentState.current.parent === \'bot-abstract-new\'}"></div> <div class="help-btn" ng-if="main.curentState.isHelpBtn"> <a class="brn-btn brn-primary" href="https://app.brnz.ai/docs/" target="_blank"> <i class="material-icons send-icon"> help_outline </i> Help </a> </div> <div class="cookie-banner" ng-if="isCookieBanner && main.authenticated "> <div class="banner-container"> <div class="banner-text inline-block"> Cookies help us deliver our services. By using our services, you agree to our use of cookies. </div> <div class="banner-buttons inline-block"> <a class="brn-btn brn-transparent-reverce inline-block" href="https://app.brnz.ai/privacy" target="_blank">Learn More</a> <a class="brn-btn brn-white inline-block" ng-click="closeCookieBanner()">Close</a> </div> </div> </div> <div id="demoModal" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="demo-modal-container"> <img class="demo-modal-background" src="/images/other/pattern.png" alt=""> <div class="demo-modal"> <div style="padding-bottom: 24px"> {{main.translations.demo_modal_text_part1}} <span class="bold">{{main.translations.demo_modal_text_part2}}
56 </span>{{main.translations.demo_modal_text_part3}} </div> <div> <button type="submit" class="brn-btn brn-white inline" data-toggle="modal" data-dismiss="modal" data-target="#demoModal2"> {{main.translations.yesShure}} </button> <button type="submit" class="brn-btn brn-transparent-reverce inline" data-dismiss="modal"> {{main.translations.later}} </button> </div> </div> </div> </div> </div> <div id="demoModal2" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="demo-modal-container"> <div class="demo-modal"> <div style="padding-top: 8px; padding-bottom: 24px; font-size: 14px"> {{main.translations.demo_modal2_text}} </div> <div class="modal-input-container"> <input type="email" ng-model="main.modalEmail" placeholder="{{main.translations.menu_rightPanel_placeholder}}"> </div> <div> <button type="submit" class="brn-btn brn-transparent-reverce inline" ng-click="main.sentMessage(\'enterprise_reply\')"> {{main.translations.submit}} </button> </div> </div> </div> </div> </div> <contact-modal user-email="{{main.authenticated? main.authenticated.email : \'\'}}" message="{{main.contactMessage}}"></contact-modal>'),a.put("views/modern/main-menu-direct.html",'<ul class="nav navbar-nav main-menu"> <li ui-sref-active="active" ng-if="authenticated && windowWidth > 870 || authenticated && windowWidth < 768" style="margin-right: 26px"> <a href="/v2/bots" target="_self"> <i class="material-icons icon">face </i> <span class="text">{{translations.menu_bot}}</span> </a> </li> \x3c!-- <li ng-if="authenticated && windowWidth > 1100|| windowWidth < 768 || !authenticated && windowWidth > 1090"\n class="navbar-dropdown dropdown-hovered" id="dropdown-apps-solutions-container" uib-dropdown style="margin-right: 10px">\n <a id="dropdown-apps-solutions" uib-dropdown-toggle style="cursor: pointer;">\n <i class="material-icons icon">thumb_up</i>\n <span class="text">{{translations.menu_solutions}}</span>\n </a>\n <ul class="dropdown-menu hovered-menu flex-li" uib-dropdown-menu role="menu" style="left: 0px; margin-left: 0;"\n aria-labelledby="dropdown-apps-solutions">\n\n <li>\n <a href="https://brnds.co/" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">\n BRNDS\n <b class="solution-menu__label">LIVE</b>\n </span>\n <span style="font-size: 12px; color:#999999;"> Instagram Brand Builder</span>\n </a>\n </li>\n <li>\n <a href="https://brn.ai/realty-street-leads" class="solution-menu">\n <span style="font-weight: 600;">\n Realty Street Leads\n <b class="solution-menu__label">LIVE</b>\n </span>\n <span style="font-size: 12px; color:#999999;">An automated intelligence workforce that can more than\n you expect</span>\n </a>\n </li>\n <li>\n <a href="https://brn.ai/mavens-list" class="solution-menu">\n <span style="font-weight: 600;">\n Mavens List\n <b class="solution-menu__label">LIVE</b>\n </span>\n <span style="font-size: 12px; color:#999999;">A private platform for on-demand entertainment booking\n and influencer monetization</span>\n </a>\n </li>\n <li>\n <a href="https://brn.ai/hotelbot" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">{{translations.menu_hotelBot}}</span>\n <span style="font-size: 12px; color:#999999;">{{translations.menu_hotelBot_description}}</span>\n </a>\n </li>\n <li>\n <a href="https://brn.ai/cardealerbot" class="solution-menu" target="_blank">
56\n <span style="font-weight: 600;">{{translations.menu_carDealership}}</span>\n <span style="font-size: 12px; color:#999999;">{{translations.menu_carDealership_description}}</span>\n </a>\n </li>\n\n <li>\n <a href="https://brn.ai/support-bot" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">Support chatbot</span>\n <span style="font-size: 12px; color:#999999;">Reduce Customer Support Cost by Automatically\n Answering Customerâs Questions</span>\n </a>\n </li>\n\n\n <li>\n <a href="https://brn.ai/assist" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">Sales assistant chatbot</span>\n <span style="font-size: 12px; color:#999999;">Ultra-fast time to value</span>\n </a>\n </li>\n <li>\n <a href="https://brn.ai/recruit" class="solution-menu" target="_blank">\n <span style="font-weight: 600;"> Recruiting chatbot</span>\n <span style="font-size: 12px; color:#999999;">Personalised candidate experience â at scale</span>\n </a>\n </li>\n <li>\n <a href="https://brn.ai/engage" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">Customer engagement chatbot</span>\n <span style="font-size: 12px; color:#999999;">Automate sales with BRN.Engage</span>\n </a>\n </li>\n <li>\n <a href="https://brn.ai/leads" class="solution-menu" target="_blank">\n <span style="font-weight: 600;">Lead generation chatbot</span>\n <span style="font-size: 12px; color:#999999;">Build, integrate, and launch bot in 20 minutes or\n less.</span>\n </a>\n </li>\n </ul>\n </li> --\x3e <li ui-sref-active="active" ng-if="authenticated && windowWidth > 1220|| !authenticated && windowWidth > 1260 || windowWidth < 768" style="margin-right: 26px"> <a ui-sref="braincubator" ui-sref-active="active"> <i class="material-icons icon">new_releases </i> <span class="text">Code For Equity</span> </a> </li> <li ui-sref-active="active" ng-if="userInfo.role == \'admin\' && windowWidth > 1360 || userInfo.role == \'admin\' && windowWidth < 768" style="margin-right: 26px"> <a ui-sref="statsAll"> <i class="material-icons icon">donut_large </i> <span class="text">{{translations.menu_global_Statistic}}</span> </a> </li> \x3c!-- <li ng-if="authenticated && windowWidth > 1510|| windowWidth < 768 || !authenticated && windowWidth > 1390"\n class="navbar-dropdown dropdown-hovered" uib-dropdown style="margin-right: 10px">\n <a id="dropdown-apps" uib-dropdown-toggle style="cursor: pointer;">\n <i class="material-icons icon">phonelink_ring </i>\n <span class="text">{{translations.menu_ourApps}}</span>\n </a>\n <ul class="dropdown-menu flex-li hovered-menu" uib-dropdown-menu role="menu" style="left: 0px; margin-left: 0;"\n aria-labelledby="dropdown-apps">\n <li>\n <a href="https://play.google.com/store/apps/details?id=de.techfunder.brn" target="_blank">\n <i ng-include="\'images/svg/ic_android_black_24px.svg\'" class="big-icon-xs"></i>\n <span>{{translations.menu_android}}</span>\n </a>\n </li>\n <li>\n <a href="https://itunes.apple.com/ru/app/brn-chatbots-for-business-messaging/id1227372642?l=en&mt=8"\n target="_blank">\n <i ng-include="\'images/svg/ic_apple_small.svg\'" class="big-icon-xs"></i>\n <span>{{translations.menu_iPhone}}</span>\n </a>\n </li>\n </ul>\n </li> --\x3e <li ng-if="!isNotMain && ( authenticated && windowWidth > 1640 || windowWidth < 768 || !authenticated && windowWidth >
56 1525)" style="margin-right: 26px"> <a data-toggle="modal" data-target="#contactModal"> <i class="material-icons icon">email</i> <span class="text">{{translations.menu_contact}}</span> </a> </li> <li ng-if="!isNotMain && ( authenticated && windowWidth > 1680 || windowWidth < 768 || !authenticated && windowWidth > 1555)" style="margin-right: 26px"> <a href="hhttps://app.brnz.ai/docs/" target="_blank"> <i class="material-icons icon"> help_outline </i> <span class="text">{{translations.menu_help}}</span> </a> </li> \x3c!-- <li ng-if=" authenticated && windowWidth > 1700 || windowWidth < 768 || !authenticated && windowWidth > 1600">\n <a ui-sref="instagram">\n <span ng-include src="\'images/svg/insta_icon.svg\'" class="icon" style="bottom:8px;"></span>\n <span class="text">{{translations.instagram}}</span>\n </a>\n </li> --\x3e <li class="navbar-dropdown dropdown-more-menu left-after" uib-dropdown ng-class="{\'open\' :subMenu.isOpen}" auto-close="outsideClick"> <a id="dropdown-menu" ng-if="authenticated && userInfo.role != \'admin\' && windowWidth <= 1700 ||\n authenticated && userInfo.role == \'admin\' && windowWidth <= 1680 && windowWidth > 767 ||\n !authenticated && windowWidth <= 1555 && windowWidth > 767 && !isNotMain ||\n !authenticated && windowWidth <= 1390 && windowWidth > 767 && isNotMain" style="margin-right: -15px" uib-dropdown-toggle> <span class="more-text" style="margin-left: 0px; margin-right: 0px"> {{translations.bot_menu_more}} <i class="material-icons more-icon">arrow_drop_down</i> </span> </a> <ul class="dropdown-menu" style="left: auto; right: -36px; margin-top: 6px; min-width: 200px" role="menu" aria-labelledby="dropdown-menu"> <li ui-sref-active="active" ng-if="authenticated && windowWidth <= 870"> <a ui-sref="bots"> <i class="material-icons icon icon-droped">face </i> <span class="text text-droped">{{translations.menu_bot}}</span> </a> </li> <li ng-if="authenticated && windowWidth <= 1100 || !authenticated && windowWidth <= 1090" class="dropdown-sub" uib-dropdown auto-close="outsideClick" on-toggle="toggled(open)"> <a id="dropdown-apps-short-solutions" uib-dropdown-toggle style="cursor: pointer; margin-right: 0px"> <i class="material-icons icon icon-droped">thumb_up</i> <span class="text text-droped">{{translations.menu_solutions}}</span> </a> <ul class="dropdown-menu flex-li" uib-dropdown-menu role="sub-menu" style="left: calc(100% + 14px);top: -14px" aria-labelledby="dropdown-apps-short-solutions"> <li> <a href="https://brnds.co/" class="solution-menu" target="_blank"> <span style="font-weight: 600">BRNDS</span> <span style="font-size: 12px; color:#999999"> Instagram Brand Builder</span> </a> </li> <li> <a href="https://app.brnz.ai/hotelbot" class="solution-menu" target="_blank"> <span style="font-weight: 600">{{translations.menu_hotelBot}}</span> <span style="font-size: 12px; color:#999999">{{translations.menu_hotelBot_description}}</span> </a> </li> <li> <a href="https://app.brnz.ai/cardealerbot" class="solution-menu" target="_blank"> <span style="font-weight: 600">{{translations.menu_carDealership}}</span> <span style="font-size: 12px; color:#999999">{{translations.menu_carDealership_description}}</span> </a> </li> </ul> </li> <li ui-sref-active="active" ng-if="authenticated && windowWidth <= 1220 || !authenticated && windowWidth <= 1260"> <a ui-sref="braincubator" ui-sref-active="active"> <i class="material-icons icon icon-droped">new_releases </i> <span class="text text-droped">Code For Equity</span> </a> </li> <li ui-sref-active="active" ng-if="windowWidth <= 1360 && userInfo.role == \'admin\'"> <a ui-sref="statsAll"> <i class="material-icons icon-droped icon">donut_large </i> <span class="text text-droped">{{translations.menu_global_Statistic}}</span> </a> </li> \x3c!-- <li class="dropdown-sub" uib-dropdown auto-close="outsideClick" on-toggle="toggled(open)"\n ng-if="authenticated && windowWidth <= 1510 || !authenticated && windowWidth <= 1390">\n <a id="dropdown-apps-short" uib-dropdown-toggle style="cursor: pointer; margin-right: 0px; line-height: 20px">\n <i class="material-icons icon icon-droped">phonelink_ring </i>
56\n <span class="text text-droped">{{translations.menu_ourApps}}</span>\n </a>\n <ul class="dropdown-menu flex-li" uib-dropdown-menu role="sub-menu"\n style="left: calc(100% + 22px); top: -14px;" aria-labelledby="dropdown-apps-short">\n <li>\n <a href="https://play.google.com/store/apps/details?id=de.techfunder.brn" target="_blank">\n <i ng-include="\'images/svg/ic_android_black_24px.svg\'" class="big-icon-xs"></i>\n <span>{{translations.menu_android}}</span>\n </a>\n </li>\n <li>\n <a href="https://itunes.apple.com/ru/app/brn-chatbots-for-business-messaging/id1227372642?l=en&mt=8"\n target="_blank">\n <i ng-include="\'images/svg/ic_apple_small.svg\'" class="big-icon-xs"></i>\n <span>{{translations.menu_iPhone}}</span>\n </a>\n </li>\n </ul>\n </li> --\x3e <li ng-if="!isNotMain && (authenticated && windowWidth <= 1640 || !authenticated && windowWidth <= 1525)"> <a data-toggle="modal" data-target="#contactModal"> <i class="material-icons icon icon-droped">email</i> <span class="text text-droped">{{translations.menu_contact}}</span> </a> </li> <li ng-if="!isNotMain && (authenticated && windowWidth <= 1680 || !authenticated && windowWidth <= 1555)"> <a href="https://app.brnz.ai/docs/" target="_blank"> <i class="material-icons icon icon-droped"> help_outline </i> <span class="text text-droped">{{translations.menu_help}}</span> </a> </li> \x3c!-- <li ng-if="authenticated && windowWidth <= 1700 || !authenticated && windowWidth <= 1600">\n <a ui-sref="instagram">\n <span ng-include src="\'images/svg/insta_icon.svg\'" class="icon icon-droped"></span>\n <span class="text text-droped">{{translations.instagram}}</span>\n </a>\n </li> --\x3e </ul> </li> <ng-transclude></ng-transclude> </ul>'),a.put("views/modern/main-menu.html",'<ul class="nav navbar-nav main-menu"> <li class="navbar-dropdown" ng-if="main.authenticated" uib-dropdown> <a id="dropdown-profile" uib-dropdown-toggle> <span> <img class="dropdown-profile-avatar" ng-src="{{main.authenticated.avatar?(main.authenticated.avatar):(\'images/no-avatar-user.png\')}}"> <span ng-if="windowWidth < 768 ">{{main.authenticated.first_name}} {{main.authenticated.last_name}}</span> </span> </a> <div ng-if="windowWidth >= 768 " class="dropdown-menu" role="menu" style="padding: 0px" uib-dropdown-menu aria-labelledby="dropdown-profile"> <div class="dropdown-profile"> <div class="dropdown-profile-content"> <a class="table-cell" ui-sref="profile"> <img class="avatar" ng-src="{{main.authenticated.avatar?(main.authenticated.avatar):(\'images/no-avatar-user.png\')}}"> </a> <a class="table-cell" ui-sref="profile"> <span class="name">{{main.authenticated.first_name}} {{main.authenticated.last_name}}</span> <br> <span class="email">{{main.authenticated.email}}</span> </a> </div> <a ng-click="main.logOut()" class="logaut"> <i ng-include="\'images/svg/ic_exit_to_app_black_18px.svg\'"></i> </a> <div class="dropdown-profile-buttom" ng-if="main.isAdmin || main.isSubAdmin"> <a ui-sref="portals" class="links" ng-class="{\'disabled\' : !main.isAdmin && !main.isSubAdmin}"> <i ng-include="\'images/svg/ic_work_black_18px.svg\'"></i> {{main.translations.menu_portals}} </a> <a ng-if="main.permissions.portal.minds" ui-sref="mind-settings" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i ng-include="\'images/svg/ic_new_releases_black_18px.svg\'"></i> {{main.translations.menu_mind}} </a> <a ng-if="main.permissions.portal.users" ui-sref="manage-users" class="links" ng-class="{\'disabled\' : !main.isAdmin && !main.isSubAdmin}"> <i class="user" ng-include="\'images/svg/ic_person_black_18px.svg\'"></i> {{main.translations.menu_users}} </a> <a ui-sref="manage-bots" class="links" ng-class="{\'disabled\' : !main.isAdmin && !main.isSubAdmin}"> <i class="user" ng-include="\'images/svg/ic_face_black_18px.svg\'"></i> {{main.translations.menu_bots}} </a> <a ng-if="main.permissions.portal.mails" ui-sref="manage-mails" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i class="mails" ng-include="\'images/svg/ic_email_black_18px.svg\'"></i> {{main.translations.menu_mails}} </a> <a ng-if="main.permissions.portal.translations" ui-sref="manage-translation({page: \'all\'})" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i class="mails" ng-include="\'images/svg/ic_language_black_18px.svg\'"></i> {{main.translations.menu_translations}} </a> <a ng-if="main.permissions.portal.collections" ui-sref="manage-content"
56class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i class="mails" ng-include="\'images/svg/baseline-poll-24px.svg\'"></i> {{main.translations.menu_content}} </a> <a ng-if="main.permissions.portal.proxies" ui-sref="manage-proxies" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i class="mails" ng-include="\'images/svg/baseline-vpn_lock-24px.svg\'"></i> {{main.translations.menu_proxies}} </a> <br> <a ui-sref="crm-statistic" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i ng-include="\'images/svg/ic_person_black_18px.svg\'"></i> Statistic </a> <a ui-sref="profile-companies" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i ng-include="\'images/svg/ic_group_work_24px.svg\'"></i> Projects </a> <br> <a ui-sref="profile-members" class="links" ng-class="{\'disabled\' : !main.isAdmin}"> <i ng-include="\'images/svg/ic_group_black_24px.svg\'"></i> Team </a> <br> <a ui-sref="hints" class="links" ng-class="{\'disabled\' : !main.isAdmin && !main.isSubAdmin}"> <i ng-include="\'images/svg/ic_help_black_24px.svg\'"></i> Hints </a> </div> </div> </div> <ul class="dropdown-menu" uib-dropdown-menu ng-if="windowWidth < 768" role="menu" aria-labelledby="dropdown-profile"> <li ng-show="main.isAdmin || main.isSubAdmin"> <a ui-sref="portals"> <i class="material-icons icon profile-icon" style="width: 26px">work_black</i> {{main.translations.menu_portals}} </a> </li> <li ng-show="main.isAdmin"> <a ui-sref="mind-settings"> <i class="material-icons icon profile-icon">new_releases </i> {{main.translations.menu_mind}} </a> </li> <li ng-show="main.isAdmin"> <a ui-sref="manage-users"> <i class="material-icons icon profile-icon">person </i> {{main.translations.menu_users}} </a> </li> <li ng-show="main.isAdmin"> <a ui-sref="manage-bots"> <i class="material-icons icon profile-icon">face </i> {{main.translations.menu_bots}} </a> </li> <li ng-show="main.isAdmin"> <a ui-sref="manage-mails"> <i class="material-icons icon profile-icon">email </i> {{main.translations.menu_mails}} </a> </li> <li ng-show="main.isAdmin"> <a ui-sref="manage-translation({page: \'all\'})"> <i class="material-icons icon profile-icon">language </i> {{main.translations.menu_translations}} </a> </li> <li ng-show="main.isAdmin"> <a ui-sref="manage-content"> <i class="material-icons icon profile-icon">poll </i> {{main.translations.menu_content}} </a> </li> <li ng-show="main.isAdmin"> <a ui-sref="manage-content"> <i class="material-icons icon profile-icon">vpn_lock </i> {{main.translations.menu_proxies}} </a> </li> <li> <a ng-click="main.logOut()"> <i class="material-icons icon profile-icon">exit_to_app </i> {{main.translations.menu_logout}} </a> </li> </ul> </li> </ul> <main-menu-direct translations="main.translations" user-info="userInfo" authenticated="main.authenticated" is-bot-fabrik="main.isBotFabrik"> </main-menu-direct>'),a.put("views/modern/notification.html",'<div class="ui-notification"> <i class="material-icons close" ng-click="kill(true);">close</i> <i class="material-icons notification-icon"></i> <div class="text-block"> <h3 ng-show="title" ng-bind-html="title"></h3> <div class="message" ng-bind-html="message"></div> </div> </div>');a.put("views/notfound.html","<div class=\"service-page\"> <div class=\"service-text\"> <h1>404</h1> <h3>{{main.currentLang === 'de'? 'Seite, die Sie suchen nicht gefunden': 'Page you are looking for not found'}}</h3> <a ui-sref=\"home\" class=\"brn-btn brn-transparent\" ng-click=\"back()\"> {{main.currentLang === 'de'? 'Zurück zur Startseite': 'Back to home'}} </a> </div> </div>"),a.put("views/notification.html","<p>This is the notification view.</p>"),a.put("views/offer.html",'<link rel="stylesheet" type="text/css" href="https://brn.ai/styles/payment_cards/main.css"> <div class="containerfluid content-new" style="padding-top: 10px"> <div class="flex-height"> <div class="container" style="max-width: 410px"> <div class="store-offer-card store-offer-card--success" ng-if="payment_status == 1"> <img src="img/icons/check_circle.svg" alt="+" class="store-card__alert-icon"> <h2 class="store-card__alert-message"> Payment Successful </h2> <div class="store-card__controls" style="display:none"> <a href="#" class="payment-form-button payment-form-button-flat"> Back to chat </a> </div> </div> <div class="store-offer-card store-offer-card--unsuccess" ng-if="payment_status == 2">
56 <img src="img/icons/cancel.svg" alt="-" class="store-card__alert-icon"> <h2 class="store-card__alert-message"> Payment Unsuccessful </h2> <div class="store-card__controls"> <a href="#" class="payment-form-button payment-form-button-flat payment-form-button-flat--filled"> Retry </a> <span class="store-card__controls-divider" style="display:none"> or </span> <a href="#" class="payment-form-button payment-form-button-flat" style="display:none"> Back to chat </a> </div> </div> <div class="store-offer-card" ng-if="!payment_status"> \x3c!-- Card header --\x3e <div class="store-offer-card__header" style="height: auto !important"> <img src="{{product.image}}" alt="" style="max-width: 100%"> </div> \x3c!-- Card body --\x3e <div class="store-offer-card__body"> \x3c!-- Card title --\x3e <div class="store-offer-card__body-title"> <h3>{{product.name}}</h3> \x3c!-- Duration input --\x3e <div class="duration-input"> <span>x</span> <input class="browser-default" type="number" min="1" max="40" ng-model="order_count"> </div> </div> \x3c!-- Card description --\x3e <p class="store-offer-card__body-description"> </p> \x3c!-- PayPal payment form --\x3e \x3c!-- Forms switch by - "form-switch__button" --\x3e <form class="payment-form payment-form--active" id="payPalForm"> \x3c!-- Payment form controls--\x3e <div class="payment-form__controls"> <button type="submit" class="payment-form-button payment-form-button-float" ng-click="order()"> Buy Now for <span> ${{product.price * order_count}}</span> </button> <p class="input-checkbox"> <label> <input type="checkbox" id="order_accept" ng-model="terms.accept"> <span>Accept \x3c!-- Terms and Conditions link--\x3e <a ui-sref="terms" target="_blank">Terms and Conditions</a> </span> </label> </p> </div> </form> </div> </div> </div> </div> </div>'),a.put("views/order-attachments.html",'<div class="modal-header text-center"> <h3 class="modal-title">Attachments</h3> </div> <div class="modal-body"> <div class="row"> <div class="col-md-4"> <h4>Files</h4> <p ng-repeat="file in order.files" style="font-size: 14pt"><a href="{{file.url}}" target="_blank">{{file.label}}</a></p> </div> <div class="col-md-8"> <h4>Photos</h4> <div class="row" ng-repeat="row in order.imagesRows"> <img ng-src="{{attach.url}}" class="col-md-5 image-responsive" ng-repeat="attach in row" style="padding-left:0; padding-right: 0;max-width:350px; border-radius: 10px; margin: 5px"> </div> </div> </div> </div>'),a.put("views/order-detail.html",'<div class="row create-bot"> <div class="col-lg-4 col-xs-12"> <div class="fixed-card"> <h3>Update order</h3> <form ng-submit="updateOrder()"> <ui-select ng-model="order.client_id" theme="bootstrap"> <ui-select-match placeholder="Client">{{$select.selected.name}}</ui-select-match> <ui-select-choices repeat="item.client_id as item in clients | filter: $select.search"> <div ng-bind-html="item.name | highlight: $select.search"></div> </ui-select-choices> </ui-select> <br> <ui-select multiple ng-model="order.products" theme="bootstrap" close-on-select="false"> <ui-select-match placeholder="Products">{{$item.name}}</ui-select-match> <ui-select-choices repeat="item.product_id as item in products | filter: $select.search"> <div ng-bind-html="item.name | highlight: $select.search"></div> </ui-select-choices> </ui-select> <br> <select ng-model="order.order_status" ng-options="item.name as item.title for item in orderStatuses"> </select> <br> <br> <button type="submit" class="brn-btn brn-primary">Update order</button> </form> </div> </div> </div>'),a.put("views/page.html",'<div ng-if="loaded"> <div ng-bind-html="page"></div> </div>'),a.put("views/partners.html",'<div ng-if="loaded"> \x3c!-- <social-providers></social-providers> --\x3e <div ng-bind-html="page" style="margin-top: -30px"></div> <widget bot-name="Alex Galert" bot-image="https://api.brn.ai/upload/img/bots/Zf1KSupA0c.png" show-by-timer="main.showWidgetMessageWindow " input-placeholder="{{main.translations.widget_placeholder_whiteLabel}}" prefix="_BOTFABRIC_" welcome-text="{{main.translations.widget_welcomeText_whiteLabel}}"> </widget> <footer-registration translations="main.translations" is-white-label-btn="true" source-name="whitelabel" is-registration-panel="true" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'), 57a.put("views/person-tags.html",'<div class="person-tags__tags-list"> <span class="person-tags__tag" ng-repeat="tag in person.tags" ng-click="editTag(tag, $event)"> <i class="person-tags__tag-color" ng-style="{\'background-color\':tag.color}"></i> {{tag.name}} <div class="person-tags__tag-editor" ng-if="isTagEditing(tag.tag_id)"> <ul class="person-tags__tag-colors"> <li ng-repeat="color in tagColors" ng-style="{\'background-color\':color}" ng-click="setTagColor(color, $event)"> <span class="tag-color__check" ng-if="color === tag.color"> <i class="material-icons" ng-style="{\'color\':color}"> check </i> </span> </li> </ul> <span class="person-tags__tag-remove-button"> <i class="material-icons" ng-click="removeTagFromPerson(tag.tag_id, $event)"> delete </i> </span> </div> </span> <span ng-click="openAddList($event)" ng-if="tags.length != person.tags.length" class="person-tags__tag person-tags__tag-add"> <i class="material-icons"> add </i> ADD MORE <ul class="person-tags__select-list" ng-if="addListOpened"> <div class="person-tags__select-list--inner"> <li class="person-tags__select-list-item" ng-repeat="tag in tags" ng-if="isTagAvaliable(tag.tag_id)" ng-click="addTagToPerson(tag, $event)"> <i class="person-tags__tag-color" ng-style="{\'background-color\':tag.color}"></i> {{tag.name}} \x3c!-- <i\n class="material-icons person-tags__tag--delete"\n ng-click="deleteTag(tag, $event)"\n >\n close\n </i> --\x3e </li> </div> </ul> </span> </div>'),a.put("views/pinterest.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">Pinterest</h2> </div> <form ng-submit="updateConnection()"> <div class="mb10"> <custom-input placeholder="Username" ng-model="pinterest.provider_data.username" title="Username" is-required="true" is-back-placeholder="true"> </custom-input> <div class="bots-list-text"> https://www.pinterest.com/{{pinterest.provider_data.username}} </div> <custom-input placeholder="Password" ng-model="pinterest.provider_data.password" title="Password" type-input="password" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Email" ng-model="pinterest.provider_data.email" title="Email" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Proxy" ng-model="pinterest.provider_data.proxy" title="Proxy" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="pinterest.provider_data.username" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/portal-detail-create-mask.html",'<div class="container"> <div class="empty-nav-sidebar"> <span class="nav-sidebar-back round-btn ng-click-active" ng-click="goBack()"> <i class="material-icons">arrow_back</i> </span> </div> <div class="flex-row" style="margin-left: 100px;margin-top: 25px"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb35">Create Attribute</h2> <div class="mb50"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="newAttr.name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Label" title="Label" ng-model="newAttr.label" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-class="{\'mb30\' : newAttr.type!=\'mixed\'}"> <custom-dropdown ng-model="newAttr.type" array="attributeTypes" opt-description="title" opt-value="name" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleChangeType()" ng-disabled="newAttr.values.length" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb30" ng-if="newAttr.type==\'mixed\'"> <custom-dropdown ng-model="$parent.schemaKey" array="schemaKeys" opt-description="name" opt-value="name" title="Schema Key" is-model-init="true" placeholder="Schema Key..." ng-change="handleChangeKey()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="card-checker"> <input type="checkbox" ng-model="newAttr.visible" id="attributes_visible"> <label for="attributes_visible" style="text-transform: none"> <span class="checker-ico"></span>Visible </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.multiple" id="attributes_multiple"> <label for="attributes_multiple" style="text-transform: none"> <span class="checker-ico"></span>Multiple </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.selectable" id="attributes_selectable"> <label for="attributes_selectable" style="text-transform: none"> <span class="checker-ico"></span>Selectable </label> </div> </div> <button ng-click="addAttribute()" class="brn-btn brn-primary">Add Attribute</button> </div> </div> <div> <div class="scenario-card transparent" ng-if="newAttr.type==\'mixed\'"> <div class="section no-padding mb60"> <h2 class="mb35">Schema</h2> <div ng-show="!isEmpty(newAttr.schema.fields)"> <div class="flex-row mb5" ng-repeat="(name, schema) in newAttr.schema.fields"> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].label" placeholder="Label" title="Label" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newAttr.schema.fields[name].type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container"> <div class="delete-item" ng-click="deleteSchemaAttribute(name)" ng-if="$parent.schemaKey != name"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> <div class="flex-row mb5" ng-if="newSchemaAttr.show"> <div class="short-item"> <custom-input ng-model="newSchemaAttr.name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newSchemaAttr.label" placeholder="Label" title="Label" is-required="true" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newSchemaAttr.type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" ng-change="addSchemaAttribute()" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container"> <div class="delete-item" ng-click="clearSchemaAttribute()"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot mt20" ng-click="showSchemaAttribute()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> <div class="settings-card-wrap big mb50" ng-if="newAttr.selectable"> <h2 class="mb60">Values <a class="add-bot" ng-click="addValue()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:640px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:638px"> <tbody ng-if="newAttr.type!=\'mixed\' && newAttr.values.length"> <tr class="header-image"> <td style="width:45%"> {{main.translations.value}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in newAttr.values" ng-class="{\'first-line\' : key == 0}"> <td> <span ng-if="newAttr.type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include> </span> <img ng-src="{{value}}" ng-if="newAttr.type==\'image\' && newAttr.value.length" style="max-width: 100px"> <span ng-if="newAttr.type==\'string\' || newAttr.type==\'number\' || newAttr.type==\'date\'"> {{value}} </span> <div ng-if="newAttr.type==\'color\'" ng-style="{\'width\': \'15px\', \'height\': \'15px\', \'background-color\': value}"></div> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete value"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tbody ng-if="newAttr.type==\'mixed\' && newAttr.values.length"> <tr class="header-image"> <td ng-repeat="field in fields"> {{newAttr.schema.fields[field].label}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in newAttr.values" ng-class="{\'first-line\' : key == 0}"> <td ng-repeat="field in fields"> <span ng-if="newAttr.schema.fields[field].type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value[field] == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value[field] != true"></ng-include> </span> <div ng-if="newAttr.schema.fields[field].type == \'color\'" ng-style="{\'width\': \'20px\', \'height\': \'20px\', \'background-color\': value[field]}"> </div> <img ng-src="{{value[field]}}" ng-if="newAttr.schema.fields[field].type==\'image\' && value[field].length" style="max-width: 100px"> <span ng-if="newAttr.schema.fields[field].type==\'string\' || newAttr.schema.fields[field].type==\'number\' || newAttr.schema.fields[field].type==\'date\'"> {{value[field]}} </span> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="{{main.translations.deleteValue}}"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tfoot ng-if="!newAttr.values.length"> <tr> <td colspan="100%">No attribute values found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div> </div>'),a.put("views/portal-detail-user-mask.html",'<div class="container"> <div class="empty-nav-sidebar"> <span class="nav-sidebar-back round-btn ng-click-active" ng-click="goBack()"> <i class="material-icons">arrow_back</i> </span> </div> <div class="flex-row" style="margin-left: 100px;margin-top: 25px"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb35">Edit Attribute</h2> <div class="mb50"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="newAttr.name" is-required="true" is-back-placeholder="true" ng-disabled="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="L
57abel" title="Label" ng-model="newAttr.label" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-class="{\'mb30\' : newAttr.type!=\'mixed\'}"> <custom-dropdown ng-model="newAttr.type" array="attributeTypes" opt-description="title" opt-value="name" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleChangeType()" ng-disabled="newAttr.values.length" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb30" ng-if="newAttr.type==\'mixed\'"> <custom-dropdown ng-model="$parent.schemaKey" array="schemaKeys" opt-description="name" opt-value="name" title="Schema Key" is-model-init="true" placeholder="Schema Key..." ng-change="handleChangeKey()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="card-checker"> <input type="checkbox" ng-model="newAttr.visible" id="attributes_visible"> <label for="attributes_visible" style="text-transform: none"> <span class="checker-ico"></span>Visible </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.multiple" id="attributes_multiple"> <label for="attributes_multiple" style="text-transform: none"> <span class="checker-ico"></span>Multiple </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.selectable" id="attributes_selectable"> <label for="attributes_selectable" style="text-transform: none"> <span class="checker-ico"></span>Selectable </label> </div> </div> <button ng-click="addAttribute()" class="brn-btn brn-primary">Edit Attribute</button> </div> </div> <div> <div class="scenario-card max-size transparent" ng-if="newAttr.type==\'mixed\'"> <div class="section no-padding mb60"> <h2 class="mb35">Schema</h2> <div ng-show="!isEmpty(newAttr.schema.fields)"> <div class="flex-row mb5" ng-repeat="(name, schema) in newAttr.schema.fields"> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].label" placeholder="Label" title="Label" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newAttr.schema.fields[name].type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container mt10"> <div class="delete-item" ng-click="deleteSchemaAttribute(name)" ng-if="$parent.schemaKey != name"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> <div class="flex-row mb5" ng-if="newSchemaAttr.show"> <div class="short-item"> <custom-input ng-model="newSchemaAttr.name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newSchemaAttr.label" placeholder="Label" title="Label" is-required="true" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newSchemaAttr.type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" ng-change="addSchemaAttribute()" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container mt10"> <div class="delete-item" ng-click="clearSchemaAttribute()"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot mt20" ng-click="showSchemaAttribute()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> <div class="settings-card-wrap big mb50" ng-if="newAttr.selectable"> <h2 class="mb60">Values <a ng-if="newAttr.type != \'location\'" class="add-bot" ng-click="addValue(attribute)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> <a ng-if="newAttr.type == \'location\'" class="add-bot" ng-click="addMapValue(newAttr)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:640px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:638px"> <tbody ng-if="newAttr.type!=\'mixed\' && newAttr.values.length"> <tr class="header-image"> <td style="width:45%"> {{main.translations.value}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in newAttr.values" ng-class="{\'first-line\' : key == 0}"> <td> <span ng-if="newAttr.type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include> </span> <img ng-src="{{value}}" ng-if="newAttr.type==\'image\' && newAttr.value.length" style="max-width: 100px"> <span ng-if="newAttr.type==\'string\' || newAttr.type==\'number\' || newAttr.type==\'date\'"> {{value}} </span> <span ng-if="newAttr.type==\'location\'"> Longitude: {{value.coordinates[0]}}, Latitude: {{value.coordinates[1]}} </span> <div ng-if="newAttr.type==\'color\'" ng-style="{\'width\': \'15px\', \'height\': \'15px\', \'background-color\': value}"></div> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete element"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tbody ng-if="newAttr.type==\'mixed\' && newAttr.values.length"> <tr class="header-image"> <td ng-repeat="field in fields"> {{newAttr.schema.fields[field].label}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in newAttr.values" ng-class="{\'first-line\' : key == 0}"> <td ng-repeat="field in fields"> <span ng-if="newAttr.schema.fields[field].type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value[field] == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value[field] != true"></ng-include> </span> <div ng-if="newAttr.schema.fields[field].type == \'color\'" ng-style="{\'width\': \'20px\', \'height\': \'20px\', \'background-color\': value[field]}"> </div> <img ng-src="{{value[field]}}" ng-if="newAttr.schema.fields[field].type==\'image\' && value[field].length" style="max-width: 100px"> <span ng-if="newAttr.schema.fields[field].type==\'string\' || newAttr.schema.fields[field].type==\'number\' || newAttr.schema.fields[field].type==\'date\'"> {{value[field]}} </span> <span ng-if="newAttr.schema.fields[field].type==\'location\'"> {{value[field].coordinates[1]}}, {{value[field].coordinates[0]}} </span> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete element"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tfoot ng-if="!newAttr.values.length"> <tr> <td colspan="100%">No attribute values found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div> </div>'), 58a.put("views/portal-detail.html",'<div class="common-padding portals"> <div class="container"> <div class="nav-sidebar nav-sidebar-bottom-pd"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" height="calc(100% - 167px)" paddings="22px 10px 30px 52px"> <div style="flex: 1 1 auto"> <div class="bot-info-text"> <div class="bot-info-img" style="cursor:pointer"> <img ng-src="{{portal.logo?(portal.logo):(\'images/tf.png\')}}"> </div> <div class="bot-info-name"> {{portal.name}} </div> <div class="bot-info-url"> <a> {{portal.title}} </a> </div> </div> </div> <div class="nav-sidebar-bottom" ng-class="{\'nav-sidebar-bottom-shadow\' : isButomShadow}"> <div class="settings-save" ng-click="onSubmit()"> <span> <i class="material-icons">save</i> {{main.translations.save_btn}} </span> </div> <div class="muted" style="margin-top: 0px;margin-bottom: 7px" ng-click="deletePortal()"> <span class="off"> <i ng-include="\'images/svg/ic_delete_black_24px.svg\'"></i> Delete </span> </div> <div class="settings-cancel" ui-sref="portals()"> <span> <i class="material-icons">cancel</i> Cancel </span> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="flex-row"> <div class="settings-card-wrap mb25"> <div class="settings-card"> <h2 class="mb60">{{main.translations.leftMenu_general}}</h2> <div class="bot-img mb20" ngf-select="uploadFile(\'logo\', $file)" ngf-drop="uploadFile(\'logo\', $file)" ngf-pattern="image/*"> <img ng-src="{{portal.logo ? (portal.logo):(\'images/tf.png\')}}" alt=""> <div class="icon"> <ng-include src="\'images/svg/ic_add_a_photo_white_24px.svg\'"></ng-include> </div> <div class="overlay"></div> </div> <div class="mb30"> <custom-input placeholder="Company {{main.translations.title_name}}" ng-model="portal.name" title="Company {{main.translations.title_name}}" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{main.translations.title}}" ng-model="portal.title" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Service Name" ng-model="portal.service_name" title="Service Name" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Domain" ng-model="portal.domain" title="Domain" is-required="true" is-back-placeholder="true"> </custom-input> <div style="cursor:pointer" class="mb20" ngf-accept="\'image/*\'" ngf-select="uploadFile(\'favicon\', $file)"> <custom-input is-readonly="true" placeholder="FAVICON" ng-model="portal.favicon" title="FAVICON" is-back-placeholder="true"> <i class="material-icons" style="opacity: 0.3; font-size: 16px; top: 6px; position: relative">image</i> </custom-input> </div> <custom-dropdown ng-model="portal.environment" array="[{name:\'Live\', value:\'live\'},{name:\'Dev\', value:\'dev\'}]" opt-description="name" opt-value="value" title="Environment" is-model-init="true" placeholder="" is-back-placeholder="true" is-required="true"> </custom-dropdown> </div> </div> </div> <div class="settings-card-wrap mb25"> <div class="settings-card"> <h2 class="mb30">Contacts</h2> <div class="mb50"> \x3c!-- <custom-input\n placeholder="First Name"\n ng-model="portal.contacts.first_name"\n title="First Name"\n is-back-placeholder="true">\n </custom-input>\n <custom-input\n placeholder="Last Name"\n ng-model="portal.contacts.last_name"\n title="Last Name"\n is-back-placeholder="true">\n </custom-input> --\x3e <custom-input placeholder="Phone" ng-model="portal.contacts.phone" title="Phone" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Email" ng-model="portal.contacts.email" title="Email" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Skype" ng-model="portal.contacts.skype" title="Skype" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Linkedin" ng-model="portal.contacts.linkedin" title="Linkedin" http-prefix is-back-placeholder="true"> </custom-input> <custom-input placeholder="Facebook PageId" ng-model="portal.contacts.facebook" title="Facebook PageId" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="settings-card-wrap mb25"> <div class="settings-card"> <h2 class="mb50">Widget Settings</h2> <div class="mb50"> <div class="card-checker no-margin" style="top: 7px; position: relative"> <input type="checkbox" ng-model="portal.widgets.chat.active" id="widget_acrive-checkbox"> <label for="widget_acrive-checkbox" style="text-transform: none"> <span class="checker-ico"></span> {{main.translations.active}} </label> </div> <custom-input placeholder="First Name" ng-model="portal.widgets.chat.first_name" title="First Name" ng-disabled="!portal.widgets.chat.active" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Last Name" ng-model="portal.widgets.chat.last_name" title="Last Name" ng-disabled="!portal.widgets.chat.active" is-back-placeholder="true"> </custom-input> <custom-input ng-if="!portal.widgets.chat.active" is-readonly="true" placeholder="Avatar" ng-disabled="true" ng-model="portal.widgets.chat.image" title="Avatar" is-back-placeholder="true"> <i class="material-icons" style="opacity: 0.3; font-size: 16px; top: 6px; position: relative">image</i> </custom-input> <div style="cursor:pointer" ng-if="portal.widgets.chat.active" class="mb20" ngf-accept="\'image/*\'" ngf-select="uploadFile(\'widgets.chat.image\', $file)"> <custom-input is-readonly="true" placeholder="Avatar" ng-model="portal.widgets.chat.image" title="Avatar" is-back-placeholder="true"> <i class="material-icons" style="opacity: 0.3; font-size: 16px; top: 6px; position: relative">image</i> </custom-input> </div> </div> </div> </div> <div class="settings-card-wrap mb25" ng-if="main.permissions.portal.pages"> <div class="settings-card big"> <h2 class="mb60">Manage page editor <a class="add-bot" title="Add Pages" data-toggle="modal" data-target="#addPage"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:646px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:638px"> <tbody> <tr class="header-image"> <td style="width:18%"> language </td> <td style="width:25%"> {{main.translations.title_name}} </td> <td style="width:35%"> URL </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, page) in portalPages track by $index" ng-class="{\'first-line\' : key == 0}"> <td style="cursor: pointer" ui-sref="edit({portal: page.portal_id, page: page.name, language: page.language})"> {{page.language}} </td> <td style="cursor: pointer" ui-sref="edit({portal: page.portal_id, page: page.name, language: page.language})"> {{page.name}} </td> <td> {{page.url}} </td> <td class="control-fixed"> <a class="btn-icon" title="Edit page" ui-sref="edit({portal: page.portal_id, page: page.name, language: page.language})"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deletePage(page)" style="top: 8px" title="Delete page"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="3"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!portalPages.length && !inProgress"> <tr> <td colspan="4">No data found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div> <div class="flex-row"> <div class="settings-card-wrap mb25 medium"> <div class="settings-card big436"> <h2 class="mb60">Stripe payments</h2> <div class="mb30" style="position:relative; top: -25px"> <custom-input placeholder="Secret key" ng-model="portal.payments.stripe.secret_key" title="Secret key" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Publishable key" ng-model="portal.payments.stripe.publishable_key" title="Publishable key" is-back-placeholder="true"> </custom-input> \x3c!--<span class="admin-label">Put this url as webhook endpoint: https://api.brn.ai/portal/{{portal.portal_id}}
58/stripe/events and put there webhook secret</span>--\x3e \x3c!--<custom-input--\x3e \x3c!--placeholder="{{main.translations.settings_webhookSecret}}"--\x3e \x3c!--ng-model="portal.payments.stripe.webhook_secret"--\x3e \x3c!--title="{{main.translations.settings_webhookSecret}}"--\x3e \x3c!--is-back-placeholder="true">--\x3e \x3c!--</custom-input>--\x3e <span class="admin-label">The service name, meant to be displayable to the customer</span> <custom-input placeholder="Service name" ng-model="portal.payments.stripe.product.name" title="Service name" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="settings-card-wrap mb25"> \x3c!-- ng-if="payment_data_saved" --\x3e <div class="settings-card big"> <h2 class="mb60">Subscription plans <a class="add-bot" data-toggle="modal" data-target="#addIntentModal"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:646px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:638px"> <tbody> <tr class="header-image"> <td style="width:5%"> </td> <td style="width:16%"> Name </td> <td style="width:35%"> Description </td> <td style="width:13%"> {{main.translations.store_price}} </td> <td style="width:10%"> Bots </td> <td style="width:15%"> Interval </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, plan) in subscription_plans" ng-class="{\'first-line\' : key == 0}"> <td class="td-top-align" style="text-align: center; display: table-cell; vertical-align: middle"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="plan.active" id="plan_checker_{{$index}}"> <label for="plan_checker_{{$index}}"> <span class="checker-ico" style="top: 5px"></span> </label> </div> </td> <td style="cursor: pointer"> {{plan.name}} </td> <td style="cursor: pointer"> {{plan.description}} </td> <td> ${{plan.price}} </td> <td> {{plan.properties.bots}} </td> <td> {{plan.interval}} </td> <td class="control-fixed"> <a class="btn-icon" title="Edit plan" data-toggle="modal" data-target="#editPlanModal{{plan.id}}"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deletePlan(plan.id)" style="top: 8px" title="Delete page"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="3"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!subscription_plans.length"> <tr> <td colspan="4">No data found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div> <div class="flex-row"> <div class="settings-card-wrap mb25"> <div class="settings-card"> <h2 class="mb60">Properties</h2> <div class="mb30" style="position:relative; top: -25px"> <custom-dropdown ng-model="portal.properties.mode" array="modes" opt-description="title" opt-value="value" title="Biling mode" is-model-init="true" placeholder="" is-back-placeholder="true" is-required="true" ng-change="changeMode()"> </custom-dropdown> <custom-input placeholder="Trial days" type-input="number" ng-model="portal.properties.trial" title="Trial days" is-back-placeholder="true" ng-if="portal.properties.mode == \'subscription\'"> </custom-input> <custom-input placeholder="Balance threshold" type-input="number" ng-model="portal.properties.balance_threshold" title="Balance threshold" is-back-placeholder="true" ng-if="portal.properties.mode == \'balance\'"> </custom-input> <custom-input placeholder="Stop delay, days" type-input="number" ng-model="portal.properties.stop_delay" title="Stop delay, days" is-back-placeholder="true" ng-if="portal.properties.mode == \'balance\'"> </custom-input> <div class="mb10" style="margin-top: 20px">Default scenarios:</div> <div class="card-checker"> <input id="default_scenarios_start" type="checkbox" ng-change="defaultScenariosChange()" ng-model="defaultScenarios.startValue"> <label for="default_scenarios_start"> <span class="checker-ico"></span>Start </label> </div> <div class="card-checker"> <input id="default_scenarios_default" type="checkbox" ng-change="defaultScenariosChange()" ng-model="defaultScenarios.defaultValue"> <label for="default_scenarios_default"> <span class="checker-ico"></span>Default </label> </div> </div> </div> </div> <div class="settings-card-wrap mb25 medium"> <div class="settings-card big436"> <h2 class="mb60">Notifications</h2> <div class="mb30" style="position:relative; top: -25px"> <custom-input placeholder="Email address to receive notifications" ng-model="portal.notifications.email" title="Email address to receive notifications" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Email address notifications to be send from" ng-model="portal.notifications.from_email" title="Email address notifications to be send from" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="settings-card-wrap mb25"> <div class="settings-card big"> <h2 class="mb60">Default bots <a class="add-bot" title="Add default bot" data-toggle="modal" data-target="#addDefaultBots"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60 minimal" style="max-width:446px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:444px"> <tbody> <tr class="header-image"> <td style="width:35%"> bot_id </td> <td> {{main.translations.title_name}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, bot) in portal.properties.default_bots track by $index" ng-class="{\'first-line\' : key == 0}"> <td> {{bot.bot_id}} </td> <td> {{bot.name}} </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteDefaultBot($index);" style="top: 8px" title="Delete bot"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="3"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!portal.properties.default_bots.length && !inProgress"> <tr> <td colspan="4">No data found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div> <div class="flex-row"> <div class="settings-card-wrap big mb50" style="margin-right: 60px"> <h2 class="mb60">User mask <a class="add-bot" ui-sref="portal-detail-create-mask({id: portal.portal_id})"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb50" style="max-width:640px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:638px"> <tbody> <tr class="header-default"> <td style="width:23%"> {{main.translations.title_name}} </td> <td style="width:20%"> {{main.translations.type}} </td> <td style="width:15%"> Visible </td> <td style="width:15%"> Multiple </td> <td style="width:15%"> Selectable </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(name, attr) in portal.properties.users.schema track by $index" ng-class="{\'first-line\' : $index == 0}"> <td ui-sref="portal-detail-user-mask({id: portal.portal_id, field: name})" style="cursor: pointer">{{name}}</td> <td ui-sref="portal-detail-user-mask({id: portal.portal_id, field: name})" class="td-top-align" style="cursor: pointer">{{attr.type}}</td> <td class="td-top-align" style="text-align: center"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="attributes[name].visible" ng-change="updateCustomer()" id="{{name}}_visible_{{$index}}"> <label for="{{name}}_visible_{{$index}}"> <span class="checker-ico"></span> </label> </div> </td> <td class="td-top-align" style="text-align: center"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="attributes[name].multiple" ng-change="updateCustomer()" id="{{name}}_multiple_{{$index}}"> <label for="{{name}}_multiple_{{$index}}"> <span class="checker-ico"></span> </label> </div> </td> <td class="td-top-align" style="text-align: center"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="attributes[name].selectable" ng-change="updateCustomer()" id="{{name}}_selectable_{{$index}}"> <label for="{{name}}_selectable_{{$index}}"> <span class="checker-ico"></span> </label> </div> </td> <td class="control-fixed"> <a class="btn-icon" title="Edit customer field" ui-sref="portal-detail-user-mask({id: portal.portal_id, field: name})"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteAttribute(name)" style="top: 8px" title="Delete customer field"> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> </table> </custom-scroller> </div> \x3c!--\n <button ng-click="updateCustomer()" class="brn-btn brn-primary">{{main.translations.save_btn}}</button>\n --\x3e </div> </div> </div> </div> </div> <div id="addDefaultBots" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Add default bot </div> <div class="mb-title"> <div class="mb20">
58 <custom-input placeholder="Name" ng-model="newDefaultBot.name" title="Name" required is-back-placeholder="true"> </custom-input> </div> <div class="mb20"> <custom-dropdown ng-model="newDefaultBot.bot_id" array="default_botsList" placeholder="" opt-description="name" opt-value="bot_id" is-model-init="true" title="Bot template" is-back-placeholder="true"> </custom-dropdown> </div> </div> <button type="button" class="brn-btn brn-primary" ng-click="addDefaultBot()" data-dismiss="modal"> Add </button> </div> </div> </div> </div> </div> </div> <div id="addPage" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Create Page </div> <div class="mb-title"> <div class="mb20"> <custom-input placeholder="Page Name" ng-model="newPage.name" title="Page Name" required is-back-placeholder="true"> </custom-input> </div> <div class="mb20"> <custom-dropdown ng-model="newPage.language" array="langs" placeholder="" opt-description="name" opt-value="value" is-model-init="true" title="Language" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb20 two-line"> <custom-input placeholder="Content" ng-model="newPage.content" title="Content" type-input="textarea" disable-counter="true" is-back-placeholder="true"> </custom-input> </div> </div> <button type="button" class="brn-btn brn-primary" ng-click="addPage()" data-dismiss="modal"> Create </button> </div> </div> </div> </div> </div> </div> <div id="addIntentModal" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap" style="min-height: 425px"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Add Plan </div> <div class="mb-title"> <div class="mb10"> <custom-input placeholder="Name" ng-model="subscription_plan.name" title="Name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Description" ng-model="subscription_plan.description" title="Description" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.store_price}}" ng-model="subscription_plan.price" title="{{main.translations.store_price}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Bots" ng-model="subscription_plan.properties.bots" title="Bots" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb30"> <custom-dropdown ng-model="subscription_plan.interval" array="[{name:\'Day\',value:\'day\'},{name:\'Week\',value:\'week\'},{name:\'Month\',value:\'month\'},{name:\'Year\',value:\'year\'}]" opt-value="value" opt-description="name" title="Period" placeholder="Period" is-back-placeholder="false"> </custom-dropdown> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="subscription_plans[$index].active" checked id="add_modal_plan_checker"> <label for="add_modal_plan_checker"> <span class="checker-ico"> </span> <span>{{main.translations.active}}</span> </label> </div> </div> <div style="position: absolute"> <button type="button" class="brn-btn brn-primary" ng-click="addPlan()" data-dismiss="modal"> {{main.translations.save_btn}} </button> </div> </div> </div> </div> </div> </div> </div> </div> <div ng-repeat="sp in subscription_plans track by $index"> <div id="editPlanModal{{sp.id}}" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap" style="min-height: 425px"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> Edit Plan </div> <div class="mb-title"> <div class="mb10"> <custom-input placeholder="Name" ng-model="subscription_plans[$index].name" title="Name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Description" ng-model="subscription_plans[$index].description" title="Description" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input ng-model="subscription_plans[$index].price" title="{{main.translations.store_price}}" isreadonly="true"> </custom-input> </div> <div class="mb30"> <custom-input placeholder="Bots" ng-model="subscription_plans[$index].properties.bots" title="Bots" is-back-placeholder="true"> </custom-input> </div> <div> <div class="card-checker"> <input type="checkbox" ng-model="subscription_plans[$index].active" checked id="edit_modal_plan_{{$index}}_checker"> <label for="edit_modal_plan_{{$index}}_checker"> <span class="checker-ico"> </span> <span>{{main.translations.active}}</span> </label> </div> </div> <div style="position: absolute"> <button type="button" class="brn-btn brn-primary" ng-click="editPlan(sp.id, $index)" data-dismiss="modal"> {{main.translations.save_btn}} </button> </div> </div> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/portals.html",'<div class="bots" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <div class="bots-wrapper"> <div class="container"> <div class="empty-nav-sidebar"></div> <div class="row margin-rest"> <div> <div class="bots-header"> <div> <h2>Manage domains <span ng-if="main.isAdmin" class="add-bot" ng-click="openModal()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </span> </h2> </div> </div> </div> </div> <div class="margin-rest mb60"> <div class="bots-list"> \x3c!-- <div class="bots-list-item" ng-click="openModal()">\n <div class="bots-list-item-wrapper">\n <div class="bots-list-item-img">
58\n <span>+</span>\n </div>\n <div class="bots-list-item-name">\n Attach domain\n </div>\n <div class="bots-list-item-url">\n <a href="">How to do that?</a>\n </div>\n </div>\n <form class="bots-list-item-wrapper settings"\n style="cursor: default;"\n ng-show="newDomain.opened"\n ng-submit="createDomain()">\n <div class="submit-btns">\n <button type="button"\n class="submit-close"\n ng-click="newDomain.opened = false"></button>\n <button type="submit"\n class="submit-ok"></button>\n </div>\n <div class="bots-list-item-img">\n <img ng-src={{portal.logo?(portal.logo):(\'images/tf.png\')}} style="width: 100px; height: 100px;" alt="bot img">\n </div>\n <div class="bots-list-item-settings">\n <div class="brn-form-group">\n <h5>Portal name</h5>\n <input type="text"\n ng-model="newDomain.name"\n placeholder="Portal name"\n required>\n </div>\n <div class="brn-form-group">\n <h5>Portal domain</h5>\n <input type="text"\n ng-model="newDomain.domain"\n placeholder="Portal domain"\n required>\n </div>\n <div class="brn-form-group">\n <h5>Portal url</h5>\n <input type="text"\n ng-model="newDomain.url"\n placeholder="Portal url"\n http-prefix\n required>\n </div>\n <div class="brn-form-group">\n <h5>Portal title</h5>\n <input type="text"\n ng-model="newDomain.title"\n placeholder="Portal title"\n required>\n </div>\n <div class="brn-form-group">\n <h5>Portal environment</h5>\n <select ng-model="newDomain.environment"\n ng-init="newDomain.environment = environments[0].value"\n ng-options="option.name as option.value for option in environments"></select>\n </div>\n </div>\n </form>\n </div> --\x3e \x3c!-- loader start --\x3e <div class="bots-list-item" ng-show="loader"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div>
58 \x3c!-- laoder end --\x3e <div class="bots-list-item" ng-repeat="portal in portals"> <div class="bots-list-item-wrapper"> <div class="top-container"> <div class="bots-list-item-img"> <img ng-src="{{portal.logo?(portal.logo):(\'images/tf.png\')}}" alt="bot img"> </div> <div class="bots-list-item-name"> {{portal.name}} </div> <div class="bots-list-item-url"> <a href="{{\'http://\' + portal.domain}}" target="_blank">{{portal.domain}}</a> </div> </div> <div class="wrapper-overley"> <div class="top-container"> <a href="{{\'http://\' + portal.domain}}" target="_blank"> <div class="bots-list-item-img"> <img ng-src="{{portal.logo?(portal.logo):(\'images/tf.png\')}}" alt="bot img"> </div> </a> <a href="{{\'http://\' + portal.domain}}" target="_blank"> <div class="bots-list-item-name"> {{portal.name}} </div> </a> <div class="bots-list-item-url"> <a href="{{\'http://\' + portal.domain}}" target="_blank">{{portal.domain}}</a> </div> </div> <div class="bots-list-bottom"> <span class="bots-list-bottom-buttons visability-btn" ui-sref="portal({id: portal.portal_id})"> <i class="material-icons" style="font-size: 22px">settings</i> </span> </div> </div> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/privacy.html",'<div ng-if="loaded"> <div ng-bind-html="page"></div> \x3c!-- <footer-registration translations="main.translations"\n is-registration-panel="false"\n is-contact-us-panel="true"\n is-home-page="false">\n </footer-registration> --\x3e </div>'),a.put("views/product-attribute-map-form-modal.html",'<div map-lazy-load="https://maps.google.com/maps/api/js" map-lazy-load-params="{{googleMapsUrl}}" style="width: 500px; height: 500px"> <ng-map zoom="10" style="height:450px" center="52.527236,13.396573" on-click="placeMarker()"> <marker position="{{marker.coordinates[1]}}, {{marker.coordinates[0]}}"></marker> </ng-map> <div> <button type="submit" class="brn-btn brn-primary" ng-click="close()">{{main.translations.addValue}}</button> </div> </div>'),a.put("views/product-create.html","<p>This is the product-create view.</p>"), 59a.put("views/product-detail.html",'<div class="container"> <div class="flex-row" style="margin-left:0px"> <div> <h2 class="mb35">Product Info</h2> <div class="mb40 settings-card-wrap big670"> <div class="flex-row"> <div ng-repeat="row in rows"> <div ng-repeat="(name, attr) in row" class="settings-card medium210 mr20" ng-class="{\'card-all\': attr.multiple && attr.selectable}"> <div ng-if="attr.selectable && attr.type != \'mixed\' && attr.type != \'location\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="product.attributes[name]" array="attr.values" opt-description="" opt-value="" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple && attr.type != \'mixed\'"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="product.attributes[name]" multiple theme="bootstrap" style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">{{$item}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div ng-bind-html="value | highlight: $select.search"></div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="attr.selectable && attr.type == \'location\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="product.attributes[name]" array="attr.values" opt-description="" opt-value="" is-location-object="true" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="product.attributes[name]" multiple theme="bootstrap" style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">Lat: {{$item.coordinates[1]}}, Lng: {{$item.coordinates[0]}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div>{{"Lat: "+value.coordinates[1]+", Lng: "+value.coordinates[0]}}</div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="attr.selectable && attr.type == \'mixed\'"> <div class="mb10" ng-if="!attr.multiple"> <custom-dropdown ng-model="product.attributes[name]" array="attr.values" opt-description="{{selectedCategory.attributes[name].schema.key}}" opt-value="" title="Select {{attr.label}}" is-model-init="true" placeholder="Select {{attr.label}}" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10" ng-if="attr.multiple && attr.type == \'mixed\'"> <span class="ui-select-label"> {{attr.label}} </span> <ui-select ng-model="product.attributes[name]" multiple style="padding-left: 20px; padding-right: 20px; border-radius: 3px; border: 1px solid #ebebeb; min-height: 45px"> <ui-select-match placeholder="Select {{attr.label}}">{{$item[selectedCategory.attributes[name].schema.key]}}</ui-select-match> <ui-select-choices repeat="value in attr.values | filter: $select.search"> <div ng-bind-html="value[selectedCategory.attributes[name].schema.key] | highlight: $select.search"></div> </ui-select-choices> </ui-select> </div> </div> <div ng-if="!attr.selectable"> <div class="mb10" ng-if="attr.multiple && attr.type != \'mixed\' && attr.type != \'image\'" style="cursor: pointer" ng-click="showSimpleMultipleModal(attr, product.attributes[attr.name])"> <div class="custom-input"> <span class="placeholder" ng-class="{\'placeholder-small\' : product.attributes[attr.name].length}"> {{attr.label}} </span> <span style="max-height: 40px; height: 40px; display: block; position: absolute; top: 20px; right: 0"> <i class="material-icons" style="position: relative; top: 5px">add</i> </span> <input ng-disabled="true" value="{{product.attributes[attr.name].join(\', \')}}"> <span class="bar"></span> </div> </div> <div class="mb10" ng-if="attr.type == \'mixed\'"> <span ng-click="showMixedForm(attr, product)" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">add</i> </span> </div> <div class="mb10" ng-if="attr.type == \'string\' && attr.mainAttrName && !attr.multiple"> <custom-input ng-model="product.attributes[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'string\' && !attr.mainAttrName && !attr.multiple"> <custom-input ng-model="product.attributes[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'number\' && attr.mainAttrName && !attr.multiple"> <custom-input ng-model="product.attributes[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" type-input="number" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attr.type == \'number\' && !attr.mainAttrName && !attr.multiple"> <custom-input ng-model="product.attributes[name]" placeholder="{{attr.label}}" title="{{attr.label}}" type-input="number" is-back-placeholder="true"> </custom-input> </div> <div ng-if="attr.type == \'boolean\' && attr.mainAttrName && !attr.multiple" class="mt20"> <div class="card-checker"> <input type="checkbox" ng-model="product.attributes[attr.mainAttrName][name]" id="model_bool_{{name}}"> <label for="model_bool_{{name}}"> <span class="checker-ico"></span> <span>{{attr.label}}</span> </label> </div> </div> <div ng-if="attr.type == \'boolean\' && !attr.mainAttrName && !attr.multiple" class="mt20"> <div class="card-checker"> <input type="checkbox" ng-model="product.attributes[name]" id="model_bool_{{name}}_no"> <label for="model_bool_{{name}}_no"> <span class="checker-ico"></span> <span>{{attr.label}}</span> </label> </div> </div> <div class="mb10" ng-if="attr.type==\'date\' && attr.mainAttrName && !attr.multiple"> <custom-date-range-single title="{{attr.label}}" ng-model="product.attributes[attr.mainAttrName][name]"> </custom-date-range-single> </div> <div class="mb10" ng-if="attr.type==\'date\' && !attr.mainAttrName && !attr.multiple"> <custom-date-range-single title="{{attr.label}}" ng-model="product.attributes[name]"> </custom-date-range-single> </div> <div ng-if="attr.type==\'file\' && attr.mainAttrName && !attr.multiple"> <div class="mb10"> <custom-input ng-model="product.attributes[attr.mainAttrName][name]" ng-disabled="uploaders[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[attr.mainAttrName][name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name, attr.mainAttrName)" ng-disabled="uploaders[attr.mainAttrName][name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[attr.mainAttrName][name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'file\' && !attr.mainAttrName && !attr.multiple"> <div class="mb10"> <custom-input ng-model="product.attributes[name]" ng-disabled="uploaders[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="uploaders[name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'image\' && !attr.mainAttrName && !attr.multiple"> <div class="mb10"> <custom-input ng-model="product.attributes[name]" ng-disabled="uploaders[name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name)" ng-disabled="uploaders[name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-if="attr.type==\'image\' && attr.mainAttrName"> <div class="mb10"> <custom-input ng-model="product.attributes[attr.mainAttrName][name]" ng-disabled="uploaders[attr.mainAttrName][name]" placeholder="{{attr.label}}" title="{{attr.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name, attr.mainAttrName)" ng-disabled="uploaders[attr.mainAttrName][name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div class="mb10" ng-if="attr.type==\'color\' && attr.mainAttrName && !attr.multiple"> <custom-colorpicker ng-model="product.attributes[attr.mainAttrName][attr.name]" title="{{attr.label}}"> </custom-colorpicker> </div> <div class="mb10" ng-if="attr.type==\'color\' && !attr.mainAttrName && !attr.multiple"> <custom-colorpicker ng-model="product.attributes[attr.name]" title="{{attr.label}}"> </custom-colorpicker> </div> <div class="mb10" ng-if="attr.type==\'location\' && !attr.mainAttrName && !attr.multiple"> <span ng-click="showMapForm(attr, product.attributes[attr.name])" style="max-height: 40px; height: 40px; display: block; padding-top: 15px"> <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px">map</i> </span> </div> </div> </div> </div> </div> </div> <div> <button ng-click="updateProduct()" class="brn-btn brn-primary">
59Update Product</button> </div> </div> <div class="settings-card-wrap" style="flex-basis: auto" ng-if="multipleImages.length"> <div class="settings-card mb25" style="max-width: max-content" ng-repeat="attr in multipleImages"> <h2 class="mb60"> {{attr.label}} </h2> <div class="catalog-screenshot-container mb60"> <div class="catalog-screenshot settings" ng-repeat="img in product.attributes[attr.name]"> <div class="delete-container"> <img src="{{img}}" alt=""> <div class="delete-hover" ng-click="deleteImage(img, attr.name)"> <div class="icon-container"> <i class="material-icons icon">remove_circle</i> <span class="text"> Remove photo </span> </div> </div> </div> </div> <div ng-if="attr.type==\'image\' && !attr.mainAttrName && attr.multiple" class="catalog-screenshot" ng-show="!uploaders[attr.name]" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFiles($file, \'image\', attr.name)"> <div class="add-item" style="width: 150px"> <div class="icon-container"> <i class="material-icons icon">add_circle</i> <span class="text"> Add photo </span> </div> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/profile-companies.html",'<div class="profile-container" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <section class="search-section"> <div class="container"> <div class="row--flex"> <div class="links"></div> <div class="search"> <custom-input placeholder="Search" ng-model="filters[\'merchant_name\'].value" ng-change="filterCompanies(\'merchant_name\')" title="Search" is-back-placeholder="true"> </custom-input> </div> </div> </div> </section> <section class="members-content"> <div class="container"> <div class="members-container" ng-if="companies.length"> <a ng-repeat="company in companies" ui-sref="profile-company({ id: company.merchant_id })" class="member-card--wide"> \x3c!-- avatar --\x3e <div class="member-card_avatar" style="background-image: url({{company.profile.logo}})"> <div class="member-card_avatar member-card_avatar--company" ng-if="!company.profile.logo"></div> </div> <span class="medal" ng-if="company.profile.status"> <img src="../images/ic-medal-bronze.svg" alt="medal" ng-if="company.profile.status === \'Silver\'"> <img src="../images/ic-medal-silver.svg" alt="medal" ng-if="company.profile.status === \'Gold\'"> <img src="../images/ic-medal-gold.svg" alt="medal" ng-if="company.profile.status === \'Platinum\'"> </span> <span class="tip"> {{ company.profile.status }} Member </span> \x3c!-- text --\x3e <div class="member-card--text"> <div class="text--row"> <h3 class="member-card_name"> {{ company.profile.name }} </h3> <p class="member-card_description"> Company </p> </div> \x3c!-- about row --\x3e <div class="text--row text--row-info" ng-if="company.profile.description"> <i class="material-icons"> info </i> <p class="member-card_description">{{ company.profile.description }}</p> </div> \x3c!-- row company profit --\x3e <div class="text--row text--row-info" ng-if="\n company.profile.profit.amount_to_raise ||\n company.profile.profit.customer_growth ||\n company.profile.profit.return_on_investments ||\n company.profile.profit.return_on_sales\n "> <i class="material-icons"> settings_input_svideo </i> <p class="member-card_description"> \x3c!-- amount_to_raise --\x3e <span ng-if="company.profile.profit.amount_to_raise"> Amount to raise: {{ company.profile.profit.amount_to_raise }}, </span> \x3c!-- customer_growth --\x3e <span ng-if="company.profile.profit.customer_growth"> Customer growth: {{ company.profile.profit.customer_growth }}, </span> \x3c!-- return_on_investments --\x3e <span ng-if="company.profile.profit.return_on_investments"> Return on investments: {{ company.profile.profit.customer_growth }}, </span> \x3c!-- return_on_sales --\x3e <span ng-if="company.profile.profit.customer_growth"> Return on sales: {{ company.profile.profit.return_on_sales }} </span> </p> </div> </div> </a> <div ng-if="inProgress" class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> <img src="../images/img-nf-ind.png" alt="no-result" class="no-result" ng-if="(!companies || !companies.length) && !loading"> </div> </div> </section> </div>'),a.put("views/profile-members.html",'<div class="profile-container" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <section class="search-section"> <div class="container"> <div class="row--flex"> <div class="links"> <custom-dropdown ng-model="filters[\'type\'].value" array="typesList" opt-description="" opt-value="" title="Type" ng-change="filterMembers(\'type\')" is-model-init="true" placeholder="All" is-back-placeholder="true"> </custom-dropdown> </div> <div class="search"> <custom-input placeholder="Search" ng-model="filters[\'customer_name\'].value" ng-change="filterMembers(\'customer_name\')" title="Search" is-back-placeholder="true"> </custom-input> </div> </div> </div> </section> <section class="members-content"> <div class="container"> <div class="members-container" ng-if="members.length"> <div ng-repeat="member in members" class="member-card--wide" ui-sref="profile-employee({ id: member.customer_id })"> \x3c!-- avatar --\x3e <div class="member-card_avatar" style="background-image: url({{member.profile.avatar}})"> <div class="member-card_avatar member-card_avatar--member" ng-if="!member.profile.avatar"></div> </div> \x3c!-- text --\x3e <div class="member-card--text"> \x3c!-- row name --\x3e <div class="text--row"> <h3 class="member-card_name" ng-if="member.profile.firstname.trim().length || member.profile.lastname.trim().length"> {{ member.profile.firstname }} {{ member.profile.lastname }} </h3> <h3 class="member-card_name" ng-if="!member.profile.firstname.trim().length && !member.profile.lastname.trim().length"> {{ member.profile.email.split("@")[0] }} </h3> <p class="member-card_description"> {{ member.profile.type == "management" ? "manager" : member.profile.type }} </p> </div> \x3c!-- row time horizon --\x3e \x3c!-- row --\x3e <div class="text--row text--row-info" ng-if="member.profile.horizon_for_invest"> <i class="material-icons"> settings_input_svideo </i> <p class="member-card_description"> Time Horizon: {{ member.profile.horizon_for_invest }} months </p> </div> \x3c!-- row companies --\x3e <div class="text--row text--row-info" ng-if="member.profile.companies && member.profile.companies.length"> <i class="material-icons"> group_work </i> <p class="member-card_description"> <span ng-repeat="company in member.profile.companies.slice(0, 5)"> {{ company.name }} <span ng-if="$index < 4 && $index < member.profile.companies.length - 1">, </span> </span> </p> </div> \x3c!-- row expertise --\x3e <div class="text--row text--row-info" ng-if="member.profile.expertise && member.profile.expertise.length"> <i class="material-icons"> settings_input_svideo </i> <p class="member-card_description"> <span ng-repeat="expertise in member.profile.expertise.slice(0, 5)"> {{ expertise.skill }}: {{ expertise.years }}Y <span ng-if="$index < 4 && $index < member.profile.expertise.length - 1">, </span> </span> </p> </div> \x3c!-- about row --\x3e <div class="text--row text--row-info" ng-if="member.profile.about"> <i class="material-icons"> info </i> <p class="member-card_description">{{ member.profile.about }}</p> </div> </div> \x3c!-- contact button --\x3e <a ng-if="member.profile.email" href="mailto:{{member.profile.email}}" class="button button-flat" ng-click="\n $event.stopPropagation()\n "> Message </a> </div> <div ng-if="inProgress" class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> <img src="../images/img-nf-mem.png" alt="no-result" class="no-result" ng-if="(!members || !members.length) && !loading"> </div> </div> </section> </div>'),a.put("views/profile/company-modal.html",'<div class="flex-row create-bot flex-row-start"> <div class="create-bot-wrap"> \x3c!-- <div class="bots-list-item-name">\n <i\n class="material-icons close-icon "\n style="margin-left: -30px; margin-right: 4px;top: 5px; font-size: 21px;"\n ng-click="close()"\n >\n close\n </i>\n \n </div> --\x3e <div class="row"> <h2>Edit Profile</h2> <div class="profile-modal__avatar" ngf-select="uploadImg($file)" ng-style="{\'background-image\': \'url(\' + companyProfile.logo + \')\'}"></div> <form> <custom-input placeholder="Title" ng-model="companyProfile.name" title="Title" is-back-placeholder="true"> </custom-input> <custom-input placeholder="About" ng-model="companyProfile.description" title="About" is-back-placeholder="true" type-input="textarea"> </custom-input> <br> <br> <br> <h2>Location</h2> <br> <custom-input placeholder="Address" ng-model="companyProfile.location.title" title="Address" is-back-placeholder="true"> </custom-input> <br> <br> <br> <h2>Profit</h2> <br> <custom-input placeholder="Customer Growth" ng-model="companyProfile.profit.customer_growth" title="Customer growth" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Return on sales" ng-model="companyProfile.profit.return_on_sales" title="Return on sales" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Return on investments" ng-model="companyProfile.profit.return_on_investments" title="Return on investments" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Amount to raise" ng-model="companyProfile.profit.amount_to_raise" title="Amount to raise" is-back-placeholder="true"> </custom-input> <br> <br> <br> <h2>Attachments</h2> <br> <custom-input ng-model="companyProfile.prospectus" placeholder="Prospect" title="Prospect" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'file\', \'prospectus\')"> image </i> </custom-input> <custom-input ng-model="companyProfile.factsheets" placeholder="Factsheets" title="Factsheets" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'file\', \'factsheets\')"> image </i> </custom-input> <custom-input ng-model="companyProfile.introduction.url" placeholder="Presentation" title="Presentation" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'file\', \'introduction\')"> image </i> </custom-input> <br> <br> <br> <h2>Team</h2> <br> <custom-dropdown ng-model="selectedUser.value" array="usersList" opt-description="fullname" opt-value="id" title="Select user" is-back-placeholder="true" placeholder="Select user" ng-change="addUserToCompany()"> </custom-dropdown> <div> <button ng-click="updateCompanyProfile(true)" type="submit" class="brn-btn brn-primary"> Save </button> </div> </form> </div> </div> </div>'),a.put("views/profile/company.html",'<link rel="stylesheet" type="text/css" href="styles/profile/main.css"> <link rel="stylesheet" type="text/css" href="styles/profile/fix.css"> \x3c!-- bg image --\x3e <img class="details-header__bg" src="img/home_new/logo_bg_1.svg" alt="-"> <div class="details-header" ng-if="isLoaded"> <div class="container"> <div class="row--flex"> <div class="details-header_logo"> <div class="logo-bg" ng-style="{\'background-image\': \'url(\' + companyProfile.logo + \')\'}"></div> </div> <div class="details-header_info"> <h3 class="details-header_info-title"> {{ companyProfile.name }} </h3> <p class="details-header_info-category"> Company </p> <p class="details-header_info-description"> {{ companyProfile.description }} </p> <div class="details-header_info-extra"> <div class="extra_item" ng-if="companyProfile.location.title"> <span>{{ companyProfile.location.title }}</span> </div> <div class="extra_item" ng-if="companyProfile.profit.amount_to_raise"> <span>{{ companyProfile.profit.amount_to_raise }} Amount to raise</span> </div> <div class="extra_item" ng-if="companyProfile.profit.customer_growth"> <span>{{ companyProfile.profit.customer_growth }} Customer growth</span> </div> <div class="extra_item" ng-if="companyProfile.profit.return_on_investments"> <span>{{ companyProfile.profit.return_on_investments }} Return on investments</span> </div> <div class="extra_item" ng-if="companyProfile.profit.return_on_sales"> <span>{{ companyProfile.profit.return_on_sales }} Return on sales</span> </div> </div> </div> <div class="details-header_controls" ng-if="isProfileEditable"> <a class="button button-flat button-circle" ng-click="openModal()"> <span> <i class="material-icons"> edit </i> </span> </a> </div> </div> </div> </div> <div class="details-body" ng-if="isLoaded"> <div class="container"> <div class="row--flex"> <div class="col-main"> <div class="details-section" ng-if="companyProfile.members.length"> \x3c!-- New table view --\x3e <div class="members-table"> <div class="members-table__row-head"> <div class="members-table__head-cell"> User </div> <div class="members-table__head-cell"> Role </div> </div> <div class="members-table__row" ng-repeat="member in companyProfile.members"> <a class="members-table__row-avatar" ng-style="{\'background-image\': \'url(\' + member.avatar + \')\'}"></a>
59 <a class="members-table__row-user-detail" ui-sref="profile-employee({ id: member.id })"> <h3>{{ member.firstname }} {{ member.lastname }}</h3> </a> <div class="members-table__row-role"> {{ member.type }} </div> <div class="members-table__remove" ng-if="isProfileEditable"> <i class="material-icons" ng-click="removeUserFromCompany(member.id)"> close </i> </div> </div> </div> </div> </div> <div class="col-side"> <div class="col-inner--transition"> <div class="col-side_card col-side_card-float" ng-if="\n companyProfile.factsheets ||\n companyProfile.prospectus ||\n companyProfile.introduction.url\n "> <div class="card-section card-section--downloads"> <h5 class="card-section_title">Downloads</h5> <a href="{{ companyProfile.prospectus }}" target="_blank" class="card-section_item card-section_attachment" download ng-if="companyProfile.prospectus"> <div class="item-icon"> <i class="material-icons"> save </i> </div> <div class="item-body"> <h5>Prospect</h5> </div> </a> <a href="{{ companyProfile.factsheets }}" target="_blank" class="card-section_item card-section_attachment" download ng-if="companyProfile.factsheets"> <div class="item-icon"> <i class="material-icons"> save </i> </div> <div class="item-body"> <h5>Factsheets</h5> </div> </a> <a href="{{ companyProfile.introduction.url }}" target="_blank" class="card-section_item card-section_attachment" download ng-if="companyProfile.introduction.url"> <div class="item-icon"> <i class="material-icons"> save </i> </div> <div class="item-body"> <h5>Presentation</h5> </div> </a> </div> </div> </div> </div> </div> </div> </div>'), 60a.put("views/profile/employee.html",'<link rel="stylesheet" type="text/css" href="styles/profile/main.css"> <link rel="stylesheet" type="text/css" href="styles/profile/fix.css"> \x3c!-- bg image --\x3e <img class="details-header__bg" src="img/home_new/logo_bg_1.svg" alt="-"> <div class="details-header" ng-if="isLoaded"> <div class="container"> <div class="row--flex"> <div class="details-header_logo"> <div class="logo-bg" ng-style="{\'background-image\': \'url(\' + userProfile.avatar + \')\'}"></div> </div> <div class="details-header_info"> <h3 class="details-header_info-title"> {{ userProfile.firstname }} {{ userProfile.lastname }} </h3> <p class="details-header_info-category"> {{userProfile.type}} <b ng-if="userProfile.location.country"> from {{ userProfile.location.country }}, <i ng-if="userProfile.location.city"> {{ userProfile.location.city }} </i> </b> </p> <p class="details-header_info-description"> {{ userProfile.about }} </p> <div class="details-header_info-extra"> <div class="extra_item" ng-repeat="expertise in userProfile.expertise.slice(0, 5)"> <span>{{ expertise.skill }}: {{ expertise.years }}Y</span> </div> </div> </div> <div class="details-header_controls" ng-if="!isProfileEditable"> <a class="button button-flat"> <span>Contact now</span> </a> </div> <div class="details-header_controls" ng-if="isProfileEditable"> <a class="button button-flat button-circle" ng-click="openModal()"> <span> <i class="material-icons"> edit </i> </span> </a> </div> </div> </div> </div> <div class="details-body" ng-if="isLoaded"> <div class="container"> <div class="row--flex"> \x3c!-- COL-MAIN --\x3e <div class="col-main"> \x3c!-- Education --\x3e <profile-education></profile-education> \x3c!-- Experiance --\x3e <profile-experience></profile-experience> \x3c!-- Expertise --\x3e <profile-expertise></profile-expertise> \x3c!-- Experiments --\x3e <profile-experiments></profile-experiments> \x3c!-- Extras --\x3e <profile-extras></profile-extras> \x3c!-- <div\n class="details-section"\n ng-if="userProfile.activities.length || isOwner"\n >\n <h5 class="details-section_title">\n Extras\n </h5>\n\n <div\n class="details-section_item-wrapper"\n ng-repeat="activity in userProfile.activities"\n >\n <div class="details-section_item">\n <div class="item-icon">\n <i class="material-icons">\n pages\n </i>\n </div>\n <div class="item-body">\n <h5>{{ activity.activity }}</h5>\n <p>{{ activity.started }}-{{ activity.ended }}</p>\n </div>\n </div>\n </div>\n </div> --\x3e </div> \x3c!-- COL-SIDE --\x3e <div class="col-side"> <div class="col-inner--transition" ng-if="isLoaded"> <div class="col-side_card col-side_card-float" ng-if="userProfile.companies.length"> \x3c!-- Developer Companies --\x3e <div class="card-section" ng-if="userProfile.companies.length"> <h5 class="card-section_title"> <span style="text-transform: capitalize">{{userProfile.type}}
60 </span> in Company </h5> <a class="card-section_item" ng-repeat="company in userProfile.companies" ui-sref="profile-company({ id: company.id })"> <div class="item-icon item-icon--image"> <span class="img-round" ng-style="{\'background-image\': \'url(\' + company.logo + \')\'}"></span> </div> <div class="item-body"> <h5>{{ company.name }}</h5> </div> </a> </div> </div> \x3c!-- languages --\x3e <div class="col-side_card col-side_card-float" ng-if="userProfile.languages.length"> <div class="card-section" ng-if="userProfile.languages.length"> <h5 class="card-section_title">Languages</h5> \x3c!-- Language item --\x3e <div ng-repeat="\n language in userProfile.languages\n "> <a class="card-section_item"> <div class="item-icon"> <i class="material-icons"> language </i> </div> <div class="item-body"> <h5>{{ language.name }}</h5> <p>{{ getLanguaugeLevel(language) }}</p> </div> </a> </div> </div> </div> <div class="col-side_card col-side_card-float col-side_card-flat" ng-if="checkContacts(userProfile.contacts)"> <div class="card-section"> <h5 class="card-section_title">Contacts</h5> \x3c!-- Contacts --\x3e \x3c!-- Skype --\x3e <a class="card-section_item" ng-if="userProfile.contacts.skype"> <div class="item-icon"> <i class="material-icons"> contacts </i> </div> <div class="item-body"> <h5>{{ userProfile.contacts.skype }}</h5> <p>Skype</p> </div> </a> \x3c!-- Email --\x3e <a class="card-section_item" ng-if="userProfile.contacts.email"> <div class="item-icon"> <i class="material-icons"> contacts </i> </div> <div class="item-body"> <h5>{{ userProfile.contacts.email }}</h5> <p>Email</p> </div> </a> \x3c!-- Phone --\x3e <a class="card-section_item" ng-if="userProfile.contacts.phone"> <div class="item-icon"> <i class="material-icons"> contacts </i> </div> <div class="item-body"> <h5>{{ userProfile.contacts.phone }}</h5> <p>Phone</p> </div> </a> \x3c!-- Telegram --\x3e <a class="card-section_item" ng-if="userProfile.contacts.telegram"> <div class="item-icon"> <i class="material-icons"> contacts </i> </div> <div class="item-body"> <h5>{{ userProfile.contacts.telegram }}</h5> <p>Telegram</p> </div> </a> \x3c!-- url --\x3e <a class="card-section_item" ng-if="userProfile.contacts.url"> <div class="item-icon"> <i class="material-icons"> contacts </i> </div> <div class="item-body"> <h5>{{ userProfile.contacts.url }}</h5> <p>Url</p> </div> </a> \x3c!-- viber --\x3e <a class="card-section_item" ng-if="userProfile.contacts.viber"> <div class="item-icon"> <i class="material-icons"> contacts </i> </div> <div class="item-body"> <h5>{{ userProfile.contacts.viber }}</h5> <p>Viber</p> </div> </a> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/profile/profile-education.html",'<div class="details-section"> <h5 class="details-section_title"> <div class="add-profile-info-button" ng-click="openEditForm(999)"> <i class="material-icons" ng-if="isProfileEditable"> add </i> </div> Education </h5> \x3c!-- Add form --\x3e <div class="details-section_add-form" ng-if="isEditing(999)"> <form> <custom-input placeholder="University" ng-model="newEducation.university" title="University" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="Degree" ng-model="newEducation.degree" title="Degree" is-back-placeholder="true" is-required="true"> </custom-input> <div class="input--half-wrapper"> <custom-input placeholder="From" ng-model="newEducation.started" title="From" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="To" ng-model="newEducation.ended" title="To" is-back-placeholder="true" is-required="true"> </custom-input> </div> <div class="details-section_add-form_controls"> <button ng-click="addItem()" type="submit" class="button button-flat button-red"> Save </button> <button type="button" class="button button-flat" ng-click="addItemCancel()"> Cancel </button> </div> </form> </div> <div class="details-section_item-wrapper" ng-repeat="education in userProfile.education"> <div class="details-section_item" ng-class="{editible: isProfileEditable}"> <div class="item-icon"> <i class="material-icons"> school </i> <i class="material-icons edit-icon" ng-click="openEditForm($index)"> edit </i> </div> <div class="item-body"> <h5>{{ education.university }}, {{ education.degree }}</h5> <p>{{ education.started }}-{{ education.ended }}</p> </div> </div>
60 \x3c!-- Edit form --\x3e <div class="details-section_add-form" ng-if="isEditing($index)"> <form> <custom-input placeholder="University" ng-model="education.university" title="University" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="Degree" ng-model="education.degree" title="Degree" is-back-placeholder="true" is-required="true"> </custom-input> <div class="input--half-wrapper"> <custom-input placeholder="From" ng-model="education.started" title="From" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="To" ng-model="education.ended" title="To" is-back-placeholder="true" is-required="true"> </custom-input> </div> <div class="details-section_add-form_controls"> <button ng-click="updateItem()" type="submit" class="button button-flat button-red"> Save </button> <button type="button" ng-click="removeItem($index)" class="button button-flat"> Delete </button> </div> </form> </div> </div> </div>'),a.put("views/profile/profile-experience.html",'<div class="details-section"> <h5 class="details-section_title"> <div class="add-profile-info-button" ng-click="openEditForm(999)"> <i class="material-icons"> add </i> </div> Experience </h5> \x3c!-- Add form --\x3e <div class="details-section_add-form" ng-if="isEditing(999)"> <form> <custom-input placeholder="Company" ng-model="newExperience.company" title="Company" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="Position" ng-model="newExperience.position" title="Position" is-back-placeholder="true" is-required="true"> </custom-input> <div class="input--half-wrapper"> <custom-input placeholder="From" ng-model="newExperience.started" title="From" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="To" ng-model="newExperience.ended" title="To" is-back-placeholder="true" is-required="true"> </custom-input> </div> <div class="details-section_add-form_controls"> <button ng-click="addItem()" type="submit" class="button button-flat button-red"> Save </button> <button type="button" class="button button-flat" ng-click="addItemCancel()"> Cancel </button> </div> </form> </div> <div class="details-section_item-wrapper" ng-repeat="experience in userProfile.experience"> <div class="details-section_item" ng-class="{editible: isProfileEditable}"> <div class="item-icon"> <i class="material-icons"> work </i> <i class="material-icons edit-icon" ng-click="openEditForm($index)"> edit </i> </div> <div class="item-body"> <h5>{{ experience.company }}, {{ experience.position }}</h5> <p>{{ experience.started }}-{{ experience.ended }}</p> </div> </div> \x3c!-- Edit form --\x3e <div class="details-section_add-form" ng-if="isEditing($index)"> <form> <custom-input placeholder="Company" ng-model="experience.company" title="Company" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="Position" ng-model="experience.position" title="Position" is-back-placeholder="true" is-required="true"> </custom-input> <div class="input--half-wrapper"> <custom-input placeholder="From" ng-model="experience.started" title="From" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="To" ng-model="experience.ended" title="To" is-back-placeholder="true" is-required="true"> </custom-input> </div> <div class="details-section_add-form_controls"> <button ng-click="updateItem()" type="submit" class="button button-flat button-red"> Save </button> <button type="button" ng-click="removeItem($index)" class="button button-flat"> Delete </button> </div> </form> </div> </div> </div>'),a.put("views/profile/profile-experiments.html",'<div class="details-section"> <h5 class="details-section_title"> <div class="add-profile-info-button" ng-click="openEditForm(999)"> <i class="material-icons"> add </i> </div> Experiments </h5> \x3c!-- Add form --\x3e <div class="details-section_add-form" ng-if="isEditing(999)"> <form> <custom-input placeholder="Experiment" ng-model="newExperiment.title" title="Experiment" is-back-placeholder="true" is-required="true"> </custom-input> <div class="input--half-wrapper"> <custom-input placeholder="From" ng-model="newExperiment.started" title="From" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="To" ng-model="newExperiment.ended" title="To" is-back-placeholder="true" is-required="true"> </custom-input> </div> <div class="details-section_add-form_controls"> <button ng-click="addItem()" type="submit" class="button button-flat button-red"> Save </button> <button type="button" class="button button-flat" ng-click="addItemCancel()"> Cancel </button> </div> </form> </div> <div class="details-section_item-wrapper" ng-repeat="experiment in userProfile.experiments"> <div class="details-section_item" ng-class="{editible: isProfileEditable}"> <div class="item-icon"> <i class="material-icons"> school </i> <i class="material-icons edit-icon" ng-click="openEditForm($index)"> edit </i> </div> <div class="item-body"> <h5>{{ experiment.title }}</h5> <p>{{ experiment.started }}-{{ experiment.ended }}</p> </div> </div>
60 \x3c!-- Edit form --\x3e <div class="details-section_add-form" ng-if="isEditing($index)"> <form> <custom-input placeholder="Experiment" ng-model="experiment.title" title="Experiment" is-back-placeholder="true" is-required="true"> </custom-input> <div class="input--half-wrapper"> <custom-input placeholder="From" ng-model="experiment.started" title="From" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="To" ng-model="experiment.ended" title="To" is-back-placeholder="true" is-required="true"> </custom-input> </div> <div class="details-section_add-form_controls"> <button ng-click="updateItem()" type="submit" class="button button-flat button-red"> Save </button> <button type="button" ng-click="removeItem($index)" class="button button-flat"> Delete </button> </div> </form> </div> </div> </div>'),a.put("views/profile/profile-expertise.html",'<div class="details-section"> <h5 class="details-section_title"> <div class="add-profile-info-button" ng-click="openEditForm(999)"> <i class="material-icons"> add </i> </div> Expertise </h5> \x3c!-- Add form --\x3e <div class="details-section_add-form" ng-if="isEditing(999)"> <form> <custom-input placeholder="Skill" ng-model="newExpertise.skill" title="Skill" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="Years" ng-model="newExpertise.years" title="Years" type-input="number" is-back-placeholder="true" is-required="true"> </custom-input> <custom-dropdown ng-model="newExpertise.level" array="levels" title="Level" is-model-init="false" placeholder="Level" type-input="number" is-back-placeholder="true"> </custom-dropdown> <div class="details-section_add-form_controls"> <button ng-click="addItem()" type="submit" class="button button-flat button-red"> Save </button> <button type="button" class="button button-flat" ng-click="addItemCancel()"> Cancel </button> </div> </form> </div> <div class="details-section_item-wrapper" ng-repeat="expertise in userProfile.expertise"> <div class="details-section_item"> <div class="details-section_item" ng-class="{editible: isProfileEditable}"> <div class="item-icon"> <span>{{ expertise.years }}Y</span> <i class="material-icons edit-icon" ng-click="openEditForm($index)"> edit </i> </div> <div class="item-body item-body--rating"> <h5>{{ expertise.skill }}</h5> <ul class="rating"> <li ng-class="{rating: expertise.level >= 1}"></li> <li ng-class="{rating: expertise.level >= 2}"></li> <li ng-class="{rating: expertise.level >= 3}"></li> <li ng-class="{rating: expertise.level >= 4}"></li> <li ng-class="{rating: expertise.level >= 5}"></li> <li ng-class="{rating: expertise.level >= 6}"></li> <li ng-class="{rating: expertise.level >= 7}"></li> </ul> </div> </div> </div> \x3c!-- Edit form --\x3e <div class="details-section_add-form" ng-if="isEditing($index)"> <form> <custom-input placeholder="Skill" ng-model="expertise.skill" title="Skill" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="Years" ng-model="expertise.years" title="Years" type-input="number" is-back-placeholder="true" is-required="true"> </custom-input> <custom-dropdown ng-model="expertise.level" array="levels" title="Level" is-model-init="true" placeholder="Level" type-input="number" is-back-placeholder="true"> </custom-dropdown> <div class="details-section_add-form_controls"> <button ng-click="updateItem()" type="submit" class="button button-flat button-red"> Save </button> <button type="button" ng-click="removeItem($index)" class="button button-flat"> Delete </button> </div> </form> </div> </div> </div>'),a.put("views/profile/profile-extras.html",'<div class="details-section"> <h5 class="details-section_title"> <div class="add-profile-info-button" ng-click="openEditForm(999)"> <i class="material-icons"> add </i> </div> Extras </h5> \x3c!-- Add form --\x3e <div class="details-section_add-form" ng-if="isEditing(999)"> <form> <custom-input placeholder="Activity" ng-model="newExtra.activity" title="Activity" is-back-placeholder="true" is-required="true"> </custom-input> <div class="input--half-wrapper"> <custom-input placeholder="From" ng-model="newExtra.started" title="From" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="To" ng-model="newExtra.ended" title="To" is-back-placeholder="true" is-required="true"> </custom-input> </div> <div class="details-section_add-form_controls"> <button ng-click="addItem()" type="submit" class="button button-flat button-red"> Save </button> <button type="button" class="button button-flat" ng-click="addItemCancel()"> Cancel </button> </div> </form> </div> <div class="details-section_item-wrapper" ng-repeat="activity in userProfile.activities"> <div class="details-section_item" ng-class="{editible: isProfileEditable}"> <div class="item-icon"> <i class="material-icons"> school </i> <i class="material-icons edit-icon" ng-click="openEditForm($index)"> edit </i> </div> <div class="item-body"> <h5>{{ activity.activity }}</h5> <p>{{ activity.started }}-{{ activity.ended }}</p> </div> </div>
60 \x3c!-- Edit form --\x3e <div class="details-section_add-form" ng-if="isEditing($index)"> <form> <custom-input placeholder="Activity" ng-model="activity.activity" title="Activity" is-back-placeholder="true" is-required="true"> </custom-input> <div class="input--half-wrapper"> <custom-input placeholder="From" ng-model="activity.started" title="From" is-back-placeholder="true" is-required="true"> </custom-input> <custom-input placeholder="To" ng-model="activity.ended" title="To" is-back-placeholder="true" is-required="true"> </custom-input> </div> <div class="details-section_add-form_controls"> <button ng-click="updateItem()" type="submit" class="button button-flat button-red"> Save </button> <button type="button" ng-click="removeItem($index)" class="button button-flat"> Delete </button> </div> </form> </div> </div> </div>'),a.put("views/profile/profile-modal.html",'<div class="flex-row create-bot flex-row-start"> <div class="create-bot-wrap"> \x3c!-- <div class="bots-list-item-name">\n <i\n class="material-icons close-icon "\n style="margin-left: -30px; margin-right: 4px;top: 5px; font-size: 21px;"\n ng-click="close()"\n >\n close\n </i>\n\n </div> --\x3e <div class="row"> <h2>Edit Profile</h2> <div class="profile-modal__avatar" ngf-select="uploadImg($file)" ng-style="{\'background-image\': \'url(\' + userProfile.avatar + \')\'}"></div> <form> <custom-input placeholder="First Name" ng-model="userProfile.firstname" title="First name" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Last Name" ng-model="userProfile.lastname" title="Last name" is-back-placeholder="true"> </custom-input> <custom-input placeholder="About" ng-model="userProfile.about" title="About" is-back-placeholder="true" type-input="textarea"> </custom-input> <custom-input placeholder="Experience (Years)" ng-model="userProfile.experience_years" title="Experience" is-back-placeholder="true" type-input="number"> </custom-input> <br> <br> <br> <h2>Location</h2> <br> <custom-input placeholder="Country" ng-model="userProfile.location.country" title="Country" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Region" ng-model="userProfile.location.region" title="Region" is-back-placeholder="true"> </custom-input> <custom-input placeholder="City" ng-model="userProfile.location.city" title="City" is-back-placeholder="true"> </custom-input> <br> <br> <br> <h2>Contacts</h2> <br> <custom-input placeholder="Phone" ng-model="userProfile.contacts.phone" title="Phone" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Viber" ng-model="userProfile.contacts.viber" title="Viber" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Telegram" ng-model="userProfile.contacts.telegram" title="Telegram" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Skype" ng-model="userProfile.contacts.skype" title="Skype" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Url" ng-model="userProfile.contacts.url" title="Url" is-back-placeholder="true"> </custom-input> <br><br> <div> <button ng-click="updateUserProfile()" type="submit" class="brn-btn brn-primary"> Save </button> </div> </form> \x3c!-- <form class="simple-attribute-form" ng-submit="fillAttribute()">\n <div class="col-md-6">\n <div class="mb10">\n <custom-input ng-if="simpleAttribute.type == \'string\'" ng-model="$parent.simpleAttr" placeholder="{{simpleAttribute.label}}" title="{{simpleAttribute.label}}" is-back-placeholder="true">\n </custom-input>\n <custom-input ng-if="simpleAttribute.type == \'number\'" ng-model="$parent.simpleAttr" placeholder="{{simpleAttribute.label}}" title="{{simpleAttribute.label}}" is-back-placeholder="true" type-input="number">\n </custom-input>\n <custom-date-range-single ng-if="simpleAttribute.type==\'date\'" title="{{simpleAttribute.label}}" ng-model="$parent.simpleAttr">\n </custom-date-range-single>\n <custom-colorpicker ng-if="simpleAttribute.type==\'color\'" ng-model="$parent.simpleAttr" title="{{simpleAttribute.label}}">\n </custom-colorpicker>
60\n <span ng-if="simpleAttribute.type==\'location\'" ng-click="showMapForm(simpleAttribute, $parent.simpleAttr)" style="max-height: 40px; height: 40px; display: block; padding-top: 15px;">\n <span>{{attr.label}}</span> <i class="material-icons" style="position: relative; top: 5px;">map</i>\n </span>\n </div>\n <div>\n <span ng-click="addMultipleValue()">Add value <i class="material-icons" style="position: relative; top: 5px;">add</i> </span>\n </div>\n </div>\n <div class="col-md-6">\n <span ng-repeat="value in simpleValues track by $index" ng-click="deleteValue($index)" class="simple-value">\n <span ng-if="$index != 0">, </span>{{value}}\n </span>\n </div>\n <div class="col-md-12">\n <button type="submit" class="brn-btn brn-primary">Save</button>\n </div>\n </form> --\x3e </div> </div> </div>'),a.put("views/provider.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{isCreated? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">{{$resolve.translations.widget}}</h2> </div> <form ng-submit="activateWidget()"> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.greetingsText}}" ng-model="settingData.provider_data.settings.welcomeText" title="{{$resolve.translations.greetingsText}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input type-input="number" placeholder="{{$resolve.translations.secDelay}}" ng-model="settingData.provider_data.settings.showWelcomeDelay" title="{{$resolve.translations.secDelay}}" is-required="true" is-back-placeholder="true"> </custom-input> <div class="mb20"> <custom-dropdown ng-model="settingData.provider_data.settings.position" array="positionTypes" opt-description="name" opt-value="value" title="{{$resolve.translations.positionType}}" ng-init="positionTypes[0]" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="tags-container mb0"> <span class="title">{{$resolve.translations.Integration_code_title}}</span> </div> <div ng-if="settingData.provider_data.token" class="bots-list-text bots-list-text-new mb20"> <div class="bots-list-text-content">{{strVar}}</div> <div copy-to-clipboard text-to-copy="strVar" class="bots-list-text-button" title="Copy to clipboard"> <i class="material-icons" style="font-size: 20px"> file_copy </i> </div> </div> <div> <div class="mb10 tags-container"> <span class="title">Start button</span> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="settingData.provider_data.settings.start_button" id="start_button"> <label for="start_button"> <span class="checker-ico"></span> <span>Activate</span> </label> </div> </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="settingData.provider_data.token" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/proxy-edit.html",'<div class="flex-row create-bot flex-row-start"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> Edit proxy </div> </div> <div class="settings-card-wrap"> <div class="settings-card medium210"> <div class="mt10"> <div class="mb10"> <custom-input placeholder="Host" title="Host" ng-model="proxy.host" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Port" title="Port" ng-model="proxy.port" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="User" title="User" ng-model="proxy.user" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Password" title="Password" ng-model="proxy.password" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Country" title="Country" ng-model="proxy.country" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-model="proxy.portal_id" array="portals" opt-value="portal_id" opt-description="name" is-model-init="true" is-back-placeholder-active="true" is-back-placeholder="true" title="Portal" placeholder="Existing portal"> </custom-dropdown> </div> <div class="mb10"> <custom-input placeholder="Provider" title="Provider" ng-model="proxy.provider" is-required="false" is-back-placeholder="true"> </custom-input> </div> <div class="card-checker" style="margin-top: 15px"> <input type="checkbox" ng-model="proxy.active" id="proxy_is_active"> <label for="proxy_is_active"> <span class="checker-ico"></span> <span>Is Active</span> </label> </div> <div class="card-checker"> <input type="checkbox" ng-model="proxy.in_use" id="proxy_is_in_use"> <label for="proxy_is_in_use"> <span class="checker-ico"></span> <span>In use</span> </label> </div> </div> <button ng-click="saveProxy()" class="brn-btn brn-primary">Save Proxy</button> </div> </div> </div> </div> </div>'),a.put("views/proxy-logs.html",'<div class="modal-header text-center"> <h3 class="modal-title">Logs</h3> </div> <div class="modal-body"> <div class="row"> <div class="col-md-12"> <div ng-repeat="log in proxy.logs" style="font-size: 14pt"> <p><b>Date:</b> {{log.date|date}}</p> <p><b>Target:</b> {{log.target}}</p> <p><b>Event:</b> {{log.event}}</p> <hr> </div> </div> </div> </div>'),a.put("views/proxy-rating.html",'<div class="flex-row proxy-rating-popup flex-row-centered"> <div class="flex-col-small"> <div class="proxy-rating-popup-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" ng-click="close()"> close </i> Rating (~{{proxy.rating | number:3}}) </div> </div> <div class="proxy-rating-statistics-block row"> <p ng-repeat="(key, value) in coefficients" class="row text-capitalize" ng-if="key != \'days\'"> <b ng-if="key == \'instagram_blocks\'">instagram blocks:</b> <b ng-if="key == \'instagram_challenges\'">instagram challenges:</b> <b ng-if="key == \'insatgram_bans\'">insatgram bans:</b> <b ng-if="key == \'instagram_authentication_errors\'">instagram authentication errors:</b> <b ng-if="key != \'instagram_blocks\' && key != \'instagram_challenges\' && key != \'insatgram_bans\' && key != \'instagram_authentication_errors\'">{{key}}:</b> {{proxy.statistics[key] ? proxy.statistics[key] : 0}} x {{value}} = {{value * (proxy.statistics[key] ? proxy.statistics[key] : 0)}} </p> <p class="row text-capitalize"> <b>Days:</b> {{days}} x {{coefficients.days}} = {{days * coefficients.days}} </p> <hr> <p class="row rating-formula-text">Rating = ( Timeouts + Instagram Blocks + Instagram Challenges + Insatgram Bans + Instagram Authentication
60Errors ) / Days</p> </div> </div> </div> </div>'),a.put("views/realtime.html",'<div> <div class="row-flex"> <div class="flex-col-p"> <div class="mb-card"> <h2 class="mb50">Real time users info</h2> <div class="card card-64"> <div class="card-body"> <realtime-line data="users" style="width: 100%; display: block"></realtime-line> </div> </div> </div> </div> <div class="flex-col-p"> <div class="mb-card"> <h2 class="mb50">Real time bot messages</h2> <div class="card card-64"> <div class="card-body"> <realtime-line data="messages" style="width: 100%; display: block"></realtime-line> </div> </div> </div> </div> </div> <div class="row-flex"> <div class="flex-col flex-col-p col-all"> <h2 class="mb50">Online users</h2> <div class="brn-table-wrap mb-card t-modern mb60"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table"> <tbody> <tr class="header-default"> <td style="width:30%">Name</td> <td style="width:20%">Provider</td> <td style="width:25%">Messages</td> <td style="width:15%">Sessions</td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="client in usersInfo" style="cursor:pointer" ng-class="{\'first-line\' : key == 0}"> <td>{{client.name}}</td> <td>{{client.provider}}</td> <td>{{client.messages}}</td> <td>{{client.sessions}}</td> <td class="control-fixed"> <a ui-sref="conversations({id: botNav.botInfo.bot_id, user: client})" class="btn-icon btn-icon-no-top" title="Bot conversations"> <div class="control-fixed-shadow"></div> <ng-include src="\'images/svg/ic_forum_black_24px.svg\'"></ng-include> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="5"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!usersInfo.length"> <tr> <td colspan="100%">No users activity now</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'), 61a.put("views/reddit.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">Reddit</h2> </div> <form ng-submit="updateConnection()"> <div class="mb10"> <custom-input placeholder="Username" ng-model="reddit.provider_data.username" title="Username" is-required="true" is-back-placeholder="true"> </custom-input> <div class="bots-list-text"> https://www.reddit.com/user/{{reddit.provider_data.username}} </div> <custom-input placeholder="Password" ng-model="reddit.provider_data.password" title="Password" type-input="password" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Client secret" ng-model="reddit.provider_data.client_secret" title="Client secret" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Client id" ng-model="reddit.provider_data.client_id" title="Client id" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="User agent" ng-model="reddit.provider_data.user_agent" title="User agent" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="reddit.provider_data.username" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/resize-input.html",'<div class="resize-input-container"> <input ng-show="!multiline" class="resize-input input-select-element" ng-class="{\'active\' : isFocused}" type="{{type}}" ng-model="text" placeholder="{{placeholder}}" ng-disabled="isDisabled" ng-readonly="isReadonly" ng-required="::isRequired" ng-change="onChange()" ng-blur="blurInput()" ng-focus="focusInput()" ng-keyup="$event.keyCode == 13 && enter()"> <textarea ng-show="multiline" class="resize-input textarea-select-element" ng-class="{\'active\' : isFocused}" type="{{type}}" ng-model="text" placeholder="{{placeholder}}" ng-disabled="isDisabled" ng-readonly="isReadonly" ng-required="::isRequired" ng-change="onChange()" ng-blur="blurInput()" ng-focus="focusInput()" ng-keyup="$event.keyCode == 13 && enter()">\n </textarea> <div class="resize-input-hidden" style="{{multiline?\'\' : \'word-break: keep-all;\'}}"> </div> </div>'),a.put("views/resize-input2.html",'<div class="resize-input-container"> \x3c!--\n <div dnd-handle class="handle">\n <i class="material-icons">\n more_vert\n </i>\n </div>\n --\x3e <input ng-show="!multiline" class="resize-input input-select-element" ng-class="{\'active\' : isFocused}" type="{{type}}" percent="{{isPercent ? \'enabled\' : \'disabled\'}}" ng-model="text" placeholder="{{placeholder}}" ng-disabled="isDisabled" ng-readonly="isReadonly" ng-required="::isRequired" ng-change="onChange()" ng-blur="blurInput()" ng-focus="focusInput()" ng-keyup="$event.keyCode == 13 && enter(); resize();"> <textarea rows="1" ng-show="multiline" class="resize-input textarea-select-element" ng-class="{\'active\' : isFocused}" type="{{type}}" ng-model="text" placeholder="{{placeholder}}" ng-disabled="isDisabled" ng-readonly="isReadonly" ng-required="::isRequired" ng-change="onChange()" ng-blur="blurInput()" ng-focus="focusInput()" ng-keyup="$event.keyCode == 13 && enter(); resize();">\n</textarea> <span class="resize-input-hidden" style="{{multiline ? \'\' : \'word-wrap: normal; word-break: keep-all;\'}}" ng-style="{\'max-width\': maxWidth}"> </span> <i ng-if="settings" class="inp-settings" ng-include="\'images/svg/settings.svg\'" uib-dropdown-toggle></i> </div>'),a.put("views/rmwidget.html",'<div class="widget-wrap {{widgetPosition == \'left\' ? \'widget-left-pos\': \'\'}}"> <div class="brn-widget {{widget_visibility ? \'\' : \'brn-hide\'}}"> <div class="brn-widget-header"> <div class="brn-widget-header-inner"> <div class="bot-header-info"> <div> <img ng-src="{{bot.image?(bot.image):(\'images/tf.png\')}}" alt=""> </div> {{bot.name}} </div> <div class="brn-widget-resize"> <i class="fa fa-{{!widgetResizeStatus ? \'expand\' : \'compress\'}}" ng-click="resizeWidget($event)"></i> </div> <div class="brn-widget-close"> <span ng-click="closeWidget()"></span> </div> </div> </div> <div class="brn-widget-main"> <div class="brn-widget-form-wrapper"> <div class="brn-widget-contacts-form" ng-if="mainForm"> <form ng-submit="sendContacts()"> <input type="text" placeholder="Input your name" required ng-model="additionalInfo.name" ng-focus="showAdditionalForm()" ng-blur="hideAdditionalForm()"> <div class="brn-widget-contacts-form-additional" ng-show="showAdditionalFormStatus"> <input type="email" placeholder="Email" required ng-model="additionalInfo.email"> <input type="text" placeholder="Phone" ng-model="additionalInfo.phone"> <button type="submit" class="brn-widget-form-submit">Send</button> </div> </form> </div> </div> <div class="brn-widget-body {{mainForm ? \'formed\' : \'\'}} {{showAdditionalFormStatus ? \'collapsed\': \'\'}}" scroll="showPrevMessages()" ui-scroll-viewport> <widget-message ng-repeat="message in messages track by $index" type="{{message}}" image="{{bot.image}}" ng-if="!isLoading" id="message{{$index}}" class=""> </widget-message> <div ng-if="isLoading"> Loading messages... </div> </div> </div> <div class="brn-widget-footer"> <form ng-submit="sendMessage()" id="widget"> <fieldset ng-disabled="formDisabled"> <input type="text" name="name" class="" ng-model="message.text" placeholder="{{welcomePlaceholder}}" required> <div class="widget-attachment"> <button type="button" class="card-type" ngf-select="addAttachment($file, $invalidFiles, dialog)" ngf-max-size="5MB" accept="*"> <i class="fa fa-plus" aria-hidden="true"></i> </button> <button type="button" class="card-type"> <i class="fa fa-microphone" aria-hidden="true" ng-show="voiceSupport && !voiceInProgress" ng-click="voiceStart()"></i> <i class="fa fa-volume-up" aria-hidden="true" ng-show="voiceSupport && voiceInProgress" ng-click="voiceEnd()"></i> </button> </div> </fieldset> </form> </div> </div> <div class="brn-widget-open {{widget_visibility ? \'brn-hide\' : \'\'}}" ng-click="openWidget()"> <span class="icon icon-widget-logo"></span> </div> <div class="brn-widget-event" ng-show="eventVisibility"> <div class="brn-widget-event-close" ng-click="closeWidget()"> <span class="brn-widget-close-icon"></span> </div> <div class="brn-widget-event-conversation"> <div class="brn-widget-conversation-avatar"> <img src="{{bot.image?(bot.image):(\'images/tf.png\')}}" alt=""></div> <div class="brn-widget-conversation-message"> <div class="brn-widget-conversation-message-author"> {{bot.name}} </div> {{widget_settings.welcomeText}} </div> <div class="brn-widget-unread-count">1</div> </div> <div class="brn-widget-event-footer"> <input type="text" placeholder="{{welcomePlaceholder}}" class="brn-widget-event-input" ng-focus="openWidget(true)"> </div> </div> </div>'),a.put("views/scenario-abstract-old-ig.html",""),a.put("views/scenario-abstract-old.html",'<div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <span class="nav-sidebar-back round-btn" ui-sref="bot-abstract.bot-functions({id: botNav.botInfo.bot_id})"> <i class="material-icons">arrow_back</i> </span> <custom-scroller is-shadow="true" paddings="22px 10px 0px 51px" height="calc(100% - 155px)" is-resize-only="true"> <div class="nav-sidebar-content-ofset"> <h2>
61 Editing </h2> <div class="mb-title"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="scenarios.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> \x3c!-- <div class="mb20" ng-class="{\'mb30\' : scenarios.roles.length == 0}">\n <custom-dropdown \n ng-model="selected.role"\n array="roles"\n opt-description="title"\n ng-change="addRole()"\n opt-value="name"\n title="Role"\n placeholder="Select Role"\n is-back-placeholder="true">\n </custom-dropdown>\n </div> --\x3e \x3c!-- <div ng-if="scenarios.roles.length != 0" class="mb20">\n <div ng-repeat="(key, role) in scenarios.roles" class="mb10 list-item">\n <span>{{role}}</span>\n <i class="material-icons close-icon" ng-click="removeRole(key)"> close </i>\n </div>\n </div> --\x3e <div class="mb30"> <custom-input placeholder="Keywords" ng-model="curentScenario.keywords" title="Keywords" is-back-placeholder="true"> </custom-input> </div> <div class="card-checker mb20"> <input type="checkbox" ng-model="scenarios.default" id="default_status"> <label for="default_status"> <span class="checker-ico"> </span> <span>default scenario</span> </label> </div> <div class="brn-btn brn-primary" ui-sref="edit-scenarios({id: bot_id, scenario: scenario_id})"> Edit in PRO Mode </div> </div> <h2> Other scenarios </h2> <div class="mb-title"> <div ng-if="scenariosList.length"> <div ng-repeat="scenarioItem in scenariosList" ui-sref="edit-scenarios-old({id: botNav.botInfo.bot_id, scenario: scenarioItem.value})" class="card-checker"> <input type="checkbox" ng-checked="{{scenarioItem.checked}}"> <label style="position: relative"> <span class="checker-ico checker-ico-right"> </span> <span>{{scenarioItem.name}}</span> <span ng-show="{{scenarioItem.checked}}" style="position: absolute;right:-23px;top: 2px"> <span><i ng-click="editScenario()" style="font-size: 14px;color:#ccc; position: relative;left: -3px" class="material-icons save-sc">save</i> </span> <span><i ng-click="deleteScenario(false)" style="font-size: 16px;color:#ccc" class="material-icons delete-sc">delete_forever</i> </span> </span> </label> </div> </div> <a style="margin-left: -6px" class="add-bot" ui-sref="create-scenarios-old({id: botNav.botInfo.bot_id})"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> NEW </a> </div> </div> <div class="nav-sidebar-bottom" ng-if="!editRoute"> <div class="settings-save" ng-if="!editRoute" ng-click="addScenario(false)"> <span> <i class="material-icons">save</i> {{main.translations.save_btn}} </span> </div> \x3c!--\n <div class="settings-cancel" ui-sref="bot-abstract.bot-functions({id: botNav.botInfo.bot_id})" >\n <span >\n <i class="material-icons">cancel</i>\n Cancel\n </span>\n </div>\n <div class="settings-delete" ng-if="editRoute" ng-click="deleteScenario(false)">\n <span >\n <i class="material-icons">delete_forever</i>\n Delete\n </span>\n </div>\n --\x3e </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="flex-row" ui-view=""> </div> </div> </div>'),a.put("views/scenario-abstract.html",'<div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" ng-class="{\'fn-sidebar\' : advanced.isAdvanced}" id="left_sidebar_content"> <span class="nav-sidebar-back round-btn" ui-sref="bot-abstract.bot-functions({id: botNav.botInfo.bot_id})"> <i class="material-icons">arrow_back</i> </span> <custom-scroller is-shadow="true" paddings="22px 10px 0px 51px" height="{{advanced.isAdvanced? \'100%\' : \'calc(100% - 155px)\'}}" is-resize-only="true"> <div class="nav-sidebar-content-ofset"> <h2> Scenario </h2> <div class="mb-title"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="scenarios.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb20" ng-class="{\'mb30\' : scenarios.roles.length == 0}"> <custom-dropdown ng-model="selected.role" array="roles" opt-description="title" ng-change="addRole()" opt-value="name" title="Role" placeholder="Select Role" is-back-placeholder="true"> </custom-dropdown> </div> <div ng-if="scenarios.roles.length != 0" class="mb20"> <div ng-repeat="(key, role) in scenarios.roles" class="mb10 list-item"> <span>{{role}}</span> <i class="material-icons close-icon" ng-click="removeRole(key)"> close </i> </div> </div> <div class="card-checker mb20"> <input type="checkbox" ng-model="scenarios.default" id="default_status"> <label for="default_status"> <span class="checker-ico"> </span> <span>default scenario</span> </label> </div> <div class="brn-btn brn-primary" ng-click="changeAdvanced(!advanced.isAdvanced)"> {{advanced.isAdvanced? "Edit in Simple Mode" : "Edit in PRO Mode"}} </div> \x3c!-- <div class="card-checker" ng-if="!advanced.isAdvanced && scenario_id">\n <input type="checkbox" ng-model="isAutosave" id="is_autosave" ng-change="changeAutosave(isAutosave)">\n <label for="is_autosave">
61\n <span class="checker-ico">\n </span>\n <span>Autosave</span>\n </label>\n </div> --\x3e </div> <div ng-if="advanced.isAdvanced" class="functions-add-list"> <components-modal-menu steps="scenarios.steps" gui="gui" save-model="saveModel()"> </components-modal-menu> <div style="height: 185px"> </div> </div> </div> <div class="nav-sidebar-bottom"> <div class="settings-save" ng-if="advanced.isAdvanced" ng-click="TestWidget()"> <span> <i class="material-icons">bug_report</i> Test </span> </div> <div class="settings-save" ng-click="editScenario()" ng-if="editRoute"> <span> <i class="material-icons">save</i> {{main.translations.save_btn}} </span> </div> <div class="settings-save" ng-if="!editRoute" ng-click="addScenario()"> <span> <i class="material-icons">save</i> {{main.translations.save_btn}} </span> </div> <div class="settings-cancel" ui-sref="bot-abstract.bot-functions({id: botNav.botInfo.bot_id})"> <span> <i class="material-icons">cancel</i> Cancel </span> </div> <div class="settings-delete" ng-if="editRoute" ng-click="deleteScenario()"> <span> <i class="material-icons">delete_forever</i> Delete </span> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="function-switcher round-btn" ui-sref="gui({id: bot_id, scenario: scenario_id})" ng-if="!gui"> <i class="material-icons">picture_in_picture</i> </div> <div class="function-switcher round-btn" ui-sref="edit-scenarios({id: bot_id, scenario: scenario_id})" ng-if="gui && scenario_id && advanced.isAdvanced"> <i class="material-icons">mode_edit</i> </div> <div class="function-switcher round-btn" ui-sref="create-scenarios({id: bot_id})" ng-if="gui && !scenario_id && advanced.isAdvanced"> <i class="material-icons">mode_edit</i> </div> <div class="function-switcher round-btn" ui-sref="edit-scenarios-old({id: bot_id, scenario: scenario_id})" ng-if="gui && scenario_id && !advanced.isAdvanced"> <i class="material-icons">mode_edit</i> </div> <div class="function-switcher round-btn" ui-sref="create-scenarios-old({id: bot_id})" ng-if="gui && !scenario_id && !advanced.isAdvanced"> <i class="material-icons">mode_edit</i> </div> <div class="flex-row" ui-view=""> </div> <div class="test-widget animations animations-right" ng-show="isShowTest" ng-if="advanced.isAdvanced"> <div class="test-widget-container"> <h2 class="main-tile"> Test bot </h2> <i ng-click="TestWidget()" class="close-icon" ng-include="\'images/svg/ic_clear_black_18px.svg\'"> </i> <div> <div class="simple-widget conversation"> <simple-test-widget is-new-scenario="!scenario_id? true : false"> </simple-test-widget> </div> </div> </div> </div> </div> </div>'),a.put("views/scenario-helper/advanced.html",'<div class="row" ng-init="searchActionsInit()"> <div class="step-component advanced right"> <i class="material-icons"> {{getIcon(step.component)}} </i> {{translations[\'componentDescription_\' + step.component]}} </div> </div> <div class="row" ng-if="step.action.next"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[0].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[0].index != null? \'Proceed to Step \' + actions[0].index : \'Wrong next Step\'}}</span> </div> </div>'),a.put("views/scenario-helper/attachment.html",'<div class="row" ng-init="searchActionsInit()"> <div class="step-component ligth right pointer"> <i class="material-icons" ng-if="step.properties.type == \'file\'">insert_drive_file</i> <i class="material-icons" ng-if="step.properties.type == \'image\'">image</i> <i class="material-icons" ng-if="step.properties.type == \'video\'">videocam</i> <i class="material-icons" ng-if="step.properties.type == \'audio\'">music_note</i> <span>Sending an attachment</span> </div> </div> <div class="row" ng-if="step.action.next"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[0].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[0].index != null? \'Proceed to Step \' + actions[0].index : \'Wrong next Step\'}}</span> </div> </div>'),a.put("views/scenario-helper/blockchain.html",'<div class="row" ng-init="searchActionsInit()"> <div class="step-component advanced right"> <i class="material-icons"> {{getIcon(step.component)}} </i> {{translations[\'componentDescription_\' + step.component]}} </div> </div> <div class="row" ng-if="step.action.success"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[0].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[0].index != null? \'Proceed to Step \' + actions[0].index : \'Wrong next Step\'}}</span> </div> <div class="right-btn green-btn"> <i class="material-icons">check</i> </div> </div> <div class="row" ng-if="step.action.fail"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[1].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[1].index != null? \'Proceed to Step \' + actions[1].index : \'Wrong next Step\'}}</span> </div> <div class="red-btn right-btn"> <i class="material-icons">close</i> </div> </div>'),a.put("views/scenario-helper/condition.html",'<div class="row" ng-init="searchActionsInit()"> <div class="step-component green-input left text"> <span ng-non-bindable>{{</span>{{step.properties.value.scope}}.{{step.properties.value.param}}<span ng-non-bindable>}}</span> <span ng-init="initFindCondition()"> {{condition}} </span> <span>{{step.properties.target.value ? step.properties.target.value : "null"}}</span> </div> </div> <div class="row" ng-if="step.action.true"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[0].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[0].index != null? \'Proceed to Step \' + actions[0].index : \'Wrong next Step\'}}</span> </div> <div class="right-btn green-btn"> <i class="material-icons">check</i> </div> </div> <div class="row" ng-if="step.action.false"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[1].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[1].index != null? \'Proceed to Step \' + actions[1].index : \'Wrong next Step\'}}</span> </div> <div class="red-btn right-btn"> <i class="material-icons">close</i> </div> </div> \x3c!-- <div class="row" ng-if="!step.action.false">\n <div class="step-component ligth right">\n <i class="material-icons">cancel</i>
61\n <span> Exit</span>\n </div>\n</div> --\x3e'),a.put("views/scenario-helper/delay.html",'<div class="row" ng-init="searchActionsInit()"> <div class="step-component ligth right"> <i class="material-icons">watch_later</i> Delay: {{step.properties.delay}} ms </div> </div> <div class="row" ng-if="step.action.next"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[0].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[0].index != null? \'Proceed to Step \' + actions[0].index : \'Wrong next Step\'}}</span> </div> </div>'),a.put("views/scenario-helper/existence.html",'<div class="row" ng-init="searchActionsInit()"> <div class="step-component advanced right"> <i class="material-icons"> {{getIcon(step.component)}} </i> Check if value{{step.properties.params.length > 1 ? \'s\' : \'\'}} <span ng-repeat="exParam in step.properties.params track by $index"> <span ng-non-bindable>{{</span>{{exParam.scope}}.{{exParam.key}}<span ng-non-bindable>}}</span>{{step.properties.params.length > 1 && $index != step.properties.params.length -1 ? \', \' : \' \'}} </span>exists </div> </div> <div class="row" ng-if="step.action.exists"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[0].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[0].index != null? \'Proceed to Step \' + actions[0].index : \'Wrong next Step\'}}</span> </div> <div class="right-btn green-btn"> <i class="material-icons">check</i> </div> </div> <div class="row" ng-if="step.action.nonexists"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[1].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[1].index != null? \'Proceed to Step \' + actions[1].index : \'Wrong next Step\'}}</span> </div> <div class="red-btn right-btn"> <i class="material-icons">close</i> </div> </div>'),a.put("views/scenario-helper/input.html",'<div class="row" ng-init="searchActionsInit()"> <div class="step-component grey right text"> {{step.properties.question}} </div> </div> <div class="row"> <div> <div class="step-component green left dropdown-toggle dropdown"> <i class="material-icons">save</i> <span ng-non-bindable>{{</span>{{step.properties.save.scope}}.{{step.properties.save.param}}<span ng-non-bindable>}}</span> </div> </div> </div> <div class="row" ng-if="step.action.next"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[0].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[0].index != null? \'Proceed to Step \' + actions[0].index : \'Wrong next Step\'}}</span> </div> <div class="right-btn green-btn"> <i class="material-icons">check</i> </div> </div> <div class="row" ng-if="step.properties.retry_message"> <div class="step-component grey right text"> {{step.properties.retry_message}} </div> <div class="red-btn right-btn"> <i class="material-icons">close</i> </div> </div>'),a.put("views/scenario-helper/rest.html",'<div class="row" ng-init="searchActionsInit()"> <div class="step-component advanced right"> <i class="material-icons"> {{getIcon(step.component)}} </i> {{translations[\'componentDescription_\' + step.component]}} </div> </div> <div class="row" ng-if="step.action.success"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[0].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[0].index != null? \'Proceed to Step \' + actions[0].index : \'Wrong next Step\'}}</span> </div> <div class="right-btn green-btn"> <i class="material-icons">check</i> </div> </div> <div class="row" ng-if="step.action.fail"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[1].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[1].index != null? \'Proceed to Step \' + actions[1].index : \'Wrong next Step\'}}</span> </div> <div class="red-btn right-btn"> <i class="material-icons">close</i> </div> </div>'),a.put("views/scenario-helper/switch.html",'<div class="row" ng-init="searchActionsInit()"> <div class="step-component advanced right"> <i class="material-icons"> {{getIcon(step.component)}} </i> {{translations[\'componentDescription_\' + step.component]}} </div> </div> <div ng-repeat="(key, value) in step.action track by $index"> <div class="row"> <div class="step-component green-input left text"> <span> On Case {{key}} </span> </div> </div> <div class="row"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[$index].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[ $index].index != null? \'Proceed to Step \' + actions[$index].index : \'Wrong next Step\'}}</span> </div> </div> </div>'),a.put("views/scenario-helper/text.html",'<div class="row" ng-init="searchActionsInit()"> <div class="step-component grey right text"> <span> {{step.properties.content}} </span> </div> </div> <div class="row" ng-if="step.action.next"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[0].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[0].index != null? \'Proceed to Step \' + actions[0].index : \'Wrong next Step\'}}</span> </div> </div>'),a.put("views/scenario-helper/transaction.html",'<div class="row" ng-init="searchActionsInit()"> <div class="step-component advanced right"> <i class="material-icons"> {{getIcon(step.component)}} </i> {{translations[\'componentDescription_\' + step.component]}} </div> </div> <div class="row" ng-if="step.action.success"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[0].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[0].index != null? \'Proceed to Step \' + actions[0].index : \'Wrong next Step\'}}</span> </div> <div class="right-btn green-btn"> <i class="material-icons">check</i> </div> </div> <div class="row" ng-if="step.action.fail"> <div class="step-component ligth right" ng-class="{\'no-valid\': actions[1].index == null}"> <i class="material-icons">reply_all</i> <span> {{actions[1].index != null? \'Proceed to Step \' + actions[1].index : \'Wrong next Step\'}}</span> </div> <div class="red-btn right-btn"> <i class="material-icons">close</i> </div> </div>'), 62a.put("views/scenarios/attachment.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
62 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.type" array="attachments" opt-description="name" opt-value="value" title="Attachment type" is-model-init="true" ng-change="handleAttachmentChange($index, step.properties.type)" is-disabled="step.properties.spinnerLoading" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Url" ng-model="step.properties.url" is-disabled="step.properties.spinnerLoading" title="Url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.type == \'file\'"> <custom-input placeholder="File name" ng-model="step.properties.name" title="File name" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row"> <ng-form name="attachmentForm"> <div ng-if="step.properties.type == \'image\'"> <div class="drop-box" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ng-class="{\'loader-container\' : step.properties.elements[activeCardElement].spinnerLoading}" ngf-select="addFile($file, $index)"> <div class="google-loader" ng-show="step.properties.spinnerLoading"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="25" fill="#d7d7d7" stroke-width="20" stroke-miterlimit="10"> </circle> <circle class="path" cx="50" cy="50" r="22" fill="white" stroke-width="0" stroke-miterlimit="0"> </circle> </svg> </div> <div class="drop-box-icon" ng-show="!step.properties.spinnerLoading"> <i class="material-icons">cloud_upload</i> </div> <div ng-show="!step.properties.spinnerLoading" class="drop-box-text">Upload</div> </div> </div> <div ng-if="step.properties.type == \'audio\'"> <div class="drop-box" ngf-pattern="\'audio/*\'" ngf-accept="\'audio/*\'" ng-class="{\'loader-container\' : step.properties.elements[activeCardElement].spinnerLoading}" ngf-select="addFile($file, $index)"> <div class="google-loader" ng-show="step.properties.spinnerLoading"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="25" fill="#d7d7d7" stroke-width="20" stroke-miterlimit="10"> </circle> <circle class="path" cx="50" cy="50" r="22" fill="white" stroke-width="0" stroke-miterlimit="0"> </circle> </svg> </div> <div class="drop-box-icon" ng-show="!step.properties.spinnerLoading"> <i class="material-icons">cloud_upload</i> </div> <div ng-show="!step.properties.spinnerLoading" class="drop-box-text">Upload</div> </div> </div> <div ng-if="step.properties.type == \'video\'"> <div class="drop-box" ngf-pattern="\'video/*\'" ngf-accept="\'video/*\'" ng-class="{\'loader-container\' : step.properties.elements[activeCardElement].spinnerLoading}" ngf-select="addFile($file, $index)"> <div class="google-loader" ng-show="step.properties.spinnerLoading"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="25" fill="#d7d7d7" stroke-width="20" stroke-miterlimit="10"> </circle> <circle class="path" cx="50" cy="50" r="22" fill="white" stroke-width="0" stroke-miterlimit="0"> </circle> </svg> </div> <div class="drop-box-icon" ng-show="!step.properties.spinnerLoading"> <i class="material-icons">cloud_upload</i> </div> <div ng-show="!step.properties.spinnerLoading" class="drop-box-text">Upload</div> </div> </div> </ng-form> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="section-bottom-toogle" ng-class="{active : aditional}"> <div ng-click="toogleAditional()"> <span>Additional options</span> <i class="material-icons">keyboard_arrow_down</i> </div> </div> <div class="section-bottom" ng-class="{active : aditional}"> <div class="dropdown-container section" ng-class="{active : aditional}"> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.quick_replies.length == 0 || !step.properties.quick_replies}"> <span>Quick replys</span> </div> <div class="flex-row mb20" ng-repeat="replie in step.properties.quick_replies track by $index"> <div class="short-item mb10"> <custom-dropdown ng-model="replie.type" array="quickRepliesTypes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleQuickRepliesTypes($parent.$index, replie.type, $index)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{main.translations.title}}" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" t
62ype-input="url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.quick_replies.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == step.properties.quick_replies.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot" ng-click="handleAddParam($index, \'addQuickReply\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> </div> </div>'),a.put("views/scenarios/blockchain.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.action" array="blockchainActionList" opt-description="name" opt-value="value" placeholder="" title="Action type" is-model-init="true" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="step.properties.action===\'create\'"> <custom-input placeholder="Password" ng-model="step.properties.password" title="Password" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.saveTo_text}}" ng-model="step.properties.save.param" is-required="true" title="{{main.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.save.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/card.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-items-container" ng-if="cardSection && step.properties.type == \'static\'"> <div ng-repeat="item in step.properties.elements track by $index" class="item item-selector" ng-class="{\'active\' : activeCardElement == $index}" ng-click="switchCard($index)"> </div> <div class="item"> <i class="material-icons add-icon" ng-click="addCard($parent.$index)">add</i> </div> </span> <span class="card-move-buttons">
62 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20" ng-if="step.properties.type == \'dynamic\'"> <div class="short-item mb10"> <custom-input placeholder="Data key" ng-model="step.properties.data.key" title="Data key" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="scopes" opt-description="name" opt-value="value" title="To Storage " is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text" ng-if="step.properties.type == \'dynamic\'"> <span>Card template (use property name to output value of the any property of object)</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.type" array="cardType" ng-change="handleCardType($index, step.properties.type)" opt-description="name" opt-value="value" title="Card type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div ng-if="step.properties.type == \'dynamic\'"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.template.type" array="cardTempalteType" ng-change="handleAddParam($index, \'card\')" opt-description="name" opt-value="value" title="Template type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="step.properties.template.type === \'list\'"> <custom-dropdown ng-model="step.properties.template.options.top_element_style" array="topElement" opt-description="name" opt-value="value" title="Top element style" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> <div class="flex-row mb10" ng-if="step.properties.type == \'dynamic\'"> <div class="short-item mb10"> <custom-input placeholder="Image url" ng-model="step.properties.image" title="Image url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title}}" ng-model="step.properties.title" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Title link" ng-model="step.properties.link" title="Title link" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb10" ng-if="step.properties.type == \'dynamic\'"> <div class="medium-item mb20"> <custom-input placeholder="Text" ng-model="step.properties.text" title="Text" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row" ng-if="step.properties.type == \'static\'"> <div> <div class="drop-box" style="margin-bottom: 15px" ng-class="{\'image-container\' : step.properties.elements[activeCardElement].image && !step.properties.elements[activeCardElement].spinnerLoading, \'loader-container\' : step.properties.elements[activeCardElement].spinnerLoading}" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="uploadCardImage($file, $index, activeCardElement)"> <div ng-if="!step.properties.elements[activeCardElement].image || step.properties.elements[activeCardElement].spinnerLoading"> <div class="google-loader" ng-show="step.properties.elements[activeCardElement].spinnerLoading"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="25" fill="#d7d7d7" stroke-width="20" stroke-miterlimit="10"> </circle> <circle class="path" cx="50" cy="50" r="22" fill="white" stroke-width="0" stroke-miterlimit="0"> </circle> </svg> </div> <div class="drop-box-icon" ng-show="!step.properties.elements[activeCardElement].spinnerLoading"> <i class="material-icons">cloud_upload</i> </div> <div ng-show="!step.properties.elements[activeCardElement].spinnerLoading" class="drop-box-text">Upload</div> </div> <img ng-src="{{step.properties.elements[activeCardElement].image}}" ng-if="step.properties.elements[activeCardElement].image && !step.properties.elements[activeCardElement].spinnerLoading"> </div> </div> </div> <div class="flex-row" ng-if="step.properties.type == \'static\'"> <div class="short-item mb20"> <custom-input placeholder="{{main.translations.title}}" ng-model="step.properties.elements[activeCardElement].title" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row" ng-if="step.properties.type == \'static\'"> <div class="medium-item mb20"> <custom-input placeholder="Text" ng-model="step.properties.elements[activeCardElement].text" title="Text" type-input="textarea" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="section-bottom-toogle" ng-class="{active : aditional}"> <div ng-click="toogleAditional()"> <span>Additional options</span> <i class="material-icons">keyboard_arrow_down</i> </div> </div> <div class="section-bottom" ng-class="{active : aditional}"> <div class="dropdown-container section" ng-class="{active : aditional}"> <div ng-if="step.properties.type == \'dynamic\'"> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.collapse.length == 0}"> <span>Collapse buttons</span> </div> <div class="flex-row mb20" ng-repeat="collapse in step.properties.collapse"> <div class="short-item mb10"> <custom-input ng-model="collapse.title" placeholder="{{main.translations.title}}" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="collapse.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.collapse.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional">
62 <i class="material-icons move" ng-click="moveComponentButton($parent.$index, \'up\', $index, \'properties.collapse\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$index, \'down\', $index, \'properties.collapse\')" ng-class="{disable : $index == step.properties.collapse.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="handleAddParam($index, \'collapse\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : (step.properties.buttons | filter: {type: \'link\'}).length == 0}"> <span>Link buttons</span> </div> <div class="flex-row mb20" ng-repeat="link in step.properties.buttons" ng-if="link.type == \'link\'"> <div class="short-item mb10"> <custom-input ng-model="link.title" placeholder="{{main.translations.title}}" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="link.url" placeholder="Url" title="Url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container checker-marging"> <div class="checker-container"> <div class="card-checker"> <input type="checkbox" ng-model="link.webview" id="enable_messenger_extensions{{$index}}_{{$parent.$parent.$index}}"> <label for="enable_messenger_extensions{{$index}}_{{$parent.$parent.$index}}"> <span class="checker-ico"></span>{{main.translations.webview}} </label> </div> </div> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.buttons.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.buttons\', \'link\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.buttons\', \'link\')" ng-class="{disable : $index == step.properties.buttons.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'linkBtn\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : (step.properties.buttons | filter: {type: \'suggest\'}).length == 0}"> <span>Suggest buttons</span> </div> <div class="flex-row mb20" ng-repeat="suggest in step.properties.buttons" ng-if="suggest.type == \'suggest\'"> <div class="short-item mb10"> <custom-input ng-model="suggest.title" placeholder="{{main.translations.title}}" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="suggest.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.buttons.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.buttons\', \'suggest\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.buttons\', \'suggest\')" ng-class="{disable : $index == step.properties.buttons.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="handleAddParam($index, \'suggestBtn\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> <div ng-if="step.properties.type == \'static\'"> <div class="bootom-text" ng-class="{\'mb20\' : (step.properties.elements[activeCardElement].buttons | filter: {type: \'link\'}).length == 0}"> <span>Link buttons</span> </div> <div class="flex-row mb20" ng-repeat="link in step.properties.elements[activeCardElement].buttons" ng-if="link.type == \'link\'"> <div class="short-item mb10"> <custom-input ng-model="link.title" placeholder="{{main.translations.title}}" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="link.url" placeholder="Url" title="Url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container checker-marging"> <div class="checker-container"> <div class="card-checker"> <input type="checkbox" ng-model="link.webview" id="enable_messenger_extensions{{$index}}_{{$parent.$parent.$index}}"> <label for="enable_messenger_extensions{{$index}}_{{$parent.$parent.$index}}"> <span class="checker-ico"></span>{{main.translations.webview}} </label> </div> </div> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.elements[activeCardElement].buttons.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional">
62 <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.elements[activeCardElement].buttons\', \'link\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.elements[activeCardElement].buttons\', \'link\')" ng-class="{disable : $index == step.properties.elements[activeCardElement].buttons.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'linkBtn\', activeCardElement)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : (step.properties.elements[activeCardElement].buttons | filter: {type: \'suggest\'}).length == 0}"> <span>Suggest buttons</span> </div> <div class="flex-row mb20" ng-repeat="suggest in step.properties.elements[activeCardElement].buttons" ng-if="suggest.type == \'suggest\'"> <div class="short-item mb10"> <custom-input ng-model="suggest.title" placeholder="{{main.translations.title}}" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="suggest.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.elements[activeCardElement].buttons.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.elements[activeCardElement].buttons\', \'suggest\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.elements[activeCardElement].buttons\', \'suggest\')" ng-class="{disable : $index == step.properties.elements[activeCardElement].buttons.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="handleAddParam($index, \'suggestBtn\', activeCardElement)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.quick_replies.length == 0 || !step.properties.quick_replies}"> <span>Quick replys</span> </div> <div class="flex-row mb20" ng-repeat="replie in step.properties.quick_replies track by $index"> <div class="short-item mb10"> <custom-dropdown ng-model="replie.type" array="quickRepliesTypes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleQuickRepliesTypes($parent.$index, replie.type, $index)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{main.translations.title}}" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" type-input="url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.quick_replies.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i>
62 <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == step.properties.quick_replies.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="handleAddParam($index, \'addQuickReply\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> </div> </div>'), 63a.put("views/scenarios/cart.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" array="commandsList" opt-description="name" opt-value="value" title="Command" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text" ng-if="step.properties.command != \'view\'"> <span>Information about product</span> </div> <div class="mb30 flex-row" ng-if="step.properties.command != \'view\'"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.product_id.key" title="Product id" is-required="step.properties.command == \'add\'" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.product_id.scope" array="scopesList" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="mb30 flex-row" ng-if="step.properties.command == \'add\'"> <div class="short-item mb10"> <custom-input placeholder="Count" ng-model="step.properties.count" title="Count" is-required="false" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Response</span> </div> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.result.key" title="Result" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.result.scope" array="scopesList" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/category.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
63 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.leftMenu_category}}" ng-model="step.properties.category" title="{{main.translations.leftMenu_category}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Offset" ng-model="step.properties.offset" title="Offset" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.saveTo_text}}
63" ng-model="step.properties.input.key" title="{{main.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/collection.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.collection" array="collections" opt-description="name" opt-value="value" title="Collection" is-model-init="true" ng-change="doFields(step.properties.collection, $parent.$index)" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" array="collectionCommands" opt-description="name" opt-value="value" title="Command" is-model-init="true" placeholder="" ng-change="collectionCommandsChange($index, step.properties.command)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb10" ng-if="step.properties.command == \'insert\'"> <div class="short-item mb10"> <custom-input placeholder="Data storage key" ng-model="step.properties.data.key" title="Data storage key" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="scopes" opt-description="name" opt-value="value" title="Data storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.command == \'find\'"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.sort.field" array="collectionFieldsList[step.properties.collection]" opt-description="title" opt-value="name" title="Sort by Fields" is-model-init="true" placeholder="Default" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.sort.direction" array=" [{name : \'Asc\', value : \'asc\'}, {name : \'Desc\', value : \'desc\'}]" opt-description="name" opt-value="value" title="Sort by Direction" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text" ng-if="step.properties.command == \'find\'" ng-class="{\'mb20\' : step.properties.filters.length == 0}"> <span>Custom Filters</span> </div> <div class="flex-row mb10" ng-if="step.properties.command == \'find\'" ng-repeat="filter in step.properties.filters"> <div class="short-item mb10"> <custom-dropdown ng-model="filter.field" array="collectionFieldsList[step.properties.collection]" opt-description="title" opt-value="name" title="Field" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="filter.condition" array="conditionsFilter" opt-description="name" opt-value="value" title="Condition" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.value}}" ng-model="filter.value" title="{{main.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="deleteCustomFilter($parent.$parent.$index, $index)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional">
63 <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.filters\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.filters\')" ng-class="{disable : $index == step.properties.filters.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30" ng-if="step.properties.command == \'find\'"> <div class="add-bot" ng-click="addCustomFilter($parent.$index, $index)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="flex-row mb10" ng-if="step.properties.command == \'find\'"> <div class="short-item mb10"> <custom-input placeholder="Save result key" ng-model="step.properties.input.key" title="Save result key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="scopes" opt-description="name" opt-value="value" title="To storage" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Offset" ng-model="step.properties.offset" title="Offset" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/condition.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.key}}" ng-model="step.properties.value.param" is-required="true" title="{{main.translations.key}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.value.scope" array="scopesSystem" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.operator" array="conditions" opt-description="value" opt-value="name" title="Condition operator" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Target value" ng-model="step.properties.target.value" title="Target value" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/custom-cron-selection.html",'<div> <div class="flex-row mb10" ng-class="{\'mb20\': myFrequency.base <= 1 }"> <div class="short-item mb10"> <custom-dropdown ng-model="myFrequency.base" array="frequency" opt-description="label" opt-value="value" title="" is-model-init="true" placeholder="" is-back-placeholder="false"> </custom-dropdown> </div> </div> <div class="flex-row mb10"> <div ng-show="myFrequency.base == 4"> \x3c!-- If Multiple is Enabled --\x3e <div class="short-item mb10" ng-if="allowMultiple"> <custom-dropdown ng-model="myFrequency.dayValues" array="dayValues" opt-description="" cron-day-name-filter="true" opt-value="" title="Day" is-model-init="true" placeholder="" multiple is-back-placeholder="true"> </custom-dropdown> </div> \x3c!-- If Multiple is not Enabled --\x3e <div class="short-item mb10" ng-if="!allowMultiple"> <custom-dropdown ng-model="myFrequency.dayValues" array="dayValues" opt-description="" cron-day-name-filter="true" opt-value="" title="Day" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div ng-show="myFrequency.base >= 5"> <div class="short-item mb10" ng-if="allowMultiple"> <custom-dropdown ng-model="myFrequency.dayOfMonthValues" array="dayOfMonthValues" opt-description="" cron-numeral-filter="true" opt-value="" title="Day" is-model-init="true" placeholder="" multiple is-back-placeholder="true"> </custom-dropdown> </div> \x3c!-- If Multiple is not Enabled --\x3e <div class="short-item mb10" ng-if="!allowMultiple"> <custom-dropdown ng-model="myFrequency.dayOfMonthValues" array="dayOfMonthValues" opt-description="" cron-numeral-filter="true" opt-value="" title="Day" placeholder="" is-model-init="true" is-back-placeholder="true"> </custom-dropdown> </div> </div> \x3c!-- If Multiple is Enabled --\x3e <div ng-show="myFrequency.base == 6"> <div class="short-item mb10" ng-if="allowMultiple"> <custom-dropdown ng-model="myFrequency.monthValues" array="monthValues" opt-description="" cron-month-name-filter="true" opt-value="" title="Month" is-model-init="true" placeholder="" multiple is-back-placeholder="true"> </custom-dropdown> </div> \x3c!-- If Multiple is not Enabled --\x3e <div class="short-item mb10" ng-if="!allowMultiple"> <custom-dropdown ng-model="myFrequency.monthValues" array="monthValues" opt-description="" cron-month-name-filter="true" opt-value="" title="Month" placeholder="" is-model-init="true" is-back-placeholder="true"> </custom-dropdown> </div> </div> \x3c!-- If Multiple is Enabled --\x3e <div ng-show="myFrequency.base >= 3"> <div class="short-item mb10" ng-if="allowMultiple"> <custom-dropdown ng-model="myFrequency.hourValues" array="hourValues" opt-description="" opt-value="" title="Hour" is-model-init="true" placeholder="" multiple is-back-placeholder="true"> </custom-dropdown> </div> \x3c!-- If Multiple is not Enabled --\x3e <div class="short-item mb10" ng-if="!allowMultiple"> <custom-dropdown ng-model="myFrequency.hourValues" array="hourValues" opt-description="" opt-value="" title="Hour" placeholder="" is-model-init="true" is-back-placeholder="false"> </custom-dropdown> </div> </div> \x3c!-- If Multiple is Enabled --\x3e <div ng-show="myFrequency.base >= 2"> <div class="short-item mb10" ng-if="allowMultiple"> <custom-dropdown ng-model="myFrequency.minuteValues" array="minuteValues" opt-description="" opt-value="" title="Minute" is-model-init="true" placeholder="" multiple is-back-placeholder="true"> </custom-dropdown> </div> \x3c!-- If Multiple is not Enabled --\x3e <div class="short-item mb10" ng-if="!allowMultiple"> <custom-dropdown ng-model="myFrequency.minuteValues" array="minuteValues" opt-description="" opt-value="" title="Minute" placeholder="" is-model-init="true" is-back-placeholder="false"> </custom-dropdown> </div> </div> </div> </div>'),a.put("views/scenarios/customer.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
63 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.type" array="customerCollections" opt-description="name" opt-value="value" title="Customer type" is-model-init="true" ng-change="handleCustomerChange($index, step.properties.type)" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.type != \'logout\'"> <div class="short-item mb10"> <custom-input placeholder="Login" ng-model="step.properties.login.key" title="Login" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.login.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.type != \'logout\'"> <div class="short-item mb10"> <custom-input placeholder="Password" ng-model="step.properties.password.key" title="Password" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.password.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.type == \'register\'"> <div class="short-item mb10"> <custom-input placeholder="Profile" ng-model="step.properties.profile.key" title="Profile" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.profile.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Response token" ng-model="step.properties.token.key" title="Response token" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.token.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Error message" ng-model="step.properties.error_message.key" title="Error message" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.error_message.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'), 64a.put("views/scenarios/data.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
64 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="bootom-text"> <span>Stringify json using templater</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Data from" ng-model="step.properties.stringify.value.key" title="Data from" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.stringify.value.data.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" ng-change="dataCommand(step.properties.command, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Save value to" ng-model="step.properties.stringify.data.key" title="Save value to" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.stringify.data.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" ng-change="dataCommand(step.properties.command, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb30"> <div class="medium-item mb10"> <custom-input placeholder="Template" ng-model="step.properties.stringify.template" title="Template" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Split string with separator to list</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Data from" ng-model="step.properties.split.value.key" title="Data from" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.split.value.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" ng-change="dataCommand(step.properties.command, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Save value to" ng-model="step.properties.split.array.key" title="Save value to" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.split.array.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" ng-change="dataCommand(step.properties.command, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb30"> <div class="medium-item mb10"> <custom-input placeholder="Separator" ng-model="step.properties.split.separator" title="Separator" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Join list elements to string with separator</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Data from" ng-model="step.properties.join.value.key" title="Data from" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.join.value.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" ng-change="dataCommand(step.properties.command, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Save value to" ng-model="step.properties.join.array.key" title="Save value to" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.join.array.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" ng-change="dataCommand(step.properties.command, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb30"> <div class="medium-item mb10"> <custom-input placeholder="Separator" ng-model="step.properties.join.separator" title="Separator" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="section-bottom-toogle" ng-class="{active : aditional}"> <div ng-click="toogleAditional()"> <span>Additional options</span> <i class="material-icons">keyboard_arrow_down</i> </div> </div> <div class="section-bottom" ng-class="{active : aditional}"> <div class="dropdown-container section" ng-class="{active : aditional}"> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.save.length == 0}"> <span>Save variable to storage</span> </div> <div class="flex-row mb20" ng-repeat="saveParam in step.properties.save"> <div class="short-item mb10">
64 <custom-input ng-model="saveParam.key" placeholder="Key" is-required="true" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="saveParam.value" placeholder="{{main.translations.value}}" title="{{main.translations.value}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.save.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.save\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.save\')" ng-class="{disable : $index == step.properties.save.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'saveParam\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.push.length == 0}"> <span>Push element to list</span> </div> <div class="flex-row mb20" ng-repeat="saveParam in step.properties.push"> <div class="short-item mb10"> <custom-input ng-model="saveParam.array.key" placeholder="Array key" is-required="true" title="Array key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.array.scope" array="scopes" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input ng-model="saveParam.value.key" placeholder="{{main.translations.valueKey}}" title="{{main.translations.valueKey}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.value.scope" array="scopes" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties[\'push\'].splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.push\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.push\')" ng-class="{disable : $index == step.properties.push.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'pushParam\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.pull.length == 0}"> <span>Remove element from list</span> </div> <div class="flex-row mb20" ng-repeat="saveParam in step.properties.pull"> <div class="short-item mb10"> <custom-input ng-model="saveParam.array.key" placeholder="Array key" is-required="true" title="Array key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.array.scope" array="scopes" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input ng-model="saveParam.value.key" placeholder="{{main.translations.valueKey}}" title="{{main.translations.valueKey}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.value.scope" array="scopes" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties[\'pull\'].splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional">
64 <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.pull\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.pull\')" ng-class="{disable : $index == step.properties.pull.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'pullParam\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.set.length == 0}"> <span>Set value to another variable</span> </div> <div class="flex-row mb20" ng-repeat="saveParam in step.properties.set"> <div class="short-item mb10"> <custom-input ng-model="saveParam.from.key" placeholder="From key" is-required="true" title="From key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.from.scope" array="scopesSystem" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input ng-model="saveParam.to.key" placeholder="To key" title="To key" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParam.to.scope" array="scopes" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.set.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.set\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.set\')" ng-class="{disable : $index == step.properties.set.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'setParam\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.drop.length == 0}"> <span>Drop variable from storage</span> </div> <div class="flex-row mb20" ng-repeat="dropParam in step.properties.drop"> <div class="short-item mb10"> <custom-input ng-model="dropParam.key" placeholder="Key" is-required="true" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="dropParam.scope" array="scopes" opt-description="name" opt-value="value" title="With storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.drop.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.drop\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.drop\')" ng-class="{disable : $index == step.properties.drop.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'drop\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> </div> </div>'),a.put("views/scenarios/date.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
64 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Input date" ng-model="step.properties.input" title="Input date" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.operator" array="dateOperators" opt-description="name" opt-value="value" title="Operator " is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Difference</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Year(s)" ng-model="step.properties.date.year" title="Year(s)" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Month(s)" ng-model="step.properties.date.month" title="Month(s)" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Week(s)" ng-model="step.properties.date.week" title="Week(s)" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Day(s)" ng-model="step.properties.date.day" title="Day(s)" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Hour(s)" ng-model="step.properties.date.hour" title="Hour(s)" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Minute(s)" ng-model="step.properties.date.minute" title="Minute(s)" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.saveTo_text}}" ng-model="step.properties.save.key" is-required="true" title="{{main.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.save.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.output" array="outputFormat" opt-description="name" opt-value="value" title="Output date format" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="step.properties.output == \'format\'"> <custom-input placeholder="Format" ng-model="step.properties.format" is-required="true" title="Format" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/delay.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
64 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="Delay (ms)" type-input="number" ng-model="step.properties.delay" title="Delay (ms)" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/elasticsearch.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" array="elasticTypes" ng-change="esCommand(step.properties.command, $index)" opt-description="value" opt-value="name" title="Command" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.value}}" ng-model="step.properties.index.value" is-required="true" title="{{main.translations.value}}" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Index params fields value" ng-model="step.properties.fields.value" is-required="true" title="Index params fields value" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Index params fields type name" ng-model="step.properties.type" is-required="true" title="Index params fields type name" is-back-placeholder="true"> </custom-input> </div> </div> <div ng-switch="step.properties.command"> <div ng-switch-when="index"> <div class="bootom-text"> <span>Data to index</span> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.data.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Unique field to use as ID" ng-model="step.properties.id" title="Unique field to use as ID" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div ng-switch-when="like"> <div class="bootom-text"> <span>Get must ids list from storage</span> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.must.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.must.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Get must not ids list from storage</span> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.must_not.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.must_not.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Score value" ng-model="step.properties.score.value" title="Score value" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Get ID of item from storage</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.data.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Fields value" ng-model="step.properties.fields.value" is-required="true" title="Fields value" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.input.ke
64y" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> <div ng-switch-when="search"> <div class="bootom-text"> <span>Get search query from storage</span> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.data.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Save search result to storage</span> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.input.ke
64y" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> <div ng-switch-when="ids"> <div class="bootom-text"> <span>Get search query from storage</span> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.data.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Save search result to storage/span> </span></div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.input.ke
64y" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'), 65a.put("views/scenarios/entity.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="bootom-text"> <span>Check and save entities</span> </div> <div class="flex-row mb10" ng-repeat="item in step.properties.items"> <div class="short-item mb10"> <custom-dropdown ng-model="item.entity" array="entitiesList" opt-description="name" opt-value="entity_id" title="Entity" is-model-init="true" is-disabled="entitiesList.length == 0" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.saveTo_text}}" ng-model="item.save.key" title="{{main.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="item.save.scope" array="scopes" opt-description="name" opt-value="value" title="To Storage " is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="checker-container"> <div class="card-checker"> <input type="checkbox" ng-model="item.multiple" id="item_multiple_{{$index}}"> <label for="item_multiple_{{$index}}"> <span class="checker-ico"></span>Multiple </label> </div> </div> <div class="delete-item" ng-click="deleteEntity($parent.$index, $index)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="addEntity($index)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/existence.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
65 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.params.length == 0}"> <span>Check existence of the following data</span> </div> <div class="flex-row mb20" ng-repeat="exParam in step.properties.params"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="exParam.key" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="exParam.scope" array="scopes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.params.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="handleAddParam($index, \'existence\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/expression.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="medium-item mb10"> <custom-input placeholder="Expression" ng-model="step.properties.expression" title="Expression" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.saveTo_text}}" ng-model="step.properties.save.key" title="{{main.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.save.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/input.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
65 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="medium-item mb10"> <custom-input placeholder="Request with message" ng-model="step.properties.question" title="Request with message" type-input="textarea" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.saveTo_text}}" ng-model="step.properties.save.param" title="{{main.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.save.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.reply_type" array="replyTypes" opt-description="name" opt-value="value" title="Data type" is-model-init="true" placeholder="All types" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Retry message" title="Retry message" ng-change="clerWidget()" ng-model="step.properties.retry_message" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="section-bottom-toogle" ng-class="{active : aditional}"> <div ng-click="toogleAditional()"> <span>Additional options</span> <i class="material-icons">keyboard_arrow_down</i> </div> </div> <div class="section-bottom" ng-class="{active : aditional}"> <div class="dropdown-container section" ng-class="{active : aditional}"> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.phrases.length == 0}"> <span>Phrases</span> </div> <div class="flex-row mb20" ng-repeat="phrase in step.properties.phrases track by $index"> <div class="medium-item mb10"> <custom-input ng-model="phrase" is-required="true" placeholder="Phrase #{{$index +1}}" title="Phrase #{{$index +1}}" enter="editPhrase($parent.$index, $index, phrase)" ng-blur="editPhrase($parent.$index, $index, phrase)" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.phrases.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.phrases\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.phrases\')" ng-class="{disable : $index == step.properties.phrases.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="addPhrase($parent.$index, $index)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.quick_replies.length == 0 || !step.properties.quick_replies}"> <span>Quick replys</span> </div> <div class="flex-row mb20" ng-repeat="replie in step.properties.quick_replies track by $index"> <div class="short-item mb10"> <custom-dropdown ng-model="replie.type" array="quickRepliesTypes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleQuickRepliesTypes($parent.$index, replie.type, $index)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{main.translations.title}}" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" t
65ype-input="url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.quick_replies.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == step.properties.quick_replies.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="handleAddParam($index, \'addQuickReply\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.buttons.length == 0}" ng-init="fixTextBtn($index)"> <span>Buttons</span> </div> <div class="flex-row mb20" ng-repeat="btn in step.properties.buttons"> <div class="short-item mb10"> <custom-dropdown ng-model="btn.type" array="cardBtnTypes" opt-description="name" ng-change="switchCardBtnTypes($index, $parent.$parent.$index)" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input ng-model="btn.title" placeholder="{{main.translations.title}}" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="btn.content.value" placeholder="{{main.translations.value}}" title="{{main.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container checker-marging" ng-if="btn.type == \'link\'"> <div class="checker-container"> <div class="card-checker"> <input type="checkbox" ng-model="btn.webview" id="enable_messenger_extensions{{$index}}_{{$parent.$parent.$index}}"> <label for="enable_messenger_extensions{{$index}}_{{$parent.$parent.$index}}"> <span class="checker-ico"></span>{{main.translations.webview}} </label> </div> </div> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.buttons.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.buttons\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.buttons\')" ng-class="{disable : $index == step.properties.buttons.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'addBtnToInput\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text"> <span>Get buttons from array</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="With key" ng-model="step.properties.buttons_data.key" title="With key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.buttons_data.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.titleTemplate}}" ng-model="step.properties.title_template" title="{{main.translations.titleTemplate}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Content template" ng-model="step.properties.content_template" title="Content template" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div> </div>'),a.put("views/scenarios/intent.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
65 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/mail.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Email" ng-model="step.properties.email" title="Email" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.name" array="mailList" opt-description="title" opt-value="name" title="Template" ng-change="deleteMailVariables(step)" is-model-init="true" placeholder="Select template" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.name"> <div class="short-item mb10" ng-repeat="item in getMailVariables(step.properties.name)"> <custom-input placeholder="{{item}}" ng-model="step.properties.scope[item]" title="{{item}}" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/mode.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
65 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Reply" ng-model="step.properties.reply" title="Reply" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.operator" array="operators" opt-description="name" opt-value="value" title="Operator" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/nested.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20" ng-if="scenariosList.length"> <div class="medium-item mb10"> <custom-dropdown ng-model="step.properties.scenario" array="scenariosList" ng-init="::step.properties.scenario = findScenarioIdByName(step.properties.scenario)" opt-description="name" opt-value="value" title="Other scenario name" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'), 66a.put("views/scenarios/notification.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
66 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.type" array="[{name:\'Push\', value: \'push\'}, {name:\'Email\', value: \'email\'}]" opt-description="name" opt-value="value" title="{{main.translations.type}}" ng-change="typeSwitchOnNotification($index)" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="step.properties.type == \'email\'"> <custom-input placeholder="Email" ng-model="step.properties.email" title="Email" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.type == \'push\'"> <custom-dropdown ng-model="step.properties.user" array="operators" opt-description="name" opt-value="value" title="User" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title}}" ng-model="step.properties.title" title="{{main.translations.title}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="medium-item mb10"> <custom-input placeholder="Message" ng-model="step.properties.message" type-input="textarea" is-required="true" title="Message" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/offer.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
66 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="medium-item mb10"> <div class="custom-input dropdown open no-arrow"> <span class="placeholder" ng-class="{\'placeholder-small placeholder-active\' : step.properties.product_id || isActive}" style="top: 0"> Select product </span> <input type="text" ng-model="selectedProduct.name" ng-blur="isActive=false" ng-focus="isActive=true" uib-typeahead="product.name for product in searchProducts($viewValue) | limitTo:8" typeahead-on-select="offerProductSelect($item, $label, $index, step)"> <span class="bar"></span> </div> </div> </div> <div class="flex-row mb20"> <div class="medium-item mb10"> <custom-input placeholder="Button title" ng-model="step.properties.button_title" title="Button title" type-input="text" is-back-placeholder="true"> </custom-input> </div> <div class="medium-item mb10"> <custom-input placeholder="Offer Text" ng-model="step.properties.text" title="Offer text" type-input="textarea" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/order.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" array="orderCollections" opt-description="name" opt-value="value" title="Customer type" is-model-init="true" ng-change="handleOrderChange($index, step.properties.command)" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.command == \'variable\'"> <div class="short-item mb10"> <custom-input placeholder="Products" ng-model="step.properties.products.key" title="Products" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.products.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.command == \'variable\' || step.properties.command == \'cart\'"> <div class="short-item mb10"> <custom-input placeholder="Attachments" ng-model="step.properties.attachments.key" title="Attachments" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.attachments.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Response result" ng-model="step.properties.result.key" title="Response result" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.result.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/output.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
66 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="medium-item mb10"> <custom-input placeholder="Message template" ng-model="step.properties.template" title="Message template" type-input="textarea" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Data key" ng-model="step.properties.data.key" title="Data key" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.data.scope" array="scopes" opt-description="name" opt-value="value" title="To Storage " is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.type" array="types" opt-description="name" opt-value="value" title="Data type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/pattern.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="medium-item mb10"> <custom-input placeholder="Regex pattern" is-required="true" ng-model="step.properties.regex" title="Regex pattern" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.save.length == 0}"> <span>Save matches as</span> </div> <div class="flex-row mb20" ng-repeat="saveParamPattern in step.properties.save"> <div class="short-item mb10"> <custom-input is-required="true" ng-model="saveParamPattern.param" placeholder="With Key" title="With Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="saveParamPattern.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.save.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'save\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/product.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
66 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.leftMenu_category}}" ng-model="step.properties.category" title="{{main.translations.leftMenu_category}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Offset" ng-model="step.properties.offset" title="Offset" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Sort By</span> </div> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.sort.field" array="sortsFilter" opt-description="name" opt-value="value" title="Fields" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.sort.direction" array="sortsDirectionFilter" opt-description="name" opt-value="value" title="Direction" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Filter form variable</span> </div> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="Variable" ng-model="step.properties.filter.key" title="Variable" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.filter.scope" array="storageFilter" opt-description="name" opt-value="value" title="Storage" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-input placeholder="Saving to" ng-model="step.properties.input.ke
66y" title="Saving to" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="storageFilter" opt-description="name" opt-value="value" title="To Storage" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/rest.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Request url" ng-model="step.properties.url" is-required="true" title="Request url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.method" array="methods" opt-description="name" opt-value="value" title="Method type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text" class="mb20"> <span>Headers</span> </div> <div class="flex-row mb20" ng-repeat="(key, value) in step.properties.headers track by $index"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="key" is-required="true" ng-blur="handleHeadersChange($parent.$index,key,value,$index)" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.value}}" ng-model="value" is-required="true" title="{{main.translations.value}}" ng-blur="handleHeadersChange($parent.$index,key,value, null)" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container" ng-if="!$first"> <div class="delete-item" ng-click="deleteHeaderRest($parent.$parent.$index, key)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'header\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.authorization.type" array="authArray" opt-description="name" opt-value="value" title="Auth type" is-model-init="true" placeholder="Auth type" ng-change="authHandle($index, step.properties.authorization.type)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="step.properties.authorization.type == \'Basic\'"> <custom-input placeholder="User" ng-model="step.properties.authorization.data.user" is-required="true" title="User" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.authorization.type == \'Basic\'"> <custom-input placeholder="Password" ng-model="step.properties.authorization.data.password" is-required="true" title="Password" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.authorization.type == \'Digest\'"> <custom-input placeholder="User" ng-model="step.properties.authorization.data.user" is-required="true" title="User" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.authorization.type == \'Digest\'"> <custom-input placeholder="Password" ng-model="step.properties.authorization.data.password" is-required="true" title="Password" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.authorization.type == \'Bearer\'"> <custom-input placeholder="Key from storage" ng-model="step.properties.authorization.data.key" is-required="true" title="Key from storage" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.authorization.type == \'Bearer\'"> <custom-dropdown ng-model="step.properties.authorization.data.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="data_type" array="dataRest" opt-description="name" opt-value="value" title="Data type" is-model-init="false" ng-init="step.properties.data?dataRest[0] :dataRest[1]" placeholder="" ng-change="handleRaw($index, data_type)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.content" array="[{name:\'Raw\', value:\'raw\'}, {name:\'Form\', value:\'form\'}]" opt-description="name" opt-value="value" title="Content type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="!step.properties.data"> <div class="medium-item mb10"> <custom-input placeholder="Raw request body" ng-model="step.properties.raw.body" is-required="true" title="Raw request body" is-back-placeholder="true"> </custom-input> </div> </div> <div ng-if="step.properties.data"> <div class="bootom-text mb20"> <span>Properties with static value</span> </div> <div class="flex-row mb10" ng-repeat="dataItem in step.properties.data | filter: {type: \'static\'} track by $index"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="dataItem.key" is-required="true" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.value}}" ng-model="dataItem.value" is-required="true" title="{{main.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.data.splice(step.properties.data.indexOf(dataItem), 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'static\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text mb20"> <span>Properties With Values From Storage</span> </div> <div class="flex-row mb10" ng-repeat="dataItem in step.properties.data | filter: {type: \'variable\'} track by $index"> <div class="short-item mb10"> <custom-input placeholder="Property" ng-model="dataItem.key" is-required="true" title="Property" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="dataItem.param" is-required="true" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="dataItem.scope" array="scopes" opt-description="name" opt-value="value" title="From storage" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.data.splice(step.properties.data.indexOf(dataItem), 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'variable\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> <div class="flex-row mb20"> <div class="medium-item mb10"> <custom-dropdown ng-model="step.save_type" array="saveTypes" opt-description="name" opt-value="value" title="Save type" is-model-init="true" placeholder="" ng-change="handleRadio(step.save_type, $index)" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb30" ng-if="step.save_type == \'input\'"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="step.properties.input.ke
66y" is-required="true" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div ng-if="step.save_type == \'save\'" class="mb10"> <div class="flex-row mb10" ng-repeat="param in step.properties.save track by $index"> <div class="short-item mb10"> <custom-input placeholder="Key" ng-model="param.key" is-required="true" title="Key" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Param" ng-model="param.param" is-required="true" title="Param" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="param.scope" array="scopes" opt-description="name" opt-value="value" title="Storage type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.save.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row"> <div class="add-bot mb30" ng-click="handleAddParam($index, \'saveType\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'), 67a.put("views/scenarios/scenario.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb30 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10" ng-if="isScenariosList"> <custom-dropdown ng-model="step.properties.scenario" array="scenariosList" opt-description="name" ng-init="::step.properties.scenario = findScenarioIdByName(step.properties.scenario)" opt-value="value" title="Scenario" is-model-init="true" placeholder="" ng-change="step.properties.step = stepsList[step.properties.scenario][0].id" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="isStepsList"> <custom-dropdown ng-model="step.properties.step" array="stepsList[step.properties.scenario]" opt-description="name" opt-value="id" title="Step" is-model-init="true" ng-init="::step.properties.step = findStepIdByName(step.properties.step, step.properties.scenario)" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/schedule.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
67 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" ng-change="scheduleCommand(step.properties.command, $index)" array="commands" opt-description="name" opt-value="value" title="Command" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="Job name" ng-model="step.properties.tag" title="Job name" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="medium-item mb10"> <custom-input placeholder="Success message" ng-model="step.properties.reply" title="Success message" type-input="textarea" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="isScenariosList && step.properties.command !=\'stop\'"> <custom-dropdown ng-model="step.properties.scenario" array="scenariosList" ng-init="::step.properties.scenario = findScenarioIdByName(step.properties.scenario)" opt-description="name" opt-value="value" title="Name of scenario to run" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text" ng-if="step.properties.command == \'start\'"> <span>Period in Cron-style format</span> </div> <div ng-if="step.properties.command == \'start\'"> <cron-selection ng-model="step.properties.period" template="views/scenarios/custom-cron-selection.html"></cron-selection> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/soap.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true">
67 <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input placeholder="Wsdl url" ng-model="step.properties.url" title="Wsdl url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Method" ng-model="step.properties.method" title="Method" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="medium-item mb10"> <custom-input placeholder="Json format data" ng-model="step.properties.raw.body" title="Json format data" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.saveTo_text}}" ng-model="step.properties.input.key" title="{{main.translations.saveTo_text}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.input.scope" array="scopes" opt-description="name" opt-value="value" title="With type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/subscription.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-input placeholder="Reply" ng-model="step.properties.reply" is-required="true" title="Reply" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" array="subscriptionCommands" opt-description="name" opt-value="value" title="Command" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="flex-row mb20" ng-if="step.properties.command == \'enable\'"> <div class="short-item mb10" ng-if="step.properties.autoposting"> <custom-dropdown ng-model="step.properties.autoposting.command" array="autopostingCommands" opt-description="name" opt-value="value" title="Autoposting Command" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <div class="checker-container" style="{{step.properties.autoposting? \'bottom: -25px;\' : \'bottom: -5px;\'}} position: relative"> <div class="card-checker" ng-click="autopostingTumb($index)"> <input type="checkbox" ng-checked="step.properties.autoposting"> <label> <span class="checker-ico"></span>Autoposting </label> </div> </div> </div> </div> <div ng-if="step.properties.autoposting && step.properties.command == \'enable\'" ng-init="createVirualAutopost($index)"> <div class="bootom-text mb10"> <span>Autoposting Collections:</span> </div> <div class="flex-row mb10" ng-repeat="autopostingItem in step.properties.autoposting.collections track by $index"> <div class="short-item mb10"> <div style="position: relative; top: 2px">{{getAutopostingName(autopostingItem)}}</div> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="removeAutopostinCollection($parent.$index, $index)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb40" ng-if="step.properties.autoposting.collections[0] !==\'*\'"> <custom-dropdown ng-model="virualAutopost[$index].filterModel" array="virualAutopost[$index].filterArray" opt-description="name" opt-value="value" ng-change="autopostingChangeItem(virualAutopost[$index].filterModel, $index)" title="{{main.translations.addMore}} Collections" is-model-init="false" placeholder="All" is-back-placeholder="true" is-back-placeholder-active="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/switch.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
67 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div ng-repeat="(key, switch) in step.properties.switch" class="mb10"> <div class="bootom-text"> <span>Case #{{$index + 1}}</span> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-input ng-model="switch.name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-focus="renameCaseStart(switch.name)" ng-blur="renameCaseEnd(switch.name, $parent.$index, $index)" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="switch.operator" array="[{name:\'AND\',value:\'and\'}, {name:\'OR\',value:\'or\'},]" opt-description="name" opt-value="value" title="Logic operator" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="deleteCase($parent.$index, $index) "> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="bootom-text" ng-class="{\'mb20\' :switch.conditions.length == 0}"> <span>Conditions</span> </div> <div class="flex-row mb10" ng-repeat="condition in switch.conditions"> <div class="short-item mb10"> <custom-input placeholder="Parameter" ng-model="condition.value.param" title="Parameter" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-dropdown ng-model="condition.value.scope" array="scopes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="condition.operator" array="[{name:\'equal\',value:\'EQUAL\'},{name:\'ne\',value:\'NE\'},{name:\'gt\',value:\'GT\'},{name:\'gte\',value:\'GTE\'},{name:\'lt\',value:\'LT\'},{name:\'lte\',value:\'LTE\'},{name:\'regex\',value:\'REGEX\'},{name:\'contains\',value:\'CONTAINS\'}]" opt-description="value" opt-value="name" title="Condition " is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.value}}" is-required="true" ng-model="condition.target" title="{{main.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="checker-container"> <div class="card-checker"> <input type="checkbox" ng-model="condition.true" ng-true-value="false" ng-false-value="true" id="condition_{{$parent.$parent.$index}}_{{$parent.$index}}_{{$index}}"> <label for="condition_{{$parent.$parent.$index}}_{{$parent.$index}}_{{$index}}"> <span class="checker-ico"></span>Inverted value </label> </div> </div> <div class="delete-item" ng-click="deleteSwitchCondition($parent.$parent.$index,$parent.$index, $index)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="addSwitchCondition($parent.$index, key)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> Add condition </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="addSwitchCase($parent.$index, $index)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> Add case </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10"> <custom-input placeholder="Default" ng-model="step.action.default" title="Default" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-repeat="switch in step.properties.switch"> <custom-input placeholder="{{switch.name}}" ng-model="step.action[switch.name]" title="{{switch.name}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/tag.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons">
67 <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.tag" array="tags" opt-description="name" opt-value="name" title="Tag" is-model-init="true" placeholder="Select tag..." is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.command" array="[{name:\'Add\', value: \'add\'}, {name:\'Remove\', value: \'remove\'}]" opt-description="name" opt-value="value" title="Command" is-model-init="true" placeholder="Select command..." is-back-placeholder="true"> </custom-dropdown> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/scenarios/text.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb20"> <div class="medium-item mb10"> <custom-input placeholder="Output message" ng-model="step.properties.content" title="Output message" type-input="textarea" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="section-bottom-toogle" ng-class="{active : aditional}"> <div ng-click="toogleAditional()"> <span>Additional options</span> <i class="material-icons">keyboard_arrow_down</i> </div> </div> <div class="section-bottom" ng-class="{active : aditional}"> <div class="dropdown-container section" ng-class="{active : aditional}"> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.phrases.length == 0}"> <span>Phrases</span> </div> <div class="flex-row mb20" ng-repeat="phrase in step.properties.phrases track by $index"> <div class="medium-item mb10"> <custom-input ng-model="phrase" is-required="true" placeholder="Phrase #{{$index +1}}" enter="editPhrase($parent.$index, $index, phrase)" ng-blur="editPhrase($parent.$index, $index, phrase)" title="Phrase #{{$index +1}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.phrases.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional">
67 <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.phrases\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.phrases\')" ng-class="{disable : $index == step.properties.phrases.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="addPhrase($parent.$index, $index)"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.buttons.length == 0}" ng-init="fixTextBtn($index)"> <span>Buttons</span> </div> <div class="flex-row mb20" ng-repeat="btn in step.properties.buttons"> <div class="short-item mb10"> <custom-dropdown ng-model="btn.type" array="cardBtnTypes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="switchCardBtnTypes($index, $parent.$parent.$index)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input ng-model="btn.title" is-required="true" placeholder="{{main.translations.title}}" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input ng-model="btn.content.value" is-required="true" placeholder="{{main.translations.value}}" title="{{main.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container checker-marging" ng-if="btn.type == \'link\'"> <div class="checker-container"> <div class="card-checker"> <input type="checkbox" ng-model="btn.webview" id="enable_messenger_extensions{{$index}}_{{$parent.$parent.$index}}"> <label for="enable_messenger_extensions{{$index}}_{{$parent.$parent.$index}}"> <span class="checker-ico"></span>{{main.translations.webview}} </label> </div> </div> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.buttons.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional"> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.buttons\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.buttons\')" ng-class="{disable : $index == step.properties.buttons.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row mb30"> <div class="add-bot" ng-click="handleAddParam($index, \'addBtnToInput\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> <div class="bootom-text" ng-class="{\'mb20\' : step.properties.quick_replies.length == 0 || !step.properties.quick_replies}"> <span>Quick replys</span> </div> <div class="flex-row mb20" ng-repeat="replie in step.properties.quick_replies track by $index"> <div class="short-item mb10"> <custom-dropdown ng-model="replie.type" array="quickRepliesTypes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleQuickRepliesTypes($parent.$index, replie.type, $index)" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{main.translations.title}}" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" type-input="url" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10 buttons-container"> <div class="delete-item" ng-click="step.properties.quick_replies.splice($index, 1)"> <i class="material-icons"> close </i> <span>Remove</span> </div> <span class="card-move-buttons additional">
67 <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'up\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponentButton($parent.$parent.$index, \'down\', $index, \'properties.quick_replies\')" ng-class="{disable : $index == step.properties.quick_replies.length - 1}"> keyboard_arrow_down </i> </span> </div> </div> <div class="flex-row"> <div class="add-bot" ng-click="handleAddParam($index, \'addQuickReply\')"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> </div> </div>'), 68a.put("views/scenarios/transaction.html",'<div class="scenario-card"> <div class="section section-header" ng-class="{minimize : !cardSection}" ng-click="toogleCardSection(); $event.stopPropagation();" dnd-draggable="step" dnd-effect-allowed="all" dnd-dragstart="dndDragstart($index)" dnd-selected="selected = step"> <span class="step-header"> <span ng-if="cardSection">Step </span> {{$index + 1}}<span ng-if="!cardSection">. {{step.name}}</span> </span> <span class="step-name"> {{step.component}} </span> <span class="card-move-buttons"> <i class="material-icons move" ng-click="moveComponent($index, \'up\'); $event.stopPropagation();" ng-class="{disable : $index == 0}"> keyboard_arrow_up </i> <i class="material-icons move" ng-click="moveComponent($index, \'down\'); $event.stopPropagation();" ng-class="{disable : $index == scenarios.steps.length - 1}"> keyboard_arrow_down </i> <i class="material-icons delete" ng-click="deleteComponent($index); $event.stopPropagation();"> close </i> </span> </div> <div class="section-container" ng-class="{active : cardSection}"> <div class="section" ng-if="isFirstOpen"> <div class="mb20 flex-row"> <div class="short-item mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="step.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10"> <custom-input placeholder="Step ID" ng-model="step.id" title="Step ID" ng-disabled="true" is-back-placeholder="true"> <i class="material-icons content-copy" ng-click="copyIconClic()" ngclipboard data-clipboard-text="{{step.id}}"> {{copyIcon}} </i> </custom-input> </div> </div> <div class="flex-row mb10"> <div class="short-item mb10"> <custom-dropdown ng-model="step.properties.action" array="transactionActionList" opt-description="name" opt-value="value" placeholder="" title="Action type" is-model-init="true" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item mb10"> <custom-input placeholder="value" ng-model="step.properties.value" title="value" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item mb10" ng-if="step.properties.action === \'transfer\'"> <custom-input placeholder="Transfer to" ng-model="step.properties.to" title="Transfer to" is-back-placeholder="true"> </custom-input> </div> </div> <div class="bootom-text"> <span>Actions</span> </div> <div class="flex-row"> <div class="short-item mb10" ng-repeat="(key, value) in step.action"> <custom-input placeholder="{{key}}" ng-model="step.action[key]" title="{{key}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/select.template.html",'<div class="ng-select-wrapper" ng-class="{\'ng-select-opened\': vm.selectOpened}" ng-click="vm.toggleOpened()"> <div class="ng-select-value"> {{vm.viewValue.length ? vm.ngModel[vm.viewValue] : vm.ngModel}} </div> <ul class="ng-select-options"> <li class="ng-select-option" ng-repeat="option in vm.options | noContain: vm.ngModel" ng-click="vm.selectValue(option)"> {{vm.optionValue ? option[vm.optionValue] : option}} </li> </ul> </div> <div class="ng-select-overlay" ng-if="vm.selectOpened" ng-click="vm.toggleOpened()"></div>'),a.put("views/sequence-create.html",'<h2 class="mb40"> Reminder steps <a data-toggle="modal" style="{{check(\'all\')? \'cursor: not-allowed;\' : \'\'}}" data-target="#editTranslations{{check(\'all\')? \'Disabled\' : \'\'}}" class="add-bot" ng-click="newTranslations()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="container-reminder-steps-body"> <div class="cards"> </div> </div>'),a.put("views/sequence-detail.html",'<h2 class="mb40"> {{sequence.title}} steps <a data-toggle="modal" style="{{check(\'all\')? \'cursor: n
68ot-allowed;\' : \'\'}}" data-target="#editTranslations{{check(\'all\')? \'Disabled\' : \'\'}}" class="add-bot" ng-click="newTranslations()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="container-reminder-steps-body"> <div class="cards"> <div class="row"> <div class="card card-col1"> \x3c!-- card-col(1|2|3) --\x3e <div class="sticker sticker-grey"> <div class="pop-up"> <div class="mb0"> When user do (<a>NOT</a>) </div> <div class="mt-10"> <custom-dropdown ng-model="data.action" array="actionList" opt-description="name" opt-value="value" title="Select Action" is-model-init="true" placeholder="Select Action" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-dropdown ng-model="data.withTitle" array="withTitleList" opt-description="name" opt-value="value" title="With Title" is-model-init="true" placeholder="With Title" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10 data-block"> <sapn class="data-title">Wait for Action</sapn> <div class="data-time"> <custom-input ng-model="data.time" placeholder="Wait for Action" title="Wait for Action" is-back-placeholder="false"></custom-input> </div> <div class="data-type"> <custom-dropdown ng-model="data.timeType" array="timeTypeList" opt-description="name" opt-value="value" is-model-init="true" is-back-placeholder="false"> </custom-dropdown> </div> </div> </div> <span>Set Action</span> </div> <div class="switch switch-on"></div> <div class="connections"> <span class="connection-right active"></span> <span class="connection-right-bottom active"></span> <span class="connection-bottom active"></span> </div> \x3c!-- connection-left(-top|-bottom) connection-right(-top|-bottom) connection-top(-top|-bottom) connection-bottom(-top|-bottom) --\x3e <div class="reminder"> <div class="pop-up"> <div class="mb0"> Start this step at least </div> <div class="mb0 data-block data-block-row1"> <div class="data-time"> <custom-input ng-model="newTitle.title" is-back-placeholder="false"></custom-input> </div> <div class="data-type"> <custom-dropdown ng-model="bot.blockchain.token.type" array="tokenTypes" opt-description="name" opt-value="value" is-model-init="true" is-back-placeholder="false"> </custom-dropdown> </div> </div> <div class="mb0"> after a previous message </div> <div class="mb0"> <custom-dropdown ng-model="bot.blockchain.token.type" array="tokenTypes" opt-description="name" opt-value="value" is-model-init="true" is-back-placeholder="false"> </custom-dropdown> </div> <div class="mb20 data-block data-block-row2"> <div class="data-time"> <custom-input ng-model="newTitle.title" is-back-placeholder="false"></custom-input> </div> <div class="data-text">and</div> <div class="data-time"> <custom-input ng-model="newTitle.title" is-back-placeholder="false"></custom-input> </div> </div> <div class="mb10"> on <a>Mon</a>, <a>Tue</a>, <a>Wed</a>, <a>Thu</a>, <a>Fri</a>, <a>Sat</a> and <a>Sun</a> </div> </div> Immediately </div> <div class="title"> <div class="pop-up"> <div class="mb0"> What bot will do? </div> <div class="mt-10"> <custom-dropdown ng-model="bot.blockchain.token.type" array="tokenTypes" opt-description="name" opt-value="value" title="Select Action" is-model-init="true" placeholder="Select Action" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb25"> <custom-dropdown ng-model="bot.blockchain.token.type" array="tokenTypes" opt-description="name" opt-value="value" title="With Title" is-model-init="true" placeholder="With Title" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb0"> <div class="card-checker"> <input type="checkbox" ng-model="stripe.active" id="stripe_active"> <label for="stripe_active"> <span class="checker-ico"></span> <span>Finish sequence</span> </label> </div> </div> </div> <span>Send</span> <span class="active">Promo</span> <span>broadcast</span> </div> <div class="info"> <ul> <li class="block-chat-bubble"> <i class="material-icons">chat_bubble</i> 81 </li> <li class="block-touch-app"> <i class="material-icons">touch_app</i> 33 </li> <li class="block-or-icons"> <i class="or-icons">or</i> 45% </li> <li class="block-ctr-icons"> <i class="ctr-icons">ctr</i> 17% </li> </ul> </div> </div> <div class="card card-col2"> \x3c!-- card-col(1|2|3) --\x3e <div class="sticker sticker-orange">Clicked <span>âVideoâ</span></div> \x3c!-- sticker-orange sticker-blue sticker-red --\x3e <div class="switch switch-on"></div> <div class="connections"> <span class="connection-left-bottom"></span> <span class="connection-right active"></span> <span class="connection-right-bottom active"></span> <span class="connection-bottom"></span> </div> \x3c!-- connection-left(-top|-bottom) connection-right(-top|-bottom) connection-top(-top|-bottom) connection-bottom(-top|-bottom) --\x3e <div class="reminder">Immediately</div> <div class="title"> <span>Start</span> <span class="active">Engage</span> <span>scenario</span> </div> <div class="info"> <ul> <li class="block-chat-bubble"> <i class="material-icons">chat_bubble</i> 33 </li> <li class="block-touch-app"> <i class="material-icons">touch_app</i> 8 </li> <li class="block-or-icons"> <i class="or-icons">or</i> 39% </li> <li class="block-ctr-icons"> <i class="ctr-icons">ctr</i> 5% </li> </ul> </div> </div> <div class="card card-col3"> \x3c!-- card-col(1|2|3) --\x3e <div class="sticker sticker-orange"><span>On click</span></div> \x3c!-- sticker-orange sticker-blue sticker-red --\x3e <div class="switch switch-on"></div> <div class="connections"> <span class="connection-left-bottom"></span> <span class="connection-bottom active"></span> </div> \x3c!-- connection-left(-top|-bottom) connection-right(-top|-bottom) connection-top(-top|-bottom) connection-bottom(-top|-bottom) --\x3e <div class="reminder">Immediately</div> <div class="title"> <span>Start</span> <span class="active">HotSell</span> <span>scenario</span> </div> <div class="info"> <ul> <li class="block-chat-bubble"> <i class="material-icons">chat_bubble</i> 8 </li> <li class="block-touch-app"> <i class="material-icons">touch_app</i> 8 </li> <li class="block-or-icons"> <i class="or-icons">or</i> 100% </li> <li class="block-ctr-icons"> <i class="ctr-icons">ctr</i> 67% </li> </ul> </div> </div> </div> <div class="row"> <div class="card card-col1"> \x3c!-- card-col(1|2|3) --\x3e <div class="sticker sticker-blue"><span>Called for help</span></div> \x3c!-- sticker-orange sticker-blue sticker-red --\x3e <div class="switch switch-on"></div> <div class="connections"> <span class="connection-right-top"></span> <span class="connection-right"></span> <span class="connection-right-bottom"></span> <span class="connection-bottom connection-bottom-to-right active"> <span class="circle"></span> </span> </div> \x3c!-- connection-left(-top|-bottom) connection-right(-top|-bottom) connection-top(-top|-bottom) connection-bottom(-top|-bottom) --\x3e <div class="reminder">After 2 hours</div> <div class="title"> <span>Start</span> <span class="active">Priority</span> <span>scenario</span> </div> <div class="info"> <ul> <li class="block-chat-bubble"> <i class="material-icons">chat_bubble</i> 8 </li> <li class="block-touch-app"> <i class="material-icons">touch_app</i> 0 </li> <li class="block-or-icons"> <i class="or-icons">or</i> 0 </li> <li class="block-ctr-icons"> <i class="ctr-icons">ctr</i> 0% </li> </ul> </div> </div> <div class="card card-col2 title-line-2"> \x3c!-- card-col(1|2|3) --\x3e <div class="switch switch-on"></div> <div class="connections"> <span class="connection-left"></span> <span class="connection-left-bottom"></span> <span class="connection-right-top"></span> <span class="connection-right active"></span> <span class="connection-right-bottom active"></span> <span class="connection-bottom active"></span> </div> \x3c!-- connection-left(-top|-bottom) connection-right(-top|-bottom) connection-top(-top|-bottom) connection-bottom(-top|-bottom) --\x3e <div class="reminder">After 2 hours</div> <div class="title"> <span>Send</span> <span class="active">Instructions</span> <span>broadcast</span> </div> <div class="info"> <ul> <li class="block-chat-bubble"> <i class="material-icons">chat_bubble</i> 48 </li> <li class="block-touch-app"> <i class="material-icons">touch_app</i> 8 </li> <li class="block-or-icons"> <i class="or-icons">or</i> 39 </li> <li class="block-ctr-icons"> <i class="ctr-icons">ctr</i> 5% </li> </ul> </div> </div> <div class="card card-col3"> \x3c!-- card-col(1|2|3) --\x3e <div class="switch switch-on"></div> <div class="connections"> <span class="connection-bottom connection-bottom-to-left active"> <span class="circle"></span> </span> </div> \x3c!-- connection-left(-top|-bottom) connection-right(-top|-bottom) connection-top(-top|-bottom) connection-bottom(-top|-bottom) --\x3e <div class="reminder">After 30 minutes</div> <div class="title"> <span>Start</span> <span class="active">Operator</span> <span>scenario</span> </div> <div class="info"> <ul> <li class="block-chat-bubble"> <i class="material-icons">chat_bubble</i> 25 </li> <li class="block-touch-app"> <i class="material-icons">touch_app</i> 0 </li> <li class="block-or-icons"> <i class="or-icons">or</i> 0 </li> <li class="block-ctr-icons"> <i class="ctr-icons">ctr</i> 0% </li> </ul> </div> </div> </div> <div class="row"> <div class="card-col1"></div> <div class="card card-col2"> \x3c!-- card-col(1|2|3) --\x3e <div class="switch switch-on"></div> <div class="sticker sticker-orange"><span>On click</span></div> \x3c!-- sticker-orange sticker-blue sticker-red --\x3e <div class="connections"> <span class="connection-left"></span> <span class="connection-left-top"></span> <span class="connection-left-bottom"></span> <span class="connection-right-top active"></span> <span class="connection-right"></span> <span class="connection-right-bottom"></span> <span class="connection-bottom"></span> </div> \x3c!-- connection-left(-top|-bottom) connection-right(-top|-bottom) connection-top(-top|-bottom) connection-bottom(-top|-bottom) --\x3e <div class="reminder">Immediately</div> <div class="title"> <span>Start</span> <span class="active">Priority</span> <span>scenario</span> </div> <div class="info"> <ul> <li class="block-chat-bubble"> <i class="material-icons">chat_bubble</i> 8 </li> <li class="block-touch-app"> <i class="material-icons">touch_app</i> 0 </li> <li class="block-or-icons"> <i class="or-icons">or</i> 0 </li> <li class="block-ctr-icons"> <i class="ctr-icons">ctr</i> 0% </li> </ul> </div> </div> <div class="card card-col3"> \x3c!-- card-col(1|2|3) --\x3e <div class="switch switch-on"></div> <div class="connections"> <span class="connection-left"></span> <span class="connection-left-bottom"></span> <span class="connection-bottom active"></span> </div> \x3c!-- connection-left(-top|-bottom) connection-right(-top|-bottom) connection-top(-top|-bottom) connection-bottom(-top|-bottom) --\x3e <div class="reminder">After 2 hours</div> <div class="title"> <span>Start</span> <span class="active">ColdSell</span> <span>scenario</span> </div> <div class="info"> <ul> <li class="block-chat-bubble"> <i class="material-icons">chat_bubble</i> 48 </li> <li class="block-touch-app"> <i class="material-icons">touch_app</i> 8 </li> <li class="block-or-icons"> <i class="or-icons">or</i> 39% </li> <li class="block-ctr-icons"> <i class="ctr-icons">ctr</i> 5% </li> </ul> </div> </div> </div> <div class="row"> <div class="card-col1"></div> <div class="card-col2"></div> <div class="card card-col3 card-off title-line-2"> \x3c!-- card-col(1|2|3) --\x3e <div class="switch switch-off"></div> <div class="connections"> <span class="connection-left"></span> <span class="connection-left-top"></span> <span class="connection-left-bottom"></span> <span class="connection-bottom"></span> </div> \x3c!-- connection-left(-top|-bottom) connection-right(-top|-bottom) connection-top(-top|-bottom) connection-bottom(-top|-bottom) --\x3e <div class="reminder">After 1 day</div> <div class="title"> <span>Send</span> <span class="active">Reminder (Draft)</span> <span>broadcast</span> </div> <div class="info"> <ul> <li class="block-chat-bubble"> <i class="material-icons">chat_bubble</i> 62 </li> <li class="block-touch-app"> <i class="material-icons">touch_app</i> 0 </li> <li class="block-or-icons"> <i class="or-icons">or</i> 0 </li> <li class="block-ctr-icons"> <i class="ctr-icons">ctr</i> 0% </li> </ul> </div> </div> </div> </div> </div>'),a.put("views/sequences.html",'<div class="brn-table-wrap learning-entities"> <div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 20px 45px 51px" height="100%"> <div class="nav-sidebar-content-ofset" style="padding-right: 0px"> <h2>Sequences</h2> <div ng-repeat="sequence in sequences" class="card-checker"> <input ng-if="!editedSequences[sequence.name]" type="checkbox" ng-checked="check(sequence.name)" ng-click="goto(bot_id, sequence.name)"> <label ng-click="goto(bot_id, sequence.name)" ng-if="!editedSequences[sequence.name]"> <span class="checker-ico checker-ico-right"></span> <span>{{sequence.title}}</span> </label> <label ng-if="editedSequences[sequence.name]"> <custom-input style="width: 144px; min-width: 144px" ng-model="newTitle.title" placeholder="Edit title" title="Edit title" is-back-placeholder="true"></custom-input> </label> <div class="item-buttons" style="width: 125px"> <span ng-click="deleteSequence(sequence)" ng-if="!editedSequences[sequence.name]"> <i class="material-icons">delete</i> </span> <span ng-click="copySequence(sequence)" ng-if="!editedSequences[sequence.name]"> <i class="material-icons">filter_none</i> </span> <span ng-click="editTitle(sequence)" ng-if="!editedSequences[sequence.name]"> <i class="material-icons">edit</i> </span> <span ng-click="editSubmit(sequence)" ng-if="editedSequences[sequence.name]"> <i class="material-icons">done</i> </span> <span ng-click="editDiscard(sequence)" ng-if="editedSequences[sequence.name]"> <i class="material-icons">clear</i> </span> </div> </div> </div> <span style="margin-left: -6px" class="add-bot" ng-click="addSequence()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </span> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest" ui-view=""> </div> </div> </div>'),a.put("views/sessions.html",'<div> <div class="row-flex"> <div class="flex-col flex-col-p col-all"> <div class="mb-card"> <h2 class="mb50">New/Existing sessions timeline</h2> <div class="card card-all"> <div class="card-body"> <basic-line data="baseUsers" style="display: block; width: 100%"></basic-line> </div> </div> </div> </div> </div> <div class="row-flex"> <div class="flex-col flex-col-p col-all"> <div class="mb-card"> <h2 class="mb50">Sessions per provider</h2> <div class="card card-all"> <div class="card-body"> <basic-line data="usersPerWidget" style="display: block; width: 100%"></basic-line> </div> </div> </div> </div> </div> </div>'),a.put("views/settings-blockchain.html",'<div class="mb50"> <div class="flex-row"> <div class="settings-card-wrap"> <div class="settings-card"> <h2 class="mb50">{{main.translations.leftMenu_general}}</h2> <div class="mb10"> <custom-input placeholder="{{main.translations.settings_tokenName}}" ng-model="bot.blockchain.token.name" title="{{main.translations.settings_tokenName}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.settings_tokenSymbol}}" ng-model="bot.blockchain.token.symbol" title="{{main.translations.settings_tokenSymbol}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-model="bot.blockchain.token.type" array="tokenTypes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb25"> <custom-input placeholder="{{main.translations.store_price}}" type-input="number" ng-model="bot.blockchain.token.price" title="{{main.translations.store_price}}" is-back-placeholder="true"> </custom-input> </div> <div class="card-checker mb20
68"> <input type="checkbox" ng-model="bot.blockchain.active" id="protection-bot" class="ng-pristine ng-untouched ng-valid"> <label for="protection-bot"> <span class="checker-ico"></span> {{main.translations.active}} </label> </div> </div> </div> </div> <button class="brn-btn brn-primary" ng-click="updateToken()"> {{main.translations.save_btn}} </button> </div>'),a.put("views/settings-catalog.html",'<div class="flex-row settings-connections"> <div class="settings-card-wrap mb25 big"> <div class="settings-card big"> <h2 class="mb50"> {{main.translations.leftMenu_general}} </h2> <div class="custom-input auto-height mb60"> <span class="placeholder placeholder-small placeholder-active"> {{main.translations.catalog_about}} </span> <textarea ng-model="bot.description" ng-blur="updateBot()" placeholder="{{main.translations.catalog_textPlaceholder}}">\n </textarea> <span class="bar"></span> </div> <div class="mb20"> <custom-dropdown ng-model="bot.category" array="categories" opt-description="title" opt-value="name" title="{{main.translations.leftMenu_category}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div style="cursor:pointer" class="mb20" ngf-accept="\'image/*\'" ngf-select="addFile($file, \'image\', el)"> <custom-input is-readonly="true" placeholder="{{main.translations.catalog_backgroundPlaceholder}}" ng-model="bot.cover_image" title="{{main.translations.catalog_backgroundPlaceholder}}" is-back-placeholder="true"> <i class="material-icons" style="opacity: 0.3; font-size: 16px; top: 6px; position: relative">image</i> </custom-input> </div> <div class="card-checker mb20"> <input type="checkbox" ng-model="bot.is_template" ng-change="handleTemplate(bot.is_template)" id="inCatalog" class="ng-pristine ng-untouched ng-valid"> <label for="inCatalog"> <span class="checker-ico"></span>{{main.translations.catalog_template}} </label> </div> <button class="brn-btn brn-primary mb60" ng-click="updateBot()"> {{main.translations.save_btn}} </button> </div> </div> <div class="settings-card-wrap" style="flex-basis: auto"> <div class="settings-card mb25" style="max-width: max-content"> <h2 class="mb60"> {{main.translations.catalog_screenshotsHeder}} </h2> <div class="catalog-screenshot-container mb60"> <div class="catalog-screenshot settings" ng-repeat="image in screenshots"> <div class="delete-container"> <img src="{{image.url}}" alt="{{image.name}}"> <div class="delete-hover" ng-click="removeScreenshot(image.name)"> <div class="icon-container"> <i class="material-icons icon">remove_circle</i> <span class="text"> {{main.translations.catalog_removeScreenshotsText}} </span> </div> </div> </div> </div> <div class="catalog-screenshot" ngf-select="uploadScreenshot($file)" ngf-drop="uploadScreenshot($file)" accept="image/*"> <div class="add-item"> <div class="icon-container"> <i class="material-icons icon">add_circle</i> <span class="text"> {{main.translations.catalog_addScreenshotsText}} </span> </div> </div> </div> </div> </div> </div></div>'),a.put("views/settings-connections.html",'<div class="flex-row settings-connections"> <div class="settings-card-wrap mb25 big"> <div class="settings-card big"> <h2 class="mb50">{{main.translations.leftMenu_connections}}</h2> <ul class="main-socials settings-social" ng-if="!widgetsLoading"> <li class="messenger"> <span ng-class="{inactive: !botSocials.messenger.isActivated, active : botSocials.messenger.isActivated}" ng-click="activateFacebook()"> <img src="images/socials/messenger.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.messenger.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.messenger.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="telegram"> <span ng-class="{inactive: !botSocials.telegram.isActivated, active : botSocials.telegram.isActivated}" ng-click="activateTelegram()"> <img src="images/socials/telegram.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.telegram.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.telegram.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="code"> <span ng-class="{inactive: !botSocials.widget.isActivated, active : botSocials.widget.isActivated}" ng-click="activateWidget()"> <img src="images/socials/widget.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.widget.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.widget.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="kik"> <span ng-class="{inactive: !botSocials.kik.isActivated, active : botSocials.kik.isActivated}" ng-click="activateKik()"> <img src="images/socials/kik.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.kik.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.kik.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="slack"> <span ng-class="{inactive: !botSocials.slack.isActivated, active : botSocials.slack.isActivated}" ng-click="activateSlack()"> <img src="images/socials/slack.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.slack.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.slack.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="line"> <span ng-class="{inactive: !botSocials.line.isActivated, active : botSocials.line.isActivated}" ng-click="activateLine()"> <img src="images/socials/line.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.line.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.line.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="skype"> <span ng-class="{inactive: !botSocials.skype.isActivated, active : botSocials.skype.isActivated}" ng-click="activateSkype()"> <img src="images/socials/skype.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.skype.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.skype.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="wechat"> <span ng-class="{inactive: !botSocials.wechat.isActivated, active : botSocials.wechat.isActivated}" ng-click="activateWechat()"> <img src="images/socials/we-chat.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.wechat.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.wechat.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="viber"> <span ng-class="{inactive: !botSocials.viber.isActivated, active : botSocials.viber.isActivated}" ng-click="activateViber()"> <img src="images/socials/viber.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.viber.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.viber.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="twitter"> <span ng-class="{inactive: !botSocials.twitter.isActivated, active : botSocials.twitter.isActivated}" ng-click="activateTwitter()"> <img src="images/socials/twitter.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.twitter.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.twitter.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="instagram"> <span ng-class="{inactive: !botSocials.instagram.isActivated, active : botSocials.instagram.isActivated}" ng-click="activateInstagram()"> <img src="images/socials/instagram.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.instagram.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.instagram.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="email" ng-if="isAdmin"> <span ng-class="{inactive: !botSocials.email.isActivated, active : botSocials.email.isActivated}" ng-click="activateEmail()"> <img src="images/socials/email.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.email.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.email.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="linkedin" ng-if="isAdmin"> <span ng-class="{inactive: !botSocials.linkedin.isActivated, active : botSocials.linkedin.isActivated}" ng-click="activateLinkedin()"> <img src="images/socials/linkedin.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.linkedin.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.linkedin.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="reddit" ng-if="isAdmin"> <span ng-class="{inactive: !botSocials.reddit.isActivated, active : botSocials.reddit.isActivated}" ng-click="activateReddit()"> <img src="images/socials/reddit.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.reddit.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.reddit.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="pinterest" ng-if="isAdmin"> <span ng-class="{inactive: !botSocials.pinterest.isActivated, active : botSocials.pinterest.isActivated}" ng-click="activatePinterest()"> <img src="images/socials/pinterest.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.pinterest.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.pinterest.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="twilio" ng-if="isAdmin"> <span ng-class="{inactive: !botSocials.twilio.isActivated, active : botSocials.twilio.isActivated}" ng-click="activateTwilio()"> <img src="images/socials/twilio.svg" alt=""> <div class="hover-icon"> <i ng-if="botSocials.twilio.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.twilio.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> <li class="twilio" ng-if="isAdmin"> <span ng-class="{inactive: !botSocials.shopify.isActivated, active : botSocials.shopify.isActivated}" ng-click="activateShopify()"> <img src="images/socials/shopify.png" alt=""> <div class="hover-icon"> <i ng-if="botSocials.twilio.isActivated" class="material-icons">settings</i> <i ng-if="!botSocials.twilio.isActivated" class="material-icons add">add</i> <div></div> </div> </span> </li> </ul> </div> </div> <div class="settings-card-wrap" ng-if="isAdmin"> <div class="settings-card mb25"> <h2 class="mb50">{{main.translations.settings_supportTeam}}</h2> <div class="mb50"> <div class="custom-input dropdown open no-arrow"> <span class="placeholder" ng-class="{\'placeholder-small placeholder-active\' : selected.user || isActive}"> {{main.translations.settings_addOperator}} </span> <input type="text" ng-model="selected.user" ng-model-options="{ debounce: 500 }" ng-blur="isActive=false" ng-focus="isActive=true" uib-typeahead="user as user.name for user in getSearchUsers($viewValue)"> <span class="bar"></span> <div class="custom-input-container"> <i ng-click="addMember()" class="material-icons" style="color: #94cc25">add</i> </div> </div> </div> <ul ng-if="team" class="bot-team"> <li ng-repeat="member in team track by $index"> <div> <img class="avatar" ng-src="{{member.avatar?(member.avatar):(\'images/no-avatar-user.png\')}}"> <span style="position: absolute; top: 7px; left: 48px"> {{member.name}} </span> <i ng-click="removeMember(member.id)" class="material-icons pull-right" style="color:#ff6363;cursor:pointer;font-size:16px;top:8px;position:relative"> close </i> </div> </li> </ul> </div> </div> </div>'), 69a.put("views/settings-general.html",'<div class="flex-row"> <div class="settings-card-wrap mb25"> <div class="settings-card"> <h2 class="mb60">{{main.translations.leftMenu_general}}</h2> <div class="bot-img mb10" ngf-select="uploadImg($file)" ngf-drop="uploadImg($file)" ngf-pattern="image/*" ng-click="openUrl()"> <img ng-src="{{bot.image ? (bot.image):(\'images/tf.png\')}}" alt=""> <div class="icon"> <ng-include src="\'images/svg/ic_add_a_photo_white_24px.svg\'"></ng-include> </div> <div class="overlay"></div> </div> <div class="mb30"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="bot.name" title="{{main.translations.title_name}}" ng-blur="updateBot()" enter="updateBot()" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{main.translations.general_nicname}}" ng-model="bot.username" title="{{main.translations.general_nicname}}" ng-blur="updateBot()" enter="updateBot()" is-back-placeholder="true"> </custom-input> </div> <div class="card-checker mb20" ng-click="handleBotNotifications()"> <input type="checkbox" ng-model="bot.settings.notifications" class="ng-pristine ng-untouched ng-valid"> <label for="inCatalog"> <span class="checker-ico"></span>{{main.translations.general_allowNotifications}} </label> </div> <button class="brn-btn brn-primary" ng-click="updateBot()"> {{main.translations.save_btn}} </button> </div> </div> </div>'),a.put("views/settings-languages.html",'<div class="flex-row"> <h2 class="mb40">{{main.translations.leftMenu_languages}}</h2> <div> <ul class="mb50 mr50 lang-lists" ng-repeat="langs in langsContainer track by $index"> <li ng-repeat="lang in langs"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="lang.active" ng-change="savelang(lang)" id="lang_{{lang.code}}"> <label for="lang_{{lang.code}}" style="text-transform: none"> <span class="checker-ico"></span> {{lang.name}} </label> </div> </li> </ul> </div> </div>'),a.put("views/settings-other.html",'<div class="flex-row"> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb50">{{main.translations.settings_protection}}</h2> <div class="mb10"> <custom-input placeholder="{{main.translations.settings_question}}" ng-model="bot.settings.protection.question" title="{{main.translations.settings_question}}" ng-blur="updateProtection()" enter="updateProtection()" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input placeholder="{{main.translations.settings_code}}" ng-model="bot.settings.protection.code" title="{{main.translations.settings_code}}" ng-blur="updateProtection()" enter="updateProtection()" is-back-placeholder="true"> </custom-input> </div> <div class="card-checker"> <input type="checkbox" ng-model="bot.settings.protection.active" ng-change="updateProtection()" id="protection-bot" class="ng-pristine ng-untouched ng-valid"> <label for="protection-bot"> <span class="checker-ico"></span>{{main.translations.active}} </label> </div> </div> </div> \x3c!-- analitics --\x3e <div class="settings-card-wrap" ng-repeat="t
69ype in types"> <div class="settings-card mb50"> <h2 class="mb50">{{type.name}}</h2> \x3c!-- <input ng-if="type.type != \'mixpanel\'" type="text" ng-model="type.tracking_id" placeholder="Tracking ID" form-title="Tracking ID" class="mb20">--\x3e <div class="mb10"> <custom-input ng-disabled="type.type == \'google\'" placeholder="{{main.translations.settings_token}}" ng-model="type.token" title="{{main.translations.settings_token}}" ng-blur="addService(type)" enter="addService(type)" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input ng-disabled="type.type == \'mixpanel\'" placeholder="{{main.translations.settings_trackingID}}" ng-model="type.tracking_id" title="{{main.translations.settings_trackingID}}" ng-blur="addService(type)" enter="addService(type)" is-back-placeholder="true"> </custom-input> </div> <div class="card-checker"> <input type="checkbox" ng-model="type.active" id="type_{{type.name}}" ng-click="addService(type)"> <label for="type_{{type.name}}"> <span class="checker-ico"></span> {{main.translations.active}} </label> </div> </div> </div> <div class="settings-card-wrap" ng-if="isAdmin"> <div class="settings-card mb50"> <h2 class="mb50">{{main.translations.settings_ApiToken}}</h2> <div class="mb25"> <custom-input placeholder="{{main.translations.settings_token}}" ng-model="botToken" title="{{main.translations.settings_token}}" ng-blur="addService(type)" enter="addService(type)" is-readonly="true" is-back-placeholder="true"> <button type="button" ngclipboard data-clipboard-text="{{botToken}}" class="clipboard"> <i class="material-icons">content_copy</i> </button> </custom-input> </div> </div> </div> <div class="settings-card-wrap" ng-if="isAdmin"> <div class="settings-card mb50"> <h2 class="mb50">{{main.translations.settings_webhook}}</h2> <div class="mb25"> <custom-input placeholder="{{main.translations.settings_webhookUrl}}" ng-model="bot.webhook.url" title="{{main.translations.settings_webhookUrl}}" ng-blur="saveWebhook()" enter="saveWebhook()" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="settings-card-wrap" ng-if="isAdmin"> <div class="settings-card mb50"> <h2 class="mb50">{{main.translations.ai}}</h2> <div class="mb25"> <custom-input placeholder="{{main.translations.settings_intents_parsing_url}}" ng-model="bot.settings.intents.parse" title="{{main.translations.settings_intents_parsing_url}}" ng-blur="saveIntents()" enter="saveIntents()" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input placeholder="{{main.translations.settings_train_request_url}}" ng-model="bot.settings.intents.train" title="{{main.translations.settings_train_request_url}}" ng-blur="saveIntents()" enter="saveIntents()" is-back-placeholder="true"> </custom-input> </div> <div class="card-checker"> <input type="checkbox" ng-model="bot.settings.intents.enabled" id="type_ai" ng-click="addBotSettingsIntentsEnabled()"> <label for="type_ai"> <span class="checker-ico"></span> {{main.translations.active}} </label> </div> </div> </div> <div class="settings-sentiment-analysis" ng-if="isAdmin"> <div class="settings-card mb50"> <h2 class="mb50">{{main.translations.settings_sentiment_analysis}}</h2> <div class="card-checker"> <input type="checkbox" ng-model="sentimentAnalysis.active" id="type_{{sentimentAnalysis.name}}" ng-click="addSentimentAnalysis()"> <label for="type_{{sentimentAnalysis.name}}"> <span class="checker-ico"></span> {{main.translations.active}} </label> </div> </div> </div> <div class="settings-sentiment-analysis" ng-if="isAdmin"> <div class="settings-card mb50"> <h2 class="mb50">{{main.translations.settings_vip_monitoring }}</h2> <div class="card-checker"> <input type="checkbox" ng-model="bot.settings.monitoring.warnings.active" id="vipMonitoring" ng-click="switchVipMonitoring()"> <label for="vipMonitoring"> <span class="checker-ico"></span> {{main.translations.active}} </label> </div> </div> </div> <div class="settings-card-wrap" ng-if="isAdmin" style="margin-left: 20px"> <div class="settings-card mb50"> <h2 class="mb50">VIP</h2> <div class="card-checker"> <input type="checkbox" ng-model="isVip" id="is_vip_{{bot.id}}" ng-change="toggleVip()"> <label for="is_vip_{{bot.id}}"> <span class="checker-ico"></span> {{main.translations.active}} </label> </div> </div> </div> \x3c!--\n <div class="settings-card-wrap" ng-if="isAdmin">\n <div class="settings-card mb50" >\n <h2 class="mb50">Is template</h2>\n <div class="card-checker mt20">\n <input type="checkbox" ng-model="bot.is_template" id="is_template_{{bot.id}}" ng-change="handleTemplate(bot.is_template)">\n\n <label for="is_template_{{bot.id}}">
69\n <span class="checker-ico"></span> {{main.translations.active}}\n </label>\n </div>\n </div>\n </div>\n --\x3e </div>'),a.put("views/settings-payment.html","<p>This is the settings-payment view.</p>"),a.put("views/settings-roles.html",'<h2 class="mb60"> {{main.translations.leftMenu_roles}} <span class="add-bot" data-toggle="modal" data-target="#addRole"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </span> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1076px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table no-hover" style="width:1074px"> <tbody> <tr class="header-default"> <td style="width:30%">{{main.translations.title_name}}</td> <td style="width:50%">{{main.translations.title}}</td> <td class="control-fixed control-fixed-heder"> </td> </tr> <tr ng-repeat="(key, role) in roles" ng-class="{\'first-line\' : key == 0}"> <td style="padding-bottom: 4px"> <div style="margin-top: -24px"> {{role.name}} </div> </td> <td style="padding-bottom: 4px"> <div style="margin-top: -25px; padding-bottom: 20px"> <custom-input placeholder="" ng-model="role.title" title="" enter="updateRole(role)" is-required="true" is-back-placeholder="false"> </custom-input> </div> </td> <td class="control-fixed"> <a class="btn-icon btn-icon-no-top" title="Save edited role values" ng-click="updateRole(role)"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon btn-icon-no-top" ng-click="deleteRole(role)" title="Delete Role"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="3"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!roles.length && !inProgress"> <tr> <td colspan="3">{{main.translations.settings_noRoles}}</td> </tr> </tfoot> </table> </custom-scroller> </div> <div id="addRole" class="modal fade" role="dialog"> <div class="modal-dialog"> \x3c!-- Modal content--\x3e <div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" data-dismiss="modal"> close </i> {{main.translations.settings_addRole}} </div> <div class="mb-title"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="newRole.name" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="{{main.translations.title}}" ng-model="newRole.title" title="{{main.translations.title}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> </div> <button type="button" class="brn-btn brn-primary" ng-click="createRole()"> {{main.translations.settings_addRole}} </button> </div> </div> </div> </div> </div> </div>'),a.put("views/settings-store.html",'<div class="brn-table-wrap learning-entities"> <table class="brn-table learning-table row-small"> <thead> <tr> <th> {{main.translations.store_categories}} <a ui-sref="store.create_category({id: botNav.botInfo.bot_id})"> {{main.translations.store_add}}</a> </th> <th> </th> </tr> </thead> <tbody> <tr> <td> {{main.translations.title}} </td> <td> </td> </tr> <tr ng-repeat="category in categories"> <td class="td-top-align"> {{category.title}} </td> <td class="td-top-align"> <a class="edit-link" ui-sref="store.category-detail({id: botNav.botInfo.bot_id, category: category.category_id})"> <span ng-include src="\'images/svg/ic_mode_edit_black_24px.svg\'"></span> </a> <span ng-click="deleteCategory(category)"> <ng-include src="\'images/svg/rubbish-bin-delete-button.svg\'"></ng-include> </span> </td> </tr> </tbody> </table> </div>'),a.put("views/settings-team.html",'<div class="row flex-row"> <div class="settings-card-wrap mb25"> <div class="settings-card widgets"> <h4>Team</h4> <br> <ul class="bot-team"> <li><b>{{botCreator}}</b></li> <li ng-repeat="member in team">{{member.name}} <a ng-if="storageData.role == \'admin\'" ng-click="removeMember(member.id)" class="pull-right" style="color:red;cursor:pointer"> <ng-include src="\'images/svg/ic_clear_red_24px.svg\'"></ng-include> </a> </li> </ul> <br><br> <div ng-if="storageData.role == \'admin\'"> <div style="position: relative"> <input type="text" ng-change="onedit()" placeholder="Add to team" ng-model="selected.user" uib-typeahead="user as user.index for user in search_users | filter:$viewValue | limitTo:8" style="padding-right: 40px"> <ng-include src="\'images/svg/ic_add_black_24px.svg\'" ng-click="addMember()" style="position: absolute;right:10px;top: 10px;cursor: pointer"></ng-include> </div> \x3c!--\n <button type="button" class="brn-btn brn-primary" ng-click="addMember()">Add</button>\n --\x3e </div> </div> </div> </div>'),a.put("views/settings-widget.html",'<div class="mb50"> <div class="flex-row"> <div class="settings-card-wrap"> <div class="settings-card"> <h2 class="mb50">{{main.translations.settings_widgetDimensions}}</h2> <div class="mb10"> <custom-input placeholder="{{main.translations.settings_widgetWidth}}" ng-model="widget.width" title="{{main.translations.settings_widgetWidth}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input placeholder="{{main.translations.settings_widgetHeight}}" ng-model="widget.height" title="{{main.translations.settings_widgetHeight}}" is-back-placeholder="true"> </custom-input> </div> <div class="card-checker mb20"> <input type="checkbox" ng-model="widget.resizeable" id="protection-bot" class="ng-pristine ng-untouched ng-valid"> <label for="protection-bot"> <span class="checker-ico"></span> {{main.translations.settings_widgetResizeable}} </label> </div> <h2 class="mb50">{{main.translations.settings_widgetStyle}}</h2> <div class="mb25"> <custom-colorpicker ng-model="widget.color" title="{{main.translations.settings_widgetColor}}"> </custom-colorpicker> </div> <div class="mb10"> <p class="input--radio" ng-repeat="theme in themes"> <input type="radio" ng-checked="(widget.theme == theme.name)" ng-model="widget.theme" value="{{theme.name}}" name="theme" id="{{theme.name}}"> <label for="{{theme.name}}">{{theme.title}}</label> </p> </div> <div class="mb10"> <custom-input placeholder="Font family" ng-model="widget.fontFamily" title="Font family" is-back-placeholder="true"> </custom-input> </div> <div class="mb50"> <custom-input placeholder="Font size" ng-model="widget.fontSize" title="Font size" is-back-placeholder="true"> </custom-input> </div> <h2 class="mb50">{{main.translations.settings_widgetType}}</h2> <div class="mb25">
69 <p class="input--radio" ng-repeat="type in types"> <input type="radio" ng-checked="(widget.type == type.name)" ng-model="widget.type" value="{{type.name}}" name="type" id="{{type.name}}"> <label for="{{type.name}}">{{type.title}}</label> </p> </div> <h2 class="mb50">Text direction</h2> <div class="mb25"> <p class="input--radio" ng-repeat="direction in directions"> <input type="radio" ng-checked="(widget.direction == direction.name)" ng-model="widget.direction" value="{{direction.name}}" name="direction" id="{{direction.name}}"> <label for="{{direction.name}}">{{direction.title}}</label> </p> </div> </div> </div> <div class="settings-card-wrap"> <div class="settings-card settings-widget-preview"> <h2 class="mb50">{{main.translations.settings_widgetPreview}}</h2> <div class="mb25"> <div class="wrapper {{widget.theme}}" style="--width: {{widget.width}}px; --height: {{widget.height}}px; --color-primary: {{widget.color}}; --font-family: {{widget.fontFamily}}; --font-size: {{widget.fontSize}}; direction: {{widget.direction}}"> <div class="chat-box"> <div class="chat-box-header"> <h4 class="operator-info">Chat with</h4> <h3 class="operator-name">John Doe</h3> </div> <div class="chat-box-main"> <div class="chat-message chat-message-sent"> <div class="chat-message-wrap"> <chat-avatar class="chat-message-from-avatar"> <img src="https://api-dev.brn.ai/img/default-client-avatar.png" class="avatar"> </chat-avatar> <div class="chat-message-text"> <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span> </div> </div> </div> <div class="chat-message chat-message-received"> <div class="chat-message-wrap"> <chat-avatar class="chat-message-from-avatar"> <img src="https://api-dev.brn.ai/img/default-client-avatar.png" class="avatar"> </chat-avatar> <div class="chat-message-text"> <span>Morbi ac odio auctor nibh rhoncus feugiat id et leo.</span> </div> </div> </div> </div> <div class="chat-box-footer"> <chat-input> <label class="chat-input-file-wrapper"> <input type="file"> <i class="material-icons"> attach_file </i> </label> <input class="chat-input-text" placeholder="Type here…" type="text"> <button class="chat-input-submit" type="submit"> <i class="material-icons"> send </i>ï¸ </button> </chat-input> </div> </div> </div> </div> </div> </div> </div> <button class="brn-btn brn-primary" ng-click="saveWidget()"> {{main.translations.save_btn}} </button> </div>'),a.put("views/shipbrain.html",'<link rel="stylesheet" type="text/css" href="styles/braincubator/main.css"> <style>header {\n display: none !important;\n }\n .section-start {\n background-image: url(../images/shipbrain-bg.jpg) !important;\n }\n .help-btn {\n display: none !important;\n }\n .cookie-banner {\n display: none !important;\n }\n .contact-us.short-form {\n display: none;\n }</style> <div ng-if="loaded"> <div ng-bind-html="page"></div> <footer-registration translations="main.translations" is-registration-panel="false" is-contact-us-panel="true" is-home-page="false"> </footer-registration> </div>'),a.put("views/shopify.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small" style="padding: 0 !important"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">Shopify</h2> </div> <form ng-submit="connect()"> <div class="mb20"> <custom-input placeholder="Myshopify link" ng-model="main.shop" title="URL" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb5 card-checker" ng-init="onChange()" ng-if="exist"> <input type="checkbox" step="any" ng-model="main.sync" ng-change="onChange();" id="id-checkbox-is-custom-proxy"> <label for="id-checkbox-is-custom-proxy"> <span class="checker-ico"></span> <span> Sync </span> </label> </div> <div> <button ng-if="!exist" type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="exist" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/simple-test-widget.html",'<div class="conversations-dialogs" style="margin: 0px"> <div class="dialogs-list" style="margin: 0px; min-height: auto"> <div class="brn-widget widget-shadow" style="margin: 0px"> <div class="brn-widget-header"> <div class="client"> <span class="img-wrap"> <img src="https://api.brn.ai/img/default-client-avatar.png"> </span> <div class="client-info"> <span style="font-size: 14px; color: #000000">Test your bot</span> <br> <span style="font-size: 12px; color: #d3d3d3">No one will see this chat</span> </div> </div> <i class="material-icons console-icon" ng-click="toogleConsole()">code</i> </div> <div class="brn-body-wrap" style="{{isConsole? \'margin-bottom:0px;\' : \'\'}}"> <div class="brn-widget-body" scroll-glue id="test_widget_messages"> <widget-message ng-repeat="message in messages" type="{{message}}" image="images/tf.png"> </widget-message> </div> </div> <div class="brn-widget-footer" title="{{isNewScenario? \'Need save new scenario before test\' : \'\'}}"> <form class="conversation-footer" ng-submit="sendMessage()"> <fieldset> <input type="text" name="name" class="" ng-focus="messageActive = true;" ng-blur="messageActive = false;" ng-model="message.text" placeholder="{{$parent.main.translations.catalog_textPlaceholder}}"> <div class="widget-attachment"> <div class="submit-icon active hover-icon" ng-class="{\'green-icon\' : messageActive}"> <button type="submit" class="reset-btn"> <span ng-include src="\'images/svg/ic_send_black_24px.svg\'"></span> </button> </div> </div> </fieldset> </form> </div> <div class="debug-log" scroll-glue ng-show="isConsole"> <p ng-repeat="message in debugMessages track by $index"> {{message}} </p> <span class="animation"></span> </div> </div> </div> </div>'),a.put("views/simple-video.html",'<div> <i class="material-icons" style="cursor: pointer" ng-if="!isPlay" ng-click="togglePlay()">play_circle_outline</i> <video src="{{trustSrc(srcUrl)}}" controls ng-if="isPlay" style="{{videoStyle}}"></video> </div>'),a.put("views/simple/advanced.html",'<div class="row"> <div class="step-component advanced right"> <i class="material-icons"> cached </i> {{translations[\'componentDescription_\' + step.component]}} </div> </div>'),a.put("views/simple/attachment.html",'<div class="row"> <div ng-if="step.properties.type == \'file\' && !fileFields.progress"> <div class="step-component ligth right pointer" ng-if="!step.properties.url" ngf-select="$parent.uploadFile($file)"> <i class="material-icons">insert_drive_file</i> <span>
69Upload file</span> </div> <a target="_blank" href="{{step.properties.url}}"> <div class="step-component ligth right pointer" ng-if="step.properties.url"> <i class="material-icons">insert_drive_file</i> <span>{{step.properties.name}}</span> </div> </a> </div> <div ng-if="step.properties.type == \'image\' && !fileFields.progress"> <div class="step-component ligth right pointer" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ng-if="!step.properties.url" ngf-select="$parent.uploadFile($file)"> <i class="material-icons">image</i> <span>{{step.properties.url? step.properties.url : \'Upload image\'}}</span> </div> <img ng-src="{{step.properties.url}}" alt="" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="$parent.uploadFile($file)" class="step-component image right pointer" ng-if="step.properties.url"> </div> <div ng-if="step.properties.type == \'video\' && !fileFields.progress"> <div class="step-component ligth right pointer" ng-if="!step.properties.url" ngf-pattern="\'video/*\'" ngf-accept="\'video/*\'" ngf-select="$parent.uploadFile($file)"> <i class="material-icons">videocam</i> <span>{{step.properties.url? step.properties.url : \'Upload video\'}}</span> </div> <video ng-if="step.properties.url" style="width:100%" class="step-component video right" controls src="{{trustSrc(step.properties.url)}}"> </video> </div> <div ng-if="step.properties.type == \'audio\' && !fileFields.progress"> <div class="step-component ligth right pointer" ng-if="!step.properties.url" ngf-pattern="\'audio/*\'" ngf-accept="\'audio/*\'" ngf-select="$parent.uploadFile($file)"> <i class="material-icons">music_note</i> <span>{{step.properties.url? step.properties.url : \'Upload audio\'}}</span> </div> <audio ng-if="step.properties.url" controls class="step-component audio right" src="{{trustSrc(step.properties.url)}}"> </audio> </div> <div class="step-component ligth right" ng-show="fileFields.progress"> <i class="file-icon material-icons" style="top: -9px"> file_upload </i> <div class="progress-container"> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{ fileFields.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{ fileFields.progress}}%"> </div> </div> </div> </div> <div class="step-component grey-btn right-btn hiden-btn dropdown-toggle dropdown pointer" uib-dropdown style="cursor:pointer" id="{{step.id}}" uib-dropdown-toggle> <i class="material-icons">add</i> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="{{step.id}}"> <div class="dropdown-container"> <span ngf-select="$parent.uploadFile($file)" class="dropdown-btn" ng-if="step.properties.type == \'file\' && step.properties.url"> <i class="material-icons icon">edit</i> <span class="text">Upload</span> </span> <span ngf-select="$parent.uploadFile($file)" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" class="dropdown-btn" ng-if="step.properties.type == \'image\' && step.properties.url"> <i class="material-icons icon">edit</i> <span class="text">Upload</span> </span> <span ngf-select="$parent.uploadFile($file)" class="dropdown-btn" ngf-pattern="\'video/*\'" ngf-accept="\'video/*\'" ng-if="step.properties.type == \'video\' && step.properties.url"> <i class="material-icons icon">edit</i> <span class="text">Upload</span> </span> <span ngf-select="$parent.uploadFile($file)" class="dropdown-btn" ngf-pattern="\'audio/*\'" ngf-accept="\'audio/*\'" ng-if="step.properties.type == \'audio\' && step.properties.url"> <i class="material-icons icon">edit</i> <span class="text">Upload</span> </span> <span ng-click="addReplies()" class="dropdown-btn"> <i class="material-icons icon">reply</i> <span class="text">Replies</span> </span> </div> </div> </div> </div> <div class="row dnd-horizontal-row" ng-if="step.properties.quick_replies.length > 0" style="padding-right: 44px"> <div dnd-list="step.properties.quick_replies" dnd-allowed-types="[\'replie\']" dnd-drop="dropCallbackSimple(index, item, external, \'replie\')"> <div class="step-component blue right pointer inline" uib-dropdown auto-close
69="outsideClick" id="{{step.id+\'qrepl_\'+$index}}" uib-dropdown-toggle style="padding-top: 11px" ng-repeat="replie in step.properties.quick_replies track by $index"> <span class="pointer" ng-class="{\'text-placeholder\' : !replie.title}"> {{replie.title? replie.title : \'Quick reply...\'}} </span> <div class="dnd-item-component" dnd-dragstart="dndDragstartReplie($index)" dnd-draggable="replie" dnd-type="\'replie\'" dnd-effect-allowed="move" dnd-selected="selected = replie"> <i class="material-icons">open_with</i> </div> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'qrepl_\'+$index}}" ng-click="dropdownClick($event)"> <div class="dropdown-container" style="width: 225px"> <div class="mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{translations.title}}" title="{{translations.title}}" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb20" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" type-input="url" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="delete-item mb10" ng-click="step.properties.quick_replies.splice($index, 1); autosave(); clerWidget();"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> </div> <div class="step-component blue-btn right-btn pointer hiden-btn" ng-click="addReplies()"> <i class="material-icons">add</i> </div> </div>'), 70a.put("views/simple/card.html",'<div class="row"> <div class="step-component card-item right"> <div class="heder"> <i class="material-icons img-icon" ng-if="!activeCardElement.image && !fileFields.progress" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="$parent.uploadFile($file, true)"> image </i> <div ng-if="fileFields.progress" class="img" style="max-width: none"> <i class="file-icon material-icons" style="color:#94cc01; top: 17px; position: relative; margin-right: 10px"> file_upload </i> <div class="progress-container" style="text-align: left"> <div class="title-container"> <span style="font-size: 12px;width: auto"> Uploading </span> <span class="status"> {{ fileFields.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{ fileFields.progress}}%"> </div> </div> </div> </div> <img ng-src="{{activeCardElement.image}}" alt="" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="$parent.uploadFile($file, true)" class="img" ng-if="activeCardElement.image && !fileFields.progress"> <div class="close-container" ng-click="removeCard()"> <i class="material-icons">close</i> </div> </div> <div class="card-container"> <div class="title"> <input class="title-input" placeholder="Card Title" ng-blur="autosave()" ng-change="clerWidget()" ng-model="activeCardElement.title"> </div> <div class="text"> <textarea class="text-input" placeholder="Card text" ng-blur="autosave()" ng-change="clerWidget()" ng-model="activeCardElement.text">\n </textarea> </div> <div class="buttons-container"> <div dnd-list="activeCardElement.buttons" dnd-allowed-types="[\'cardBtn\']" dnd-drop="dropCallbackSimple(index, item, external, \'cardBtn\')"> <div ng-repeat="btn in activeCardElement.buttons track by $index " class="new-button" uib-dropdown auto-close="outsideClick" style="cursor:pointer" id="{{step.id+\'btn_\'+$index}}" uib-dropdown-toggle> <div class="text-container"> <span style="{{!btn.title? \'color:#999999\' : \'\'}}"> {{btn.title? btn.title : "Edit button"}} </span> </div> <div class="dnd-item-component" dnd-dragstart="dndDragstartCardBtn($index)" dnd-draggable="btn" dnd-type="\'cardBtn\'" dnd-effect-allowed="move" dnd-selected="selected = btn"> <i class="material-icons">open_with</i> </div> <div class="dropdown-menu inside" role="menu" style="margin-left: -40px;text-align: left" uib-dropdown-menu aria-labelledby="{{step.id+\'btn_\'+$index}}" ng-click="dropdownClick($event)"> <div class="dropdown-container" style="width: 225px"> <div class="mb10"> <custom-input ng-model="btn.title" placeholder="{{translations.title}}" ng-blur="autosave()" ng-change="clerWidget()" title="{{translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-model="btn.type" array="cardBtnTypes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" ng-change="switchBtnCard($index, btn.type)" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb30" ng-if="btn.type == \'link\'"> <custom-input ng-model="btn.url" placeholder="Link" type-input="url" title="Link" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="btn.type == \'link\'"> <div class="checker-container" ng-click="changeWebview($index, true)"> <div class="card-checker"> <input type="checkbox" ng-model="btn.webview" id="enable_messenger_extensions_button_card_{{$index}}"> <label for="enable_messenger_extensions_button_card_{{$index}}"> <span class="checker-ico"></span>{{translations.webview}} </label> </div> </div> </div> <div class="mb20" ng-if="btn.type == \'suggest\'"> <custom-input ng-model="btn.content" placeholder="Content" title="Content" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="delete-item mb10" ng-click="removeBtnCard($index)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> </div> </div> <div class="new-button" ng-click="addBtnCard()"> <i class="material-icons add-icon">add</i> Add button </div> </div> <div class="items-selector-container"> <div class="items-container"> <div ng-repeat="item in step.properties.elements track by $index" class="item item-selector" ng-class="{\'active\' : activeCardId == $index}" ng-click="switchCard($index)"> </div> <div class="item"> <i class="material-icons add-icon" ng-click="addCard()">add</i> </div> </div> </div> </div> <div class="step-component grey-btn right-btn hiden-btn dropdown-toggle dropdown pointer" uib-dropdown style="cursor:pointer" id="{{step.id}}" uib-dropdown-toggle> <i class="material-icons">add</i> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="{{step.id}}"> <div class="dropdown-container"> <span ng-click="addReplies()" class="dropdown-btn"> <i class="material-icons icon">reply</i> <span class="text">Replies</span> </span> </div> </div> </div> </div> <div class="row dnd-horizontal-row" ng-if="step.properties.quick_replies.length > 0" style="padding-right: 44px"> <div dnd-list="step.properties.quick_replies" dnd-allowed-types="[\'replie\']" dnd-drop="dropCallbackSimple(index, item, external, \'replie\')"> <div class="step-component blue right pointer inline" uib-dropdown auto-close
70="outsideClick" id="{{step.id+\'qrepl_\'+$index}}" uib-dropdown-toggle style="padding-top: 11px" ng-repeat="replie in step.properties.quick_replies track by $index"> <span class="pointer" ng-class="{\'text-placeholder\' : !replie.title}"> {{replie.title? replie.title : \'Quick reply...\'}} </span> <div class="dnd-item-component" dnd-dragstart="dndDragstartReplie($index)" dnd-draggable="replie" dnd-type="\'replie\'" dnd-effect-allowed="move" dnd-selected="selected = replie"> <i class="material-icons">open_with</i> </div> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'qrepl_\'+$index}}" ng-click="dropdownClick($event)"> <div class="dropdown-container" style="width: 225px"> <div class="mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{translations.title}}" title="{{translations.title}}" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb20" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" type-input="url" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="delete-item mb10" ng-click="step.properties.quick_replies.splice($index, 1); autosave(); clerWidget();"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> </div> <div class="step-component blue-btn right-btn pointer hiden-btn" ng-click="addReplies()"> <i class="material-icons">add</i> </div> </div>'),a.put("views/simple/delay.html",'<div class="row"> <div class="step-component ligth right"> <i class="material-icons">watch_later</i> Delay: <resize-input class="short" type="number" ng-blur="autosave()" ng-change="clerWidget()" is-required="true" ng-model="step.properties.delay"> </resize-input> <span>ms</span> </div> </div>'),a.put("views/simple/input.html",'<div class="row"> <div class="step-component grey right"> <resize-input multiline="true" class="top10" placeholder="{{translations.catalog_textPlaceholder}}" ng-blur="autosave()" ng-model="step.properties.question"> </resize-input> </div> <div class="step-component grey-btn right-btn hiden-btn dropdown-toggle dropdown pointer" uib-dropdown style="cursor:pointer" id="{{step.id}}" uib-dropdown-toggle> <i class="material-icons">add</i> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="{{step.id}}"> <div class="dropdown-container"> <span ng-click="addReplies()" class="dropdown-btn"> <i class="material-icons icon">reply</i> <span class="text">Replies</span> </span> </div> </div> </div> </div> <div class="row dnd-horizontal-row" ng-if="step.properties.quick_replies.length > 0" style="padding-right: 44px"> <div dnd-list="step.properties.quick_replies" dnd-allowed-types="[\'replie\']" dnd-drop="dropCallbackSimple(index, item, external, \'replie\')"> <div class="step-component blue right pointer inline" uib-dropdown auto-close="outsideClick" id="{{step.id+\'qrepl_\'+$index}}" uib-dropdown-toggle style="padding-top: 11px" ng-repeat="replie in step.properties.quick_replies track by $index"> <span class="pointer" ng-class="{\'text-placeholder\' : !replie.title}"> {{replie.title? replie.title : \'Quick reply...\'}} </span> <div class="dnd-item-component" dnd-dragstart="dndDragstartReplie($index)" dnd-draggable="replie" dnd-type="\'replie\'" dnd-effect-allowed="move" dnd-selected="selected = replie"> <i class="material-icons">open_with</i> </div> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'qrepl_\'+$index}}" ng-click="dropdownClick($event)"> <div class="dropdown-container" style="width: 225px"> <div class="mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{translations.title}}" title="{{translations.title}}" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb20" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" t
70ype-input="url" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="delete-item mb10" ng-click="step.properties.quick_replies.splice($index, 1); autosave(); clerWidget();"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> </div> <div class="step-component blue-btn right-btn pointer hiden-btn" ng-click="addReplies()"> <i class="material-icons">add</i> </div> </div> <div class="row"> <div> <div class="step-component green left dropdown-toggle dropdown" uib-dropdown auto-close="outsideClick" style="cursor:pointer" id="{{step.id}}" uib-dropdown-toggle> <i class="material-icons">save</i> <span ng-non-bindable>{{</span>{{step.properties.save.scope}}.{{step.properties.save.param}}<span ng-non-bindable>}}</span> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="{{step.id}}" ng-click="dropdownClick($event)"> <div class="dropdown-container"> <div class="flex-row"> <div class="mb10 item" style="margin-right: 16px"> <custom-dropdown ng-model="step.properties.save.scope" array="scopes" opt-description="name" opt-value="value" ng-change="autosave(); clerWidget();" title="Save with type" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10 item"> <custom-input placeholder="" ng-model="step.properties.save.param" is-required="true" ng-blur="autosave()" ng-change="clerWidget()" title="to" is-back-placeholder="true"> </custom-input> </div> </div> <div class="flex-row"> <div class="mb10" style="width: 192px"> <custom-dropdown ng-model="step.properties.reply_type" array="replyTypes" opt-description="name" opt-value="value" ng-change="autosave(); clerWidget();" title="Data type" is-model-init="true" placeholder="All types" is-back-placeholder="true"> </custom-dropdown> </div> </div> </div> </div> </div> </div> </div> <div class="row"> <div class="step-component ligth right"> <i class="material-icons">reply_all</i> <span>Proceed to next step</span> </div> <div class="step-component green-btn right-btn"> <i class="material-icons">check</i> </div> </div> <div class="row"> <div class="step-component grey right"> <resize-input multiline="true" class="top10" ng-blur="autosave()" placeholder="{{translations.catalog_textPlaceholder}}" ng-change="clerWidget()" ng-model="step.properties.retry_message"> </resize-input> </div> <div class="step-component red-btn right-btn"> <i class="material-icons">close</i> </div> </div>'),a.put("views/simple/offer.html",'<div class="row dnd-horizontal-row" style="padding-right: 44px"> <div class="step-component blue right pointer inline pointer" style="padding-bottom: 0px; padding-top: 10px"> <div class="custom-input dropdown open" style="height: auto"> <span class="placeholder" ng-class="{\'placeholder-small placeholder-active placeholder-smallest\' : step.properties.product_id || isActive}" style="top: 0"> Select product </span> <input type="text" ng-model="selectedProduct.name" ng-blur="isActive=false" ng-focus="isActive=true" uib-typeahead="product.name for product in searchProducts($viewValue) | limitTo:8" typeahead-on-select="offerProductSelect($item, $label, $index)" style="margin-top: 0px; border-bottom: none"> </div> </div> </div> <div class="row"> <div class="step-component grey right"> <resize-input multiline="true" class="top10" placeholder="Offer text" ng-blur="autosave()" ng-model="step.properties.text"> </resize-input> </div> </div> <div class="row dnd-horizontal-row" style="padding-right: 44px"> <div class="step-component blue-btn right pointer inline" style="padding-top: 11px" uib-dropdown auto-close="outsideClick" uib-dropdown-toggle> <span class="pointer" ng-class="{\'text-placeholder\' : !button.title}"> {{step.properties.button_title? step.properties.button_title : \'Edit button\'}} </span> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu ng-click="dropdownClick($event)"> <div class="dropdown-container" style="width: 225px"> <div class="mb10"> <custom-input ng-model="step.properties.button_title" placeholder="{{translations.title}}" title="{{translations.title}}" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/simple/text.html",'<div class="row" ng-init="fixTextBtn()"> <div class="step-component grey right"> <resize-input class="top10" placeholder="{{translations.catalog_textPlaceholder}}" ng-blur="autosave()" multiline="true" ng-change="clerWidget()" ng-model="step.properties.content"> </resize-input> </div> <div class="step-component grey-btn right-btn hiden-btn dropdown-toggle dropdown pointer" uib-dropdown style="cursor:pointer" id="{{step.id}}" uib-dropdown-toggle> <i class="material-icons">add</i> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="{{step.id}}"> <div class="dropdown-container"> <span ng-click="addReplies()" class="dropdown-btn"> <i class="material-icons icon">reply</i> <span class="text">Replies</span> </span> <span ng-click="addBtn()" class="dropdown-btn"> <i class="material-icons icon">menu</i> <span class="text">Buttons</span> </span> </div> </div> </div> </div> <div class="row dnd-horizontal-row" ng-if="step.properties.quick_replies.length > 0" style="padding-right: 44px"> <div dnd-list="step.properties.quick_replies" dnd-allowed-types="[\'replie\']" dnd-drop="dropCallbackSimple(index, item, external, \'replie\')"> <div class="step-component blue right pointer inline" uib-dropdown ng-repeat="replie in step.properties.quick_replies track by $index" auto-close
70="outsideClick" id="{{step.id+\'qrepl_\'+$index}}" uib-dropdown-toggle style="padding-top: 11px"> <div class="dnd-item-component" dnd-dragstart="dndDragstartReplie($index)" dnd-draggable="replie" dnd-type="\'replie\'" dnd-effect-allowed="move" dnd-selected="selected = replie"> <i class="material-icons">open_with</i> </div> <span class="pointer" ng-class="{\'text-placeholder\' : !replie.title}"> {{replie.title? replie.title : \'Quick reply...\'}} </span> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'qrepl_\'+$index}}" ng-click="dropdownClick($event)"> <div class="dropdown-container" style="width: 225px"> <div class="mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{translations.title}}" title="{{translations.title}}" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb20" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" type-input="url" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="delete-item mb10" ng-click="step.properties.quick_replies.splice($index, 1); autosave(); clerWidget();"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> </div> <div class="step-component blue-btn right-btn pointer hiden-btn" ng-click="addReplies()"> <i class="material-icons">add</i> </div> </div> <div class="row dnd-horizontal-row" ng-if="step.properties.buttons.length > 0" style="padding-right: 44px"> <div dnd-list="step.properties.buttons" dnd-drop="dropCallbackSimple(index, item, external, \'button\')" dnd-allowed-types="[\'button\']"> <div class="step-component blue right pointer inline pointer" style="padding-top: 11px" ng-repeat="button in step.properties.buttons track by $index" uib-dropdown auto-close="outsideClick" id="{{step.id+\'btn_\'+$index}}" uib-dropdown-toggle> <div class="dnd-item-component" dnd-dragstart="dndDragstartBtn($index)" dnd-draggable="button" dnd-type="\'button\'" dnd-effect-allowed="move" dnd-selected="selected = button"> <i class="material-icons">open_with</i> </div> <span class="pointer" ng-class="{\'text-placeholder\' : !button.title}"> {{button.title? button.title : \'Edit button\'}} </span> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'btn_\'+$index}}" ng-click="dropdownClick($event)"> <div class="dropdown-container" style="width: 225px"> <div class="mb10"> <custom-dropdown ng-model="button.type" array="cardBtnTypes" opt-description="name" opt-value="value" ng-change="switchCardBtnTypes($index);autosave(); clerWidget();" title="{{translations.type}}" is-model-init="true" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-input ng-model="button.title" placeholder="{{translations.title}}" title="{{translations.title}}" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb20" ng-class="{mb30: button.type == \'link\'}"> <custom-input ng-model="button.content.value" placeholder="{{translations.value}}" title="{{translations.value}}" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="button.type == \'link\'"> <div class="checker-container" ng-click="changeWebview($index)"> <div class="card-checker"> <input type="checkbox" ng-model="button.webview" id="enable_messenger_extensions_button_{{$index}}"> <label for="enable_messenger_extensions_button_{{$index}}"> <span class="checker-ico"></span>{{translations.webview}} </label> </div> </div> </div> <div class="delete-item mb10" ng-click="removeBtn($index)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> </div> <div class="step-component blue-btn right-btn pointer hiden-btn" ng-click="addBtn()"> <i class="material-icons">add</i> </div> </div>'),a.put("views/simple2/advanced.html",'<div class="row"> <div dnd-handle class="handle" style="left: 15px"> <i class="material-icons"> more_vert </i> </div> <div class="step-component advanced right"> <i class="material-icons"> cached </i> {{translations[\'componentDescription_\' + step.component]}} </div> </div>'),a.put("views/simple2/attachment.html",'<div class="row"> <div dnd-handle class="handle" style="left: 15px"> <i class="material-icons"> more_vert </i> </div> <div ng-if="!step.properties.type && !fileFields.progress"> <div class="step-component ligth pointer upload" ngf-pattern="image/*,video/*" ngf-accept="\'image/*,video/*\'" ng-if="!step.properties.url" ngf-select="$parent.uploadFile($file)"> <i class="material-icons">photo_filter</i> <span>Upload photo or video</span> </div> </div> <div ng-if="step.properties.type == \'image\' && !fileFields.progress" class="imaged-container"> <img ng-src="{{step.properties.url}}" alt="" ngf-pattern="image/*,video/*" ngf-accept="\'image/*,video/*\'" ngf-select="$parent.uploadFile($file)" class="step-component image pointer" ng-if="step.properties.url"> \x3c!-- <i class="material-icons delete-img-icon" ng-click="step.properties.url = \'\'; step.properties.type = \'\'; autosave(); clerWidget();"> close </i> --\x3e </div> <div ng-if="step.properties.type == \'video\' && !fileFields.progress" class="imaged-container"> <video ng-if="step.properties.url" style="width:100%" class="step-component video" controls src="{{trustSrc(step.properties.url)}}"> </video> \x3c!-- <i class="material-icons delete-img-icon" ng-click="step.properties.url = \'\'; step.properties.type = \'\'; autosave(); clerWidget();"> close </i> --\x3e </div> <div ng-if="step.properties.type == \'audio\' && !fileFields.progress" class="audio"> <div class="step-component ligth right pointer upload" ng-if="!step.properties.url" ngf-pattern="\'audio/*\'" ngf-accept="\'audio/*\'" ngf-select="$parent.uploadFile($file)"> <i class="material-icons">music_note</i> <span>{{step.properties.url? step.properties.url : \'Upload audio file\'}}</span> </div> <audio ng-if="step.properties.url" controls class="step-component audio right" src="{{trustSrc(step.properties.url)}}" style="padding-left: 0px; padding-right: 0px; width: 419px; min-height: 60px; margin-bottom: 0px; padding-bottom: 0px"> </audio> </div> <div class="step-component ligth attachment" ng-show="fileFields.progress"> <div class="progress-container attachment-container"> <i class="file-icon material-icons" style="top: -9px"> file_upload </i> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{ fileFields.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{ fileFields.progress}}%"> </div> </div> </div> </div> <div ng-if="step.properties.type == \'file\' && !fileFields.progress"> <div class="step-component ligth right pointer upload" ng-if="!step.properties.url" ngf-select="$parent.uploadFile($file)"> <i class="material-icons">insert_drive_file</i> <span>{{step.properties.url? step.properties.url : \'Upload file\'}}</span> </div> <div class="step-component ligth right pointer downloadFile" ng-if="step.properties.url" style="display: table-cell;\n vertical-align: middle;\n width: 420px;\n padding-left: 36px;\n height: 96px;\n border: solid 2px #eeeeee"> <i class="material-icons" style="color: #94cc01;position: relative;top: 15px">file_download</i> <span>{{trustSrcName(step.properties.url)}} </span> <div class="download-file" ng-click="downloadFile(step.properties.url)">Download</div> </div> </div> </div>'),a.put("views/simple2/audio.html",'<div class="upload-area" ngf-accept="\'audio/*\'" ng-disabled="field.loading" ngf-select="addFile($file, $index, \'audio\', field)"> SELECT AUDIO <div class="centering"> <div ng-show="!field.progress"> <i class="file-icon material-icons"> audiotrack </i> <div class="text" ng-class="{\'error\' : field.error}"> <span ng-if="!field.error"> <sapn ng-if="fields[field.name]" ng-click="redirectToFile($event, fields[field.name])"> {{fields[field.name]}} </sapn> <sapn ng-if="!fields[field.name]"> Select Audio </sapn> </span> <span ng-if="field.error"> {{ field.error}} </span> </div> </div> <div ng-show="field.progress"> <i class="file-icon material-icons" style="top: 0px; left: 21px"> file_upload </i> <div class="progress-container"> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{ field.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{ field.progress}}%"> </div> </div> </div> </div> </div> </div>'),a.put("views/simple2/card.html",'<div ng-if="!step.category" class="item add-item-card">
70 <div class="slider-dots"> <span ng-repeat="slide in step.properties.elements" ng-class="{\'current-slide\': $index === currentSlideIndex}" ng-click="slickConfig.method.slickGoTo($index)"></span> </div> <i class="material-icons add-icon ng-click-active" ng-click="addCard()">add</i> </div> <br ng-if="!step.category"> <br ng-if="!step.category"> <div class="row slick-row" ng-class="{\'slick-row--store\': step.category}"> <slick settings="slickConfig" ng-if="slickDataLoad && !step.category"> <div class="slick-slide layer card-item card-in-gallery" ng-repeat="element in step.properties.elements" style="overflow: hidden"> <div class="heder"> <i class="material-icons img-icon" ng-if="!element.image && !fileFields.progress" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="$parent.uploadFile($file, true, $index)"> image </i> <div ng-if="fileFields.progress" class="img" style="max-width: none"> <i class="file-icon material-icons" style="color:#94cc01; top: 17px; position: relative; margin-right: 10px"> file_upload </i> <div class="progress-container" style="text-align: left"> <div class="title-container"> <span style="font-size: 12px;width: auto"> Uploading </span> <span class="status"> {{ fileFields.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{ fileFields.progress}}%"> </div> </div> </div> </div> <img ng-src="{{element.image}}" alt="" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="$parent.uploadFile($file, true, $index)" class="img" ng-if="element.image && !fileFields.progress"> <div class="close-container" ng-click="removeCard($index)"> <i class="material-icons">close</i> </div> </div> <div class="card-container"> <div class="title"> <input class="title-input" placeholder="Card title" ng-blur="autosave()" ng-change="clerWidget()" ng-model="element.title"> </div> <div class="text"> <textarea class="text-input" placeholder="Add a description..." ng-blur="autosave()" ng-change="clerWidget()" ng-model="element.text">\n </textarea> </div> <div class="buttons-container"> <div dnd-list="element.buttons" dnd-allowed-types="[\'cardBtn\']" dnd-drop="dropCallbackSimple(index, item, external, \'cardBtn\')"> <div ng-repeat="btn in element.buttons track by $index " class="new-button" uib-dropdown auto-close="outsideClick" style="cursor:pointer" dnd-dragstart="dndDragstartCardBtn($index)" dnd-draggable="btn" dnd-type="\'cardBtn\'" dnd-effect-allowed="move" dnd-selected="selected = btn" id="{{step.id+\'btn_\'+$index}}" uib-dropdown-toggle> <div class="text-container"> <span style="{{!btn.title? \'color:#999999\' : \'\'}}"> {{btn.title? btn.title : "Edit button"}} </span> </div> <div class="dnd-item-component"> <i class="material-icons">open_with</i> </div> <div class="dropdown-menu inside" role="menu" style="margin-left: -40px;text-align: left" uib-dropdown-menu aria-labelledby="{{step.id+\'btn_\'+$index}}" ng-click="dropdownClick($event)"> <div class="dropdown-container" style="width: 225px"> <div class="mb10"> <custom-input ng-model="btn.title" placeholder="{{translations.title}}" ng-blur="autosave()" ng-change="clerWidget()" title="{{translations.title}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-model="btn.type" array="cardBtnTypes" opt-description="name" opt-value="value" title="{{main.translations.type}}" is-model-init="true" ng-change="switchBtnCard($index, btn.type)" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb30" ng-if="btn.type == \'link\'"> <custom-input ng-model="btn.url" placeholder="Link" type-input="url" title="Link" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="btn.type == \'link\'"> <div class="checker-container" ng-click="changeWebview($index, true)"> <div class="card-checker"> <input type="checkbox" ng-model="btn.webview" id="enable_messenger_extensions_button_card_{{$index}}"> <label for="enable_messenger_extensions_button_card_{{$index}}"> <span class="checker-ico"></span>{{translations.webview}} </label> </div> </div> </div> <div class="mb20" ng-if="btn.type == \'suggest\'"> <custom-input ng-model="btn.content" placeholder="Content" title="Content" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="delete-item mb10" ng-click="removeBtnCard($index, element)"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> </div> </div> <div class="new-button" ng-click="addBtnCard(element)"> <i class="material-icons add-icon">add</i> Add button </div> </div> </div> </slick> <div ng-if="step.category" class="store"> <div class="row"> <div class="step-component ligth right pointer downloadFile"> <i class="material-icons shop-icon">add_shopping_cart</i> <custom-dropdown ng-model="step.properties.category" array="categoriesMenu" opt-description="title" opt-value="name" is-model-init="true" is-back-placeholder="true" ng-change="selectCat()" placeholder="Select category..." is-required="false"> </custom-dropdown> <div class="download-file">
70 STORE CATEGORY </div> </div> </div> </div> </div> <div class="row dnd-horizontal-row" ng-if="step.properties.quick_replies.length > 0" style="padding-right: 44px"> <div dnd-list="step.properties.quick_replies" dnd-allowed-types="[\'replie\']" dnd-drop="dropCallbackSimple(index, item, external, \'replie\')"> <div class="step-component blue right pointer inline" uib-dropdown auto-close="outsideClick" id="{{step.id+\'qrepl_\'+$index}}" uib-dropdown-toggle style="padding-top: 11px" ng-repeat="replie in step.properties.quick_replies track by $index"> <span class="pointer" ng-class="{\'text-placeholder\' : !replie.title}"> {{replie.title? replie.title : \'Quick reply...\'}} </span> <div class="dnd-item-component" dnd-dragstart="dndDragstartReplie($index)" dnd-draggable="replie" dnd-type="\'replie\'" dnd- effect-allowed="move" dnd-selected="selected = replie"> <i class="material-icons">open_with</i> </div> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'qrepl_\'+$index}}" ng-click="dropdownClick($event)"> <div class="dropdown-container" style="width: 225px"> <div class="mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.title" placeholder="{{translations.title}}" title="{{translations.title}}" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.content" placeholder="Content" title="Content" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="mb20" ng-if="replie.type == \'text\'"> <custom-input ng-model="replie.url" placeholder="Url" title="Url" type-input="url" ng-blur="autosave()" ng-change="clerWidget()" is-back-placeholder="true"> </custom-input> </div> <div class="delete-item mb10" ng-click="step.properties.quick_replies.splice($index, 1); autosave(); clerWidget();"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> </div> <div class="step-component blue-btn right-btn pointer hiden-btn" ng-click="addReplies()"> <i class="material-icons">add</i> </div> </div>'), 71a.put("views/simple2/delay.html",'<div class="row"> <div class="step-component ligth attachment delay" uib-dropdown auto-close="outsideClick" id="{{step.id+\'_delay\'}}" uib-dropdown-toggle> <div dnd-handle class="handle"> <i class="material-icons"> more_vert </i> </div> <div class="attachment-container"> <span>WAITING</span> <i class="material-icons watch-icon">watch_later</i> <span>{{Math.round(step.properties.delay/1000)}} SECONDS</span> </div> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'_delay\'}}" ng-click="dropdownClick($event)"> <div class="dropdown-container" style="max-width: 170px; width: 170px"> <div class="mb20 short-input"> <custom-input style="display: inline-block" ng-model="value" placeholder="Waiting" title="Waiting" ng-init="value = Math.round(step.properties.delay/1000);" ng-blur="autosave()" ng-keyup="step.properties.delay = value*1000;" is-back-placeholder="true"> </custom-input> <span style="color: #969696; display: inline-block; font-weight: 400">seconds</span> </div> </div> </div> </div> </div>'),a.put("views/simple2/input-menu.html",'<div class="row"> <div style="color: #d3d3d3;font-style: italic" class="mb10"> Menu </div> <div dnd-handle class="handle" style="top: 25px; left: 15px"> <i class="material-icons"> more_vert </i> </div> <div class="step-component ligth attachment menu-component" ngf-pattern="image/*" ngf-accept="\'image/*\'" ngf-select="$parent.uploadFile($file, true)" ng-if="!step.properties.image && !fileFields.progress"> <div class="attachment-container"> <i class="material-icons">image</i> <span>Upload Image </span> <span style="color:#d3d3d3"> (optional)</span> </div> </div> <div class="step-component ligth right" ng-if="!step.properties.image && fileFields.progress"> <i class="file-icon material-icons" style="top: -9px"> file_upload </i> <div class="progress-container"> <div class="title-container"> <span class="title"> Uploading </span> <span class="status"> {{ fileFields.progress}}% </span> </div> <div class="progress-bar"> <div class="progress-status" style="width: {{ fileFields.progress}}%"> </div> </div> </div> </div> <div ng-if="step.properties.image && !fileFields.progress" class="imaged-container"> <img ng-src="{{step.properties.image}}" alt="" ngf-pattern="image/*" ngf-accept="\'image/*\'" ngf-select="$parent.uploadFile($file, true)" class="step-component menu-component image image-menu pointer"> </div> </div> \x3c!-- <div class="row">\n\n <div class="step-component ligth right">\n <resize-input\n multiline="true"\n class="top10"\n placeholder=""\n ng-blur="autosave()"\n ng-model="step.properties.question">\n </resize-input>\n </div>\n\n <div class="step-component grey-btn right-btn hiden-btn dropdown-toggle dropdown pointer"\n uib-dropdown \n style="cursor:pointer;" \n id="{{step.id}}"\n uib-dropdown-toggle>\n <i class="material-icons">add</i>\n\n <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="{{step.id}}">\n <div class="dropdown-container " style="width: 160px;">
71\n <span ng-click="addRepliesMenu()" class="dropdown-btn">\n <i class="material-icons icon">reply</i>\n <span class="text">Add Option</span>\n </span>\n </div>\n </div>\n </div>\n</div> --\x3e <div class="row dnd-horizontal-row option-warper" dnd-list="step.properties.quick_replies" dnd-allowed-types="[\'replie\']" dnd-drop="dropCallbackSimple(index, item, external, \'replie\')"> <div uib-dropdown class="option-component inline soft-hover" auto-close="outsideClick" id="{{step.id+\'qrepl_\'+$index}}" uib-dropdown-toggle dnd-dragstart="dndDragstartReplie($index)" dnd-draggable="replie" dnd-type="\'replie\'" dnd-effect-allowed="move" dnd-selected="selected = replie" ng-class="{\'empty\' : !replie.title}" ng-repeat="replie in step.properties.quick_replies track by $index"> <span class="pointer"> {{$index+1}}. {{replie.title?replie.title: \'Empty\'}} </span> <span class="delete-item" ng-click="step.properties.quick_replies.splice($index, 1); autosave(); clerWidget();$event.stopPropagation(); step.properties.quick_replies_error = false;"> <i class="material-icons" style="position: absolute; font-size: 20px;top: 13px;right: 2px"> close </i> </span> <i class="material-icons error-icon" ng-if="!replie.title"> ic_error_red </i> <div class="dnd-item-component"> <i class="material-icons">open_with</i> </div> <div class="dropdown-show-icon"> <i class="material-icons"> arrow_drop_down </i> </div> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'qrepl_\'+$index}}" style="margin-top: -4px;margin-left: 0px;left: auto;right: -258px" ng-click="dropdownClick($event)"> <div class="dropdown-container" style="width: 225px"> <custom-scroller is-shadow="false" paddings="10px 0px 10px 01px" axis="y" visible-scrols="true" is-table="false" style="max-height: 150px" height="{{ 42 + 23*scenariosList.length > 150 ? \'150\' : 42 + 23*scenariosList.length}}px"> <div style="color: #969696; font-size: 12px;font-style: italic" class="mb5"> Run scenario on selection </div> <div ng-repeat="scenario in scenariosList track by $index" class="scenario-lis-item" ng-class="{\'active\': scenario.value == replie.action.scenario}" ng-click="switchMenuStep($parent.$index, scenario);autosave(); clerWidget();"> {{scenario.name}} </div> </custom-scroller> </div> </div> </div> <div class="option-component empty new-btn inline" ng-click="addRepliesMenu()"> <i class="material-icons icon">add</i> OPTION </div> </div>'),a.put("views/simple2/input.html",'<div class="row"> <div style="color: #d3d3d3;font-style: italic" class="mb10"> Input </div> <div class="step-component grey right" ng-class="{\'active\': active}" style="padding: 14px 18px 7px" uib-dropdown auto-close="outsideClick" id="{{step.id+\'_input\'}}"> <div dnd-handle class="handle"> <i class="material-icons"> more_vert </i> </div> <resize-input2 multiline="true" class="top100" placeholder="Type a question…" ng-blur="autosave(); active=false;" ng-focus="active=true;" ng-change="clerWidget()" max-width="true" ng-model="step.properties.question" settings="true"> </resize-input2> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'_input\'}}"> <div class="dropdown-container" style="max-width: 225px; width: 225px"> <div class="mb10"> <custom-dropdown ng-model="step.properties.reply_type" array="replyTypes" opt-description="name" opt-value="value" ng-change="autosave(); clerWidget();" title="Reply type" is-model-init="true" placeholder="Select reply type..." is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb20"> <custom-input placeholder="Type invalid reply message..." ng-model="step.properties.retry_message" ng-blur="autosave()" ng-change="clerWidget()" title="Invalid reply message" is-back-placeholder="true"> </custom-input> </div> <div class="card-checker mt25"> <input type="checkbox" ng-model="step.properties.is_lead_data" ng-change="autosave(); clerWidget();" id="is_lead_data_{{step.id}}"> <label for="is_lead_data_{{step.id}}"> <span class="checker-ico"></span>Collect lead data </label> </div> <div class="card-checker" ng-if="step.properties.is_lead_data"> <input type="checkbox" ng-model="step.properties.close_lead" ng-change="autosave(); clerWidget();" id="close_lead_{{step.id}}"> <label for="close_lead_{{step.id}}"> <span class="checker-ico"></span>Close lead </label> </div> <div class="card-checker" ng-if="step.properties.reply_type == \'number\'"> <input type="checkbox" ng-model="step.properties.required_data" ng-change="autosave(); clerWidget();" id="required_data_{{step.id}}"> <label for="required_data_{{step.id}}"> <span class="checker-ico"></span>Required data </label> </div> <div class="mb10" style="display: flex" ng-if="step.properties.reply_type == \'number\' && step.properties.required_data"> <custom-dropdown ng-model="step.properties.reply_filter.min.operator" array="operators" opt-description="name" opt-value="value" ng-change="autosave(); clerWidget();" title="Rule" is-model-init="true" placeholder="Rule..." is-back-placeholder="true"> </custom-dropdown> <custom-input placeholder="Min value..." ng-model="step.properties.reply_filter.min.value" type-input="number" ng-blur="autosave()" ng-change="clerWidget()" title="Min value" is-back-placeholder="true"> </custom-input> </div> <div class="mb20" style="display: flex" ng-if="step.properties.reply_type == \'number\' && step.properties.required_data"> <custom-dropdown ng-model="step.properties.reply_filter.max.operator" array="operators" opt-description="name" opt-value="value" ng-change="autosave(); clerWidget();" title="Rule" is-model-init="true" placeholder="Rule..." is-back-placeholder="true"> </custom-dropdown> <custom-input placeholder="Max value..." ng-model="step.properties.reply_filter.max.value" type-input="number" ng-blur="autosave()" ng-change="clerWidget()" title="Max value" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div> <div class="row dnd-horizontal-row option-warper" dnd-list="step.properties.buttons" dnd-allowed-types="[\'button\']" dnd-drop="dropCallbackSimple(index, item, external, \'button\')" ng-if="step.properties.reply_type == \'quick_reply\'"> <div uib-dropdown class="option-component inline soft-hover" auto-close
71="outsideClick" id="{{step.id+\'button_\'+$index}}" uib-dropdown-toggle dnd-dragstart="dndDragstartBtn($index)" dnd-draggable="button" dnd-type="\'button\'" dnd-effect-allowed="move" dnd-selected="selected = button" ng-class="{\'empty\' : !button.title}" ng-repeat="button in step.properties.buttons track by $index"> <span class="pointer"> {{$index+1}}. {{button.title?button.title: \'Empty\'}} </span> <span class="delete-item" ng-click="step.properties.buttons.splice($index, 1); autosave(); clerWidget();$event.stopPropagation(); step.properties.buttons_error = false;"> <i class="material-icons" style="position: absolute; font-size: 20px;top: 13px;right: 2px"> close </i> </span> <i class="material-icons error-icon" ng-if="!button.title"> ic_error_red </i> <div class="dnd-item-component"> <i class="material-icons">open_with</i> </div> <div class="dropdown-show-icon"> <i class="material-icons"> arrow_drop_down </i> </div> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'button_\'+$index}}" style="margin-top: -4px;margin-left: 0px;left: auto;right: -258px" ng-click="dropdownClick($event)"> <div class="dropdown-container" style="width: 225px"> <div class="mb20"> <custom-input ng-model="button.title" placeholder="{{translations.title}}" ng-blur="button.content.value = button.title; autosave();" ng-change="clerWidget()" title="{{translations.title}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> <div class="option-component empty new-btn inline" ng-click="addBtn()"> <i class="material-icons icon">add</i> OPTION </div> </div>'),a.put("views/simple2/offer.html",'<div class="row"> <div style="color: #d3d3d3;font-style: italic" class="mb10"> Product </div> <div class="product-card" uib-dropdown auto-close="outsideClick" id="{{step.id+\'_carddd\'}}"> <div class="product-header" style="background-image: url({{step.properties.image}})"> <div class="settings-container"> <i class="material-icons" uib-dropdown-toggle>settings</i> </div> \x3c!--\n <img ng-src="{{step.properties.image}}" alt="" class="img product-img">\n --\x3e </div> <div class="product-body"> <div class="product-title">{{step.properties.name}}</div> <div class="product-description">{{step.properties.text}}</div> <button class="product-button brn-btn brn-primary">{{step.properties.button_title}} </button> </div> <div class="dropdown-menu" role="menu" uib-dropdown-menu aria-labelledby="{{step.id + \'_carddd\'}}" ng-click="dropdownClick($event)" style="left: 270px;top: -16px"> <div class="dropdown-container" style="max-width: 225px; width: 225px; height: 157px"> <div class="mb10" style="position: relative"> <label class="product-label">Category</label> <custom-dropdown ng-model="step.properties.category" array="categoriesMenu" opt-description="title" opt-value="title" is-model-init="true" is-back-placeholder="true" ng-change="selectCategory()" placeholder="Select category..." is-required="false"> </custom-dropdown> </div> <div class="mb20" style="position: relative"> <label class="product-label">Product</label> <custom-dropdown ng-model="step.properties.product_id" array="products" opt-description="name" opt-value="product_id" is-model-init="true" is-back-placeholder="true" ng-change="selectProduct()" placeholder="Select product..." is-required="false"> </custom-dropdown> </div> <div class="delete-smal" ng-click="removeProduct(step.id)"> <i class="material-icons" style="margin-left: -3px"> close </i> Remove </div> </div> </div> </div> </div>'),a.put("views/simple2/store.html",'<div class="row store"> <div class="step-component ligth right pointer downloadFile"> <i class="material-icons shop-icon">add_shopping_cart</i> <custom-dropdown ng-model="options.category" array="categoriesMenu" opt-description="title" opt-value="title" is-model-init="true" is-back-placeholder="true" is-required="false"> </custom-dropdown> <div class="download-file">
71 STORE CATEGORY </div> </div> </div>'),a.put("views/simple2/tag.html",'<div class="row"> <div class="store"> <div class="step-component ligth right pointer downloadFile"> <i class="material-icons shop-icon">loyalty</i> <custom-dropdown ng-model="step.properties.tag" array="tags" opt-description="name" opt-value="name" is-model-init="true" is-back-placeholder="true" ng-change="autosave(); clerWidget();" placeholder="Select tag..." is-required="false"> </custom-dropdown> <div class="download-file"> <span ng-click="selectCommand(\'add\')" style="color: #94cc01" ng-style="{opacity: step.properties.command == \'add\' ? 1 : .3}"> APPLY </span> <i class="material-icons" style="font-size: 12px; color: #b3b3b3" ng-click="selectCommand(step.properties.command == \'add\' ? \'remove\' : \'add\')"> compare_arrows </i> <span ng-click="selectCommand(\'remove\')" style="color: #f66060" ng-style="{opacity: step.properties.command == \'remove\' ? 1 : .3}"> CLEAR </span> </div> </div> </div> </div>'),a.put("views/simple2/text.html",'<div class="row" ng-init="fixTextBtn()"> <div class="step-component grey right" ng-class="{\'active\': active}" style="padding: 14px 18px 7px"> <div dnd-handle class="handle"> <i class="material-icons"> more_vert </i> </div> <resize-input2 class="top100" placeholder="Type a message…" ng-blur="autosave(); active=false;" multiline="true" ng-focus="active=true;" ng-change="clerWidget()" max-width="true" ng-model="step.properties.content"> </resize-input2> </div> </div>'),a.put("views/skype.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">{{$resolve.translations.skype}}</h2> </div> <form ng-submit="updateConnection()"> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.channelId}}" ng-model="skype.provider_data.client_id" title="{{$resolve.translations.channelId}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.secretKey}}" ng-model="skype.provider_data.secret" title="{{$resolve.translations.secretKey}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.botAPI}}" ng-model="skype.redirect_url" title="{{$resolve.translations.botAPI}}" is-readonly="true" is-back-placeholder="true"> </custom-input> <div class="bots-list-text"> {{$resolve.translations.settings_conections_skypeModalText}} </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="skype.provider_data.client_id" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/slack.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">Slack</h2> </div> <form ng-submit="updateConnection()"> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.channelId}}" ng-model="slack.provider_data.user" title="{{$resolve.translations.channelId}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.secretKey}}" required ng-model="slack.provider_data.user_secret" title="{{$resolve.translations.secretKey}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.botAPI}}" ng-model="slack.redirect_url" title="{{$resolve.translations.botAPI}}" is-readonly="true" is-back-placeholder="true"> </custom-input> <div class="bots-list-text"> {{$resolve.translations.settings_conections_slackModalText}} </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="slack.provider_data.user_secret" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/slide-menu.html",'<div class="slide-alerts" ng-class="{\'open\': visibility}" ng-scrollbars="{scrollX:\'none\'}" ng-scrollbars-config="config"> <ng-transclude></ng-transclude> </div>'),a.put("views/sms.html",'<div class="flex-row" style="padding-left: 200px"> <div class="settings-card-wrap mb25"> <div class="settings-card"> <h2 class="mb60">SMS</h2> <div class="mb30"> <custom-input placeholder="Phone Number" ng-model="data.phone" title="Phone Number" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Text" ng-model="data.message" title="Text" is-back-placeholder="true"> </custom-input> </div> <button class="brn-btn brn-primary" ng-click="send()"> Send </button> </div> </div> </div>'),a.put("views/stat-crm.html",'<link rel="stylesheet" type="text/css" href="styles/crm/crm-main.css"> <link rel="stylesheet" type="text/css" href="styles/crm/crm-fixes.css"> <div id="welcomePage"> <img src="images/crm/logo_bg_1.svg" alt="-" id="welcomePageBg"> <section class="section-start"> <div class="container welcome-container"> <h1 class="start-title"> Hello! </h1> <p class="start-title-description"> Welcome on your BRAIN CRM agent page </p> </div> </section> <section class="section-buble-stats"> <div class="container welcome-container"> <h3 class="stats-title"> Your level is for now <span class="text--red">BRONZE</span>, in last 30 days youâve </h3> <div class="stats-container"> <div class="stat-item stat-item--green"> <h2 class="stat-item__counter"> 10K </h2> <p class="stat-item__description"> Solved Problems </p> </div> <div class="stat-item stat-item--red"> <h2 class="stat-item__counter"> 491 </h2> <p class="stat-item__description"> Left Problems </p> </div> </div> <p class="stats-description"> You have to increase your <span class="text--red"> Problem Solving </span> rate by <span class="text--red"> 100.000 </span> this month to achieve the next bonus level status and get 5% more of bonus </p> </div> </section> <section class="section-table"> <div class="container welcome-container"> <h2 class="section-title"> <span class="section-title__accent"> Issues </span> from all bots </h2> \x3c!-- Table summary --\x3e <table class="issues-table"> <tr class="table-row--header"> <th class="issues-table__bot-name">Summary</th> <th>Now</th> <th>Today</th> <th>-1D</th> <th>-2D</th> <th>-3D</th> <th>-4D</th> <th>
71-5D</th> </tr> <tr class="table-row table-row--sum"> <td>Solved</td> <td>{{ solvedTags[0].count }}</td> <td>{{ solvedTags[1].count }}</td> <td>{{ solvedTags[2].count }}</td> <td>{{ solvedTags[3].count }}</td> <td>{{ solvedTags[4].count }}</td> <td>{{ solvedTags[5].count }}</td> <td>{{ solvedTags[6].count }}</td> </tr> </table> <ng-container ng-repeat="bot in bots"> <table class="issues-table" ng-if="bot.loaded"> <tr class="table-row--header"> <th class="issues-table__bot-name">{{ bot.name }}</th> <th>Now</th> <th>Today</th> <th>-1D</th> <th>-2D</th> <th>-3D</th> <th>-4D</th> <th>-5D</th> </tr> <tr class="table-row" ng-repeat="tag in rangeTags(bot.allTime)" ng-class="{\'table-row--sum\' : $index === bot.allTime.length - 1}"> <td style="text-transform:capitalize">{{ tag.name }}</td> <td>{{ getTagCount(bot.allTime, tag.name) }}</td> <td>{{ getTagCount(bot.today, tag.name) }}</td> <td>{{ getTagCount(bot.min1day, tag.name) }}</td> <td>{{ getTagCount(bot.min2day, tag.name) }}</td> <td>{{ getTagCount(bot.min3day, tag.name) }}</td> <td>{{ getTagCount(bot.min4day, tag.name) }}</td> <td>{{ getTagCount(bot.min5day, tag.name) }}</td> </tr> </table> </ng-container> </div> </section> <section class="section-table section--mb70"> <div class="container welcome-container"> <h2 class="section-title"> How to achieve <span class="section-title__accent"> new levels? </span> </h2> <table class="welcome-table"> <tr class="table-row--header"> <th>Level</th> <th>ADs Spendings</th> <th>Share</th> </tr> <tr class="table-row"> <td> <img src="images/crm/diamond_gem.svg" alt="status"> Diamond </td> <td>More than $500.000 per month</td> <td>25%</td> </tr> <tr class="table-row"> <td> <img src="images/crm/platinum_gem.svg" alt="status"> Platinum </td> <td>$300.000 - $500.000 per month</td> <td>20%</td> </tr> <tr class="table-row"> <td> <img src="images/crm/gold_gem.svg" alt="status"> Gold </td> <td>$100.000 - $300.000 per month</td> <td>15%</td> </tr> <tr class="table-row"> <td> <img src="images/crm/silver_gem.svg" alt="status"> Silver </td> <td>$50.000 - $100.000 per month</td> <td>10%</td> </tr> <tr class="table-row"> <td> <img src="images/crm/bronze_gem.svg" alt="status"> Bronze </td> <td>Less than $50.000 per month</td> <td>5%</td> </tr> </table> </div> </section> <section class="section-support"> <div class="container welcome-container"> <div class="support-row"> <a href="mailto:[email protected]" class="button--support"> Ask [email protected] <svg xmlns="http://www.w3.org/2000/svg" height="24" width="24"> <path class="svg-email__body" d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"> <path d="M0 0h24v24H0z" fill="none"> </svg> </a> <p> If you need help or <br> have any questions </p> </div> </div> </section> </div>'),a.put("views/stat-main.html",'<div> <div class="row-flex"> <div class="flex-col-p"> <div class="mb-card"> <h2 class="mb50">Total messages</h2> <div class="card card-64"> <div class="card-body"> <pie-chart data="pieMessages.data" style="width: 100%; display: block"></pie-chart> </div> </div> </div> </div> <div class="flex-col-p"> <div class="mb-card"> <h2 class="mb50">Total users</h2> <div class="card card-64"> <div class="card-body"> <pie-chart data="pieUsers.data" style="width: 100%; display: block"></pie-chart> </div> </div> </div> </div> </div> <div class="row-flex"> <div class="flex-col flex-col-p col-all"> <div class="mb-card"> <h2 class="mb50">Unique users</h2> <div class="card card-all"> <div class="card-body"> <basic-line data="uniqueUsers" style="display: block; width: 100%"></basic-line> </div> </div> </div> </div> </div> </div>'),a.put("views/stat-training.html",'<div class="row-flex"> <div class="flex-col flex-col-p col-all"> <div class="mb-card"> <h2 class="mb50">Training</h2> <div class="card card-64"> <div class="card-body"> <pie-chart data="pieTraining.data" style="width: 100%; display: block"></pie-chart> </div> </div> </div> </div> </div>'),a.put("views/stat-users.html",'<div> <div class="row-flex"> <div class="flex-col flex-col-p col-all"> <div class="mb-card"> <h2 class="mb50">New/Existing users timeline</h2> <div class="card card-all"> <div class="card-body"> <basic-line data="baseUsers" style="display: block; width: 100%"></basic-line> </div> </div> </div> </div> </div> <div class="row-flex"> <div class="flex-col flex-col-p col-all"> <div class="mb-card"> <h2 class="mb50">Clients per provider</h2> <div class="card card-all"> <div class="card-body"> <basic-line data="usersPerWidget" style="display: block; width: 100%"></basic-line> </div> </div> </div> </div> </div> </div>'),a.put("views/statistic-menu.html",'<div class="nav-sidebar-content-ofset"> <h2 class="mb20">Date range</h2> <div class="mb70"> <custom-date-range range-option="vm.datePicker.options" date-picker="vm.datePicker" ng-model="vm.datePicker.date"> </custom-date-range> </div> <h2 class="mb40">{{main.translations.leftMenu_category}}</h2> <div class="card-checker" ng-click="goto(\'general\',vm.id)"> <input type="checkbox" ng-checked="check(\'general\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Dashboard</span> </label> </div> <div class="card-checker" ng-click="goto(\'realtime\',vm.id)"> <input type="checkbox" ng-checked="check(\'realtime\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Realtime</span> </label> </div> <div class="card-checker" ng-click="goto(\'users\',vm.id)"> <input type="checkbox" ng-checked="check(\'users\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Users</span> </label> </div> <div class="card-checker" ng-click="goto(\'topusers\',vm.id)"> <input type="checkbox" ng-checked="check(\'topusers\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Top users</span> </label> </div>
71 <div class="card-checker" ng-click="goto(\'sessions\',vm.id)"> <input type="checkbox" ng-checked="check(\'sessions\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Sessions</span> </label> </div> <div class="card-checker" ng-click="goto(\'messages\',vm.id)"> <input type="checkbox" ng-checked="check(\'messages\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Messages</span> </label> </div> \x3c!-- <div\n class="card-checker"\n ng-click="goto(\'top-messages-in\',vm.id)">\n <input type="checkbox" ng-checked="check(\'top-messages-in\')">\n <label>\n <span class="checker-ico checker-ico-right">\n </span>\n <span>Incoming messages</span>\n </label>\n </div> --\x3e \x3c!-- <div\n class="card-checker"\n ng-click="goto(\'top-messages-out\',vm.id)">\n <input type="checkbox" ng-checked="check(\'top-messages-out\')">\n <label>\n <span class="checker-ico checker-ico-right">\n </span>\n <span>Outgoing messages</span>\n </label>\n </div> --\x3e <div class="card-checker" ng-click="goto(\'stat-training\',vm.id)"> <input type="checkbox" ng-checked="check(\'stat-training\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Training</span> </label> </div> <div class="card-checker" ng-click="goto(\'keywords\',vm.id)"> <input type="checkbox" ng-checked="check(\'keywords\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Keywords</span> </label> </div> \x3c!-- <ul>\n <li><a ui-sref="general({id: vm.id})"\n ui-sref-active="active">Dashboard</a></li>\n <li><a ui-sref="realtime({id: vm.id})"\n ui-sref-active="active">Realtime</a></li>\n <li><a ui-sref="users({id: vm.id})"\n ui-sref-active="active">Users</a></li>\n <li><a ui-sref="topusers({id: vm.id})"\n ui-sref-active="active">Top users</a></li>\n <li><a ui-sref="sessions({id: vm.id})"\n ui-sref-active="active">Sessions</a></li>\n <li><a ui-sref="messages({id: vm.id})"\n ui-sref-active="active">Messages</a></li>\n <li><a ui-sref="top-messages-in({id: vm.id})"\n ui-sref-active="active">Incoming messages</a></li>\n <li><a ui-sref="top-messages-out({id: vm.id})"\n ui-sref-active="active">Outgoing messages</a></li>\n <li><a ui-sref="stat-training({id: vm.id})"\n ui-sref-active="active">Training</a></li>\n </ul> --\x3e </div>'),a.put("views/statistic.html",'<div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 10px 0px 51px" height="100%"> <statistic-menu></statistic-menu> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div ui-view=""> </div> </div> </div>'), 72a.put("views/statsall.html",'<div class="statistic" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <div class="container"> <div class="empty-nav-sidebar"></div> <div class="margin-rest"> <div> <h2 class="mb50 statistic-heder">{{main.translations.menu_global_Statistic}} <span>{{total_clients | number}} Users</span> <span>{{total_messages | number}} Messages</span> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width: 1379px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" scrolleddown="console.log(\'asdasdasd\')" style="width: 1377px"> <tbody> <tr class="header-image"> <td ng-repeat="th in tableHeaders" class="active-heder" ng-class="{\'active\': th.active}" ng-click="sortColumn(th)"> <span style="cursor: pointer"> {{th.name}} <span ng-include src="\'images/svg/ic_keyboard_arrow_down_black.svg\'" ng-class="{\'th-desc\': th.sortDirection == true}" class="include-svg"></span> </span> </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, client) in usersInfo" style="cursor: pointer" ui-sref="conversations({id: client.bot_id, user: client})" ng-class="{\'first-line\' : key == 0}"> <td style="width: 22%">{{client.bot_name}}</td> <td style="width: 22%">{{client.name}}</td> <td style="width: 15%">{{client.provider}}</td> <td style="width: 15%">{{client.messages}}</td> <td style="width: 15%"><span am-time-ago="client.last"></span></td> <td style="width: 10%">{{client.sessions}}</td> <td class="control-fixed"> <a ui-sref="conversations({id: client.bot_id, user: client})" class="btn-icon btn-icon-no-top" title="Bot conversations"> <div class="control-fixed-shadow"></div> <ng-include src="\'images/svg/ic_forum_black_24px.svg\'"></ng-include> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!usersInfo.length && !inProgress"> <tr> <td colspan="6">No users activity yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div> </div>'),a.put("views/store-attribute-values.html",'<div class="row-flex"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2>Values</h2> <form class="" ng-if="attribute.type == \'mixed\'" ng-submit="createValue()"> <div class="mb50"> <div class="mb10px" ng-repeat="(name, schema) in attribute.schema.fields track by $index"> <div class="mb10" ng-if="schema.type == \'string\' || schema.type == \'number\'"> <custom-input ng-model="newValue[name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> </custom-input> </div> <div ng-show="schema.type == \'boolean\'" ng-class="{\'mt20\' : $index == 0}"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newValue[name]" id="schema_bool"> <label for="schema_bool"> <span class="checker-ico"></span> <span>{{schema.label}}</span> </label> </div> </div> <div class="mb10" ng-show="schema.type==\'date\'"> <custom-date-range-single title="{{schema.label}}" ng-model="newValue[name]"> </custom-date-range-single> </div> <div ng-show="schema.type==\'file\'"> <div class="mb10"> <custom-input ng-model="newValue[name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', name)" ng-disabled="uploaders[name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-show="schema.type==\'image\'"> <div class="mb10"> <custom-input ng-model="newValue[name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', name)" ng-disabled="uploaders[name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div class="mb10" ng-show="schema.type==\'color\'"> <custom-colorpicker ng-model="newValue[name]" title="{{schema.label}}"> </custom-colorpicker> </div> </div> </div> <div class="mt20"> <button type="submit" class="brn-btn brn-primary">{{main.translations.addValue}}</button> </div> </form> <form ng-if="attribute.type != \'mixed\'" ng-submit="createValue()"> <div class="mb50"> <div class="mb10" ng-if="attribute.type == \'string\' || attribute.type == \'number\'"> <custom-input ng-model="newValue.value" placeholder="{{main.translations.value}}" title="{{main.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-if="attribute.type == \'color\'"> <custom-colorpicker ng-model="newValue.value" title="{{main.translations.value}}"> </custom-colorpicker> </div> <div ng-show="attribute.type == \'boolean\'" class="mt20"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newValue.value" id="model_boolvalue"> <label for="model_boolvalue"> <span class="checker-ico"></span> <span>{{main.translations.value}}</span> </label> </div> </div> <div class="mb10" ng-show="attribute.type == \'date\'"> <custom-date-range-single title="{{main.translations.value}}" ng-model="newValue.value"> </custom-date-range-single> </div> <div ng-show="schema.type==\'file\'"> <div class="mb10"> <custom-input ng-model="newValue.value" ng-disabled="uploaders[attribute.name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders[attribute.name]" ng-max-size="5MB" ngf-select="addFile($file, $index, \'file\', \'value\')" ng-disabled="uploaders[attribute.name]"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders[attribute.name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div ng-show="schema.type==\'image\'"> <div class="mb10"> <custom-input ng-model="newValue.value" ng-disabled="uploaders[attribute.name]" placeholder="{{schema.label}}" title="{{schema.label}}" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, \'image\', \'value\')" ng-disabled="uploaders[attribute.name]"> image </i> <span class="google-loader input-group-addon" ng-show="uploaders[attribute.name]" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> </div> <div class="mt20"> <button type="submit" class="brn-btn brn-primary">{{main.translations.addValue}}</button> </div> </form> </div> </div> <div> <div class="brn-table-wrap learning-entities" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <h2 class="mb60">Values</h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1200px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:1197px"> <tbody ng-if="attribute.type!=\'mixed\' && values.length"> <tr class="header-default"> <td style="width: 90%"> {{main.translations.value}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="value in values track by $index" ng-class="{\'first-line\' : $index == 0}"> <td class="td-top-align"> <span ng-if="attribute.type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include> </span> <img ng-src="{{value}}" ng-if="attribute.type==\'image\' && value.length" style="max-width: 100px"> <span ng-if="attribute.type==\'string\' || attribute.type==\'number\' || attribute.type==\'date\'"> {{value}} </span> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete value"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="100%"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tbody ng-if="attribute.type==\'mixed\' && values.length"> <tr class="header-default"> <td ng-repeat="field in fields"> {{attribute.schema.fields[field].label}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="value in values track by $index" ng-class="{\'first-line\' : $index == 0}"> <td class="td-top-align" ng-repeat="field in fields"> <span ng-if="attribute.schema.fields[field].type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value[field] == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value[field] != true"></ng-include> </span> <div ng-if="attribute.schema.fields[field].type == \'color\'" ng-style="{\'width\': \'20px\', \'height\': \'20px\', \'background-color\': value[field]}"> </div> <img ng-src="{{value[field]}}" ng-if="attribute.schema.fields[field].type==\'image\' && value[field].length" style="max-width: 100px"> <span ng-if="attribute.schema.fields[field].type==\'string\' || attribute.schema.fields[field].type==\'number\' || attribute.schema.fields[field].type==\'date\'"> {{value[field]}} </span> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete value"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="100%"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> </table> </custom-scroller> </div> </div> </div> </div>'),a.put("views/store-categories.html",'<div class="brn-table-wrap learning-entities"> <table class="brn-table learning-table row-small"> <thead> <tr> <th colspan="2"> Categories <a ui-sref="store.create_category({id: botNav.botInfo.bot_id})">Add</a> </th> <th> </th> <th> </th> <th> </th> </tr> </thead> <tbody> <tr> <td> {{main.translations.title}} </td> <td> {{main.translations.title_name}} </td> <td> Parent </td> <td> Attributes </td> <td width="120"> </td> </tr> <tr ng-repeat="category in categories"> <td class="td-top-align"> {{category.title}} </td> <td class="td-top-align"> {{category.name}} </td> <td class="td-top-align"> <a ui-sref="store.category-detail({id: botNav.botInfo.bot_id, category: category.parent.category_id})">{{category.parent.title}}</a> </td> <td class="td-top-align"> <span ng-if="!isEmpty(category.attributes)"> <span ng-repeat="(name, attr) in category.attributes"> <p style="margin-top: 0">{{main.translations.title_name}}: {{name}}</p> <p>Type: {{attr.type}}</p> <span ng-if="attr.values.length"> <p>Values: <span ng-repeat="val in attr.values">"{{val}}"; </span></p> </span> <hr> </span> </span> </td> <td class="td-top-align"> <a class="edit-link" ui-sref="store.category-detail({id: botNav.botInfo.bot_id, category: category.category_id})"> <span ng-include src="\'images/svg/ic_mode_edit_black_24px.svg\'"></span> </a>
72 <span ng-click="deleteCategory(category)"> <ng-include src="\'images/svg/rubbish-bin-delete-button.svg\'"></ng-include> </span> </td> </tr> </tbody> </table> </div>'),a.put("views/store-create-attribute-values.html","<p>This is the store-create-attribute-values view.</p>"),a.put("views/store-customers.html",'<div class="brn-table-wrap learning-entities" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress" style="min-height: 100%; position: relative"> <div class="container"> <div class="empty-nav-sidebar" style="z-index: 1000"></div> <div class="row margin-rest"> <h2 class="mb60"> Clients <a class="add-bot" style="margin-left: 18px" ui-sref="store-customer-mask({id: botNav.botInfo.bot_id})"> <i class="material-icons" style="font-size: 12px; top: 1px; position: relative; padding: 0 6px">mode_edit</i> Edit client mask </a> </h2> <div class="brn-table-wrap t-modern mb60" style="width: max-content"> <span class="round-btn" ng-click="swapFilter()" style="left: -16px; right: auto" ng-class="{\'round-btn-search\' : !filters.isActive, \'round-btn-cancel\' : filters.isActive}"> <i class="material-icons" ng-if="filters.isActive">close</i> <i class="material-icons" ng-if="!filters.isActive">search</i> </span> \x3c!--<custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-disable-filters="true"--\x3e \x3c!--is-auto-table-btn-padding="true">--\x3e <table class="brn-table" style="min-width: 1200px"> <tbody> <tr class="header-image"> <td class="control-fixed control-fixed-heder"> </td> <td style="max-width: 164px"> {{main.translations.title_name}} </td> <td ng-repeat="attr in visibleAttributes" style="white-space: nowrap"> {{attr.label}} </td> <td> Updated at </td> </tr> \x3c!-- <tr class="no-hover">\n <td>\n \n </td>\n <td ng-repeat="attr in visibleAttributes">\n <select ng-if="attr.selectable && attr.type != \'mixed\'" ng-model="filters[attr.name].value"\n ng-change="filterCustomers()">\n <option value="">All</option>\n <option ng-repeat="value in attr.values" value="{{value}}">{{value}}</option>\n </select>\n <select ng-if="attr.selectable && attr.type == \'mixed\'" ng-model="filters[attr.name].value"\n ng-change="filterCustomers()">\n <option value="">All</option>\n <option ng-repeat="value in attr.values" value="{{value[attr.schema.key]}}">\n {{value[attr.schema.key]}}\n </option>\n </select>\n <input type="text" ng-if="(attr.type==\'string\' || attr.type==\'number\') && !attr.selectable"\n ng-model="filters[attr.name].value" ng-change="filterCustomers()">\n <input type="checkbox" ng-if="attr.type==\'boolean\' && !attr.selectable"\n ng-model="filters[attr.name].value" ng-change="filterCustomers()">\n <input ng-if="attr.type==\'date\' && !attr.selectable" type="text"\n ng-model="filters[attr.name].value"\n date-range-picker\n options="{singleDatePicker: true}">\n </td>\n <td class="control-fixed control-fixed-heder">\n\n </td>\n </tr> --\x3e <tr class="no-hover filters" ng-class="{\'filters-active\' : filters.isActive}"> <td style="padding: 0px"> </td> <td style="padding: 0px 10px 0px 10px; text-align: center"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}" style="max-width: 100%; padding-right: 10px; padding-left: 10px; float: left"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="filters[\'customer_name\'].value" ng-change="filterCustomers(\'customer_name\')" title="{{main.translations.title_name}}" is-back-placeholder="true"> </custom-input> </div> </td> <td ng-repeat="attr in visibleAttributes" style="padding: 0px 10px 0px 10px; text-align: center"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}" style="max-width: 100%; padding-right: 10px; padding-left: 10px; float: left"> <custom-dropdown ng-if="attr.selectable && attr.type != \'mixed\'" ng-model="filters[attr.name].value" array="attr.values" opt-description="" opt-value="" title="{{attr.label}}" ng-change="filterCustomers(attr.name)" is-model-init="true" placeholder="All" is-back-placeholder="true"> </custom-dropdown> <custom-dropdown ng-if="attr.selectable && attr.type == \'mixed\'" ng-model="filters[attr.name].value" array="attr.values" opt-description="{{attr.schema.key}}" opt-value="{{attr.schema.key}}" title="{{attr.label}}" ng-change="filterCustomers(attr.name)" is-model-init="true" placeholder="All" is-back-placeholder="true"> </custom-dropdown> <custom-input ng-if="(attr.type==\'string\' || attr.type==\'number\') && !attr.selectable" placeholder="{{attr.label}}" ng-model="filters[attr.name].value" ng-change="filterCustomers(attr.name)" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> <div class="card-checker" style="margin-top: 25px; margin-left: -33px" ng-if="attr.type==\'boolean\' && !attr.selectable"> <input type="checkbox" ng-model="filters[attr.name].value" ng-change="filterCustomers(attr.name)" id="filter_checker_{{attr.name}}"> <label for="filter_checker_{{attr.name}}"> <span class="checker-ico"></span> </label> </div> <custom-date-range-single title="" ng-if="attr.type==\'date\' && !attr.selectable" ng-model="filters[attr.name].value" timepicker="false"> </custom-date-range-single> </div> </td> <td style="padding: 0px"> </td> </tr> <tr ng-repeat="(key, customer) in customers" ng-class="{\'first-line\' : key == 0}" ui-sref="store.customer-detail({id: botNav.botInfo.bot_id, customer: customer.customer_id})" style="cursor: pointer"> <td class="control-fixed control-fixed-left" style="left: 0; right: auto"> <a class="btn-icon" title="Edit customer detail" ui-sref="store.customer-detail({id: botNav.botInfo.bot_id, customer: customer.customer_id})"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" title="Delete customer" ng-click="deleteCustomer(customer); $event.stopPropagation();"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> <td class="td-top-align"> {{customer.name}} </td> <td class="td-top-align" ng-repeat="attr in visibleAttributes"> <span ng-if="attr.selectable"> <span ng-if="attr.multiple"> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> <span ng-repeat="value in customer.profile[attr.name]"> {{value}} <br> </span> </span> <span ng-repeat="value in customer.profile[attr.name]" ng-if="attr.type==\'date\'" ng-bind="value | date:\'dd.MM.yyyy\'"> </span> <span ng-if="attr.type==\'mixed\'"> <span ng-repeat="value in customer.profile[attr.name]"> {{value[attr.schema.key]}} <br> </span> </span> <span ng-if="attr.type==\'boolean\'"> <span ng-repeat="value in customer.profile[attr.name]"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include> </span> </span> </span> <span ng-if="!attr.multiple"> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> {{customer.profile[attr.name]}} </span> <span ng-if="attr.type==\'mixed\'"> {{customer.profile[attr.name][attr.schema.key]}} </span> <span ng-if="attr.type==\'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="customer.profile[attr.name]"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="!customer.profile[attr.name]"></ng-include> </span> <span ng-if="attr.type==\'date\'" ng-bind="customer.profile[attr.name | date:\'dd.MM.yyyy\'"> </span> </span> </span> <span ng-if="!attr.selectable"> <span ng-if="attr.multiple"> <span ng-if="attr.type==\'image\'"> <span ng-repeat="value in customer.profile[attr.name]"> <img ng-src="{{value}}" style="max-width: 100px; margin-bottom: 10px"> </span> </span> <span ng-if="attr.type==\'boolean\'"> <span ng-repeat="value in customer.profile[attr.name]"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value == false"></ng-include> </span> </span> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> <span ng-repeat="value in customer.profile[attr.name]"> {{value}} </span> </span> <span ng-if="attr.type==\'mixed\'"> <span ng-repeat="value in customer.profile[attr.name]"> {{value[attr.schema.key]}} </span> </span> <span ng-repeat="value in customer.profile[attr.name]" ng-if="attr.type==\'date\'" ng-bind="value | date:\'dd.MM.yyyy\'"> </span> </span> <span ng-if="!attr.multiple"> <img ng-src="{{customer.profile[attr.name]}}" ng-if="attr.type==\'image\'" style="max-width: 100px"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="attr.type==\'boolean\' && customer.profile[attr.name] == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="attr.type==\'boolean\' && customer.profile[attr.name] == false"></ng-include> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> {{customer.profile[attr.name]}} </span> <span ng-if="attr.type==\'mixed\'"> {{customer.profile[attr.name][attr.schema.key]}} </span> <span ng-if="attr.type==\'date\'" ng-bind="customer.profile[attr.name] | date:\'dd.MM.yyyy\'"> </span> </span> </span> </td> <td class="td-top-align"> <span ng-if="customer.updated_at" ng-bind="customer.updated_at | date:\'dd/MM/yy, HH:mm:ss\'"></span> </td> </tr> <tr ng-show="inProgress"> <td colspan="16"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!customers.length"> <tr style="height: 90px"> <td colspan="16">No clients yet</td> </tr> </tfoot> </table> \x3c!--</custom-scroller>--\x3e </div> </div> </div> </div>'),a.put("views/store-dashboard.html",'<div class="container"> <div class="empty-nav-sidebar"></div> <div class="row margin-rest"> <h2 class="mb60">Orders </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1144px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:1141px"> <tbody> <tr class="header-image"> <td style="width: 10%"> Status </td> <td style="width: 15%"> Date </td> <td style="width: 20%"> Client </td> <td style="width: 20%"> Products </td> <td style="width: 20%"> Attachments </td> <td style="width: 15%"> Total Price </td> </tr> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!broadcasts.length && !inProgress"> <tr> <td colspan="6">No Orders found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div>'),a.put("views/store-edit-merchant-mask.html",'<div class="flex-row"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb35">Create Attribute</h2> <div class="mb50"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="newAttr.name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Label" title="Label" ng-model="newAttr.label" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-class="{\'mb30\' : newAttr.type!=\'mixed\'}"> <custom-dropdown ng-model="newAttr.type" array="attributeTypes" opt-description="title" opt-value="name" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleChangeType()" ng-disabled="newAttr.values.length" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb30" ng-if="newAttr.type==\'mixed\'"> <custom-dropdown ng-model="$parent.schemaKey" array="schemaKeys" opt-description="name" opt-value="name" title="Schema Key" is-model-init="true" placeholder="Schema Key..." ng-change="handleChangeKey()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="card-checker"> <input type="checkbox" ng-model="newAttr.visible" id="attributes_visible"> <label for="attributes_visible" style="text-transform: none"> <span class="checker-ico"></span>Visible </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.multiple" id="attributes_multiple"> <label for="attributes_multiple" style="text-transform: none"> <span class="checker-ico"></span>Multiple </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.selectable" id="attributes_selectable"> <label for="attributes_selectable" style="text-transform: none"> <span class="checker-ico"></span>Selectable </label> </div> </div> <button ng-click="addAttribute()" class="brn-btn brn-primary">Add Attribute</button> </div> </div> <div> <div class="scenario-card transparent" ng-if="newAttr.type==\'mixed\'"> <div class="section no-padding mb60"> <h2 class="mb35">Schema</h2> <div ng-show="!isEmpty(newAttr.schema.fields)"> <div class="flex-row mb5" ng-repeat="(name, schema) in newAttr.schema.fields"> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].label" placeholder="Label" title="Label" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newAttr.schema.fields[name].type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container"> <div class="delete-item" ng-click="deleteSchemaAttribute(name)" ng-if="$parent.schemaKey != name"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> <div class="flex-row mb5" ng-if="newSchemaAttr.show"> <div class="short-item"> <custom-input ng-model="newSchemaAttr.name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newSchemaAttr.label" placeholder="Label" title="Label" is-required="true" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newSchemaAttr.type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" ng-change="addSchemaAttribute()" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container"> <div class="delete-item" ng-click="clearSchemaAttribute()"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot mt20" ng-click="showSchemaAttribute()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> <div class="settings-card-wrap big mb50" ng-if="newA
72ttr.selectable"> <h2 class="mb60">Values <a class="add-bot" ng-click="addValue()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:640px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:638px"> <tbody ng-if="newAttr.type!=\'mixed\' && newAttr.values.length"> <tr class="header-image"> <td style="width:45%"> {{main.translations.value}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in newAttr.values" ng-class="{\'first-line\' : key == 0}"> <td> <span ng-if="newAttr.type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include> </span> <img ng-src="{{value}}" ng-if="newAttr.type==\'image\' && newAttr.value.length" style="max-width: 100px"> <span ng-if="newAttr.type==\'string\' || newAttr.type==\'number\' || newAttr.type==\'date\'"> {{value}} </span> <div ng-if="newAttr.type==\'color\'" ng-style="{\'width\': \'15px\', \'height\': \'15px\', \'background-color\': value}"></div> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete value"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tbody ng-if="newAttr.type==\'mixed\' && newAttr.values.length"> <tr class="header-image"> <td ng-repeat="field in fields"> {{newAttr.schema.fields[field].label}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in newAttr.values" ng-class="{\'first-line\' : key == 0}"> <td ng-repeat="field in fields"> <span ng-if="newAttr.schema.fields[field].type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value[field] == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value[field] != true"></ng-include> </span> <div ng-if="newAttr.schema.fields[field].type == \'color\'" ng-style="{\'width\': \'20px\', \'height\': \'20px\', \'background-color\': value[field]}"> </div> <img ng-src="{{value[field]}}" ng-if="newAttr.schema.fields[field].type==\'image\' && value[field].length" style="max-width: 100px"> <span ng-if="newAttr.schema.fields[field].type==\'string\' || newAttr.schema.fields[field].type==\'number\' || newAttr.schema.fields[field].type==\'date\'"> {{value[field]}} </span> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="{{main.translations.deleteValue}}"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tfoot ng-if="!newAttr.values.length"> <tr> <td colspan="100%">No attribute values found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'), 73a.put("views/store-edit_customer_mask.html",'<div class="flex-row"> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb35">Create Attribute</h2> <div class="mb50"> <div class="mb10"> <custom-input placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" ng-model="newAttr.name" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Lable" title="Lable" ng-model="newAttr.label" is-back-placeholder="true"> </custom-input> </div> <div class="mb10" ng-class="{\'mb30\' : newAttr.type!=\'mixed\'}"> <custom-dropdown ng-model="newAttr.type" array="attributeTypes" opt-description="title" opt-value="name" title="{{main.translations.type}}" is-model-init="true" placeholder="" ng-change="handleChangeType()" ng-disabled="newAttr.values.length" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb30" ng-if="newAttr.type==\'mixed\'"> <custom-dropdown ng-model="$parent.schemaKey" array="schemaKeys" opt-description="name" opt-value="name" title="Schema Key" is-model-init="true" placeholder="Schema Key..." ng-change="handleChangeKey()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="card-checker"> <input type="checkbox" ng-model="newAttr.visible" id="attributes_visible"> <label for="attributes_visible" style="text-transform: none"> <span class="checker-ico"></span>Visible </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.multiple" id="attributes_multiple"> <label for="attributes_multiple" style="text-transform: none"> <span class="checker-ico"></span>Multiple </label> </div> <div class="card-checker no-margin"> <input type="checkbox" ng-model="newAttr.selectable" id="attributes_selectable"> <label for="attributes_selectable" style="text-transform: none"> <span class="checker-ico"></span>Selectable </label> </div> </div> <button ng-click="addAttribute()" class="brn-btn brn-primary">Add Attribute</button> </div> </div> <div> <div class="scenario-card transparent" ng-if="newAttr.type==\'mixed\'"> <div class="section no-padding mb60"> <h2 class="mb35">Schema</h2> <div ng-show="!isEmpty(newAttr.schema.fields)"> <div class="flex-row mb5" ng-repeat="(name, schema) in newAttr.schema.fields"> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newAttr.schema.fields[name].label" placeholder="Label" title="Label" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newAttr.schema.fields[name].type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container"> <div class="delete-item" ng-click="deleteSchemaAttribute(name)" ng-if="$parent.schemaKey != name"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> </div> <div class="flex-row mb5" ng-if="newSchemaAttr.show"> <div class="short-item"> <custom-input ng-model="newSchemaAttr.name" placeholder="{{main.translations.title_name}}" title="{{main.translations.title_name}}" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-input ng-model="newSchemaAttr.label" placeholder="Label" title="Label" is-required="true" enter="addSchemaAttribute()" ng-blur="addSchemaAttribute()" is-back-placeholder="true"> </custom-input> </div> <div class="short-item"> <custom-dropdown ng-model="newSchemaAttr.type" array="schemaTypes" opt-description="title" opt-value="name" title="Schema Key" is-model-init="true" ng-change="addSchemaAttribute()" placeholder="" ng-disabled="$parent.schemaKey == name" is-back-placeholder="true"> </custom-dropdown> </div> <div class="short-item buttons-container"> <div class="delete-item" ng-click="clearSchemaAttribute()"> <i class="material-icons"> close </i> <span>Remove</span> </div> </div> </div> <div class="flex-row mb30"> <div class="add-bot mt20" ng-click="showSchemaAttribute()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </div> </div> </div> </div> <div class="settings-card-wrap big mb50" ng-if="newAttr.selectable"> <h2 class="mb60">Values <a class="add-bot" ng-click="addValue()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:640px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:638px"> <tbody ng-if="newAttr.type!=\'mixed\' && newAttr.values.length"> <tr class="header-image"> <td style="width:45%"> {{main.translations.value}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in newAttr.values" ng-class="{\'first-line\' : key == 0}"> <td> <span ng-if="newAttr.type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include> </span> <img ng-src="{{value}}" ng-if="newAttr.type==\'image\' && newAttr.value.length" style="max-width: 100px"> <span ng-if="newAttr.type==\'string\' || newAttr.type==\'number\' || newAttr.type==\'date\'"> {{value}} </span> <div ng-if="newAttr.type==\'color\'" ng-style="{\'width\': \'15px\', \'height\': \'15px\', \'background-color\': value}"></div> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="Delete value"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tbody ng-if="newAttr.type==\'mixed\' && newAttr.values.length"> <tr class="header-image"> <td ng-repeat="field in fields"> {{newAttr.schema.fields[field].label}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, value) in newAttr.values" ng-class="{\'first-line\' : key == 0}"> <td ng-repeat="field in fields"> <span ng-if="newAttr.schema.fields[field].type == \'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value[field] == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value[field] != true"></ng-include> </span> <div ng-if="newAttr.schema.fields[field].type == \'color\'" ng-style="{\'width\': \'20px\', \'height\': \'20px\', \'background-color\': value[field]}"> </div> <img ng-src="{{value[field]}}" ng-if="newAttr.schema.fields[field].type==\'image\' && value[field].length" style="max-width: 100px"> <span ng-if="newAttr.schema.fields[field].type==\'string\' || newAttr.schema.fields[field].type==\'number\' || newAttr.schema.fields[field].type==\'date\'"> {{value[field]}} </span> </td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteValue(value)" style="top: 8px" title="{{main.translations.deleteValue}}"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> <tfoot ng-if="!newAttr.values.length"> <tr> <td colspan="100%">No attribute values found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'),a.put("views/store-merchant-mask.html",'<div class="flex-row"> <div class="settings-card-wrap big mb50" style="margin-right: 60px"> <h2 class="mb60">Merchant mask <a class="add-bot" ui-sref="store-edit-merchant-mask({id: botNav.botInfo.bot_id})"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb50" style="max-width:640px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table" style="width:638px"> <tbody> <tr class="header-default"> <td style="width:25%"> {{main.translations.title_name}} </td> <td style="width:20%"> {{main.translations.type}} </td> <td style="width:13%"> Visible </td> <td style="width:13%"> Multiple </td> <td style="width:15%"> Selectable </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(name, attr) in attributes track by $index" ng-class="{\'first-line\' : $index == 0}"> <td style="cursor: pointer" ui-sref="store.edit-merchant-field({id: botNav.botInfo.bot_id, field: name})">{{name}}</td> <td style="cursor: pointer" class="td-top-align" ui-sref="store.edit-merchant-field({id: botNav.botInfo.bot_id, field: name})">{{attr.type}}</td> <td class="td-top-align" style="text-align: center"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="attributes[name].visible" ng-change="updateMerchant()" id="{{name}}_visible_{{$index}}"> <label for="{{name}}_visible_{{$index}}"> <span class="checker-ico"></span> </label> </div> </td> <td class="td-top-align" style="text-align: center"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="attributes[name].multiple" ng-change="updateMerchant()" id="{{name}}_multiple_{{$index}}"> <label for="{{name}}_multiple_{{$index}}"> <span class="checker-ico"></span> </label> </div> </td> <td class="td-top-align" style="text-align: center"> <div class="card-checker no-margin text-center"> <input type="checkbox" ng-model="attributes[name].selectable" ng-change="updateMerchant()" id="{{name}}_selectable_{{$index}}"> <label for="{{name}}_selectable_{{$index}}"> <span class="checker-ico"></span> </label> </div> </td> <td class="control-fixed"> <a class="btn-icon" title="Edit merchant field" ui-sref="store.edit-merchant-field({id: botNav.botInfo.bot_id, field: name})"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteAttribute(name)" style="top: 8px" title="Delete merchant field"> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> </table> </custom-scroller> </div> <button ng-click="updateMerchant()" class="brn-btn brn-primary">{{main.translations.save_btn}}</button> </div> <div class="settings-card-wrap mb50"> <div class="settings-card medium210"> <h2 class="mb60">Additional</h2> <div class="mb50" style="margin-top: -4px"> <div class="card-checker no-margin"> <input type="checkbox" ng-model="disabledTemplate" id="attributes_active"> <label for="attributes_active" style="text-transform: none"> <span class="checker-ico"></span>Merchant Name consists of several attributes </label> </div> <div style="padding-left: 18px; width: 200px" class="mb15"> <span class="text-small-transparent">
73 Combine your {fields} to achieve complete merchant name, that will be shown in Orders List. </span> </div> <div class="mb25"> <custom-input placeholder="Merchant Name for Orders List" title="Merchant Name for Orders List" ng-disabled="!disabledTemplate" ng-click="updateMerchant()" ng-model="merchant_mask.merchant.template.name" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/store-merchants.html",'<div class="brn-table-wrap learning-entities" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress" style="min-height: 100%; position: relative"> <div class="container"> <div class="empty-nav-sidebar" style="z-index: 1000"></div> <div class="row margin-rest"> <h2 class="mb60"> Merchants <a class="add-bot" style="margin-left: 18px" ui-sref="store.create-merchant({id: botNav.botInfo.bot_id})"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> <a class="add-bot" style="margin-left: 18px" ui-sref="store-merchant-mask({id: botNav.botInfo.bot_id})"> <i class="material-icons" style="font-size: 12px; top: 1px; padding: 0 6px; position: relative">mode_edit</i> Edit merchant mask </a> </h2> <div class="brn-table-wrap t-modern mb60" style="width: max-content"> <span class="round-btn" ng-click="swapFilter()" style="left: -16px; right: auto" ng-class="{\'round-btn-search\' : !filters.isActive, \'round-btn-cancel\' : filters.isActive}"> <i class="material-icons" ng-if="filters.isActive">close</i> <i class="material-icons" ng-if="!filters.isActive">search</i> </span> \x3c!--<custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-disable-filters="true"--\x3e \x3c!--is-auto-table-btn-padding="true">--\x3e <table class="brn-table" style="min-width: 1200px"> <tbody> <tr class="header-image"> <td class="control-fixed control-fixed-heder"> </td> <td style="width: 150px"> {{main.translations.title_name}} </td> <td ng-repeat="attr in visibleAttributes" style="white-space: nowrap"> {{attr.label}} </td> <td> Updated at </td> </tr> \x3c!-- <tr class="no-hover">\n <td>\n \n </td>\n <td ng-repeat="attr in visibleAttributes">\n <select ng-if="attr.selectable && attr.type != \'mixed\'" ng-model="filters[attr.name].value"\n ng-change="filterMerchants()">\n <option value="">All</option>\n <option ng-repeat="value in attr.values" value="{{value}}">{{value}}</option>\n </select>\n <select ng-if="attr.selectable && attr.type == \'mixed\'" ng-model="filters[attr.name].value"\n ng-change="filterMerchants()">\n <option value="">All</option>\n <option ng-repeat="value in attr.values" value="{{value[attr.schema.key]}}">\n {{value[attr.schema.key]}}\n </option>\n </select>\n <input type="text" ng-if="(attr.type==\'string\' || attr.type==\'number\') && !attr.selectable"\n ng-model="filters[attr.name].value" ng-change="filterMerchants()">\n <input type="checkbox" ng-if="attr.type==\'boolean\' && !attr.selectable"\n ng-model="filters[attr.name].value" ng-change="filterMerchants()">\n <input ng-if="attr.type==\'date\' && !attr.selectable" type="text"\n ng-model="filters[attr.name].value"\n date-range-picker\n options="{singleDatePicker: true}">\n </td>\n <td class="control-fixed control-fixed-heder">\n\n </td>\n </tr> --\x3e <tr class="no-hover filters" ng-class="{\'filters-active\' : filters.isActive}"> <td style="padding: 0px"> </td> <td style="padding: 0px 10px 0px 10px; text-align: center"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}" style="max-width: 100%; padding-right: 10px; padding-left: 10px; float: left"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="filters[\'merchant_name\'].value" ng-change="filterMerchants(\'merchant_name\')" title="{{main.translations.title_name}}" is-back-placeholder="true"> </custom-input> </div> </td> <td ng-repeat="attr in visibleAttributes" style="padding: 0px 10px 0px 10px; text-align: center"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}" style="max-width: 100%; padding-right: 10px; padding-left: 10px; float: left"> <custom-dropdown ng-if="attr.selectable && attr.type != \'mixed\'" ng-model="filters[attr.name].value" array="attr.values" opt-description="" opt-value="" title="{{attr.label}}" ng-change="filterMerchants(attr.name)" is-model-init="true" placeholder="All" is-back-placeholder="true"> </custom-dropdown> <custom-dropdown ng-if="attr.selectable && attr.type == \'mixed\'" ng-model="filters[attr.name].value" array="attr.values" opt-description="{{attr.schema.key}}" opt-value="{{attr.schema.key}}" title="{{attr.label}}" ng-change="filterMerchants(attr.name)" is-model-init="true" placeholder="All" is-back-placeholder="true"> </custom-dropdown> <custom-input ng-if="(attr.type==\'string\' || attr.type==\'number\') && !attr.selectable" placeholder="{{attr.label}}" ng-model="filters[attr.name].value" ng-change="filterMerchants(attr.name)" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> <div class="card-checker" style="margin-top: 25px; margin-left: -33px" ng-if="attr.type==\'boolean\' && !attr.selectable"> <input type="checkbox" ng-model="filters[attr.name].value" ng-change="filterMerchants(attr.name)" id="filter_checker_{{attr.name}}"> <label for="filter_checker_{{attr.name}}"> <span class="checker-ico"></span> </label> </div> <custom-date-range-single title="" ng-if="attr.type==\'date\' && !attr.selectable" ng-model="filters[attr.name].value" timepicker="false"> </custom-date-range-single> </div> </td> <td style="padding: 0px"> </td> </tr>
73 <tr ng-repeat="(key, merchant) in merchants" ng-class="{\'first-line\' : key == 0}" ui-sref="store.merchant-detail({id: botNav.botInfo.bot_id, merchant: merchant.merchant_id})" style="cursor: pointer"> <td class="control-fixed control-fixed-left" style="left: 0; right: auto"> <a class="btn-icon" title="Edit merchant detail" ui-sref="store.merchant-detail({id: botNav.botInfo.bot_id, merchant: merchant.merchant_id})"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" title="Delete merchant" ng-click="deleteMerchant(merchant, $index)"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> <td class="td-top-align"> {{merchant.name}} </td> <td class="td-top-align" ng-repeat="attr in visibleAttributes"> <span ng-if="attr.selectable"> <span ng-if="attr.multiple"> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> <span ng-repeat="value in merchant.profile[attr.name]"> {{value}} <br> </span> </span> <span ng-repeat="value in merchant.profile[attr.name]" ng-if="attr.type==\'date\'" ng-bind="value | date:\'dd.MM.yyyy\'"> </span> <span ng-if="attr.type==\'mixed\'"> <span ng-repeat="value in merchant.profile[attr.name]"> {{value[attr.schema.key]}} <br> </span> </span> <span ng-if="attr.type==\'boolean\'"> <span ng-repeat="value in merchant.profile[attr.name]"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include> </span> </span> </span> <span ng-if="!attr.multiple"> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> {{merchant.profile[attr.name]}} </span> <span ng-if="attr.type==\'mixed\'"> {{merchant.profile[attr.name][attr.schema.key]}} </span> <span ng-if="attr.type==\'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="merchant.profile[attr.name]"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="!merchant.profile[attr.name]"></ng-include> </span> <span ng-if="attr.type==\'date\'" ng-bind="merchant.profile[attr.name | date:\'dd.MM.yyyy\'"> </span> </span> </span> <span ng-if="!attr.selectable"> <span ng-if="attr.multiple"> <span ng-if="attr.type==\'image\'"> <span ng-repeat="value in merchant.profile[attr.name]"> <img ng-src="{{value}}" style="max-width: 100px; margin-bottom: 10px"> </span> </span> <span ng-if="attr.type==\'boolean\'"> <span ng-repeat="value in merchant.profile[attr.name]"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value == false"></ng-include> </span> </span> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> <span ng-repeat="value in merchant.profile[attr.name]"> {{value}} <br> </span> </span> <span ng-if="attr.type==\'mixed\'"> <span ng-repeat="value in merchant.profile[attr.name]"> {{value[attr.schema.key]}} <br> </span> </span> <span ng-repeat="value in merchant.profile[attr.name]" ng-if="attr.type==\'date\'" ng-bind="value | date:\'dd.MM.yyyy\'"> </span> </span> <span ng-if="!attr.multiple"> <img ng-src="{{merchant.profile[attr.name]}}" ng-if="attr.type==\'image\'" style="max-width: 100px"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="attr.type==\'boolean\' && merchant.profile[attr.name] == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="attr.type==\'boolean\' && merchant.profile[attr.name] == false"></ng-include> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> {{merchant.profile[attr.name]}} </span> <span ng-if="attr.type==\'mixed\'"> {{merchant.profile[attr.name][attr.schema.key]}} </span> <span ng-if="attr.type==\'date\'" ng-bind="merchant.profile[attr.name] | date:\'dd.MM.yyyy\'"> </span> </span> </span> </td> <td class="td-top-align"> <span ng-if="merchant.updated_at" ng-bind="merchant.updated_at | date:\'dd/MM/yy, HH:mm:ss\'"></span> </td> </tr> <tr ng-show="inProgress"> <td colspan="16"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!merchants.length"> <tr style="height: 90px"> <td colspan="16">No merchants yet</td> </tr> </tfoot> </table> \x3c!--</custom-scroller>--\x3e </div> </div> </div> </div>'),a.put("views/store-offers-direct.html",'<div class="brn-table-wrap learning-entities" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 20px 45px 51px" height="100%"> <div class="nav-sidebar-content-ofset" style="padding-right: 0px"> <h2>Offers</h2> <div class="card-checker"> <input type="checkbox" ng-checked="false" ng-click="toPublic()"> <label ng-click="toPublic()"> <span class="checker-ico checker-ico-right"> </span> <span>Public</span> </label> </div> <div class="card-checker"> <input type="checkbox" ng-checked="true"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Direct</span> </label> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <h2 class="mb60"> Direct offers </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:100%"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-auto-table-btn-padding="true"> <table class="brn-table" style="width: calc(100% - 3px); min-width: 1200px"> <tbody> <tr class="header-image"> <td> Offer </td> <td style="text-transform: none"> Type </td> <td style="padding-left: 64px"> Author </td> <td style="text-transform: none"> Author role </td> <td> Status </td> <td> Price </td> <td> Proposition </td> <td> System </td> <td> Date </td> </tr> <tr ng-repeat="offer in offers" ng-if="offers.length"> <td> <div ng-if="offer.name.trim()" class="transaction-table__object"> {{offer.name}} </div> <div ng-if="!offer.name.trim()"> Unknown </div> </td> <td> {{offer.offer_data.creation_type}} </td> \x3c!-- Author --\x3e <td> <div class="transaction-table__user"> <div class="transaction-table__user-avatar" ng-style="{\'background-image\': \'url({{ getUserAvatar(offer.author.image) }})\'}"> </div> <p ng-if="offer.author.name.trim()"> {{offer.author.name}} </p> <div ng-if="!offer.author.name.trim()"> Unknown </div> </div> </td> <td> {{offer.author.role}} </td> <td> {{offer.status}} </td> <td> {{offer.price}} </td> <td> {{offer.offer_data.proposition.made_by}} : {{offer.offer_data.proposition.price}} </td> <td> {{offer.offer_data.payments.system}} </td> <td> {{offer.created_at|date:\'dd-MM-yyyy - hh:mm\'}} </td> <td class="control-fixed control-fixed--offers"> <a class="btn-icon" ng-click="deleteOffer(offer, $index)" title="Delete offer"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-show="inProgress"> <td colspan="100%"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!offers.length"> <tr style="height: 90px"> <td colspan="6">No offers yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div> \x3c!-- <div class="brn-table-wrap learning-entities" infinite-scroll=\'loadMore()\' infinite-scroll-disabled="inProgress">\n <div class="container">\n <div class="empty-nav-sidebar"></div>\n <div class="row margin-rest">\n <h2 class="mb60">\n Offers\n </h2>\n\n\n\n <div class="brn-table-wrap t-modern mb60" style="max-width:1460px">\n <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"\n is-auto-table-btn-padding="true">\n <table class="brn-table" style="width:1455px">\n <tbody>\n <tr class="header-image">\n \n <td>\n Sender\n </td>\n <td>\n Type\n </td>\n <td>\n System\n </td>\n <td>\n Receiver\n </td>\n <td>
73\n Amount\n </td>\n <td>\n Status\n </td>\n <td>\n Object\n </td>\n <td>\n Created\n </td>\n </tr>\n <tr ng-repeat="transaction in transactions" ng-if="transactions.length">\n <td class="td-top-align">\n {{transaction.type}}\n </td>\n <td class="td-top-align">\n {{transaction.system}}\n </td>\n <td class="td-top-align">\n {{transaction.status}}\n </td>\n <td class="td-top-align">\n {{transaction.amount}} {{transaction.currency}}\n </td>\n <td class="td-top-align">\n <div ng-if="transaction.sender">\n {{transaction.sender.name}}\n <br>\n <img ng-src="{{transaction.sender.image}}" alt="avatar" style="max-width: 100px; margin-bottom: 10px;">\n </div>\n <div ng-if="!transaction.sender">\n -\n </div>\n </td>\n <td class="td-top-align">\n <div ng-if="transaction.receiver">\n {{transaction.receiver.name}}\n <br>\n {{transaction.receiver.type}}\n <br>\n <img ng-src="{{transaction.receiver.image}}" alt="avatar" style="max-width: 100px; margin-bottom: 10px;">\n </div>\n <div ng-if="!transaction.receiver">\n -\n </div>\n </td>\n <td class="td-top-align">\n <div ng-if="transaction.object">\n {{transaction.object.name}}\n <br>\n {{transaction.object.type}}\n <br>\n {{transaction.object.price}} {{transaction.currency}}\n <br>\n </div>\n <div ng-if="!transaction.object">\n -\n </div>\n </td>\n\n </tr>\n <tr ng-show="inProgress">\n <td colspan="100%">\n <div class="browser-screen-loading-content">\n <div class="loading-dots dark-gray">\n <i></i>\n <i></i>\n <i></i>\n <i></i>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot ng-if="!transactions.length">\n <tr style="height: 90px;">\n <td colspan="6">No transactions yet</td>\n </tr>\n </tfoot>\n </table>\n </custom-scroller>\n </div>\n\n\n\n\n\n </div>\n </div>\n</div> --\x3e'), 74a.put("views/store-offers-public.html",'<div class="brn-table-wrap learning-entities" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 20px 45px 51px" height="100%"> <div class="nav-sidebar-content-ofset" style="padding-right: 0px"> <h2>Offers</h2> <div class="card-checker"> <input type="checkbox" ng-checked="true"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Public</span> </label> </div> <div class="card-checker"> <input type="checkbox" ng-checked="false" ng-click="toDirect()"> <label ng-click="toDirect()"> <span class="checker-ico checker-ico-right"> </span> <span>Direct</span> </label> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <h2 class="mb60"> Public offers </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:100%"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-auto-table-btn-padding="true"> <table class="brn-table" style="width: calc(100% - 3px); min-width: 1200px"> <tbody> <tr class="header-image"> <td> Offer </td> <td style="padding-left: 64px"> Author </td> <td style="text-transform: none"> Author role </td> <td> Status </td> <td> Price </td> <td> Attributes </td> <td> Date </td> </tr> <tr ng-repeat="offer in offers" ng-if="offers.length"> <td> <div ng-if="offer.name.trim()" class="transaction-table__object"> {{offer.name}} </div> <div ng-if="!offer.name.trim()"> Unknown </div> </td> \x3c!-- Author --\x3e <td> <div class="transaction-table__user"> <div class="transaction-table__user-avatar" ng-style="{\'background-image\': \'url({{ getUserAvatar(offer.author.image) }})\'}"> </div> <p ng-if="offer.author.name.trim()"> {{offer.author.name}} </p> <div ng-if="!offer.author.name.trim()"> Unknown </div> </div> </td> <td> {{offer.author.role}} </td> <td> {{offer.status}} </td> <td> {{offer.price}} </td> <td> <div ng-repeat="(key, value) in offer.attributes"> {{key}}: {{value}} </div> <div ng-if="!isEmptyAttributes(offer.attributes)"> - </div> </td> <td> {{offer.created_at|date:\'dd-MM-yyyy - hh:mm\'}} </td> <td class="control-fixed control-fixed--offers"> <a class="btn-icon" ng-click="deleteOffer(offer, $index)" title="Delete offer"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-show="inProgress"> <td colspan="100%"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!offers.length"> <tr style="height: 90px"> <td colspan="6">No offers yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div> \x3c!-- <div class="brn-table-wrap learning-entities" infinite-scroll=\'loadMore()\' infinite-scroll-disabled="inProgress">\n <div class="container">\n <div class="empty-nav-sidebar"></div>\n <div class="row margin-rest">\n <h2 class="mb60">\n Offers\n </h2>\n\n\n\n <div class="brn-table-wrap t-modern mb60" style="max-width:1460px">\n <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"\n is-auto-table-btn-padding="true">\n <table class="brn-table" style="width:1455px">\n <tbody>\n <tr class="header-image">\n \n <td>\n Sender\n </td>\n <td>\n Type\n </td>\n <td>\n System\n </td>\n <td>\n Receiver\n </td>\n <td>
74\n Amount\n </td>\n <td>\n Status\n </td>\n <td>\n Object\n </td>\n <td>\n Created\n </td>\n </tr>\n <tr ng-repeat="transaction in transactions" ng-if="transactions.length">\n <td class="td-top-align">\n {{transaction.type}}\n </td>\n <td class="td-top-align">\n {{transaction.system}}\n </td>\n <td class="td-top-align">\n {{transaction.status}}\n </td>\n <td class="td-top-align">\n {{transaction.amount}} {{transaction.currency}}\n </td>\n <td class="td-top-align">\n <div ng-if="transaction.sender">\n {{transaction.sender.name}}\n <br>\n <img ng-src="{{transaction.sender.image}}" alt="avatar" style="max-width: 100px; margin-bottom: 10px;">\n </div>\n <div ng-if="!transaction.sender">\n -\n </div>\n </td>\n <td class="td-top-align">\n <div ng-if="transaction.receiver">\n {{transaction.receiver.name}}\n <br>\n {{transaction.receiver.type}}\n <br>\n <img ng-src="{{transaction.receiver.image}}" alt="avatar" style="max-width: 100px; margin-bottom: 10px;">\n </div>\n <div ng-if="!transaction.receiver">\n -\n </div>\n </td>\n <td class="td-top-align">\n <div ng-if="transaction.object">\n {{transaction.object.name}}\n <br>\n {{transaction.object.type}}\n <br>\n {{transaction.object.price}} {{transaction.currency}}\n <br>\n </div>\n <div ng-if="!transaction.object">\n -\n </div>\n </td>\n\n </tr>\n <tr ng-show="inProgress">\n <td colspan="100%">\n <div class="browser-screen-loading-content">\n <div class="loading-dots dark-gray">\n <i></i>\n <i></i>\n <i></i>\n <i></i>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot ng-if="!transactions.length">\n <tr style="height: 90px;">\n <td colspan="6">No transactions yet</td>\n </tr>\n </tfoot>\n </table>\n </custom-scroller>\n </div>\n\n\n\n\n\n </div>\n </div>\n</div> --\x3e'),a.put("views/store-offers.html",'<div class="brn-table-wrap learning-entities"> <table class="brn-table learning-table row-small"> <thead> <tr> <th> Offers </th> <th> <a ui-sref="store.create_offer({id: botNav.botInfo.bot_id})">Add</a> </th> <th> <a ui-sref="intent-detail({id: botNav.botInfo.bot_id, intent:\'new\'})">Import</a> </th> <th> </th> <th> </th> <th> </th> <th> </th> <th> </th> <th> </th> <th> </th> <th> </th> <th> </th> <th> </th> </tr> </thead> <tbody> <tr> <td> Id </td> <td> Merchant </td> <td> {{main.translations.leftMenu_category}} </td> <td> Brand </td> <td> Model </td> <td> Km </td> <td> {{main.translations.store_price}} </td> <td> Frpc </td> <td> Frm </td> <td> Fp </td> <td> Ffi </td> <td> Fer </td> <td> Ff </td> </tr> <tr ng-repeat="offer in offers"> <td class="td-top-align"> <span>{{offer.id}}</span> </td> <td class="td-top-align"> <span>{{offer.merchant}}</span> </td> <td class="td-top-align"> <span>{{offer.category}}</span> </td> <td class="td-top-align"> <span>{{offer.brand}}</span> </td> <td class="td-top-align"> <span>{{offer.model}}</span> </td> <td class="td-top-align" style="color: red"> <span>{{offer.km}}</span> </td> <td class="td-top-align"> <span>{{offer.price}}</span> </td> <td class="td-top-align"> <span>{{offer.frpc}}</span> </td> <td class="td-top-align"> <span>{{offer.frm}}</span> </td> <td class="td-top-align"> <span>{{offer.fp}}</span> </td> <td class="td-top-align"> <span>{{offer.ffi}}</span> </td> <td class="td-top-align"> <span>{{offer.fer}}</span> </td> <td class="td-top-align"> <span>{{offer.ff}}</span> </td> </tr> </tbody> </table> </div>'),a.put("views/store-orders.html",'<div class="brn-table-wrap learning-entities" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <div class="container"> <div class="empty-nav-sidebar"></div> <div class="row margin-rest"> <h2 class="mb60"> Orders </h2> <div class="brn-table-wrap t-modern mb60" style="max-width: calc(100% - 32px); width: 100%"> <span class="round-btn" ng-click="swapFilter()" style="left: -16px; right: auto" ng-class="{\'round-btn-search\' : !filters.isActive, \'round-btn-cancel\' : filters.isActive}"> <i class="material-icons" ng-if="filters.isActive">close</i> <i class="material-icons" ng-if="!filters.isActive">search</i> </span> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-auto-table-btn-padding="true"> <table class="brn-table" style="width: calc(100% - 3px); min-width: 1200px"> <tbody> <tr class="header-image"> <td class="control-fixed control-fixed-heder" style="max-width: 100px"> </td> <td> Order ID </td> <td> Status </td> <td> Date </td> <td> Client </td> <td> Products </td> <td> Price </td> <td style="display: none"> Total </td> <td ng-repeat="note in notes"> <span> {{note}} </span> </td> </tr> <tr class="no-hover filters" ng-class="{\'filters-active\' : filters.isActive}"> <td style="padding: 0px"> </td> <td ng-repeat="attr in filterAttributes" style="padding: 0px 10px 0px 10px; text-align: center"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}" style="max-width: 100%; padding-right: 10px; padding-left: 10px; float: left"> <custom-input ng-if="attr.active" placeholder="{{attr.label}}" ng-model="filters[attr.name].value" ng-change="filterOrders(attr.name)" ng-keydown="($event.keyCode === 13) && filterOrders(attr.name)" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> </div> </td> <td ng-repeat="note in notes"> </td> </tr> <tr ng-repeat="order in orders" ng-if="orders.length" style="line-height: 32px"> <td class="control-fixed control-fixed-left" style="left: 0; right: auto;max-width: 100px"> <a class="btn-icon" title="Delete Order" ng-click="deleteOrder(order); $event.stopPropagation();"> <div class="control-fixed-shadow"></div> <i class="material-icons">delete</i> </a> </td> <td class="td-top-align"> {{order.order_id}} </td>
74 <td class="td-top-align" auto-close="outsideClick" uib-dropdown class="dropdown-toggle"> <span id="dropdown-order-status" uib-dropdown-toggle ng-if="orderStatuses[order.order_status]" ng-style="{color: orderStatuses[order.order_status].color, \'text-decoration\': \'underline\', cursor: \'pointer\'}">{{order.order_status}}</span> <div class="dropdown-menu" role="menu" aria-labelledby="dropdown-order-status" ng-if="orderStatuses[order.order_status]"> <a ng-repeat="status in orderStatuses" ng-style="{color: status.color}" style="display: block; margin: 5px; cursor: pointer" ng-click="changeOrderStatus(order, status)"> {{status.title}} </a> </div> <span ng-if="!orderStatuses[order.order_status]">{{order.order_status}}</span> </td> <td class="td-top-align"> {{order.created_at|date:\'dd.MM.yyyy - HH:mm:ss\'}} </td> <td class="td-top-align" ng-if="order.customer"> <a ui-sref="store.customer-detail({id: botNav.botInfo.bot_id, customer: order.customer.customer_id})" style="color: rgb(148, 203, 37); text-decoration: underline;cursor: pointer" href="">{{order.customer.name}}</a> </td> <td class="td-top-align" ng-if="!order.customer"> {{order.client_id}} </td> <td class="td-top-align"> <span ng-if="order.products.length"> <span ng-repeat="product in order.products"> <span ng-if="product.name"> {{product.name}} <br> </span> <span ng-if="!product.name"> {{product}} <br> </span> </span> </span> </td> <td> <span ng-if="order.products.length"> <span ng-repeat="product in order.products"> <span ng-if="product.name && product.price"> {{product.count}} x {{product.price}} USD <br> </span> <span ng-if="!product.name"> {{product}} <br> </span> </span> </span> </td> <td class="td-top-align" style="display:none"> {{order.total_price}} USD </td> <td class="td-top-align" ng-if="order.attachments.length"> <span ng-click="openAttachments(order)" style="cursor:pointer">{{order.attachments.length}} files</span> </td> <td ng-if="order.notes.length" ng-repeat="note in notes"> <span ng-if="n_note.label == note" ng-repeat="n_note in order.notes"> {{n_note.value}} </span> </td> \x3c!--\n <td ng-if="order.notes.length" ng-repeat="note in order.notes">\n <span>\n {{note.value}}\n </span>\n </td>\n --\x3e </tr> <tr ng-show="inProgress"> <td colspan="100%"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!orders.length"> <tr style="height: 90px"> <td colspan="6">No orders yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'),a.put("views/store-payment.html",'<div class="bots-wrapper"> <div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" height="calc(100% - 140px)" paddings="22px 10px 0px 51px"> <div class="nav-sidebar-content-ofset" style="flex: 1 1 auto"> <h2 class="mb40"> Payments </h2> <div class="card-checker" ng-click="goto(\'stripe\',botNav.botInfo.bot_id)"> <input type="checkbox" ng-checked="check(\'store-payments-stripe\')"> <label> <span class="checker-ico checker-ico-right"> </span> <span>Stripe</span> </label> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="" ui-view=""> </div> </div> </div> </div>'),a.put("views/store-payments-stripe.html",'<div class="container"> <div class="flex-row" style="margin-left:0px"> <div> <h2 class="mb35">Add stripe</h2> <div class="mb40 settings-card-wrap big670"> <div class="flex-row"> <div class="settings-card medium210 mr20"> <div class="mt20"> <div class="card-checker"> <input type="checkbox" ng-model="stripe.active" id="stripe_active"> <label for="stripe_active"> <span class="checker-ico"></span> <span>Active</span> </label> </div> </div> <div class="mb10"> <custom-input ng-model="stripe.secret_key" placeholder="Secret key" title="Secret key" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input ng-model="stripe.publishable_key" placeholder="Publishable key" title="Publishable key" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> <div> <button ng-click="addStripe()" class="brn-btn brn-primary">Add</button> </div> </div> </div> </div>'),a.put("views/store-persons.html",'<div class="brn-table-wrap learning-entities" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress" style="min-height: 100%; position: relative"> <div class="container"> <div class="empty-nav-sidebar" style="z-index: 1000"></div> <div class="row margin-rest"> <h2 class="mb60"> Persons </h2> <div class="brn-table-wrap t-modern mb60" style="width: max-content"> \x3c!--<custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-disable-filters="true"--\x3e \x3c!--is-auto-table-btn-padding="true">--\x3e <table class="brn-table" style="min-width: 1200px"> <tbody> <tr class="header-image"> <td class="control-fixed control-fixed-heder"></td> <td style="max-width: 164px"> {{main.translations.title_name}} </td> <td style="max-width: 164px"> Image </td> <td ng-repeat="attr in visibleAttributes" style="white-space: nowrap"> {{attr.attrName}} </td> </tr> <tr ng-repeat="(key, person) in persons" ng-class="{\'first-line\' : key == 0}" style="cursor: pointer"> <td class="control-fixed control-fixed-left" style="left: 0; right: auto"> \x3c!-- <a\n class="btn-icon"\n title="Edit customer detail"\n ui-sref="store.customer-detail({id: botNav.botInfo.bot_id, customer: customer.customer_id})"\n >\n <div class="control-fixed-shadow"></div>\n <i class="material-icons">edit</i>\n </a>\n <a\n class="btn-icon"\n title="Delete customer"\n ng-click="deleteCustomer(customer); $event.stopPropagation();"\n >\n <div class="control-fixed-shadow"></div>\n <i class="material-icons">delete</i>\n </a> --\x3e </td> <td class="td-top-align"> {{person.profile.name}} </td> <td class="td-top-align"> <img width="100px" src="{{person.profile.image}}" alt=""> </td> <td class="td-top-align" ng-repeat="attr in visibleAttributes"> <span ng-if="attr.visible"> <span ng-if="attr.multiple"> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> <span ng-repeat="value in person.attributes[attr.attrName]"> {{value || \'-\'}} <br> </span> </span> <span ng-repeat="value in person.attributes[attr.attrName]" ng-if="attr.type==\'date\'" ng-bind="value | date:\'dd.MM.yyyy\'"> </span> <span ng-if="attr.type==\'mixed\'"> <span ng-if="!person.attributes[attr.attrName].length"> - </span> <span ng-repeat="value in person.attributes[attr.attrName]"> <span ng-repeat="(key, val) in value"> {{key}}: {{val || \'-\'}} <br> </span> \x3c!-- {{value}} {{value[attr.schema.key]}} --\x3e <br> </span> </span> <span ng-if="attr.type==\'boolean\'"> <span ng-repeat="value in person.attribute[attr.attrName]"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include> </span> </span> </span> <span ng-if="!attr.multiple"> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> {{person.attributes[attr.attrName] || \'-\'}}
74 </span> <span ng-if="attr.type==\'mixed\'"> <span ng-repeat="(key, val) in person.attributes[attr.attrName]"> {{key}}: {{val || \'-\'}} <br> </span> </span> <span ng-if="attr.type==\'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="person.attributes[attr.attrName]"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="!person.attributes[attr.attrName]"></ng-include> </span> <span ng-if="attr.type==\'date\'" ng-bind="person.attributes[attr.attrName] | date:\'dd.MM.yyyy\'"> </span> </span> </span> </td> <td class="td-top-align"> <span ng-if="customer.updated_at" ng-bind="customer.updated_at | date:\'dd/MM/yy, HH:mm:ss\'"></span> </td> </tr> <tr ng-show="inProgress"> <td colspan="16"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!persons.length && !inProgress"> <tr style="height: 90px"> <td colspan="16">No persons yet</td> </tr> </tfoot> </table> \x3c!--</custom-scroller>--\x3e </div> </div> </div> </div>'),a.put("views/store-products.html",'<div class="brn-table-wrap learning-entities"> <div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 20px 45px 51px" height="100%"> <div class="nav-sidebar-content-ofset" style="padding-right: 0px"> <h2>Categories</h2> <div ng-repeat="category in categoriesMenu" class="card-checker"> <input type="checkbox" ng-checked="check(category.name)" ng-click="goto(bot_id, category.name)"> <label ng-click="goto(bot_id, category.name)"> <span class="checker-ico checker-ico-right"> </span> <span> {{category.title}}</span> </label> <div class="item-buttons"> <span ng-click="deleteCategory(category)"> <i class="material-icons">delete</i> </span> <span> <a ui-sref="store.category-detail({id: botNav.botInfo.bot_id, category: category.name})"><i class="material-icons">edit</i></a> </span> </div> </div> </div> <a style="margin-left: -6px" class="add-bot" ui-sref="store.create_category({id: botNav.botInfo.bot_id})"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <h2 class="mb60"> Products <a class="add-bot" ui-sref="store.create_product({id: botNav.botInfo.bot_id, category: selectedCategory.name})"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width: calc(100% - 32px); width: 100%"> <span class="round-btn" ng-click="swapFilter()" ng-class="{\'round-btn-search\' : !filters.isActive, \'round-btn-cancel\' : filters.isActive}"> <i class="material-icons" ng-if="filters.isActive">close</i> <i class="material-icons" ng-if="!filters.isActive">search</i> </span> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-disable-filters="true"> <table class="brn-table" style="width: calc(100% - 3px); min-width: 1200px" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <tbody> <tr class="header-image"> <td style="max-width: 164px"> {{main.translations.title_name}} </td> <td ng-repeat="attr in visibleAttributes" style="max-width: 164px"> {{attr.label}} </td> <td class="control-fixed control-fixed-heder"> </td> </tr> <tr class="no-hover filters" ng-class="{\'filters-active\' : filters.isActive}"> <td style="padding: 0px"> \x3c!--<input type="text" ng-model="filters.title.value" ng-change="filterProducts()">--\x3e </td> <td ng-repeat="attr in visibleAttributes" style="padding: 0px 10px 0px 10px; width: 164px; text-align: center"> <div class="dropdown-filters" ng-class="{\'dropdown-filters-active\' : filters.isActive}"> <custom-dropdown ng-if="attr.selectable && attr.type != \'mixed\'" ng-model="filters[attr.name].value" array="attr.values" opt-description="" opt-value="" title="{{attr.label}}" ng-change="filterProducts()" is-model-init="true" placeholder="All" is-back-placeholder="true"> </custom-dropdown> \x3c!-- <select ng-model="filters[attr.name].value"\n ng-change="filterProducts()">\n <option value="">All</option>\n <option ng-repeat="value in attr.values" value="{{value}}">{{value}}</option>\n </select> --\x3e <custom-dropdown ng-if="attr.selectable && attr.type == \'mixed\'" ng-model="filters[attr.name].value" array="attr.values" opt-description="{{attr.schema.key}}" opt-value="{{attr.schema.key}}" title="{{attr.label}}" ng-change="filterProducts()" is-model-init="true" placeholder="All" is-back-placeholder="true"> </custom-dropdown> \x3c!-- <select ng-if="attr.selectable && attr.type == \'mixed\'" ng-model="filters[attr.name].value"\n ng-change="filterProducts()">\n <option value="">All</option>\n <option ng-repeat="value in attr.values" value="{{value[attr.schema.key]}}">\n {{value[attr.schema.key]}}\n </option>\n </select> --\x3e <custom-input ng-if="(attr.type==\'string\' || attr.type==\'number\') && !attr.selectable" placeholder="{{attr.label}}" ng-model="filters[attr.name].value" ng-model-options="{debounce:500}" ng-change="filterProducts()" title="{{attr.label}}" is-back-placeholder="true"> </custom-input> <div class="card-checker" style="margin-top: 25px; margin-left: -33px" ng-if="attr.type==\'boolean\' && !attr.selectable"> <input type="checkbox" ng-model="filters[attr.name].value" ng-change="filterProducts()" id="filter_checker_{{attr.name}}"> <label for="filter_checker_{{attr.name}}"> <span class="checker-ico"></span> </label> </div> <custom-date-range-single ng-if="attr.type==\'date\' && !attr.selectable" title="" timepicker="false" ng-model="filters[attr.name].value"> </custom-date-range-single> </div> </td> <td style="padding: 0px"> </td> </tr> <tr ng-repeat="product in products"> <td class="td-top-align" style="cursor: pointer" ui-sref="store.product-detail({id: botNav.botInfo.bot_id, category: selectedCategory.name, product: product.product_id})"> {{product.name}} </td> <td class="td-top-align" ng-repeat="attr in visibleAttributes" style="cursor: pointer" ui-sref="store.product-detail({id: botNav.botInfo.bot_id, category: selectedCategory.name, product: product.product_id})"> <span ng-if="attr.selectable"> <span ng-if="attr.multiple"> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type != \'location\' && attr.type!=\'date\'"> <span ng-repeat="value in product.attributes[attr.name]"> {{value}} <br> </span> </span> <span ng-repeat="value in product.attributes[attr.name]" ng-if="attr.type==\'date\'" ng-bind="value | date:\'dd.MM.yyyy\'"> </span> <span ng-if="attr.type == \'location\'"> <span ng-repeat="value in product.attributes[attr.name]"> Lat: {{value.coordinates[1]}}, Lng: {{value.coordinates[0]}} <br> </span> </span> <span ng-if="attr.type==\'mixed\'"> <span ng-repeat="value in product.attributes[attr.name]"> {{value[attr.schema.key]}} <br> </span> </span> <span ng-if="attr.type==\'boolean\'"> <span ng-repeat="value in product.attributes[attr.name]"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value != true"></ng-include> </span> </span> </span> <span ng-if="!attr.multiple"> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\' && attr.type != \'location\'"> {{product.attributes[attr.name]}} </span> <span ng-if="attr.type==\'date\'" ng-bind="product.attributes[attr.name] | date:\'dd.MM.yyyy\'"> </span> <span ng-if="attr.type==\'location\'">
74 Lat: {{product.attributes[attr.name].coordinates[1]}} <br> Lng: {{product.attributes[attr.name].coordinates[0]}} </span> <span ng-if="attr.type==\'mixed\'"> {{product.attributes[attr.name][attr.schema.key]}} </span> <span ng-if="attr.type==\'boolean\'"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="product.attributes[attr.name]"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="!product.attributes[attr.name]"></ng-include> </span> </span> </span> <span ng-if="!attr.selectable"> <span ng-if="attr.multiple"> <span ng-if="attr.type==\'image\'"> <span ng-repeat="value in product.attributes[attr.name]"> <img ng-src="{{value}}" style="max-width: 100px; margin-bottom: 10px"> </span> </span> <span ng-if="attr.type==\'boolean\'"> <span ng-repeat="value in product.attributes[attr.name]"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="value == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="value == false"></ng-include> </span> </span> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\'"> <span ng-repeat="value in product.attributes[attr.name]"> {{value}} </span> </span> <span ng-repeat="value in product.attributes[attr.name]" ng-if="attr.type==\'date\'" ng-bind="value | date:\'dd.MM.yyyy\'"> </span> <span ng-if="attr.type==\'mixed\'"> <span ng-repeat="value in product.attributes[attr.name]"> {{value[attr.schema.key]}} </span> </span> </span> <span ng-if="!attr.multiple"> <img ng-src="{{product.attributes[attr.name]}}" ng-if="attr.type==\'image\'" style="max-width: 100px"> <ng-include src="\'images/svg/ic_check_circle_black_24px.svg\'" ng-if="attr.type==\'boolean\' && product.attributes[attr.name] == true"></ng-include> <ng-include src="\'images/svg/ic_highlight_off_black_24px.svg\'" ng-if="attr.type==\'boolean\' && product.attributes[attr.name] == false"></ng-include> <span ng-if="attr.type!=\'image\' && attr.type!=\'boolean\' && attr.type!=\'mixed\' && attr.type!=\'date\' && attr.type!=\'location\'"> {{product.attributes[attr.name]}} </span> <span ng-if="attr.type==\'date\'" ng-bind="product.attributes[attr.name] | date:\'dd.MM.yyyy\'"> </span> <span ng-if="attr.type==\'mixed\'"> {{product.attributes[attr.name][attr.schema.key]}} </span> <span ng-if="attr.type==\'location\'"> Lat: {{product.attributes[attr.name].coordinates[1]}} <br> Lng: {{product.attributes[attr.name].coordinates[1]}} </span> </span> </span> </td> <td class="control-fixed"> <a class="btn-icon" title="Edit product" ui-sref="store.product-detail({id: botNav.botInfo.bot_id, category: selectedCategory.name, product: product.product_id})"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteProduct(product)" title="Delete product"> <i class="material-icons">delete</i> </a> </td> </tr> </tbody> </table> </custom-scroller> </div> </div> </div> </div>'), 75a.put("views/store-transactions.html",'<div class="brn-table-wrap learning-entities" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress"> <div class="container"> <div class="empty-nav-sidebar"></div> <div class="row margin-rest"> <h2 class="mb60"> Transactions </h2> <div class="brn-table-wrap t-modern mb60" style="max-width: calc(100% - 32px); width: 100%"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-auto-table-btn-padding="true"> <table class="brn-table" style="width: calc(100% - 3px); min-width: 1200px"> <tbody> <tr class="header-image"> <td style="padding-left: 64px"> Sender </td> <td> Type </td> <td> System </td> <td style="padding-left: 64px"> Receiver </td> <td> Amount </td> <td> Status </td> <td> Object </td> <td> Date </td> </tr> <tr ng-repeat="transaction in transactions" ng-if="transactions.length"> \x3c!-- Sender --\x3e <td class="td-top-align"> <div class="transaction-table__user"> <div class="transaction-table__user-avatar" ng-style="{\'background-image\': \'url({{ getUserAvatar(transaction.sender.image) }})\'}"> </div> <p ng-if="transaction.sender.name"> {{transaction.sender.name}} </p> <div ng-if="!transaction.sender.name"> Unknown </div> </div> </td> <td> {{transaction.type}} </td> <td> {{transaction.system}} </td> \x3c!-- Receiver --\x3e <td> <div class="transaction-table__user"> <div class="transaction-table__user-avatar" ng-style="{\'background-image\': \'url({{ getUserAvatar(transaction.receiver.image) }})\'}"> </div> <p ng-if="transaction.receiver.name"> {{transaction.receiver.name}} </p> <div ng-if="!transaction.receiver.name"> Unknown </div> </div> </td> <td> {{transaction.amount}} {{transaction.currency}} </td> <td> {{transaction.status}} </td> <td> <div ng-if="transaction.object.name" class="transaction-table__object"> {{transaction.object.name}} </div> <div ng-if="!transaction.object.name"> - </div> </td> <td> {{transaction.created_at|date:\'dd.MM.yyyy - HH:mm:ss\'}} </td> </tr> <tr ng-show="inProgress"> <td colspan="100%"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!transactions.length"> <tr style="height: 90px"> <td colspan="6">No transactions yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'),a.put("views/store-users.html",'<div class="brn-table-wrap" style="overflow-x:auto"> <table class="brn-table" style="width: 1100px"> <thead> <tr> <th> Users </th> <th> <a ui-sref="store.user_create({id: botNav.botInfo.bot_id})">Add</a> </th> <th> </th> <th> </th> <th> <input type="text" placeholder="Search" ng-model="searchKeyword"> </th> </tr> </thead> <tbody> <tr> <td> <input type="text" placeholder="ID" ng-model="searchUserModel.id" ng-change="searchUser()"> </td> <td width="500"> <input type="text" placeholder="Nickname" ng-model="searchUserModel.username" ng-change="searchUser()"> </td> <td width="500"> <input type="text" placeholder="First name" ng-model="searchUserModel.first_name" ng-change="searchUser()"> </td> <td width="500"> <input type="text" placeholder="Last name" ng-model="searchUserModel.last_name" ng-change="searchUser()"> </td> <td width="600"> <input type="text" placeholder="Email" ng-model="searchUserModel.email" ng-change="searchUser()"> </td> <td width="400"> <select ng-model="searchUserModel.type" ng-options="typeFilter.name for typeFilter in typeFilters track by typeFilter.filter" ng-change="searchUser()"> </select> </td> <td width="400"> <select ng-model="searchUserModel.status" ng-options="statusFilter.name for statusFilter in statusFilters track by statusFilter.filter" ng-change="searchUser()"> </select> </td> <td> </td> </tr> <tr ng-repeat="user in users"> <td class="td-top-align"> <span>{{user.id}}</span> </td> <td class="td-top-align"> <span>{{user.username}}</span> </td> <td class="td-top-align"> <span>{{user.first_name}}</span> </td> <td class="td-top-align"> <span>{{user.last_name}}</span> </td> <td class="td-top-align"> <span>{{user.email}}</span> </td> <td class="td-top-align"> <span>{{user.type}}</span> </td> <td class="td-top-align"> <span>{{user.status}}</span> </td> </tr> </tbody> </table> </div>'),a.put("views/store.html",'<div class="bots-wrapper"> <div class="container"> <div class="empty-nav-sidebar"> <span class="nav-sidebar-back round-btn" ng-click="goBack()"> <i class="material-icons">arrow_back</i> </span> </div> \x3c!-- <div class="row">\n <div class="col-xs-12 col-md-5 col-lg-3">\n <div class="block-nav">\n <ul>\n <li>\n <a ui-sref="store-dashboard({id: botNav.botInfo.bot_id})"\n ui-sref-active="active">Dashboard</a>\n </li>\n <li>\n <a ui-sref="store-customers({id: botNav.botInfo.bot_id})"\n ui-sref-active="active">Customers</a>\n </li>\n <li>\n <a ui-sref="store-orders({id: botNav.botInfo.bot_id})"\n ui-sref-active="active">Orders</a>\n </li>\n <li ng-repeat="category in categoriesMenu">\n <a ui-sref="store-products({id: botNav.botInfo.bot_id, category:category.name})">{{category.title}}</a>\n </li>\n </ul>\n </div>\n </div> --\x3e <div class="row margin-rest" ui-view=""> </div> </div> </div>'),a.put("views/sub-menu-abstract.html",""),a.put("views/subscriptions.html",'<div class="container"> <div class="empty-nav-sidebar"></div> <div class="margin-rest"> <div> <h2 class="mb50">Available plans</h2> <div class="plans__card-wrapper"> <div class="plan-card" ng-repeat="plan in plans"> <h3 class="plan-card__title"> {{plan.name}} </h3> <p class="plan-card__description"> {{plan.description}} </p> <p ng-if="!plan.price" class="plan-card__price"> Free </p> <p ng-if="plan.price" class="plan-card__price"> ${{plan.price}}/mo </p> <a ng-if="!plan.price" href="#" class="plan-card__btn"> <span> Subscribe for free </span> </a> <a ng-if="plan.price" href="#" class="plan-card__btn" id="{{plan.id}}" ng-click="openS(plan.price, plan.name, plan.id)"> <span ng-if="current_plan.status == \'active\' && current_plan.id != plan.id"> Change for ${{plan.price}}/mo </span> <span ng-if="current_plan.status != \'active\' && current_plan.id != plan.id"> Subscribe for ${{plan.price}}/mo </span> <span ng-if="current_plan.id == plan.id"> Current (${{plan.price}}/mo) </span> </a> <div class="plan-card__image"> <img src="images/img-plan-3.png" alt="img"> </div> </div> </div> <div class="plan-info"> <p>Please write us on <a href="mailto:[email protected]">[email protected]</a>
75 if you want to discuss pricing based on Revenue Sharing</p> </div> </div> </div> </div>'),a.put("views/tag-input.html",'<div class="resize-input-container"> <span class="tag" ng-repeat="tag in tags track by $index"> <span class="tag-color" ng-click="editTagInTagGroup(tag)" ng-style="{background: tag.color}"></span> <span class="tag-text" ng-click="editTagInTagGroup(tag)">{{tag.name}}</span> <div class="intent-tags__tag-editor" ng-if="isTagEditing(tag.tag_id)"> <ul class="intent-tags__tag-colors"> <li ng-repeat="color in tagColors" ng-style="{\'background-color\':color}" ng-click="setTagColor(tag.tag_id, color)" ng-init="hover = false" ng-mouseenter="hover = true" ng-mouseleave="hover = false"> <span class="tag-color__check" ng-if="color === tag.color"> <i class="material-icons" ng-hover="hoverColor(color)" ng-style="{\'color\':color}"> check </i> </span> <span ng-if="hover" class="tag-color-shadow"></span> </li> </ul> <span class="intent-tags__tag-remove-button"> <i class="material-icons" ng-click="removeTag(tag)"> delete </i> </span> </div> </span> <span class="new-tag-block"> <label for="{{tagId}}" ng-show="editable || hasNotAddedTags()" class="plus-tag">+</label> <div class="new-tag"> <input type="text" id="{{tagId}}" ng-show="editable" ng-model="text" ng-keyup="keyup($event)" ng-focus="complete(text)" placeholder="{{placeholder}}" class="resize-input input-select-element new-tag-input"> <span class="select-tag" ng-show="!editable && hasNotAddedTags()" ng-click="completeAll()">{{placeholder}}</span> <div class="scenario-pop-up" ng-if="hasFilterTag()"> <ul> <li ng-repeat="tag in filterTag" ng-click="fillTextbox(tag.name)"> <span class="tag-color" ng-style="{background: tag.color}"></span> <span class="tag-text">{{tag.name}}</span> </li> </ul> </div> </div> </span> <span class="resize-input-hidden" style="{{multiline?\'\' : \'word-break: keep-all;\'}}" ng-class="{\'max-width\': maxWidth}"> </span> <i ng-show="settings" class="inp-settings" ng-include="\'images/svg/settings.svg\'" uib-dropdown-toggle></i> </div>'),a.put("views/telegram.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">{{$resolve.translations.telegram}}</h2> </div> <form ng-submit="updateConnection()"> <div class="mb30"> <custom-input placeholder="{{$resolve.translations.userName}}" ng-model="telegram.provider_data.username" title="{{$resolve.translations.userName}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.settings_token}}" ng-model="telegram.provider_data.token" title="{{$resolve.translations.settings_token}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="telegram.provider_data.token" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/templates-catalog.html",'<div id="main__wrapper"> <div class="sidebar--left"> <div class="sidebar__inner"> <div class="block--title" style="margin-top: 30px;margin-bottom: 0px"> <h2>{{main.translations.leftMenu_category}}</h2> </div> <form action="#" method="POST"> <p class="input--radio" ng-repeat="category in categories"> <input type="radio" ng-checked="(category.name == \'all\')" ng-model="$index" ng-click="catChange(category.name)" value="{{category.name}}" name="category" id="{{category.name}}"> <label for="{{category.name}}">{{category.title}}</label> </p> </form> </div> </div> <div class="content__wrapper"> <div class="content__wrapper--header block--title block--title-search"> <h2 style="margin-bottom: 0px"> Templates </h2> <form action="#"> <div class="input--text" style="margin-top: 10px"> <input type="text" placeholder=" " ng-model="searchKeyword"> <label>Search</label> <button type="submit"> <i class="material-icons"> search </i> </button> </div> </form> </div> <div class="container__flex"> <div class="template-card" ng-repeat="template in templates | filter: { name: searchKeyword, category: searchCategory}"> <a ui-sref="template({id: template.username})" class="template-card__title">{{template.name}}</a> <p class="template-card__description"> {{ template.description | limitTo: 100 }} <span ng-if="template.description.length >= 99">...</span> </p> <a ui-sref="template({id: template.username})" class="template-card__details--link"> Details <i class="material-icons">arrow_forward</i> </a> <p class="template-card__price">Free</p> <a ng-click="duplicateBot(template.bot_id)" class="template-card__buy-button"> <span>Apply</span> </a> <div class="template-card__screen" ng-if="template.screenshots.length"> <div class="inner"> \x3c!-- \tscreen image =========\\/========== --\x3e <img src="{{template.screenshots[0]}}" alt="screen" class="screen"> \x3c!-- \tmask image =========\\/========== --\x3e <img src="images/bg-iphone.png" alt="bg" class="mask"> </div> </div> </div> <div ng-show="(templates | filter:{ name: searchKeyword, category: searchCategory}).length == 0" style="margin-left: 10px">None</div> </div> </div> </div>'),a.put("views/templates-view.html",'<div id="main__wrapper"> <a class="back-link--fixed" ui-sref="templates"> <i class="material-icons">arrow_backward</i> </a> <div class="sidebar--left"> <div class="sidebar__inner"> <div class="sidebar_temlate-details"> <h3> {{template.name}} </h3> <a ng-click="duplicateBot(template.bot_id)" class="button button--float"> <span>
75 Apply </span> </a> \x3c!--\n <a href="#" class="button">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\tLive Preview\n\t\t\t\t\t\t</span>\n </a>\n --\x3e </div> \x3c!--\n <div class="block--title">\n <h2>Supported platforms</h2>\n </div>\n\n <div class="sidebar__bot-info">\n <a href="#" class="sidebar__bot-info--app">\n <img src="img/account_telegram.png" alt="tel">\n Telegram\n </a>\n <a href="#" class="sidebar__bot-info--app">\n <img src="img/account_app.png" alt="app">\n Widget\n </a>\n </div>\n --\x3e </div> </div> <div class="content__wrapper"> <div class="container__flex" style="padding-top: 0px"> <div class="temlate-details__block" ng-if="template.description"> <div class="content__wrapper--header block--title" style="margin-top:0;margin-bottom:0"> <h2 style="margin-top: 13px"> About </h2> </div> <div class="temlate-details__block-body"> {{template.description}} </div> </div> <div class="temlate-details__block" ng-if="template.screenshots.length"> <div class="content__wrapper--header block--title" style="margin-top:0"> <h2 style="margin-top: 8px"> Screenshots </h2> </div> <div class="temlate-details__block-body temlate-details__block-screenshots"> <img ng-repeat="screenshot in template.screenshots" src="{{screenshot}}" alt=""> </div> </div> </div> </div> </div>'),a.put("views/terms.html","<h1>Terms and Conditions</h1>"),a.put("views/test-widget.html",'<div class="test-widget animations animations-right" ng-show="isShow"> <div class="test-widget-container"> <div> <div class="brn-widget common-brn-widget test-widget-log"> <div class="main-title"> <h2> {{bot.username}} </h2> <div class="pull-right buttons-panel"> <i ng-click="changeShow()" ng-include="\'images/svg/ic_clear_black_18px.svg\'"> </i> </div> </div> <div class="brn-widget-body-wrap"> <div class="brn-widget-body" scroll-glue> <widget-message ng-repeat="message in messages" type="{{message}}" image="images/tf.png"> </widget-message> </div> </div> <div class="brn-widget-footer"> <form ng-submit="sendMessage()" id="widget"> <input type="text" name="name" class="" ng-model="message.text" placeholder="You Message"> </form> </div> </div> <div class="debug-log" scroll-glue> <p ng-repeat="messageSpeech in speechMessages track by $index">{{messageSpeech}}</p> <p ng-repeat="message in debugMessages track by $index"> {{message}} </p> <span class="animation"></span> </div> </div> </div> </div>'),a.put("views/top-messages-in.html",'<div class="row-flex"> <div class="flex-col flex-col-p"> <div class="mb-card"> <h2 class="mb50">Incoming messages</h2> <div class="card card-78"> <div class="card-body"> <basic-bar data="messagesStats" style="width: 100%;display:block"></basic-bar> </div> </div> </div> </div> <div class="flex-col flex-col-p"> <h2 class="mb50">Messages</h2> <div class="brn-table-wrap mb-card t-modern mb60" style="max-width:485px; min-width: 485px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table no-hover" style="width:483px"> <tbody infinite-scroll="loadMore()" infinite-scroll-distance="2" infinite-scroll-disabled="inProgress"> <tr class="header-default"> <td style="width:80%">Message</td> <td style="width:20%">Count</td> </tr> <tr ng-repeat="message in messages" ng-class="{\'first-line\' : key == 0}"> <td>{{message.text}}</td> <td>{{message.count}}</td> </tr> <tr ng-show="inProgress"> <td colspan="2"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!messages.length && !inProgress"> <tr> <td colspan="2">No users activity yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div>'),a.put("views/top-messages-out.html",'<div class="row-flex"> <div class="flex-col flex-col-p"> <div class="mb-card"> <h2 class="mb50">Incoming messages</h2> <div class="card card-78"> <div class="card-body"> <basic-bar data="messagesStats" style="width: 100%;display:block"></basic-bar> </div> </div> </div> </div> <div class="flex-col flex-col-p"> <h2 class="mb50">Messages</h2> <div class="brn-table-wrap mb-card t-modern mb60" style="max-width:485px; min-width: 485px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table no-hover" style="width:483px"> <tbody infinite-scroll="loadMore()" infinite-scroll-distance="2" infinite-scroll-disabled="inProgress"> <tr class="header-default"> <td style="width:80%">Message</td> <td style="width:20%">Count</td> </tr> <tr ng-repeat="message in messages" ng-class="{\'first-line\' : key == 0}"> <td>{{message.text}}</td> <td>{{message.count}}</td> </tr> <tr ng-show="inProgress"> <td colspan="2"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!messages.length && !inProgress"> <tr> <td colspan="2">No users activity yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div>'),a.put("views/topusers.html",'<div class="row-flex"> <div class="flex-col flex-col-p col-all"> <h2 class="mb50">Top users</h2> <div class="brn-table-wrap mb-card t-modern mb60" style="max-width:898px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table" style="width:894px"> <tbody infinite-scroll="loadMore()" infinite-scroll-distance="2" infinite-scroll-disabled="inProgress"> <tr class="header-default"> <td ng-repeat="th in tableHeaders" class="active-heder" ng-class="{\'active\': th.active}" ng-click="sortColumn(th)"> <span style="cursor: pointer"> {{th.name}} <span ng-include src="\'images/svg/ic_keyboard_arrow_down_black.svg\'" ng-class="{\'th-desc\': th.sortDirection == true}" class="include-svg"></span> </span> </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="client in usersInfo" style="cursor:pointer" ng-class="{\'first-line\' : key == 0}"> <td>{{client.name}}</td> <td>{{client.provider}}</td> <td>{{client.messages}}</td> <td><span am-time-ago="client.last"></span></td> <td>{{client.sessions}}</td> <td class="control-fixed"> <a ui-sref="conversations({id: botNav.botInfo.bot_id, user: client})" class="btn-icon btn-icon-no-top" title="Bot conversations"> <div class="control-fixed-shadow"></div> <ng-include src="\'images/svg/ic_forum_black_24px.svg\'"></ng-include> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!usersInfo.length && !inProgress"> <tr> <td colspan="6">No users activity yet</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div>'),a.put("views/twilio.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">Twilio</h2> </div> <form ng-submit="updateConnection()"> <div class="mb10"> <custom-input placeholder="Phone" ng-model="twilio.provider_data.phone" title="Phone" is-required="true" is-back-placeholder="true"> </custom-input> <div class="bots-list-text"> https://www.twilio.com/ </div> <custom-input placeholder="Sid" ng-model="twilio.provider_data.sid" title="Sid" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Token" ng-model="twilio.provider_data.token" title="Token" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="Msid" ng-model="twilio.provider_data.msid" title="Msid" is-required="false" is-back-placeholder="true"> </custom-input> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="twilio.provider_data.phone" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/twitter.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb40" style="color:#94cc25; top: -12px">Twitter</h2> </div> <div> <div class="bots-list-text" ng-if="exist"> @{{twitter.provider_data.username}} {{$resolve.translations.isConnected}} </div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px" ng-click="connectTwitter()"> {{$resolve.translations.connectTwiter}} <img src="images/socials/twitter.png" alt="" width="20" style="top: -1px; position: relative; left: 10px"> </button> <button ng-if="exist" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/upload-ipfs.html",'<div class="container container-updated"> <div class="row margin-rest"> <div> <h2 class="mb35">IPFS Upload</h2> <div class="mb40 settings-card-wrap big670"> <div class="mb10"> <custom-input ng-model="file" ng-disabled="uploader" placeholder="Select file" title="Select file" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px;\n opacity: 0.6;\n position: relative;\n top: 4px" ng-show="!uploader" ngf-select="addFile($file)"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploader" style="width: 30px;\n border-left: unset;\n background-color: unset;\n border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> </div> </div> </div>'),a.put("views/upload-minio.html",'<div class="container container-updated"> <div class="row margin-rest"> <div> <h2 class="mb35">MinIO Upload</h2> <div class="mb40 settings-card-wrap big670"> <div class="mb10"> <custom-input ng-model="artist" placeholder="Artist" title="Artist" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input ng-model="album" placeholder="Album" title="Album" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input ng-model="file.name" ng-disabled="true" placeholder="Select file" title="Select file" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px;\n opacity: 0.6;\n position: relative;\n top: 4px" ng-show="!uploader" ngf-select="addFile($file)"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploader" style="width: 30px;\n border-left: unset;\n background-color: unset;\n border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> </div> <div> <div ng-if="result" class="mb10"> fileMinioPath: {{ result[0].fileMinioPath }} <br> fileMinioPathPreview: {{ result[0].fileMinioPathPreview }} </div> <button ng-click="upload()" class="brn-btn brn-primary">Upload</button> </div> </div> </div> </div>'),a.put("views/uploadimg.html",'<div class="modal-header text-center"> <h3 class="modal-title">Bot image</h3> </div> <div class="modal-body"> <div class="bot-edit"> <form name="myForm"> \x3c!--<div>Crop Image and Upload</div>--\x3e <button class="card-light-btn mb25" ngf-select ng-model="picFile" accept="image/*"> Select Picture </button> <div ngf-drop ng-model="picFile" ngf-pattern="image/*" class="cropArea"> <img-crop image="picFile | ngfDataUrl" result-image="croppedDataUrl" ng-init="croppedDataUrl=\'\'"> </img-crop> </div> <br> <div> <img ng-src="{{croppedDataUrl}}"> </div> <br> <div class="progress mb25" ng-show="progress != 0 && progress != 100"> <div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="progress" aria-valuemin="0" aria-valuemax="100" ng-style="{\'width\': progress + \'%\'}"> <span class="sr-only">{{card.progress}} / 100</span> </div> </div> <button class="card-light-btn" ng-click="upload(croppedDataUrl, picFile.name)">Submit</button> </form> </div> </div>'), 76a.put("views/user-detail.html",'<div class="cards client-detail"> <div class="container"> <div class="nav-sidebar nav-sidebar-bottom-pd"> <div class="nav-sidebar-heder collapsed" data-target="#left_sidebar_content" data-toggle="collapse" aria-expanded="false"> <h3>{{main.translations.left_menu}}</h3> </div> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" height="calc(100% - 138px)" paddings="22px 50px 30px 52px"> <div style="flex: 1 1 auto" class="mb90"> <div class="bot-info-text"> <div class="bot-info-img"> <img ng-src="{{user.avatar?(user.avatar):(\'images/no-avatar-user.png\')}}" alt="client img"> </div> <div class="bot-info-name">
76 {{user.name}} </div> <div class="bot-info-url"> {{user.email}} </div> </div> </div> <div class="nav-sidebar-bottom" ng-class="{\'nav-sidebar-bottom-shadow\' : isButomShadow}"> <div class="settings-save" ng-click="updateUser()"> <span> <i class="material-icons">save</i> {{main.translations.save_btn}} </span> </div> <div class="settings-cancel" ui-sref="manage-users()"> <span> <i class="material-icons">cancel</i> Cancel </span> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <div class="flex-row"> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb45">Profile</h2> <div class="mb10"> <custom-input placeholder="Name" ng-model="user.name" title="Name" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-input placeholder="Nickname" ng-model="user.nickname" title="Nickname" is-back-placeholder="true"> </custom-input> </div> <div class="mb25"> <custom-input ng-model="user.avatar" ng-disabled="uploaders.avatar" placeholder="Avatar" title="Avatar" is-back-placeholder="true"> <i class="material-icons" style="font-size: 17px; opacity: 0.6; position: relative; top: 4px" ng-show="!uploaders.avatar" ng-max-size="5MB" ngf-select="addFile($file, $index, \'image\', \'avatar\')" ng-disabled="uploaders.avatar"> file_upload </i> <span class="google-loader input-group-addon" ng-show="uploaders.avatar" style="width: 30px; border-left: unset; background-color: unset; border: none"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </span> </custom-input> </div> <div class="mb25"> <custom-dropdown ng-model="user.group_id" array="groups | filter: $select.search" opt-description="title" opt-value="value" title="Group" is-model-init="true" placeholder="Select role" is-back-placeholder="true" is-required="true"> </custom-dropdown> </div> </div> </div> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb45">Plan <i class="material-icons" style="font-size: 15px; margin-left: 10px; color: #cccccc; cursor: pointer" ng-click="showChangePlanModal()">edit</i></h2> <div class="mb10"> {{user.plan.title}} (<span ng-if="user.plan.mode == \'subscription\' && user.plan.bots.limit">{{user.plan.bots.active}} of {{user.plan.bots.limit}}</span><span ng-if="user.plan.mode != \'subscription\' || user.plan.status == \'free\' || user.plan.status == \'trial\'">unlimited</span>) </div> <div class="mb10" ng-if="user.plan.mode == \'balance\' && user.plan.balance !== undefined"> Balance: <span>{{getBalance()}}</span> </div> <div class="mb-10" ng-if="user.plan.expires"> Expires: {{user.plan.expires|date}} </div> </div> </div> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb45">Portal</h2> <div class="mb10"> <div class="custom-input dropdown open no-arrow"> <custom-dropdown ng-model="user.portal_id" array="search_portals | filter: $select.search" opt-description="title" opt-value="portal_id" title="Portal" is-model-init="true" placeholder="Select portal" is-back-placeholder="true" is-required="true"> </custom-dropdown> </div> </div> </div> </div> </div> <div class="flex-row" ng-if="transactions.length"> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb45">Transactions</h2> <div class="brn-table-wrap t-modern mb60" style="min-width: 700px"> <table class="brn-table common-table audience image-table no-hover" infinite-scroll="loadMoreTransactions()" infinite-scroll-disabled="inProgressTransactions"> <tbody> <tr> <td style="width:20%">Date</td> <td style="width:25%; padding-left: 2px">Details</td> <td style="width:25%">Amount</td> <td style="width:10%">Type</td> </tr> <tr ng-repeat="transaction in transactions"> <td style="cursor: default; color: #000"> {{transaction.date.substring(0, 10)}} </td> <td style="white-space:normal; cursor: default; color: #000"> <div style="width: 300px"> {{transaction.description}} </div> </td> <td style="cursor: default; color: #000"> <span ng-if="transaction.type == \'payment\'">+ {{transaction.amount}} USD</span> <span ng-if="transaction.type == \'invoice\'">- {{transaction.amount}} USD</span> </td> <td ng-if="transaction.type == \'payment\' && transaction.data.status == \'succeeded\'" style="cursor: default; color: #000"> Income </td> <td ng-if="transaction.type == \'payment\' && transaction.data.status == \'pending\'" style="cursor: default; color: #000"> Pending </td> <td ng-if="transaction.type == \'payment\' && transaction.data.status == \'failed\'" style="cursor: default; color:red"> Failed </td> <td ng-if="transaction.type == \'invoice\'" style="cursor: default; color: #000"> Outcome </td> </tr> <tr ng-if="inProgressTransactions"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!transactions.length && !inProgressTransactions"> <tr> <td colspan="6">
76No Transactions found.</td> </tr> </tfoot> </table> </div> </div> </div> </div> </div> </div> </div>'),a.put("views/users.html",'<div class="brn-table-wrap learning-entities"> <div class="container"> <div class="nav-sidebar"> <div class="nav-sidebar-content collapsed collapse" id="left_sidebar_content"> <custom-scroller is-shadow="true" paddings="22px 20px 45px 51px" height="100%"> <div class="nav-sidebar-content-ofset" style="padding-right: 0px"> <div style="margin-bottom: 60px"> <h2>Search</h2> <custom-input placeholder="Name" ng-model="filter.name" title="Search" ng-keydown="searchUsers($event)" is-back-placeholder="true"> <i class="material-icons" style="opacity: 0.6; font-size: 17px; position: relative; top: 3px">search</i> </custom-input> </div> <div style="margin-bottom: 30px" ng-if="filters.groups"> <h2>Groups</h2> <div class="card-checker" ng-repeat="group in filters.groups" ng-if="group.value"> <input type="checkbox" ng-model="filter.group_id" ng-change="filterUsers()" ng-true-value="\'{{group.value}}\'" ng-false-value="\'\'" id="filter_checker_{{group.value}}"> <label for="filter_checker_{{group.value}}"> <span class="checker-ico"></span> {{group.title}} <span style="float: right;width: auto"> <i ng-click="editRole(group); $event.preventDefault(); $event.stopPropagation();" style="font-size: 14px; color:#ccc; padding: 3px 0 3px 3px" class="material-icons"> settings </i> </span> <span style="float: right; color: #94cc01;padding-right: 7px">{{group.count}}</span> </label> </div> <span class="add-bot" style="margin-left: -5px" ng-click="editRole()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </span> </div> <div style="margin-bottom: 30px" ng-if="filters.portals"> <h2>Portals</h2> <div class="card-checker" ng-repeat="portal in filters.portals" ng-if="portal.value"> <input type="checkbox" ng-model="filter.portal" ng-change="filterUsers()" ng-true-value="\'{{portal.value}}\'" ng-false-value="\'\'" id="filter_checker_{{portal.value}}"> <label for="filter_checker_{{portal.value}}"> <span class="checker-ico"></span> <span>{{portal.title}}</span> <span class="item-counter">{{portal.count}}</span> </label> </div> </div> <div style="margin-bottom: 30px" ng-if="filters.plans"> <h2>Plans</h2> <div class="card-checker" ng-repeat="plan in filters.plans" ng-if="plan.value"> <input type="checkbox" ng-model="filter.plan" ng-change="filterUsers()" ng-true-value="\'{{plan.value}}\'" ng-false-value="\'\'" id="filter_checker_{{plan.value}}"> <label for="filter_checker_{{plan.value}}"> <span class="checker-ico"></span> <span>{{plan.title}}</span> <span class="item-counter">{{plan.count}}</span> </label> </div> </div> </div> </custom-scroller> </div> </div> <div class="container-content nav-sidebar-margin-rest"> <h2 class="mb60"> Users <span ng-if="isAdmin()" class="add-bot" ng-click="addUser()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </span> <span style="color: #d8d8d8; margin-left: 35px"> {{countUsers}} total </span> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1602px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true"> <table class="brn-table common-table audience image-table no-hover" infinite-scroll="loadMore()" infinite-scroll-disabled="inProgress" style="width:1600px"> <tbody> <tr class="header-image"> <td style="width:66px"></td> <td style="width:15%; padding-left: 2px">{{main.translations.title_name}}</td> <td style="width:15%">Email</td> <td style="width:7%">Portal</td> <td style="width:7%">Group</td> <td style="width:12%">Plan</td> <td style="width:9%">Bots</td> <td style="width:9%">Dialogs</td> <td style="width:10%">Messages</td> <td style="width:10%; cursor: pointer" ng-click="changeSort()"> <i class="material-icons" ng-if="filter.sort == \'created_at\'"> arrow_downward </i> <i class="material-icons" ng-if="filter.sort == \'-created_at\'"> arrow_upward </i> Created at </td> <td class="control-fixed control-fixed-heder"> </td> </tr> <tr ng-repeat="(key, user) in users" style="cursor: pointer"> <td ui-sref="user-detail({id: user.id})" style="padding-left: 30px"> <img src="{{user.avatar}}" alt=""> </td> <td ui-sref="user-detail({id: user.id})" style="padding-left: 2px">
76 {{user.name}} </td> <td ui-sref="user-detail({id: user.id})"> {{user.email}} </td> <td ui-sref="user-detail({id: user.id})"> {{user.portal.name}}</td> <td ui-sref="user-detail({id: user.id})">{{user.group.name}}</td> <td ui-sref="user-detail({id: user.id})"> {{user.plan.status[0].toUpperCase() + user.plan.status.slice(1)}} <span ng-if="user.plan.mode == \'balance\' && user.plan.balance !== undefined"> <br> Balance: {{getBalance(user)}} </span> <span ng-if="user.plan.expires"> <br> Expires: {{user.plan.expires|date}} </span> </td> <td ui-sref="manage-bots-by-user({user: user.id})" style="color: #94cc01"> {{user.counters.bots}}</td> <td ui-sref="user-detail({id: user.id})">{{user.counters.clients}}</td> <td ui-sref="user-detail({id: user.id})"> {{user.counters.messages}}</td> <td ui-sref="user-detail({id: user.id})"> {{user.created_at|date:\'medium\'}}</td> <td class="control-fixed"> <a class="btn-icon" ng-click="deleteUser(user)" title="Delete user"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="inProgress"> <td colspan="6"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!users.length && !inProgress"> <tr> <td colspan="6">No User found.</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'),a.put("views/variables-edit.html",'<div> <div class="flex-row"> <div class="settings-card-wrap"> <div class="settings-card mb50"> <h2 class="mb45">{{main.translations.main_data}}</h2> <div class="mb30"> <custom-input placeholder="{{main.translations.title_name}}" ng-model="variable.name" is-readonly="true" title="{{main.translations.title_name}}" is-back-placeholder="true"> </custom-input> </div> <div> <custom-input placeholder="{{main.translations.title}}" ng-model="variable.title" title="{{main.translations.title}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div class="settings-card-wrap big"> <div class="settings-card big mb50"> <h2 class="mb45">{{main.translations.variablesTitle}}</h2> <div ng-if="isVarible"> <ng-jsoneditor json="variable.value" prefer-text="true" options="jsoneditor" collapsed-level="1"> </ng-jsoneditor> </div> <div ng-if="!isVarible"> <div> <custom-input placeholder="{{main.translations.value}}" ng-model="variable.value" disable-counter="true" type-input="textarea" title="{{main.translations.value}}" is-back-placeholder="true"> </custom-input> </div> </div> </div> </div> </div> <div> <button ng-click="updateVariable()" class="brn-btn brn-primary">{{main.translations.save_btn}}</button> </div> </div>'),a.put("views/variables.html",'<div class="flex-row"> <div class="settings-card-wrap"> <div class="settings-card big mb50" style="max-width: 782px"> <h2 class="mb65">{{main.translations.leftMenu_variables}} <a class="add-bot" ng-click="openModal()"> <i ng-include="\'images/svg/plus_icon.svg\'"></i> {{main.translations.addMore}} </a> </h2> <div class="brn-table-wrap t-modern mb60" style="max-width:1130px; min-width: 1130px"> <custom-scroller is-shadow="false" axis="x" visible-scrols="true" is-table="true" is-auto-table-btn-padding="true"> <table class="brn-table" style="width:1128px"> <tbody> <tr class="header-default"> <td style="width: 35%"> {{main.translations.title_name}} </td> <td style="width: 30%"> {{main.translations.title}} </td> <td style="width: 35%"> {{main.translations.value}} </td> <td class="control-fixed control-fixed-heder"></td> </tr> <tr ng-repeat="(key, variable) in variables track by $index" ng-class="{\'first-line\' : key == 0}"> <td ui-sref="bot-settings.settings-variables-edit({id: bot_id, name: variable.name})" style="cursor: pointer"> <span>{{variable.name}}</span> </td> <td ui-sref="bot-settings.settings-variables-edit({id: bot_id, name: variable.name})" style="cursor: pointer"> <span>{{variable.title}}</span> </td> <td ui-sref="bot-settings.settings-variables-edit({id: bot_id, name: variable.name})" style="cursor: pointer"> <span>{{variable.value}}</span> </td> <td class="control-fixed"> <a class="btn-icon" ui-sref="bot-settings.settings-variables-edit({id: bot_id, name: variable.name})" title="Edit variables"> <div class="control-fixed-shadow"></div> <i class="material-icons">edit</i> </a> <a class="btn-icon" ng-click="deleteVariable(variable)" title="Delete variables"> <i class="material-icons">delete</i> </a> </td> </tr> <tr ng-if="loading"> <td colspan="2"> <div class="browser-screen-loading-content"> <div class="loading-dots dark-gray"> <i></i> <i></i> <i></i> <i></i> </div> </div> </td> </tr> </tbody> <tfoot ng-if="!loading && !variables.length"> <tr> <td colspan="5">{{main.translations.variables_noData}}</td> </tr> </tfoot> </table> </custom-scroller> </div> </div> </div> </div>'),a.put("views/variablesmodal.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="closeModal()"> close </i> {{$resolve.translations.variables_modalTitle}} </div> </div> <form ng-submit="onSubmit()"> <div class="mb30"> <custom-input placeholder="{{$resolve.translations.title_name}}" ng-model="variable.name" title="{{$resolve.translations.title_name}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.title}}" ng-model="variable.title" title="{{$resolve.translations.title}}" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.value}}" ng-model="variable.value" title="{{$resolve.translations.value}}" is-back-placeholder="true"> </custom-input> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> </div> </form> </div> </div> </div>'),a.put("views/viber.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">{{$resolve.translations.viber}}</h2> </div> <form ng-submit="updateConnection()"> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.channelId}}" ng-model="viber.provider_data.app_id" title="{{$resolve.translations.channelId}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.secretKey}}" ng-model="viber.provider_data.app_key" title="{{$resolve.translations.secretKey}}" is-required="true" is-back-placeholder="true"> </custom-input> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="viber.provider_data.app_key" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/visual-component-menu.html",'<div class="scenario-pop-up"> <ul ng-if="!expertMode"> <li ng-repeat="component in getBeginnerComponents()" ng-if="!component.hide && (!component.firstOnly || (isFirst && component.firstOnly))" ng-click="component.func ? component.func({scenario: scenario}) : addComponent({component: component.component, type: component.type, metaType: component.metaType})" class="pop-up-unknown brn-hint-wrapper"> <i ng-if="component.icon" class="material-icons">{{component.icon}}</i> <span>{{component.name}}</span> <brn-hint position="right" category="scenario" name="{{component.name}}"></brn-hint> </li> <li ng-if="!hideExisting" class="pop-up-break"></li> <li ng-if="!hideExisting" ng-click="selectExisting({event: $event})" class="pop-up-unknown"> <i class="material-icons">link</i> <span>Existing</span> </li> <li class="pop-up-break"></li> <li ng-click="switchExpertMode()" class="pop-up-unknown"> <div class="switch switch-off"></div> <span>Expert Off</span> </li> </ul> <ul ng-if="expertMode"> <li ng-repeat="group in availableComponents" ng-if="group.name !== \'PRO\'" class="pop-up-arrow pop-up-{{group.className}}"> <i ng-if="group.icon" class="material-icons">{{group.icon}}</i> <span>{{group.name}}</span> <ul ng-if="group.components"> <li ng-repeat="component in group.components" ng-if="!component.hide && (!component.firstOnly || (isFirst && component.firstOnly))" ng-class="{\'brn-hint-wrapper\': !component.components}" class="pop-up-{{group.className}}"> <div ng-if="!component.components" class="pop-up-group-component" ng-click="component.func ? component.func({scenario: scenario}) : addComponent({component: component.component, type: component.type, metaType: component.metaType})"> <i ng-if="component.icon" class="material-icons">{{component.icon}}</i> <span>{{component.name}}</span> <brn-hint position="right" category="scenario" name="{{component.name}}"></brn-hint> </div> <div ng-if="component.components" class="pop-up-group-component pop-up-arrow"> <i ng-if="component.icon" class="material-icons">{{component.icon}}</i> <span>{{component.name}}</span> </div> <ul ng-if="component.components"> <li ng-repeat="component2 in component.components" ng-click="addComponent({component: component2.component, type: component2.type, metaType: component2.metaType})" class="pop-up-{{group.className}}"> <i ng-if="component2.icon" class="material-icons">{{component2.icon}}</i> <span>
76{{component2.name}}</span> </li> </ul> </li> </ul> </li> <li ng-if="availableComponents[\'pro\'] || !hideExisting || stepToCopy && getComponent(stepToCopy)" class="pop-up-break"></li> <li ng-if="availableComponents[\'pro\']" ng-init="group = availableComponents[\'pro\']" class="pop-up-arrow pop-up-{{group.className}}"> <i ng-if="group.icon" class="material-icons">{{group.icon}}</i> <span>{{group.name}}</span> <ul ng-if="group.components"> <li ng-repeat="component in group.components" ng-if="!component.hide && (!component.firstOnly || (isFirst && component.firstOnly))"> <div ng-if="!component.components" class="pop-up-group-component pop-up-{{group.className}}" ng-click="component.func ? component.func({scenario: scenario}) : addComponent({component: component.component, type: component.type, metaType: component.metaType})"> <i ng-if="component.icon" class="material-icons">{{component.icon}}</i> <span>{{component.name}}</span> </div> <div ng-if="component.components" class="pop-up-group-component pop-up-{{group.className}}"> <i ng-if="component.icon" class="material-icons">{{component.icon}}</i> <span>{{component.name}}</span> </div> <ul ng-if="component.components"> <li ng-repeat="component2 in component.components" ng-click="addComponent({component: component2.component, type: component2.type, metaType: component2.metaType})" class="pop-up-{{group.className}}"> <i ng-if="component2.icon" class="material-icons">{{component2.icon}}</i> <span>{{component2.name}}</span> </li> </ul> </li> </ul> </li> <li ng-if="!hideExisting" ng-click="selectExisting({event: $event})" class="pop-up-unknown"> <i class="material-icons">link</i> <span>Existing</span> </li> <li ng-if="stepToCopy && getComponent(stepToCopy)" ng-click="addComponent({component: stepToCopy.component, type: stepToCopy.type, metaType: stepToCopy.meta.type, copied: true})" class="pop-up-unknown"> <i class="material-icons">bookmark</i> <span>Copied</span> </li> <li class="pop-up-break"></li> <li ng-click="switchExpertMode()" class="pop-up-unknown"> <div class="switch switch-on"></div> <span>Expert On</span> </li> </ul> </div>'), 77a.put("views/visual-editor.html",'<div class="visual-editor-panel" ng-click="scenarios.length && selectedGroups[scenarios[0].scenario_id].length && clearSelectedGroups(scenarios[0].scenario_id); selectExistingData && clearExisting()"> <div class="panel-buttons"> <div ui-sref="bot-abstract.bot-functions({id: botId})" class="panel-button panel-button-light"> <i class="material-icons">arrow_back</i> </div> </div> <div ng-if="scenarios.length" class="panel-info"> <div> <resize-input2 ng-blur="setScenarioName(scenarios[0].scenario_id)" multiline="false" ng-model="scenarios[0].name" class="scenario-title"> </resize-input2> <div ng-if="scenarios[0].default" class="scenario-default"> <i class="material-icons">check_circle</i> </div> <div ng-click="makeDefault(scenarios[0])" ng-if="!scenarios[0].default" class="scenario-make-default"> <i class="material-icons">check_circle</i> </div> </div> <div> <resize-input2 ng-blur="setScenarioKeywords(scenarios[0].scenario_id)" multiline="false" ng-model="panelInfo.keywords" class="scenario-keywords" placeholder="Enter keywords"> </resize-input2> <div class="scenario-keywords-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="right" category="scenario" name="Keywords"></brn-hint> </div> </div> </div> <div class="panel-buttons panel-buttons-right"> <div class="panel-button brn-hint-wrapper scenario-debug" ng-click="toggleWidget()"> <i class="material-icons">play_circle_filled</i> <brn-hint position="bottom" category="scenario" name="Debug"></brn-hint> </div> <div ng-click="switchExpertMode()" class="panel-button brn-hint-wrapper" ng-class="{\'expert-mode-off\': !expertMode, \'expert-mode-on\': expertMode}"> <i class="material-icons">api</i> <brn-hint position="bottom" category="scenario" name="Switch Expert Mode"></brn-hint> </div> <div ng-if="scenarios.length" class="panel-button brn-hint-wrapper scenario-remove" ng-click="deleteScenario(scenarios[0].scenario_id)"> <i class="material-icons">delete_forever</i> <brn-hint position="bottom" category="scenario" name="Delete"></brn-hint> </div> </div> <div class="panel-buttons panel-buttons-right panel-buttons-break"> <div class="scale-wrapper"> <div class="scale"> <resize-input2 ng-blur="zoom()" enter="zoom()" multiline="false" ng-model="panelInfo.scale" style="max-width: 40px"> </resize-input2> <span>%</span> </div> <div ng-click="pageInfo.showAddComponentMenu = false; pageInfo.showScaleMenu = !pageInfo.showScaleMenu;" ng-class="{\'btn-open-active\': pageInfo.showScaleMenu}" click-outside="pageInfo.showScaleMenu = false" class="btn-open"> <i class="material-icons">keyboard_arrow_down</i> </div> <ul ng-class="{\'scale-menu-active\': pageInfo.showScaleMenu}" class="scale-menu"> <li ng-click="panelInfo.scale=\'100\'; zoom();">Original size</li> <li ng-click="zoom(0.25)">Zoom in</li> <li ng-click="zoom(-0.25)">Zoom out</li> </ul> </div> <div class="panel-button brn-hint-wrapper" ng-click="fitToScreen()"> <i class="material-icons">gps_fixed</i> <brn-hint position="bottom" category="scenario" name="Fit to Screen"></brn-hint> </div> </div> <div class="panel-buttons panel-buttons-right panel-buttons-break"> <div class="panel-button brn-hint-wrapper" ng-class="{\'panel-button-disabled\': undoDisabled()}" ng-click="undo()"> <i class="material-icons">undo</i> <brn-hint position="bottom" category="scenario" name="Undo"></brn-hint> </div> <div class="panel-button brn-hint-wrapper" ng-class="{\'panel-button-disabled\': undoDisabled()}
77" ng-click="restore()"> <i class="material-icons">restore</i> <brn-hint position="bottom" category="scenario" name="Restore"></brn-hint> </div> <div class="panel-button brn-hint-wrapper" ng-class="{\'panel-button-disabled\': redoDisabled()}" ng-click="redo()"> <i class="material-icons">redo</i> <brn-hint position="bottom" category="scenario" name="Redo"></brn-hint> </div> </div> <div ng-if="scenarios.length" class="panel-buttons panel-buttons-right panel-buttons-break"> <div ng-click="pageInfo.showScaleMenu = false; pageInfo.showAddComponentMenu = !pageInfo.showAddComponentMenu;" click-outside="pageInfo.showAddComponentMenu = false" class="add-component-wrapper"> <div class="panel-button"> <i class="material-icons">add_circle</i> <visual-component-menu ng-show="pageInfo.showAddComponentMenu" available-components="availableComponents" step-to-copy="stepToCopy" add-component="addComponent(\n scenarios[0].scenario_id,\n scenariosMap[scenarios[0].scenario_id].length,\n 0,\n false,\n false,\n component,\n metaType,\n type,\n copied,\n false,\n true\n )" hide-existing="true" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div ng-class="{\'btn-open-active\': pageInfo.showAddComponentMenu}" class="btn-open"> <i class="material-icons">keyboard_arrow_down</i> </div> <div ng-show="!pageInfo.showAddComponentMenu" class="add-component-overlay brn-hint-wrapper"> <brn-hint position="bottom" category="scenario" name="Add step"></brn-hint> </div> </div> <div ng-click="selectedGroups[scenarios[0].scenario_id].length && handleSelectedGroups(scenarios[0].scenario_id)" ng-class="{\'panel-button-disabled\': !selectedGroups[scenarios[0].scenario_id].length || selectedGroups[scenarios[0].scenario_id].length === 1 && scenariosMap[scenarios[0].scenario_id][selectedGroups[scenarios[0].scenario_id][0].column][selectedGroups[scenarios[0].scenario_id][0].group].length === 1}" class="panel-button brn-hint-wrapper"> <i ng-if="selectedGroups[scenarios[0].scenario_id].length === 1 && scenariosMap[scenarios[0].scenario_id][selectedGroups[scenarios[0].scenario_id][0].column][selectedGroups[scenarios[0].scenario_id][0].group].length !== 1" class="material-icons">folder_open</i> <i ng-if="selectedGroups[scenarios[0].scenario_id].length !== 1 || selectedGroups[scenarios[0].scenario_id].length === 1 && scenariosMap[scenarios[0].scenario_id][selectedGroups[scenarios[0].scenario_id][0].column][selectedGroups[scenarios[0].scenario_id][0].group].length === 1" class="material-icons">create_new_folder</i> <brn-hint position="bottom" category="scenario" name="Group steps"></brn-hint> </div> </div> </div> <div id="visual_editor_wrapper" ng-click="scenarios.length && selectedGroups[scenarios[0].scenario_id].length && clearSelectedGroups(scenarios[0].scenario_id); selectExistingData && clearExisting()" class="visual-editor-wrapper"> <div id="visual_editor" dragscroll ng-class="{\'visual-editor-groups-selection\': selectedGroups[scenarios[0].scenario_id].length, \'visual-editor-select-existing\': selectExistingData, \'visual-editor-fit-to-screen\': scaleBeforeFit, \'visual-editor-disabled\': autosaveInProgress}" class="visual-editor" ng-style="{transform: \'scale(\' + scale + \')\'}" style="opacity: 0"> <div ng-repeat="scenario in scenarios"> <div ng-if="scenario.steps.length" id="scenario_{{scenario.scenario_id}}" class="scenario" ng-class="{\'scenario-select-existing\': selectExistingData && selectExistingData.scenario.scenario_id === scenario.scenario_id}"> <div ng-repeat="column in scenariosMap[scenario.scenario_id]" c="{{columnIndex = $index}}" class="scenario-column"> <div ng-repeat="group in column" g="{{groupIndex = $index; componentGroup = getComponentGroup(scenario, group[group.length - 1]); componentGroupName = getComponentGroupName(scenario, group[group.length - 1]); groupStats = getStepStats(scenario, group[group.length - 1]);}}" ng-class="{\'scenario-group-selected\': isGroupSelected(scenario.scenario_id, columnIndex, groupIndex), \'scenario-group-single\': group.length === 1}" class="scenario-group scenario-group-{{componentGroupName}}"> <div class="scenario-data">
77 <div ng-if="columnIndex === scenariosMap[scenario.scenario_id].length - 1 && columnIndex !== 0 && groupIndex === 0 && scenario.validation.status == \'errored\'" ng-click="toggleScenarioStatus(scenario)" class="scenario-errors"> <div class="switch {{scenario.validation.forced ? \'switch-on\' : \'switch-off\'}}"></div> <span>Ignore <strong>{{scenariosErrors[scenario.scenario_id].length}} errors</strong> and activate scenario</span> </div> </div> <div ng-click="selectGroup(scenario.scenario_id, columnIndex, groupIndex, $event)" class="scenario-group-inner"> <div id="step_{{scenario.scenario_id}}_{{step.id}}" ng-repeat="step in group" ng-init="stepComponentGroup = getComponentGroup(scenario, step); stepComponentGroupName = getComponentGroupName(scenario, step); stepComponent = getStepComponent(scenario, step); stepStats = getStepStats(scenario, step);" ng-click="scaleBeforeFit && centerStep(scenario, step); selectExistingData && applyExisting(step, $event);" class="scenario-step scenario-step-{{stepComponentGroupName}}" ng-class="{\'scenario-step-pro-collapsed\': stepComponentGroupName == \'pro\' && stepComponent.mode == \'collapsed\', \'scenario-step-pro-complete\': stepComponentGroupName == \'pro\' && stepComponent.mode != \'collapsed\', \'scenario-step-first\': $index === 0, \'scenario-step-active\': activeStep === step || activeSteps.includes(step), \'scenario-step-last\': $index == group.length - 1, \'scenario-step-with-stats\': stepStats && group.length == 1}"> <div class="scenario-step-inner" ng-mouseenter="allowActiveSteps && calcActiveSteps(scenario, step)" ng-mouseleave="allowActiveSteps && clearActiveSteps(scenario)"> <visual-step step="step" translations="main.translations" available-components="scenariosSteps[scenario.scenario_id][step.id].availableComponents" step-to-copy="stepToCopy" set-step-to-copy="setStepToCopy(obj)" add-component="addComponent(\n scenario.scenario_id,\n columnIndex + 1,\n scenariosMap[scenario.scenario_id][columnIndex + 1] ? scenariosMap[scenario.scenario_id][columnIndex + 1].length : 0,\n prevStep,\n false,\n component,\n metaType,\n type,\n copied,\n prevStepAction\n )" delete-component="deleteComponent(scenario.scenario_id, step)" delete-connection="deleteConnection(scenario.scenario_id, step, action)" autosave="autosave(scenario.scenario_id, false, true)" scenarios="allScenarios" current-scenario="scenario" all-tags="allTags" all-categories="allCategories" all-products="allProducts" all-products-source="allProductsSource" all-categories-source="allCategoriesSource" all-entities="allEntities" all-mails="allMails" all-platforms="allPlatforms" collections="collections" collection-fields-list="collectionFieldsList" load-tags="loadTags()" all-labels="allLabels" operators="operators" update-scenario-connections="updateScenarioConnections(scenario)" draw-scenario-connections="drawScenarioConnections(scenario)" select-existing="selectExisting(scenario, step, action, event)" err-msg="errMsg" add-error="addError(scenario, step)" clear-error="clearError(scenario, step)" step-component-group="stepComponentGroup" step-component-group-name="stepComponentGroupName" step-component="stepComponent" jumpers-out="scenariosSteps[scenario.scenario_id][step.id].jumpersOut" connections-out="scenariosSteps[scenario.scenario_id][step.id].connectionsOut" center-step="centerStep(scenario, step)" get-platform-available-components="getPlatformAvailableComponents(platform)" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-step> <div ng-if="group.length > 1" ng-click="group[$index + 1] && swapSteps(scenario, step, group[$index + 1])" ng-class="{\'scenario-step-move-disabled\': $index == group.length - 1}" class="scenario-step-move scenario-step-move-down brn-hint-wrapper"> <i class="material-icons">low_priority</i> <brn-hint position="top" category="scenario" name="Move step down"></brn-hint> </div> <div ng-if="group.length > 1" ng-click="group[$index - 1] && swapSteps(scenario, group[$index - 1], step)" ng-class="{\'scenario-step-move-disabled\': $index == 0}" class="scenario-step-move scenario-step-move-up brn-hint-wrapper"> <i class="material-icons">low_priority</i> <brn-hint position="top" category="scenario" name="Move step up"></brn-hint> </div> <div class="scenario-step-remove" ng-click="deleteComponent(scenario.scenario_id, step)"> <i class="material-icons">close</i> </div> <div id="step_connection_{{scenario.scenario_id}}_{{step.id}}" class="step-connection"></div> <div ng-if="step.component == \'condition\'" id="step_connection_true_{{scenario.scenario_id}}_{{step.id}}" class="step-connection-true"></div> <div ng-if="step.component == \'condition\'" id="step_connection_false_{{scenario.scenario_id}}_{{step.id}}" class="step-connection-false"></div> <div ng-if="step.component == \'existence\'" id="step_connection_exists_{{scenario.scenario_id}}_{{step.id}}" class="step-connection-yes"></div> <div ng-if="step.component == \'existence\'" id="step_connection_nonexists_{{scenario.scenario_id}}_{{step.id}}" class="step-connection-no"></div> <div ng-if="step.component == \'decision\'" id="step_connection_yes_{{scenario.scenario_id}}_{{step.id}}" class="step-connection-yes"></div> <div ng-if="step.component == \'decision\'" id="step_connection_no_{{scenario.scenario_id}}_{{step.id}}" class="step-connection-no"></div> <div ng-if="step.component == \'schedule\'" id="step_connection_delayed_{{scenario.scenario_id}}_{{step.id}}" class="step-connection-false"></div> <div ng-if="step.component == \'rest\' && (!step.meta || !step.meta.type)" id="step_connection_success_{{scenario.scenario_id}}_{{step.id}}" class="step-connection-success"></div> <div ng-if="step.component == \'rest\' && (!step.meta || !step.meta.type)" id="step_connection_fail_{{scenario.scenario_id}}_{{step.id}}" class="step-connection-fail"></div> <div ng-if="step.component == \'tag\' && step.meta && step.meta.type == \'check_tags\'" id="step_connection_fallback_{{scenario.scenario_id}}_{{step.id}}" class="step-connection-false"></div> <div ng-if="step.component == \'label\' && step.meta && step.meta.type == \'check\'" id="step_connection_fallback_{{scenario.scenario_id}}_{{step.id}}" class="step-connection-false"></div> <div ng-if="scenariosSteps[scenario.scenario_id][step.id].jumpersIn.length" class="step-jumpers-in"> <div ng-repeat="source in scenariosSteps[scenario.scenario_id][step.id].jumpersIn" ng-click="centerStep(scenario, source)" id="step_
77jumper_in_{{scenario.scenario_id}}_{{step.id}}_{{source.id}}" class="step-jumper step-jumper-{{getComponentGroupName(scenario, source)}}"> <i class="material-icons">{{getJumperArrow(step, source)}}</i> </div> </div> <div ng-if="stepComponentGroupName == \'pro\' && stepComponent.mode == \'collapsed\' && scenariosSteps[scenario.scenario_id][step.id].jumpersOut.length" class="step-jumpers-out"> <div ng-repeat="target in scenariosSteps[scenario.scenario_id][step.id].jumpersOut" ng-click="centerStep(scenario, target)" id="step_jumper_{{$index}}_{{scenario.scenario_id}}_{{step.id}}" class="step-jumper step-jumper-{{stepComponentGroupName}}"> <i class="material-icons">{{getJumperArrow(step, target)}}</i> </div> </div> <div ng-if="step.component == \'condition\' && scenariosSteps[scenario.scenario_id][step.id].jumpersOut.true" ng-init="target = scenariosSteps[scenario.scenario_id][step.id].jumpersOut.true" ng-click="centerStep(scenario, target)" id="step_jumper_true_{{scenario.scenario_id}}_{{step.id}}" class="step-jumper step-jumper-{{stepComponentGroupName}} step-jumper-true"> <i class="material-icons">{{getJumperArrow(step, target)}}</i> </div> <div ng-if="step.component == \'condition\' && scenariosSteps[scenario.scenario_id][step.id].jumpersOut.false" ng-init="target = scenariosSteps[scenario.scenario_id][step.id].jumpersOut.false" ng-click="centerStep(scenario, target)" id="step_jumper_false_{{scenario.scenario_id}}_{{step.id}}" class="step-jumper step-jumper-{{stepComponentGroupName}} step-jumper-false"> <i class="material-icons">{{getJumperArrow(step, target)}}</i> </div> <div ng-if="step.component == \'existence\' && scenariosSteps[scenario.scenario_id][step.id].jumpersOut.exists" ng-init="target = scenariosSteps[scenario.scenario_id][step.id].jumpersOut.exists" ng-click="centerStep(scenario, target)" id="step_jumper_exists_{{scenario.scenario_id}}_{{step.id}}" class="step-jumper step-jumper-{{stepComponentGroupName}} step-jumper-yes"> <i class="material-icons">{{getJumperArrow(step, target)}}</i> </div> <div ng-if="step.component == \'existence\' && scenariosSteps[scenario.scenario_id][step.id].jumpersOut.nonexists" ng-init="target = scenariosSteps[scenario.scenario_id][step.id].jumpersOut.nonexists" ng-click="centerStep(scenario, target)" id="step_jumper_nonexists_{{scenario.scenario_id}}_{{step.id}}" class="step-jumper step-jumper-{{stepComponentGroupName}} step-jumper-no"> <i class="material-icons">{{getJumperArrow(step, target)}}</i> </div> <div ng-if="step.component == \'decision\' && scenariosSteps[scenario.scenario_id][step.id].jumpersOut.yes" ng-init="target = scenariosSteps[scenario.scenario_id][step.id].jumpersOut.yes" ng-click="centerStep(scenario, target)" id="step_jumper_yes_{{scenario.scenario_id}}_{{step.id}}" class="step-jumper step-jumper-{{stepComponentGroupName}} step-jumper-yes"> <i class="material-icons">{{getJumperArrow(step, target)}}</i> </div> <div ng-if="step.component == \'decision\' && scenariosSteps[scenario.scenario_id][step.id].jumpersOut.no" ng-init="target = scenariosSteps[scenario.scenario_id][step.id].jumpersOut.no" ng-click="centerStep(scenario, target)" id="step_jumper_no_{{scenario.scenario_id}}_{{step.id}}" class="step-jumper step-jumper-{{stepComponentGroupName}} step-jumper-no"> <i class="material-icons">{{getJumperArrow(step, target)}}</i> </div> <div ng-if="step.component == \'schedule\' && scenariosSteps[scenario.scenario_id][step.id].jumpersOut.delayed" ng-init="target = scenariosSteps[scenario.scenario_id][step.id].jumpersOut.delayed" ng-click="centerStep(scenario, target)" id="step_jumper_delayed_{{scenario.scenario_id}}_{{step.id}}" class="step-jumper step-jumper-{{stepComponentGroupName}} step-jumper-false"> <i class="material-icons">{{getJumperArrow(step, target)}}</i> </div> <div ng-if="step.component == \'rest\' && (!step.meta || !step.meta.type) && scenariosSteps[scenario.scenario_id][step.id].jumpersOut.success" ng-init="target = scenariosSteps[scenario.scenario_id][step.id].jumpersOut.success" ng-click="centerStep(scenario, target)" id="step_jumper_success_{{scenario.scenario_id}}_{{step.id}}
77" class="step-jumper step-jumper-{{stepComponentGroupName}} step-jumper-success"> <i class="material-icons">{{getJumperArrow(step, target)}}</i> </div> <div ng-if="step.component == \'rest\' && (!step.meta || !step.meta.type) && scenariosSteps[scenario.scenario_id][step.id].jumpersOut.fail" ng-init="target = scenariosSteps[scenario.scenario_id][step.id].jumpersOut.fail" ng-click="centerStep(scenario, target)" id="step_jumper_fail_{{scenario.scenario_id}}_{{step.id}}" class="step-jumper step-jumper-{{stepComponentGroupName}} step-jumper-fail"> <i class="material-icons">{{getJumperArrow(step, target)}}</i> </div> <div ng-if="step.component == \'tag\' && step.meta && step.meta.type == \'check_tags\' && scenariosSteps[scenario.scenario_id][step.id].jumpersOut.fallback" ng-init="target = scenariosSteps[scenario.scenario_id][step.id].jumpersOut.fallback" ng-click="centerStep(scenario, target)" id="step_jumper_fallback_{{scenario.scenario_id}}_{{step.id}}" class="step-jumper step-jumper-{{stepComponentGroupName}} step-jumper-false"> <i class="material-icons">{{getJumperArrow(step, target)}}</i> </div> <div ng-if="step.component == \'label\' && step.meta && step.meta.type == \'check\' && scenariosSteps[scenario.scenario_id][step.id].jumpersOut.fallback" ng-init="target = scenariosSteps[scenario.scenario_id][step.id].jumpersOut.fallback" ng-click="centerStep(scenario, target)" id="step_jumper_fallback_{{scenario.scenario_id}}_{{step.id}}" class="step-jumper step-jumper-{{stepComponentGroupName}} step-jumper-false"> <i class="material-icons">{{getJumperArrow(step, target)}}</i> </div> </div> <div ng-if="stepStats && group.length == 1" ng-mouseover="allowActiveSteps && calcActiveSteps(scenario, step)" ng-mouseleave="allowActiveSteps && clearActiveSteps(scenario)" class="scenario-step-stats"> <div uib-tooltip="received this message" tooltip-append-to-body="true"> <span class="material-icons-outlined"> person </span> <span>{{(stepStats.sends || 0) | number : 0}}</span> </div> <div uib-tooltip="left in comparison with the previous step" tooltip-append-to-body="true"> <span class="material-icons-outlined"> file_download </span> <span>{{((stepStats.sends - stepStats.replies) / stepStats.sends * 100 || 0) | number : 0}}%</span> </div> <div uib-tooltip="avg. sentiment" tooltip-append-to-body="true"> <span class="material-icons"> mood </span> <span>{{(stepStats.average_sentiment || 0) | number : 0}}%</span> </div> <div uib-tooltip="avg. negativity" tooltip-append-to-body="true"> <span class="material-icons"> warning_amber </span> <span>{{(stepStats.average_negative || 0) | number : 0}}%</span> </div> </div> <div class="scenario-step-warning" ng-if="step.id == group[0].id && groupStats && (groupStats.sends - groupStats.replies) / groupStats.sends * 100 >= 30"> <i class="material-icons">priority_high</i> <div class="scenario-step-warning-hint"> <span class="hint-text" ng-bind-html="\'Too many clients leave on this step\'"></span> </div> </div> <div class="scenario-step-error" ng-if="errMsg"> <i class="material-icons">priority_high</i> <div class="scenario-step-error-hint"> <span class="hint-text" ng-bind-html="errMsg"></span> </div> </div> </div> <div ng-if="groupStats && group.length > 1" class="scenario-group-stats"> <div uib-tooltip="received this message" tooltip-append-to-body="true"> <span class="material-icons-outlined"> person </span> <span>{{(groupStats.sends || 0) | number : 0}}</span> </div> <div uib-tooltip="left in comparison with the previous step" tooltip-append-to-body="true"> <span class="material-icons-outlined"> file_download </span> <span>{{((groupStats.sends - groupStats.replies) / groupStats.sends * 100 || 0) | number : 0}}%</span> </div> <div uib-tooltip="avg. sentiment" tooltip-append-to-body="true"> <span class="material-icons"> mood </span> <span>{{(groupStats.average_sentiment || 0) | number : 0}}%</span> </div> <div uib-tooltip="avg. negativity" tooltip-append-to-body="true"> <span class="material-icons"> warning_amber </span> <span>{{(groupStats.average_negative || 0) | number : 0}}%</span> </div> </div> </div> <div class="scenario-group-footer"> <div ng-if="(!group[group.length - 1].action.next)" class="scenario-actions"> <span>Default link</span> <div class="btn-connection-add"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="scenariosSteps[scenario.scenario_id][group[group.length - 1].id].availableComponents" step-to-copy="stepToCopy" add-component="addComponent(\n scenario.scenario_id,\n columnIndex + 1,\n scenariosMap[scenario.scenario_id][columnIndex + 1] ? scenariosMap[scenario.scenario_id][columnIndex + 1].length : 0,\n group[group.length - 1],\n false,\n component,\n metaType,\n type,\n copied\n )" select-existing="selectExisting(scenario, group[group.length - 1], \'next\', event)" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> </div> <div ng-if="(group[group.length - 1].action.next)" class="scenario-actions"> <span>Default link</span> <div ng-click="deleteConnection(scenario.scenario_id, group[group.length - 1])" class="btn-connection-remove"> <i class="material-icons">
77remove_circle</i> </div> </div> <div id="step_connection_next_{{scenario.scenario_id}}_{{group[group.length - 1].id}}" class="step-connection-next"></div> <div ng-if="scenariosSteps[scenario.scenario_id][group[group.length - 1].id].jumpersOut.next" ng-init="target = scenariosSteps[scenario.scenario_id][group[group.length - 1].id].jumpersOut.next" ng-click="centerStep(scenario, target)" id="step_jumper_next_{{scenario.scenario_id}}_{{group[group.length - 1].id}}" class="step-jumper step-jumper-{{componentGroupName}} step-jumper-next"> <i class="material-icons">{{getJumperArrow(scenariosSteps[scenario.scenario_id][group[group.length - 1].id].step, target)}}</i> </div> </div> </div> </div> </div> <div ng-if="!scenario.steps.length" id="scenario_{{scenario.scenario_id}}" class="scenario"> </div> </div> </div> <input type="text" id="copy_id" class="visual-copy-id"> </div> <div ng-class="{open: widget}" class="visual-widget conversation"> <visual-test-widget toggle-widget="toggleWidget()"></visual-test-widget> </div>'),a.put("views/visual-test-widget.html",'<div class="conversations-dialogs" style="margin: 0px"> <div class="dialogs-list" style="margin: 0px; min-height: auto"> <div class="brn-widget widget-shadow" style="margin: 0px"> <div class="brn-widget-header"> <div class="client"> <span class="img-wrap"> <img src="{{bot.image}}"> </span> <div class="client-info"> <span style="font-size: 14px; color: #000000">Testing bot…</span> <br> <span style="font-size: 12px; color: #d3d3d3">No one will see this chat</span> </div> </div> <i class="material-icons console-icon" ng-click="toogleConsole()">code</i> <i class="material-icons console-icon" ng-click="toggleWidget()">close</i> </div> <div class="brn-body-wrap" style="{{isConsole? \'margin-bottom:0px;\' : \'\'}}"> <div class="brn-widget-body" scroll-glue id="test_widget_messages"> <widget-message ng-repeat="message in messages" type="{{message}}" image="images/tf.png"> </widget-message> </div> </div> <div class="brn-widget-footer"> <form class="conversation-footer" ng-submit="sendMessage()"> <fieldset> <input type="text" name="name" class="" ng-focus="messageActive = true;" ng-blur="messageActive = false;" ng-model="message.text" placeholder="{{$parent.main.translations.catalog_textPlaceholder}}"> <div class="widget-attachment"> <div class="submit-icon active hover-icon" ng-class="{\'green-icon\' : messageActive}"> <button type="submit" class="reset-btn"> <span ng-include src="\'images/svg/ic_send_black_24px.svg\'"></span> </button> </div> </div> </fieldset> </form> </div> <div class="debug-log" scroll-glue ng-show="isConsole"> <p ng-repeat="message in debugMessages track by $index"> {{message}} </p> <span class="animation"></span> </div> </div> </div> </div>'),a.put("views/visual-warning.html",'<div class="scenario-switch"> <div class="title"> <span class="material-icons">report_problem</span> Warning! </div> <div class="body"> <p>PRO features can have a big and complicated structure. Its not recommended to edit them if you dont understand how they works. Wrong PRO feature parameters can damage your botâs scenarios and saved data.</p> <p>Are you sure you want to edit this component?</p> <div class="block-buttons"> <a class="btn-proceed" ng-click="proceed()">Proceed</a> <a class="btn-cancel" ng-hide="remember_required" ng-click="close()">Cancel</a> </div> <div class="block-remember" ng-mousedown="$event.button === 0 && switchWarning();"> <div class="switch {{remember_required?\'switch-on\':\'switch-off\'}}"></div> <span>Remember my choice</span> </div> </div> </div>'),a.put("views/visual/action-ban.html",'<div class="scenario-step-header"> <span class="scenario-step-name">TG - Ban</span> <span class="scenario-step-id prevent-drag" ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()"> {{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="height: 48px"></div> </div>'),a.put("views/visual/action-invite_link.html",'<div class="scenario-step-header"> <span class="scenario-step-name">TG - Invite link</span> <span class="scenario-step-id prevent-drag" ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()"> {{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Group name" ng-blur="autosave()" multiline="false" max-width="300" require="true" error-require-text="\'Group name cannot be empty.\'" error-msg="errorMsg[1]" set-error="setError()" ng-model="step.properties.data.group_name"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Save var" ng-blur="autosave()" multiline="false" max-width="300" require="true" error-require-text="\'Save var cannot be empty.\'" error-msg="errorMsg[0]" set-error="setError()" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong save var.\'" ng-model="step.properties.data.save"> </resize-input2> </div> </div>'),a.put("views/visual/action-like.html",'<div class="scenario-step-header"> <span class="scenario-step-name">IG - Like</span> <span class="scenario-step-id prevent-drag" ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()"> {{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="height: 48px"></div> </div>'),a.put("views/visual/action-unban.html",'<div class="scenario-step-header"> <span class="scenario-step-name">TG - Unban</span> <span class="scenario-step-id prevent-drag" ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()"> {{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Group name" ng-blur="validate(); autosave();" multiline="false" max-width="300" require="true" error-require-text="\'Group name cannot be empty.\'" error-msg="errorMsg[0]" set-error="setError()" ng-model="step.properties.data.group_name"> </resize-input2> </div> </div>'), 78a.put("views/visual/advanced.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{step.component}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"></div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="height: 48px"></div> </div>'),a.put("views/visual/attachment.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{step.properties.type ? step.properties.type : \'media\'}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row" ng-style="{ \'margin\' : (step.properties.type == \'image\' && (step.properties.url || prevImg)) ? \'auto\' : \'\' }"> <div class="scenario-step-column" style="padding: 13px 14px 16px" ng-if="step.properties.url && step.properties.type==\'audio\'"> <div class="input-group open-custom-input"> <audio onloadedmetadata="$(this).parent().find(\'.duration\').html(\'-\'+[\n (Math.floor(Math.ceil(this.duration) / 60)).toString(),\n (Math.ceil(this.duration) % 60).toString().padStart(2, \'0\')\n ].join(\':\'))" ng-src="{{trustSrc(step.properties.url)}}"> </audio> <span class="input-group-add"> <i ng-click="toggleAudioPlayer($event)" class="material-icons play">{{isplaying ? "pause_circle_filled" : "play_circle_filled"}}</i> <span class="file-name">{{step.properties.name}}</span> <span ng-bind="duration" class="duration"></span> <div class="gradient"></div> </span> </div> </div> <div ng-if="step.properties.type==\'image\'" style="flex-grow: 1"> <div class="input-group open-custom-input"> <img class="scenario-step-image" style="position: absolute; left: 0; object-fit: cover; object-position: top" ng-style="{height:progressPercentage+\'%\'}" ng-if="prevImg" ngf-src="prevImg"> <img class="scenario-step-image" style="opacity: 0.2" ng-if="prevImg" ngf-src="prevImg"> <img class="scenario-step-image" style="background-size: cover" ng-if="step.properties.url && !prevImg" ng-src="{{trustSrc(step.properties.url)}}" alt="Image {{step.properties.url}}"> </div> </div> <div class="attachment-video" ng-if="step.properties.url && step.properties.type==\'video\'"> <video onloadedmetadata="$(this).parent().find(\'.onloadDuration\').html(\'-\'+[\n (Math.floor(Math.ceil(this.duration) / 60)).toString(),\n (Math.ceil(this.duration) % 60).toString().padStart(2, \'0\')\n ].join(\':\'))" ng-src="{{trustSrc(step.properties.url)}}"> </video> <span class="input-group-add video-control"> <i ng-click="toggleVideoPlayer($event)" class="material-icons">{{isplaying ? "pause_circle_filled" : "play_circle_filled"}}</i> <span class="file-name">{{step.properties.name}}<div class="gradient"></div></span> <span ng-if="!duration" class="duration onloadDuration"></span> <span ng-if="duration" class="duration">{{duration}}</span> </span> </div> <div class="scenario-step-column" style="padding: 13px 14px 16px" ng-if="step.properties.url && step.properties.type==\'file\'"> <div class="input-group open-custom-input"> <span class="input-group-add"> <a href="{{step.properties.url}}" download> <i class="material-icons">file_download</i> <span class="file-name" style="width: 270px">{{step.properties.name}}</span> <div class="gradient"></div> </a> </span> </div> </div> <div class="scenario-step-column" style="position: relative; padding: 0px" ng-if="!step.properties.url && !prevImg"> <div ng-if="progressPercentage != 0 && step.properties.type!=\'image\'" class="scenario-file-load-progress" ng-style="{width: progressPercentage+\'%\'}"></div> <div class="input-group open-custom-input" style="margin: 13px 14px 16px" ng-if="progressPercentage != 0 && step.properties.type != \'image\'"> <span class="input-group-add"> <i ng-if="step.properties.type==\'image\'" class="material-icons">image</i> <i ng-if="step.properties.type==\'audio\'" class="material-icons">music_note</i> <i ng-if="step.properties.type==\'video\'" class="material-icons">videocam</i> <i ng-if="step.properties.type==\'file\'" class="material-icons">insert_drive_file</i> Uploaded {{progressPercentage}}% </span> </div> <div class="input-group open-custom-input" style="" ng-if="progressPercentage == 0 && !prevImg"> <span ng-if="!step.properties.type" ng-max-size="10MB" ngf-pattern="\'image/*,audio/*,video/mp4,video/webm,video/ogg\'" ngf-accept="\'image/*,audio/*,video/mp4,video/webm,video/ogg\'" ngf-select="addFile($file, $index, \'\', name)" class="input-group-add attachment-add"> <i class="material-icons">video_library</i> {{attachmentsError ? \'Upload failed\' : \'Upload image, video or audio…\'}}
78 </span> <span ng-if="step.properties.type==\'image\'" ng-max-size="10MB" ngf-pattern="\'image/*\'" ngf-accept="\'image/*\'" ngf-select="addFile($file, $index, step.properties.type, name)" class="input-group-add attachment-add"> <i class="material-icons">image</i> {{attachmentsError ? \'Upload failed\' : \'Upload...\'}} </span> <span ng-if="step.properties.type==\'audio\'" ng-max-size="10MB" ngf-pattern="\'audio/*\'" ngf-accept="\'audio/*\'" ngf-select="addFile($file, $index, step.properties.type, name)" class="input-group-add attachment-add"> <i class="material-icons">music_note</i> {{attachmentsError ? \'Upload failed\' : \'Upload...\'}} </span> <span ng-if="step.properties.type==\'video\'" ng-max-size="10MB" ngf-pattern="\'video/mp4,video/webm,video/ogg\'" ngf-accept="\'video/mp4,video/webm,video/ogg\'" ngf-select="addFile($file, $index, step.properties.type, name)" class="input-group-add attachment-add"> <i class="material-icons">videocam</i> {{attachmentsError ? \'Upload failed\' : \'Upload...\'}} </span> <span ng-if="step.properties.type==\'file\'" ng-max-size="10MB" ngf-select="addFile($file, $index, step.properties.type, name)" class="input-group-add attachment-add"> <i class="material-icons">insert_drive_file</i> {{attachmentsError ? \'Upload failed\' : \'Upload document or archive…\'}} </span> </div> </div> </div>'),a.put("views/visual/card-category.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.properties.category" array="allCategories" opt-description="name" opt-value="value" is-model-init="true" placeholder="Select category…" is-back-placeholder="true" ng-change="autosaveCategory()" icon="\'add_shopping_cart\'" require="true" error-require-text="\'Category must be selected.\'" error-msg="errorMsg[0]" set-error="setError();"> </custom-dropdown> </div> </div>'),a.put("views/visual/card.html",'<div class="scenario-step-header scenario-step-header-gallery"> <span class="scenario-step-name" ng-if="step.properties.type == \'dynamic\'">Gallery - generator</span> <span class="scenario-step-name" ng-if="step.properties.type == \'static\'">Gallery - card #{{ step.properties.current + 1 }}</span> <span class="scenario-step-id prevent-drag" ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()"> {{step.id}} </span> <div class="scenario-actions" ng-if="step.properties.type == \'dynamic\'"> <div class="btn-mode btn-left" ng-click="toggleModeGallery()"> <i class="material-icons">lens</i> <span class="letter">M</span> </div> <div ng-if="hintGalleryA" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintNameGalleryA}}"></brn-hint> </div> </div> <div class="scenario-actions" ng-if="step.properties.type == \'static\'"> <div class="btn-mode btn-left" ng-click="toggleModeGallery()"> <i class="material-icons">lens</i> <span class="letter">A</span> </div> <div ng-if="hintGalleryM" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintNameGalleryM}}"></brn-hint> </div> <div class="btn-arrow btn-left" ng-class="{disabled: step.properties.current === 0}" ng-click="prevGalleryCard()"> <i class="material-icons">chevron_left</i> </div> <div class="btn-remove btn-left" ng-class="{disabled: step.properties.elements.length < 2}" ng-click="removeGalleryCard()"> <i class="material-icons">delete</i> </div> <div class="btn-arrow btn-left" ng-click="nextGalleryCard()"> <i class="material-icons">chevron_right</i> </div> </div> </div> <figure ng-if="step.properties.type == \'dynamic\'"> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Data key" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.data" require="true" error-require-text="\'Data key is required.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="display: flex; align-items: end; padding-top: 13px; padding-bottom: 12px"> <i class="material-icons">insert_photo</i> <resize-input2 style="flex-grow: 1" placeholder="Picture" ng-blur="autosave()" max-width="300" ng-model="step.properties.image"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="display: flex; align-items: end; padding-top: 13px; padding-bottom: 12px"> <i class="material-icons">title</i> <resize-input2 style="flex-grow: 1" placeholder="Title" ng-blur="autosave()" max-width="300" ng-model="step.properties.title"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="display: flex; align-items: end; padding-top: 13px; padding-bottom: 12px"> <i class="material-icons">link</i> <resize-input2 style="flex-grow: 1" placeholder="Link" ng-blur="autosave()" max-width="300" ng-model="step.properties.link"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="display: flex; align-items: end; padding-top: 15px; padding-bottom: 10px"> <i class="material-icons">text_format</i> <resize-input2 style="flex-grow: 1" placeholder="Description" ng-blur="autosave()" multiline="true" max-width="300" ng-model="step.properties.text"> </resize-input2> </div> </div> <div class="scenario-step-row scenario-step-row-button" ng-repeat="button in step.properties.buttons" uib-dropdown auto-close
78="outsideClick"> <div class="scenario-step-column" style="display: flex; align-items: end" uib-dropdown-toggle> <i class="material-icons">format_bold</i> <span ng-if="button.title">{{button.title}}</span> <span ng-if="!button.title" class="button-placeholder">Button...</span> </div> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'btn_\'+$index}}"> <div class="dropdown-container"> <div class="scenario-step-header"> <span>Button</span> <div class="scenario-actions"> <div class="btn-remove" ng-click="deleteGalleryButton($index)"> <i class="material-icons">delete</i> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Title" ng-blur="autosave()" max-width="300" ng-model="button.title"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="button.type" array="[{name: \'Suggestion\', value: \'suggest\'}, {name: \'Link\', value: \'link\'}]" opt-description="name" opt-value="value" is-model-init="true" is-back-placeholder="true" ng-change="updateGalleryButton($index)" placeholder=""> </custom-dropdown> </div> </div> <div ng-if="button.type == \'suggest\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Type here" ng-blur="autosave()" multiline="true" max-width="300" ng-model="button.content"> </resize-input2> </div> </div> <div ng-if="button.type == \'link\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Link" ng-blur="autosave()" max-width="300" ng-model="button.url"> </resize-input2> </div> </div> <div ng-if="button.type == \'link\'" class="scenario-step-footer"> <div ng-click="button.webview = !button.webview; autosave();"> <div class="switch {{button.webview?\'switch-on\':\'switch-off\'}}"></div> <span>Webview</span> </div> </div> </div> </div> </div> <div class="scenario-step-footer scenario-step-footer-button" ng-click="addGalleryButton()"> <i class="material-icons">add</i> <span>Button</span> </div> </figure> <figure ng-if="step.properties.type == \'static\' && step.properties.elements[step.properties.current]"> <div class="scenario-step-attachment" ng-if="!step.properties.elements[step.properties.current].image" ngf-pattern="image/*" ngf-accept="\'image/*\'" ngf-select="addFile($file, true, \'image\', \'gallery\')"> <div> <i class="material-icons">image</i> <span> <span>Click to select preview image</span><br><span>from a computer</span> </span> </div> </div> <div class="imaged-container" ng-if="step.properties.elements[step.properties.current].image"> <img style="width: 100%" ng-src="{{step.properties.elements[step.properties.current].image}}" alt="" ngf-pattern="image/*" ngf-accept="\'image/*\'" ngf-select="addFile($file, true, \'image\', \'gallery\')"> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="display: flex; align-items: end; padding-top: 13px; padding-bottom: 12px"> <i class="material-icons">title</i> <resize-input2 style="flex-grow: 1" placeholder="Title" ng-blur="autosave()" max-width="300" ng-model="step.properties.elements[step.properties.current].title"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="display: flex; align-items: end; padding-top: 15px; padding-bottom: 10px"> <i class="material-icons">text_format</i> <resize-input2 style="flex-grow: 1" placeholder="Description" ng-blur="autosave()" multiline="true" max-width="300" ng-model="step.properties.elements[step.properties.current].text"> </resize-input2> </div> </div> <div class="scenario-step-row scenario-step-row-button" ng-repeat="button in step.properties.elements[step.properties.current].buttons" uib-dropdown auto-close="outsideClick"> <div class="scenario-step-column" style="display: flex; align-items: end" uib-dropdown-toggle> <i class="material-icons">format_bold</i> <span ng-if="button.title">{{button.title}}</span> <span ng-if="!button.title" class="button-placeholder">Not assigned button</span> </div> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'btn_\'+$index}}"> <div class="dropdown-container"> <div class="scenario-step-header"> <span>Button</span> <div class="scenario-actions"> <div class="btn-remove" ng-click="deleteGalleryButton($index)"> <i class="material-icons">delete</i> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Title" ng-blur="autosave()" max-width="300" ng-model="button.title"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="button.type" array="[{name: \'Suggestion\', value: \'suggest\'}, {name: \'Link\', value: \'link\'}]" opt-description="name" opt-value="value" is-model-init="true" is-back-placeholder="true" ng-change="updateGalleryButton($index)" placeholder=""> </custom-dropdown> </div> </div> <div ng-if="button.type == \'suggest\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Type here" ng-blur="autosave()" multiline="true" max-width="300" ng-model="button.content"> </resize-input2> </div> </div> <div ng-if="button.type == \'link\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Link" ng-blur="autosave()" max-width="300" ng-model="button.url"> </resize-input2> </div> </div> <div ng-if="button.type == \'link\'" class="scenario-step-footer"> <div ng-click="button.webview = !button.webview; autosave();"> <div class="switch {{button.webview?\'switch-on\':\'switch-off\'}}"></div> <span>Webview</span> </div> </div> </div> </div> </div> <div class="scenario-step-footer scenario-step-footer-button" ng-click="addGalleryButton()"> <i class="material-icons">add</i> <span>Button</span> </div> </figure>'),a.put("views/visual/collection.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span class="scenario-step-id prevent-drag" ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()"> {{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column half"> <custom-dropdown ng-model="step.properties.command" array="[{name : \'Find\', value : \'find\'}, {name : \'Insert\', value : \'insert\'}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="Command…" ng-change="collectionCommandsChange(step.properties.command)"> </custom-dropdown> </div> <div class="scenario-step-column half"> <resize-input2 ng-if="step.properties.command == \'find\'" ng-model="step.properties.offset" placeholder="With offset" max-width="300" ng-blur="autosave()"> </resize-input2> <resize-input2 ng-if="step.properties.command == \'insert\'" ng-model="step.properties.data" placeholder="Save as" max-width="300" ng-blur="autosave()"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column half"> <custom-dropdown ng-model="step.properties.collection" array="collections" opt-description="name" opt-value="value" is-model-init="true" placeholder="Collection…"> </custom-dropdown> </div> <div class="scenario-step-column half"> <custom-dropdown ng-model="step.properties.sort.field" array="collectionFieldsList[step.properties.collection]" opt-description="title" opt-value="name" is-model-init="true" placeholder="Fields…"> </custom-dropdown> </div> </div> <div class="scenario-step-row" ng-if="step.properties.command == \'find\'"> <div class="scenario-step-column half"> <custom-dropdown ng-model="step.properties.sort.direction" array="[{name : \'By ascending\', value : \'asc\'}
78, {name : \'By descending\', value : \'desc\'}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="Sort…"> </custom-dropdown> </div> <div class="scenario-step-column half"> <resize-input2 ng-model="step.properties.input" max-width="300" placeholder="Save as" ng-blur="autosave()"> </resize-input2> </div> </div> <div class="scenario-step-footer" ng-if="step.properties.command == \'find\'" style="padding: 0px 0 5px 0"> <div class="scenario-step-footer-group"> <div class="scenario-step-row" ng-repeat="item in step.properties.filters track by $index"> <div class="scenario-step-column"> <div style="display: inline-block; width: calc(50% - 21px)"> <custom-dropdown ng-model="item.field" array="collectionFieldsList[step.properties.collection]" opt-description="title" opt-value="name" is-model-init="true" placeholder="Fields…" ng-change="!item.field && !item.value && step.properties.filters.length > 1 && step.properties.filters.splice($index, 1)"> </custom-dropdown> </div> <div class="operators-dropdown dropdown"> <span class="operators-dropdown-current" id="{{step.id}}_condition_{{$index+1}}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> {{symbolCurrentCondition(item.condition)}} </span> <ul class="operators-dropdown-pop-up dropdown-menu" aria-labelledby="{{step.id}}_condition_{{$index+1}}" style="width: 224px"> <li class="operators-dropdown-item dropdown-item" ng-repeat="condition in conditionsFilter" ng-click="item.condition = condition.value"> <span class="item-icon">{{condition.symbol}}</span> <span class="item-value">{{condition.name}}</span> </li> </ul> </div> <div style="display: inline-block; width: calc(50% - 41px); padding-left: 10px"> <resize-input2 placeholder="Value" ng-blur="autosave()" ng-model="item.value" max-width="300" ng-keydown="($event.keyCode === 13) && !item.field && !item.value && step.properties.filters.length > 1 && step.properties.filters.splice($index, 1)"> </resize-input2> </div> </div> </div> <div class="scenario-step-footer-button" ng-click="step.properties.filters.push({field: \'\', condition: \'equal\', value: \'\'})"> <i class="material-icons">add</i> <span>Filter</span> </div> </div> </div>'),a.put("views/visual/condition.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px)"> <custom-dropdown ng-model="condition.preset" array="condition.presets" opt-description="name" is-model-init="true" is-back-placeholder="true" ng-change=" drawScenarioConnections(); applyConditionPreset(); validate(); autosave();" placeholder="Key…" require="true" error-require-text="\'All fields must be set.\'" error-msg="errorMsg[0]" set-error="setError();"> </custom-dropdown> </div> <div class="scenario-step-column" style="width: calc(50% - 4px)"> <custom-dropdown ng-model="step.properties.operator" array="condition.conditions" opt-description="value" opt-value="name" is-model-init="true" is-back-placeholder="true" ng-change="autosave();" placeholder="Operator…" require="true" error-require-text="\'All fields must be set.\'" error-msg="errorMsg[1]" set-error="setError();"> </custom-dropdown> </div> </div> <div ng-if="condition.preset.value == \'custom\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Key" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.value" require="true" error-require-text="\'All fields must be set.\'" error-msg="errorMsg[2]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Value" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.target.value" require="true" error-require-text="\'All fields must be set.\'" error-msg="errorMsg[4]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); flex-grow: 0; margin-left: auto"> <div class="scenario-actions"> <span>Matched</span> <div ng-if="!step.action.true" class="btn-connection-add"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, \'true\')" select-existing="selectExisting({action: \'true\', event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div ng-if="step.action.true" ng-click="deleteConnection({\'action\': \'true\'})" class="btn-connection-remove"> <i class="material-icons">
78remove_circle</i> </div> </div> <div class="scenario-actions"> <span>Not matched</span> <div ng-if="!step.action.false" class="btn-connection-add"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, \'false\')" select-existing="selectExisting({action: \'false\', event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div ng-if="step.action.false" ng-click="deleteConnection({\'action\': \'false\'})" class="btn-connection-remove"> <i class="material-icons">remove_circle</i> </div> </div> </div> </div>'),a.put("views/visual/customer.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span class="scenario-step-id prevent-drag" ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()"> {{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <custom-dropdown ng-model="step.properties.type" array="[{name: \'Register\', value: \'register\'}, {name: \'Authorization\', value: \'authorization\'}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="Select type…" is-back-placeholder="true" ng-change="autosave" icon="\'sentiment_satisfied\'" require="true" error-require-text="\'Type must be selected.\'" error-msg="errorMsg[0]" set-error="setError()"> </custom-dropdown> </div> </div>'),a.put("views/visual/data-drop.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Variable" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.drop[0]" require="true" error-require-text="\'Variable name cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong variable name.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div>'),a.put("views/visual/data-join.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Data from" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.join.value" require="true" error-require-text="\'Variable name cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong variable name.\'" error-msg="errorMsg[1]" set-error="setError();"> </resize-input2> </div> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Save as" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.join.array" require="true" error-require-text="\'Variable name cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong variable name.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Separator" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.join.separator"> </resize-input2> </div> </div>'),a.put("views/visual/data-pull.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Array" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.pull[0].array" require="true" error-require-text="\'Array name cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong array name.\'" error-msg="errorMsg[1]" set-error="setError();"> </resize-input2> </div> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Value" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.pull[0].value" require="true" error-require-text="\'Value cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong value name.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div>'), 79a.put("views/visual/data-push.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Array" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.push[0].array" require="true" error-require-text="\'Array name cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong array name.\'" error-msg="errorMsg[1]" set-error="setError();"> </resize-input2> </div> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Value" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.push[0].value" require="true" error-require-text="\'Value cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong value name.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div>'),a.put("views/visual/data-save.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Variable" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.save[0].key" require="true" error-require-text="\'Variable name cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong variable name.\'" error-msg="errorMsg[1]" set-error="setError();"> </resize-input2> </div> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Value" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.save[0].value" require="true" error-require-text="\'Value cannot be empty.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div>'),a.put("views/visual/data-set.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="From" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.set[0].from" require="true" error-require-text="\'\\\'From\\\' cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong \\\'From\\\' value.\'" error-msg="errorMsg[1]" set-error="setError();"> </resize-input2> </div> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="To" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.set[0].to" require="true" error-require-text="\'\\\'To\\\' cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong \\\'To\\\' value.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div>'),a.put("views/visual/data-split.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Data from" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.split.value" require="true" error-require-text="\'Variable name cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong variable name.\'" error-msg="errorMsg[1]" set-error="setError();"> </resize-input2> </div> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Save as" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.split.array" require="true" error-require-text="\'Variable name cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong variable name.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Separator" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.split.separator"> </resize-input2> </div> </div>');a.put("views/visual/data-stringify.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Data from" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.stringify.value" require="true" error-require-text="\'Variable name cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong variable name.\'" error-msg="errorMsg[2]" set-error="setError();"> </resize-input2> </div> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Save as" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.stringify.data" require="true" error-require-text="\'Variable name cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong variable name.\'" error-msg="errorMsg[1]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Template" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.stringify.template" require="true" error-require-text="\'Template cannot be empty.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div>'),a.put("views/visual/date.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span class="scenario-step-id prevent-drag" ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()"> {{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row" ng-hide="step.properties.hidden"> <div class="scenario-step-column half"> <resize-input2 placeholder="Date" multiline="false" max-width="300" ng-model="step.properties.input" ng-blur="autosave()"> </resize-input2> </div> <div class="scenario-step-column half"> <custom-dropdown placeholder="Action…" array="[{name: \'+\',value: \'+\'},{name: \'-\',value: \'-\'},{name: \'set\',value: \'set\'}]" opt-description="value" opt-value="name" is-model-init="true" is-back-placeholder="true" ng-model="step.properties.operator" ng-change="autosave()"> </custom-dropdown> </div> </div> <div class="scenario-step-row" ng-hide="step.properties.hidden"> <div class="scenario-step-column half"> <resize-input2 placeholder="Difference" multiline="false" max-width="300" ng-model="step.properties.date[step.properties.type]" ng-blur="autosave()"> </resize-input2> </div> <div class="scenario-step-column half"> <custom-dropdown placeholder="Type…" array="differentType" opt-description="value" opt-value="name" is-model-init="true" is-back-placeholder="true" ng-model="step.properties.type" ng-change="autosave()"> </custom-dropdown> </div> </div> <div class="scenario-step-row" ng-hide="step.properties.hidden"> <div class="scenario-step-column half"> <resize-input2 placeholder="Save as" multiline="false" max-width="300" ng-model="step.properties.save" ng-blur="autosave()" require="true" error-require-text="\'Variable name cannot be empty.\'" regexp="\'(user|scenario|system)\\\\.(.*)\'" error-regexp-
79text="\'Wrong variable name.\'" error-msg="errorMsg[1]" set-error="setError()"> </resize-input2> </div> <div class="scenario-step-column half"> <custom-dropdown placeholder="Output…" array="[\n'+" {name: 'timestamp',value: 'timestamp'},{name: 'date',value: 'date'},{name: 'calendar',value: 'calendar'},\n {name: 'ISOString',value: 'ISOString'},{name: 'object',value: 'object'},{name: 'format',value: 'format'}\n ]\" opt-description=\"value\" opt-value=\"name\" is-model-init=\"true\" is-back-placeholder=\"true\" ng-model=\"step.properties.output\" ng-change=\"autosave()\" require=\"true\" error-require-text=\"'Output must be set.'\" error-msg=\"errorMsg[0]\" set-error=\"setError()\"> </custom-dropdown> </div> </div>"),a.put("views/visual/decision.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column scenario-step-column-muted" style="width: 258px; padding-top: 27px; padding-bottom: 27px"> What does user replied? </div> <div class="scenario-step-column" style="width: 78px; padding: 0; background: none"> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 10px; padding-bottom: 8px"> <div class="scenario-actions"> <span>Yes</span> <div ng-if="!step.action.yes" class="btn-connection-add"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, \'yes\')" select-existing="selectExisting({action: \'yes\', event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div ng-if="step.action.yes" ng-click="deleteConnection({\'action\': \'yes\'})" class="btn-connection-remove"> <i class="material-icons">remove_circle</i> </div> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 10px; padding-bottom: 8px"> <div class="scenario-actions"> <span>No</span> <div ng-if="!step.action.no" class="btn-connection-add"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, \'no\')" select-existing="selectExisting({action: \'no\', event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div ng-if="step.action.no" ng-click="deleteConnection({\'action\': \'no\'})" class="btn-connection-remove"> <i class="material-icons">remove_circle</i> </div> </div> </div> </div> </div> </div>'),a.put("views/visual/delay.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 12px; padding-bottom: 11px"> <small>Waiting</small> <resize-input2 placeholder="0" ng-blur="delayToMicrosecond(); autosave();" multiline="false" ng-model="delay.convertedValue" class="delay-value" style="max-width: 152px"> </resize-input2> <custom-dropdown ng-model="step.properties.measure_unit" array="delay.measureUnits" opt-description="name" opt-value="value" is-model-init="true" is-back-placeholder="false" ng-change="delayToMicrosecond(); autosave();" class="delay-select"> </custom-dropdown> </div> </div> <div class="scenario-step-footer" ng-mousedown="$event.button === 0 && switchActionRequired()"> <div class="switch {{step.properties.action_required?\'switch-on\':\'switch-off\'}}"></div> <span>Userâs action required before delay</span> </div>'),a.put("views/visual/entity.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.properties.items[0].entity" array="allEntities" opt-description="name" opt-value="entity_id" is-model-init="true" is-disabled="allEntities.length == 0" placeholder="Entity…"> </custom-dropdown> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <resize-input2 ng-model="step.properties.items[0].save" ng-blur="autosave();" multiline="true" max-width="300" placeholder="Save to" is-required="true"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <resize-input2 ng-model="step.properties.items[0].title" ng-blur="autosave();" multiline="true" max-width="300" placeholder="With title" is-required="true"> </resize-input2> </div> </div> <div class="scenario-step-footer"> <span ng-mousedown="$event.button === 0 && (step.properties.items[0].multiple = !step.properties.items[0].multiple) ? autosave() : autosave()"> <div class="switch" ng-class="{\'switch-on\': step.properties.items[0].multiple, \'switch-off\': !step.properties.items[0].multiple}"></div> <span>Match multiple entities</span> </span> </div>'),a.put("views/visual/existence.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: 258px; padding-top: 15px; padding-bottom: 10px; display: flex; align-items: center"> <resize-input2 placeholder="Variable name" ng-blur="autosave()" multiline="false" max-width="220" ng-model="step.properties.params[0]" require="true" error-require-text="\'Variable name cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*((,\\\\s*)[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*)*$\'" error-regexp-text="\'Wrong variable name.\'" error-msg="errorMsg[0]" set-error="setError();" style="width: 100%"> </resize-input2> </div> <div class="scenario-step-column" style="width: 78px; padding: 0; background: none; display: flex; flex-direction: column"> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 10px; padding-bottom: 8px"> <div class="scenario-actions"> <span>Yes</span> <div ng-if="!step.action.exists" class="btn-connection-add"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, \'exists\')" select-existing="selectExisting({action: \'exists\', event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div ng-if="step.action.exists" ng-click="deleteConnection({\'action\': \'exists\'})" class="btn-connection-remove"> <i class="material-icons">
79remove_circle</i> </div> </div> </div> </div> <div class="scenario-step-row" style="flex-grow: 1"> <div class="scenario-step-column" style="padding-top: 10px; padding-bottom: 8px"> <div class="scenario-actions"> <span>No</span> <div ng-if="!step.action.nonexists" class="btn-connection-add"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, \'nonexists\')" select-existing="selectExisting({action: \'nonexists\', event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div ng-if="step.action.nonexists" ng-click="deleteConnection({\'action\': \'nonexists\'})" class="btn-connection-remove"> <i class="material-icons">remove_circle</i> </div> </div> </div> </div> </div> </div>'),a.put("views/visual/expression.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag"> {{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Expression" ng-blur="validate();autosave()" max-width="300" require="true" error-require-text="\'Variable name cannot be empty\'" error-msg="errorMsg[0]" set-error="setError()" ng-model="step.properties.expression"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <resize-input2 placeholder="Save to" ng-blur="validate();autosave()" max-width="300" require="true" error-require-text="\'Variable name cannot be empty\'" error-msg="errorMsg[1]" set-error="setError()" regexp="\'(user|scenario|system)\\\\.(.*)\'" ng-model="step.properties.save"> </resize-input2> </div> </div>'),a.put("views/visual/input-menu.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Question" ng-blur="autosave()" multiline="true" max-width="300" ng-model="step.properties.question"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column menu-trigger"> <div class="flex-row menu-trigger-steps" ng-repeat="replie in step.properties.quick_replies track by $index"> <div class="flex-row menu-trigger-step"> <span>{{$index + 1}}.</span> <resize-input2 id="step_menu_reply_{{replie.id}}" ng-model="replie.title" placeholder="Empty" max-width="300" ng-blur="changedReplieMenu(replie, $index)" ng-keyup="$event.keyCode == 13 && changedReplieMenu(replie, $index, $event)"> </resize-input2> </div> <div class="scenario-actions"> <div class="btn-connection-add" ng-if="!step.action[replie.id]"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, replie.id, true)" select-existing="selectExisting({action: replie.id, event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div class="btn-connection-remove" ng-if="step.action[replie.id]" ng-click="resetActionRepliesMenu(replie); deleteConnection({\'action\': replie.id})"> <i class="material-icons">
79remove_circle</i> </div> </div> <div class="step-conection" id="step_connection_{{replie.id}}_{{currentScenario.scenario_id}}_{{step.id}}"> </div> <div class="step-jumpers-out" style="right: -36px" ng-if="jumpersOut[replie.id]"> <div class="step-jumper step-jumper-trigger" id="step_jumper_{{replie.id}}_{{currentScenario.scenario_id}}_{{step.id}}" ng-click="centerStep({step: jumpersOut[replie.id]})"> <i class="material-icons">{{getJumperArrow(step, jumpersOut[replie.id])}}</i> </div> </div> <div class="horizont-line" ng-if="!$last"></div> </div> </div> </div> <div class="scenario-step-footer"> <span class="scenario-step-footer-button" ng-click="addRepliesMenu()"> <i class="material-icons">add</i> <span>Option</span> </span> </div>'),a.put("views/visual/input.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div style="padding: 0 0 5px 0" class="scenario-step-footer"> <div class="scenario-step-footer-group"> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px;padding-bottom: 10px"> <resize-input2 placeholder="Save reply as" ng-blur="validate(); autosave();" multiline="false" max-width="300" ng-model="step.properties.save" require="!step.properties.question" error-require-text="\'Save reply or question must be set.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong variable name.\'" error-msg="errorMsg[1]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-footer" style="display: flex"> <div ng-mousedown="$event.button === 0 && switchIsLeadData()"> <div class="switch {{step.properties.is_lead_data?\'switch-on\':\'switch-off\'}}"></div> <span>Collect lead data</span> </div> <div style="margin-left: 10px" ng-if="show_close_lead" ng-mousedown="$event.button === 0 && switchCloseLead()"> <div class="switch {{(step.properties.close_lead)?\'switch-on\':\'switch-off\'}}"></div> <span>Close lead</span> </div> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px;padding-bottom: 10px"> <resize-input2 ng-model="step.properties.question" ng-change="updateInputView()" ng-blur="validate(); autosave();" multiline="true" max-width="300" placeholder="Your question (optional)" require="!step.properties.save" error-require-text="\'Save reply or question must be set.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.properties.reply_type" array="replyTypes" opt-description="name" opt-value="value" is-model-init="true" placeholder="Reply type…" is-back-placeholder="true" ng-change="drawScenarioConnections(); autosave();"> </custom-dropdown> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px;padding-bottom: 10px"> <resize-input2 ng-model="step.properties.retry_message" ng-blur="autosave();" multiline="true" max-width="300" placeholder="Error message"> </resize-input2> </div> </div> <div ng-if="step.properties.question && (step.properties.reply_type == \'text\' || step.properties.reply_type == \'quick_reply\')" ng-repeat="button in step.properties.buttons" class="scenario-step-row scenario-step-row-button" uib-dropdown auto-close="outsideClick"> <div class="scenario-step-column" style="text-align: center" uib-dropdown-toggle> <span ng-if="button.title">{{button.title}}</span> <span ng-if="!button.title" class="button-placeholder">Not assigned button</span> </div> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'btn_\'+$index}}"> <div class="dropdown-container"> <div class="scenario-step-header"> <span>Button</span> <div class="scenario-actions"> <div class="btn-remove" ng-click="deleteTextButton($index)"> <i class="material-icons">delete</i> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Title" ng-blur="autosave()" max-width="300" ng-model="button.title"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="button.type" array="[{name: \'Suggestion\', value: \'suggest\'}, {name: \'Link\', value: \'link\'}]" opt-description="name" opt-value="value" is-model-init="true" is-back-placeholder="true" ng-change="updateTextButton($index)" placeholder=""> </custom-dropdown> </div> </div> <div ng-if="button.type == \'suggest\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Type here" ng-blur="autosave()" multiline="true" max-width="300" ng-model="button.content.value"> </resize-input2> </div> </div> <div ng-if="button.type == \'link\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Link" ng-blur="autosave()" max-width="300" ng-model="button.url"> </resize-input2> </div> </div> <div ng-if="button.type == \'link\'" class="scenario-step-footer"> <div ng-click="button.webview = !button.webview; autosave();"> <div class="switch {{button.webview?\'switch-on\':\'switch-off\'}}"></div> <span>Webview</span> </div> </div> </div> </div> </div> <div ng-if="step.properties.question && (step.properties.reply_type == \'text\' || step.properties.reply_type == \'quick_reply\')" class="scenario-step-footer scenario-step-footer-button" ng-click="addButton()"> <i class="material-icons">add</i> <span>Button</span> </div>'),a.put("views/visual/intent.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <resize-input2 placeholder="Min confidence (0 - 100)" ng-blur="autosave()" ng-model="step.properties.min_confidence" max-width="300" type="percent" is-percent="true"> </resize-input2> </div> </div> <div class="scenario-step-footer"> <span ng-mousedown="$event.button === 0 && (step.properties.allow_best_reply = !step.properties.allow_best_reply
79) ? autosave() : autosave()"> <div class="switch" ng-class="{\'switch-on\': step.properties.allow_best_reply, \'switch-off\': !step.properties.allow_best_reply}"></div> <span>Allow best reply</span> </span> </div>'),a.put("views/visual/label-check.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span class="scenario-step-id prevent-drag" ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()"> {{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding: 13px 14px 12px"> <h3>Exclude</h3> <label-input placeholder="Select label" label-id="1" max-width="true" additional-labels="step.properties.include" all-labels="allLabels" ng-model="step.properties.exclude" ng-blur="drawScenarioConnections();autosave();" ng-change="drawScenarioConnections();autosave();"> </label-input> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding: 13px 14px 12px"> <h3>Include</h3> <label-input placeholder="Select label" label-id="2" max-width="true" additional-labels="step.properties.exclude" all-labels="allLabels" ng-model="step.properties.include" ng-blur="drawScenarioConnections();autosave();" ng-change="drawScenarioConnections();autosave();"> </label-input> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); flex-grow: 0; margin-left: auto"> <div class="scenario-actions"> <span>Not matched</span> <div ng-if="!step.action.fallback" class="btn-connection-add"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, \'fallback\')" select-existing="selectExisting({action: \'fallback\', event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div ng-if="step.action.fallback" ng-click="deleteConnection({\'action\': \'fallback\'})" class="btn-connection-remove"> <i class="material-icons">remove_circle</i> </div> </div> </div> </div>'), 80a.put("views/visual/label-edit.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span class="scenario-step-id prevent-drag" ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()"> {{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding: 13px 14px 12px"> <h3>Add</h3> <label-input placeholder="Select label" label-id="1" max-width="true" additional-labels="step.properties.remove" all-labels="allLabels" ng-model="step.properties.add" ng-blur="drawScenarioConnections();autosave();" ng-change="drawScenarioConnections();autosave();"> </label-input> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding: 13px 14px 12px"> <h3>Remove</h3> <label-input placeholder="Select label" label-id="2" max-width="true" additional-labels="step.properties.add" all-labels="allLabels" ng-model="step.properties.remove" ng-blur="drawScenarioConnections();autosave();" ng-change="drawScenarioConnections();autosave();"> </label-input> </div> </div>'),a.put("views/visual/mail.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Receiver" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.email" require="true" error-require-text="\'Receiver cannot be empty.\'" regexp="\'^([\\\\w{}]+(\\\\.[\\\\w{}]+)*@[\\\\w{}]+(\\\\.[\\\\w{}]+)+((,\\\\s*)[\\\\w{}]+(\\\\.[\\\\w{}]+)*@[\\\\w{}]+(\\\\.[\\\\w{}]+)+)*)|(\\{\\{\\\\w+(\\\\.\\\\w+)*\\}\\})$\'" error-regexp-text="\'Wrong receiver address.\'" error-msg="errorMsg[1]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.properties.name" array="allMails" opt-description="title" opt-value="name" is-model-init="true" placeholder="Select template…" is-back-placeholder="true" ng-change="setMailVariables(); autosave();" require="true" error-require-text="\'Template cannot be empty.\'" error-msg="errorMsg[0]" set-error="setError();"> </custom-dropdown> </div> </div> <div ng-if="getMailVariables()" class="scenario-step-row" style="flex-wrap: wrap; padding-bottom: 0"> <div ng-repeat="v in getMailVariables()" class="scenario-step-column" style="flex-grow: 0; flex-shrink: 0; width: calc(50% - 4px); margin-bottom: 4px; padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="{{v}}" ng-blur="autosave();" multiline="false" max-width="132" ng-model="step.properties.scope[v]"> </resize-input2> </div> </div>'),a.put("views/visual/mode.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.properties.operator" array="operators" opt-description="name" opt-value="value" is-model-init="true" is-back-placeholder="true" ng-change="autosave()" placeholder="Select operator…"> </custom-dropdown> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Optional message" ng-blur="autosave()" multiline="true" max-width="300" ng-model="step.properties.reply"> </resize-input2> </div> </div>'),a.put("views/visual/noreply.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 12px; padding-bottom: 11px"> <small>Within</small> <resize-input2 placeholder="0" ng-blur="delayToMicrosecond(); autosave();" multiline="false" ng-model="delay.convertedValue" class="delay-value" style="max-width: 152px"> </resize-input2> <custom-dropdown ng-model="step.properties.measure_unit" array="delay.measureUnits" opt-description="name" opt-value="value" is-model-init="true" is-back-placeholder="false" ng-change="delayToMicrosecond(); autosave();" class="delay-select"> </custom-dropdown> </div> </div>'),a.put("views/visual/notification.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px)"> <custom-dropdown ng-model="step.properties.type" array="[{name:\'Push\', value: \'push\'}, {name:\'Email\', value: \'email\'}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="Select type…" is-back-placeholder="true" ng-change="updateNotificationType()" require="true" error-require-text="\'Type cannot be empty.\'" error-msg="errorMsg[4]" set-error="setError();"> </custom-dropdown> </div> <div ng-if="step.properties.type == \'push\'" class="scenario-step-column" style="width: calc(50% - 4px)"> <custom-dropdown ng-model="step.properties.user" array="operators" opt-description="name" opt-value="value" is-model-init="true" placeholder="Select operator…" is-back-placeholder="true" ng-change="autosave()" require="true" error-require-text="\'Operator cannot be empty.\'" error-msg="errorMsg[3]" set-error="setError();"> </custom-dropdown> </div> <div ng-if="step.properties.type == \'email\'" class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 13px"> <resize-input2 placeholder="Email address" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.email" require="step.properties.type == \'email\'" error-require-text="\'Email address must be set.\'" regexp="\'^[\\\\w{}]+(\\\\.[\\\\w{}]+)*@[\\\\w{}]+(\\\\.[\\\\w{}]+)+((,\\\\s*)[\\\\w{}]+(\\\\.[\\\\w{}]+)*@[\\\\w{}]+(\\\\.[\\\\w{}]+)+)*$\'" error-regexp-text="\'Wrong email address.\'" error-msg="errorMsg[2]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Title" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.title" require="true" error-require-text="\'Title c
80annot be empty.\'" error-msg="errorMsg[1]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Message" ng-blur="autosave()" multiline="true" max-width="300" ng-model="step.properties.message" require="true" error-require-text="\'Message cannot be empty.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div>'),a.put("views/visual/offer.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.properties.product_id" array="allProducts" opt-description="name" opt-value="id" opt-items="items" has-categories="true" is-model-init="true" placeholder="Select product…" is-back-placeholder="true" ng-change="autosaveProducts()" icon="\'shopping_cart\'" require="true" error-require-text="\'Product must be selected.\'" error-msg="errorMsg[0]" set-error="setError();"> </custom-dropdown> </div> </div>'),a.put("views/visual/output.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <resize-input2 placeholder="Template text" max-width="300" multiline="true" ng-model="step.properties.template" ng-blur="autosave();validate()" require="true" error-require-text="\'Template text cannot be empty\'" error-msg="errorMsg[0]" set-error="setError()"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <resize-input2 placeholder="Save as" max-width="300" ng-model="step.properties.data" ng-blur="autosave();validate()" require="true" error-require-text="\'Variable name cannot be empty\'" error-msg="errorMsg[1]" set-error="setError()" regexp="\'(user|scenario|system)\\\\.(.*)\'"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown placeholder="With type…" array="types" opt-description="name" opt-value="value" is-model-init="true" ng-model="step.properties.type" ng-change="autosave();validate()" require="true" error-require-text="\'Variable name cannot be empty\'" error-msg="errorMsg[2]" set-error="setError()"> </custom-dropdown> </div> </div>'),a.put("views/visual/pattern.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <resize-input2 placeholder="REGEX" ng-blur="autosave()" max-width="300" ng-model="step.properties.regex" require="true" error-require-text="\'REGEX cannot be empty\'" error-msg="errorMsg[0]" set-error="setError()"> </resize-input2> </div> </div> <div class="scenario-step-row" ng-repeat="save in step.properties.save track by $index"> <div class="scenario-step-column"> <resize-input2 placeholder="Save as" ng-blur="autosave()" max-width="300" ng-model="step.properties.save[$index]" ng-keyup="$event.keyCode == 13 && step.properties.save.length > 1 && step.properties.save.splice($index, 1)" require="true" error-require-text="\'Variable name cannot be empty\'" regexp="\'(user|scenario|system)\\\\.(.*)\'" error-regexp-text="\'Wrong variable name\'" error-msg="errorMsg[1]" set-error="setError()"> </resize-input2> </div> </div> <div class="scenario-step-footer"> <span class="scenario-step-footer-button" ng-click="step.properties.save.push(\'\')"> <i class="material-icons">add</i> <span>Variable</span> </span> </div>'),a.put("views/visual/person.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.properties.command" array="[{name:\'Find\',value:\'find\'}, {name:\'Update\',value:\'update\'}, {name:\'Create\',value:\'create\'}, {name:\'Delete\',value:\'delete\'}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="Action…" is-back-placeholder="true" ng-change="updatePersonCommand()" require="true" error-require-text="\'Action cannot be empty.\'" error-msg="errorMsg[4]" set-error="setError();"> </custom-dropdown> </div> </div> <div class="scenario-step-row" ng-if="step.properties.command == \'delete\'"> <div class="scenario-step-column"> <resize-input2 placeholder="Person" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.person" require="step.properties.command == \'delete\'" error-require-text="\'Person cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong person name.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row" ng-if="step.properties.command != \'delete\'"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 13px"> <resize-input2 placeholder="Attribute" ng-blur="validate(); autosave();" multiline="false" max-width="300" ng-model="step.properties.profile" require="!step.properties.attributes" error-require-text="\'Attribute or new value must be set.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong attribute.\'" error-msg="errorMsg[3]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row" ng-if="step.properties.command != \'delete\'"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="New value" ng-blur="validate(); autosave();" multiline="false" max-width="300" ng-model="step.properties.attributes" require="!step.properties.profile" error-require-text="\'Attribute or new value must be set.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong new value.\'" error-msg="errorMsg[2]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row" ng-if="step.properties.command != \'delete\'"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Result" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.result" require="true" error-require-text="\'Result cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong result name.\'" error-msg="errorMsg[1]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row" ng-if="step.properties.command == \'update\' && !step.properties.self"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Person" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.person" require="step.properties.command == \'update\' && !step.properties.self" error-require-text="\'Person cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong person name.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-footer" ng-if="step.properties.command == \'update\'"> <div ng-mousedown="$event.button === 0 && switchSelf()"> <div class="switch {{step.properties.self?\'switch-on\':\'switch-off\'}}"></div> <span>Apply to the current client</span> </div> </div>'),a.put("views/visual/pro.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div class="btn-connector" ng-class="hasConnections() ? \'btn-connector-connection\' : \'\'"></div> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row" ng-click="showPro()"> <div class="scenario-step-column"> <i class="material-icons">{{stepComponent.icon}}</i> </div> <div class="scenario-step-column"> <p>{{step.name}}</p> <p> <small>Click to edit in PRO mode</small> </p> </div> </div>'),a.put("views/visual/product.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px)"> <custom-dropdown ng-model="step.properties.category" array="allCategories" opt-description="name" opt-value="value" is-model-init="true" placeholder="Category…" is-back-placeholder="true" ng-change="autosave()"> </custom-dropdown> </div> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px; padding-bottom: 13px"> <resize-input2 placeholder="Offset" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.offset"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px)"> <custom-dropdown ng-model="step.properties.sort.field" array="[{name: \'title\', value: \'title\'}, {name: \'description\', value: \'description\'}, {name: \'price\', value: \'price\'}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="Sort by…" is-back-placeholder="true" ng-change="autosave()"> </custom-dropdown> </div> <div class="scenario-step-column" style="width: calc(50% - 4px)"> <custom-dropdown ng-model="step.properties.sort.direction" array="[{name: \'desc\', value: \'desc\'}, {name: \'asc\', value: \'asc\'}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="Direction…" is-back-placeholder="true" ng-change="autosave()"> </custom-dropdown> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px;padding-bottom: 10px"> <resize-input2 placeholder="Filter by" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.filter" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong variable name.\'" error-msg="errorMsg[1]" set-error="setError();"> </resize-input2> </div> <div class="scenario-step-column" style="width: calc(50% - 4px); padding-top: 15px;padding-bottom: 10px"> <resize-input2 placeholder="Save to" ng-blur="autosave()" multiline="false" max-width="132" ng-model="step.properties.input" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong variable name.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div>'),a.put("views/visual/rest-promo.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span class="scenario-step-id prevent-drag" ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <resize-input2 placeholder="Your myshopify account name" max-width="300" ng-model="step.properties.name" ng-blur="autosave()"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column half"> <resize-input2 placeholder="Code" max-width="300" ng-model="step.properties.code" ng-blur="autosave()"> </resize-input2> </div> <div class="scenario-step-column half"> <resize-input2 placeholder="Discount (%)" max-width="300" ng-model="step.properties.discount" ng-blur="autosave()"> </resize-input2> </div> </div> <div class="scenario-step-footer"> <span ng-mousedown="$event.button === 0 && (step.properties.personalized = !step.properties.personalized) ? autosave() : autosave()"> <div class="switch" ng-class="{\'switch-on\': step.properties.personalized, \'switch-off\': !step.properties.personalized}"></div> <span>Use personalized promo codes </span> </span> </div>'), 81a.put("views/visual/rest.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-block"> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: 190px; padding-top: 15px; padding-bottom: 13px"> <resize-input2 ng-model="step.properties.url" ng-blur="validate(); autosave();" multiline="false" max-width="190" placeholder="Request URL"> </resize-input2> </div> <div class="scenario-step-column" style="width: 126px"> <custom-dropdown ng-model="step.properties.method" array="[{name:\'GET\',value:\'GET\'}, {name:\'POST\',value:\'POST\'}, {name:\'PUT\',value:\'PUT\'}, {name:\'PATCH\',value:\'PATCH\'}, {name:\'DELETE\',value:\'DELETE\'}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="" is-back-placeholder="true" ng-change="validate(); autosave();"> </custom-dropdown> </div> </div> </div> <div class="scenario-step-block"> <div class="scenario-step-header"> Headers </div> <div ng-repeat="(key, val) in step.properties.headers" class="scenario-step-row"> <div class="scenario-step-column" style="width: 136px; padding-top: 15px; padding-bottom: 10px"> <resize-input2 ng-model="key" ng-blur="validate(); autosave();" multiline="false" max-width="102" placeholder="Key"> </resize-input2> </div> <div class="scenario-step-column" style="width: 136px; padding-top: 15px; padding-bottom: 10px"> <resize-input2 ng-model="step.properties.headers[key]" ng-blur="validate(); autosave();" multiline="false" max-width="102" placeholder="Value"> </resize-input2> </div> <div class="scenario-step-column" style="width: 44px; background: none"> <div class="scenario-actions" style="margin-right: -2px !important"> <div class="btn-remove" ng-click="deleteRestHeader(key)"> <i class="material-icons">cancel</i> </div> </div> </div> </div> <div class="scen
81ario-step-footer scenario-step-footer-button" ng-click="addRestHeader($index)"> <i class="material-icons">add</i> <span>Header</span> </div> </div> <div class="scenario-step-block"> <div class="scenario-step-header"> Auth </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.properties.authorization.type" array="[{name:\'Basic\',value:\'Basic\'}, {name:\'Didgest\',value:\'Didgest\'}, {name:\'Bearer\',value:\'Bearer\'}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="Auth type…" is-back-placeholder="true" ng-change="updateRestAuthType();"> </custom-dropdown> </div> </div> <div ng-if="step.properties.authorization.type == \'Basic\' || step.properties.authorization.type == \'Didgest\'" class="scenario-step-row"> <div class="scenario-step-column half" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="User" ng-blur="validate(); autosave();" multiline="false" max-width="132" ng-model="step.properties.authorization.data.user"> </resize-input2> </div> <div class="scenario-step-column half" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Password" ng-blur="validate(); autosave();" multiline="false" max-width="132" ng-model="step.properties.authorization.data.password"> </resize-input2> </div> </div> <div ng-if="step.properties.authorization.type == \'Bearer\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Storage" ng-blur="validate(); autosave();" multiline="false" max-width="300" ng-model="step.properties.authorization.data"> </resize-input2> </div> </div> </div> <div class="scenario-step-block"> <div class="scenario-step-header"> Content </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: 190px"> <custom-dropdown ng-model="type" array="[{name:\'Object\',value:\'object\'}, {name:\'Json string\',value:\'json\'}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="" is-back-placeholder="true" ng-change="drawScenarioConnections()"> </custom-dropdown> </div> <div class="scenario-step-column" style="width: 126px"> <custom-dropdown ng-model="step.properties.content" array="[{name:\'Form\',value:\'form\'}, {name:\'Raw\',value:\'raw\'}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="" is-back-placeholder="true" ng-change="validate(); autosave();"> </custom-dropdown> </div> </div> <div ng-if="type == \'json\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Raw request body" ng-blur="validate(); autosave();" multiline="false" max-width="300" ng-model="step.properties.raw.body"> </resize-input2> </div> </div> </div> <div ng-if="type == \'object\'" class="scenario-step-block"> <div class="scenario-step-header"> Static properties </div> <div ng-repeat="(key, data) in step.properties.data track by $index" ng-if="data.type == \'static\'" class="scenario-step-row"> <div class="scenario-step-column" style="width: 136px; padding-top: 15px; padding-bottom: 10px"> <resize-input2 ng-model="data.key" ng-blur="validate(); autosave();" multiline="false" max-width="102" placeholder="Key"> </resize-input2> </div> <div class="scenario-step-column" style="width: 136px; padding-top: 15px; padding-bottom: 10px"> <resize-input2 ng-model="data.value" ng-blur="validate(); autosave();" multiline="false" max-width="102" placeholder="Value"> </resize-input2> </div> <div class="scenario-step-column" style="width: 44px; background: none"> <div class="scenario-actions" style="margin-right: -2px !important"> <div class="btn-remove" ng-click="spliceArrProp(step.properties.data, $index)"> <i class="material-icons">cancel</i> </div> </div> </div> </div> <div class="scenario-step-footer scenario-step-footer-button" ng-click="addRestStaticProp($index)"> <i class="material-icons">add</i> <span>Static</span> </div> </div> <div ng-if="type == \'object\'" class="scenario-step-block"> <div class="scenario-step-header"> Storage properties </div> <div ng-repeat="(key, data) in step.properties.data track by $index" ng-if="data.type == \'variable\'" class="scenario-step-row"> <div class="scenario-step-column" style="width: 136px; padding-top: 15px; padding-bottom: 10px"> <resize-input2 ng-model="data.key" ng-blur="validate(); autosave();" multiline="false" max-width="102" placeholder="Key"> </resize-input2> </div> <div class="scenario-step-column" style="width: 136px; padding-top: 15px; padding-bottom: 10px"> <resize-input2 ng-model="data.param" ng-blur="validate(); autosave();" multiline="false" max-width="102" placeholder="Property"> </resize-input2> </div> <div class="scenario-step-column" style="width: 44px; background: none"> <div class="scenario-actions" style="margin-right: -2px !important"> <div class="btn-remove" ng-click="spliceArrProp(step.properties.data, $index)"> <i class="material-icons">cancel</i> </div> </div> </div> </div> <div class="scenario-step-footer scenario-step-footer-button" ng-click="addRestVariableProp($index)"> <i class="material-icons">add</i> <span>Storage</span> </div> </div> <div class="scenario-step-block"> <div class="scenario-step-header"> Save as </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.save_type" array="[{name:\'Whole body to one variable\',value:\'input\'}, {name:\'Selected response fields in the corresponding variables\',value:\'save\'}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="" is-back-placeholder="true" ng-change="validate(); autosave();"> </custom-dropdown> </div> </div> <div ng-if="step.save_type != \'save\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Key" ng-blur="validate(); autosave();" multiline="false" max-width="300" ng-model="step.properties.input"> </resize-input2> </div> </div> <div ng-if="step.save_type == \'save\'" ng-repeat="data in step.properties.save track by $index" class="scenario-step-row"> <div class="scenario-step-column" style="width: 136px; padding-top: 15px; padding-bottom: 10px"> <resize-input2 ng-model="step.properties.save[$index].key" ng-blur="validate(); autosave();" multiline="false" max-width="102" placeholder="Key"> </resize-input2> </div> <div class="scenario-step-column" style="width: 136px; padding-top: 15px; padding-bottom: 10px"> <resize-input2 ng-model="step.properties.save[$index].param" ng-blur="validate(); autosave();" multiline="false" max-width="102" placeholder="Property"> </resize-input2> </div> <div class="scenario-step-column" style="width: 44px; background: none"> <div class="scenario-actions" style="margin-right: -2px !important"> <div class="btn-remove" ng-click="spliceArrProp(step.properties.save, $index)"> <i class="material-icons">cancel</i> </div> </div> </div> </div> <div ng-if="step.save_type == \'save\'" class="scenario-step-footer scenario-step-footer-button" ng-click="addRestSaveType($index)"> <i class="material-icons">add</i> <span>Add more</span> </div> </div> <div class="scenario-step-block"> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); flex-grow: 0; margin-left: auto"> <div class="scenario-actions" style="margin-right: -2px !important"> <span>Success</span> <div ng-if="!step.action.success" class="btn-connection-add"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, \'success\')" select-existing="selectExisting({action: \'success\', event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div ng-if="step.action.success" ng-click="deleteConnection({\'action\': \'success\'})" class="btn-connection-remove"> <i class="material-icons">
81remove_circle</i> </div> </div> <div class="scenario-actions" style="margin-right: -2px !important"> <span>Fail</span> <div ng-if="!step.action.fail" class="btn-connection-add"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, \'fail\')" select-existing="selectExisting({action: \'fail\', event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div ng-if="step.action.fail" ng-click="deleteConnection({\'action\': \'fail\'})" class="btn-connection-remove"> <i class="material-icons">remove_circle</i> </div> </div> </div> </div> </div>'),a.put("views/visual/scenario.html",'<div class="scenario-step-header"> <span class="scenario-step-name">Switch scenario</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.properties.scenario" array="scenariousWithoutCurrent" opt-description="name" opt-value="scenario_id" is-model-init="true" placeholder="Select scenario…" is-back-placeholder="true" ng-change="setScenario()" require="true" error-require-text="\'Scenario must be selected.\'" error-msg="errorMsg[0]" set-error="setError();"> </custom-dropdown> </div> </div> <div ng-if="!step.action.next" class="scenario-step-row"> <div class="scenario-step-column" style="padding: 13px 16px 12px 16px"> <resize-input2 ng-model="step.properties.step" ng-blur="setScenario();" multiline="false" max-width="300" placeholder="Step ID (optional)" is-required="false"> </resize-input2> </div> </div>'),a.put("views/visual/schedule.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 12px; padding-bottom: 11px"> <small>Start at least</small> <resize-input2 placeholder="0" ng-blur="delayToMinutes(); autosave();" multiline="false" ng-model="delay.convertedValue" class="delay-value" style="max-width: 107px"> </resize-input2> <custom-dropdown ng-model="step.properties.measure_unit" array="schedule.measureUnits" opt-description="name" opt-value="value" is-model-init="true" is-back-placeholder="false" ng-change="delayToMinutes(); autosave();" class="delay-select"> </custom-dropdown> <small>after the last client\'s message</small> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <h3>On a specific time</h3> <custom-dropdown ng-model="schedule.time" array="schedule.timeValues" opt-description="name" opt-value="value" is-model-init="true" is-back-placeholder="false" ng-change="switchScheduleTime(); autosave();" class="delay-select" style="margin-top: 2px; margin-bottom: 1px"> </custom-dropdown> <resize-input2 ng-if="schedule.time == \'between\'" placeholder="00:00" ng-blur="updateScheduleTimeFrom(); autosave();" multiline="false" ng-model="schedule.timeFrom" class="delay-value" style="max-width: 84px"> </resize-input2> <small ng-if="schedule.time == \'between\'">and</small> <resize-input2 ng-if="schedule.time == \'between\'" placeholder="00:00" ng-blur="updateScheduleTimeTo(); autosave();" multiline="false" ng-model="schedule.timeTo" class="delay-value" style="max-width: 84px"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <h3>In a specific days</h3> <span ng-click="switchScheduleDay(1); autosave();" class="delay-day" ng-class="{\'delay-day-selected\': isScheduleDaySelected(1)}">Mon</span> <span ng-click="switchScheduleDay(2); autosave();" class="delay-day" ng-class="{\'delay-day-selected\': isScheduleDaySelected(2)}">Tue</span> <span ng-click="switchScheduleDay(3); autosave();" class="delay-day" ng-class="{\'delay-day-selected\': isScheduleDaySelected(3)}">Wed</span> <span ng-click="switchScheduleDay(4); autosave();" class="delay-day" ng-class="{\'delay-day-selected\': isScheduleDaySelected(4)}">Thu</span> <span ng-click="switchScheduleDay(5); autosave();" class="delay-day" ng-class="{\'delay-day-selected\': isScheduleDaySelected(5)}">Fri</span> <span ng-click="switchScheduleDay(6); autosave();" class="delay-day" ng-class="{\'delay-day-selected\': isScheduleDaySelected(6)}">Sat</span> <span ng-click="switchScheduleDay(0); autosave();" class="delay-day" ng-class="{\'delay-day-selected\': isScheduleDaySelected(0)}">Sun</span> </div> </div> <div class="scenario-step-footer" style="height: 50px"> <div class="scenario-actions" style="right: 11px"> <span>Async event</span> <div ng-if="!step.action.delayed" class="btn-connection-add"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, \'delayed\')" select-existing="selectExisting({action: \'delayed\', event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div ng-if="step.action.delayed" ng-click="deleteConnection({\'action\': \'delayed\'})" class="btn-connection-remove"> <i class="material-icons">
81remove_circle</i> </div> </div> </div>'),a.put("views/visual/service-ethereum.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span class="scenario-step-id prevent-drag" ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()"> {{step.id}} </span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.properties.method" array="service.methods" opt-description="name" opt-value="value" is-model-init="true" placeholder="Select method…" is-back-placeholder="true" ng-change="changeServiceMethod()" require="true" error-require-text="\'Method must be selected.\'" error-msg="errorMsg[5]" set-error="setError();"> </custom-dropdown> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Address var" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.data.address.value" require="true" error-require-text="\'Address var cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong address var.\'" error-msg="errorMsg[4]" set-error="setError();"> </resize-input2> </div> </div> <div ng-if="step.properties.method == \'CheckSignature\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Signature var" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.data.signature.value" require="true" error-require-text="\'Signature var cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong signature var.\'" error-msg="errorMsg[3]" set-error="setError();"> </resize-input2> </div> </div> <div ng-if="step.properties.method == \'CheckSignature\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Nonce var" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.data.nonce.value" require="true" error-require-text="\'Nonce var cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong nonce var.\'" error-msg="errorMsg[2]" set-error="setError();"> </resize-input2> </div> </div> <div ng-if="step.properties.method == \'CheckSignature\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Message" ng-blur="autosave()" multiline="true" max-width="300" ng-model="step.properties.data.message.value" require="true" error-require-text="\'Message cannot be empty.\'" error-msg="errorMsg[1]" set-error="setError()"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Save var" ng-blur="autosave()" multiline="false" max-width="300" ng-model="step.properties.save" require="true" error-require-text="\'Save var cannot be empty.\'" regexp="\'^[a-zA-Z_{}][\\\\w{}]*(\\\\.[\\\\w{}]+)*$\'" error-regexp-text="\'Wrong save var.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div>'),a.put("views/visual/subscription.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Reply" ng-blur="autosave()" multiline="true" max-width="300" ng-model="step.properties.reply" require="true" error-require-text="\'Reply cannot be empty.\'" error-msg="errorMsg[3]" set-error="setError();"> </resize-input2> </div> </div> <div ng-if="!step.properties.autoposting" class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.properties.command" array="subscriptionCommands" opt-description="name" opt-value="value" is-model-init="true" placeholder="Command…" is-back-placeholder="true" ng-change="autosave()" require="true" error-require-text="\'Command cannot be empty.\'" error-msg="errorMsg[2]" set-error="setError();"> </custom-dropdown> </div> </div> <div ng-if="step.properties.autoposting" class="scenario-step-row"> <div style="width: calc(50% - 4px)" class="scenario-step-column"> <custom-dropdown ng-model="step.properties.command" array="subscriptionCommands" opt-description="name" opt-value="value" is-model-init="true" placeholder="Command…" is-back-placeholder="true" ng-change="autosave()" require="true" error-require-text="\'Command cannot be empty.\'" error-msg="errorMsg[2]" set-error="setError();"> </custom-dropdown> </div> <div style="width: calc(50% - 4px)" class="scenario-step-column"> <custom-dropdown ng-model="step.properties.autoposting.command" array="autopostingCommands" opt-description="name" opt-value="value" is-model-init="true" placeholder="" is-back-placeholder="true" ng-change="autosave()"> </custom-dropdown> </div> </div> <div ng-if="step.properties.autoposting" class="scenario-step-row"> <div class="scenario-step-column" style="padding: 13px 14px 12px"> <h3>Collections</h3> <collection-input placeholder="Add more" max-width="true" all-collections="collections" ng-model="step.properties.autoposting.collections" ng-blur="drawScenarioConnections(); autosave();"> </collection-input> </div> </div> <div class="scenario-step-footer" ng-mousedown="$event.button === 0 && switchSubscriptionAutoposting()"> <div class="switch {{step.properties.autoposting?\'switch-on\':\'switch-off\'}}"></div> <span>Automatically send new content</span> </div>'),a.put("views/visual/switch-platform.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row" ng-repeat="item in step.properties.switch track by $index"> <div class="scenario-step-column"> <custom-dropdown ng-model="step.properties.switch[$index].name" array="[{name: item.name, value: item.name}]" opt-description="name" opt-value="value" is-model-init="true" placeholder="Add platform…" is-back-placeholder="true" ng-change="changePlatform($index)"> </custom-dropdown> </div> <div class="column-connection"> <div class="btn-connection-add" ng-if="!step.action[step.properties.switch[$index].name]" ng-init="platformAvailableComponents = getPlatformAvailableComponents({platform: step.properties.switch[$index].name});"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="platformAvailableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, step.properties.switch[$index].name)" select-existing="selectExisting({action: step.properties.switch[$index].name, event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div class="btn-connection-remove" ng-if="step.action[step.properties.switch[$index].name]" ng-click="deleteConnection({\'action\': step.properties.switch[$index].name})"> <i class="material-icons">
81remove_circle</i> </div> <div class="step-conection" id="step_connection_{{step.properties.switch[$index].name}}_{{currentScenario.scenario_id}}_{{step.id}}"> </div> <div class="step-jumpers-out" ng-if="jumpersOut[step.properties.switch[$index].name]"> <div class="step-jumper step-jumper-condition" id="step_jumper_{{step.properties.switch[$index].name}}_{{currentScenario.scenario_id}}_{{step.id}}" ng-click="centerStep({step: jumpersOut[step.properties.platforms[$index]]})"> <i class="material-icons">{{getJumperArrow(step, jumpersOut[step.properties.switch[$index].name])}}</i> </div> </div> </div> </div> <div class="scenario-step-row" ng-show="platform.platforms.length" style="padding-right: 40px"> <div class="scenario-step-column"> <custom-dropdown ng-model="selected" array="platform.platforms" opt-description="value" opt-value="value" placeholder="Add platform…" is-back-placeholder="true" ng-change="addPlatform(selected)" is-reset="platform.added"> </custom-dropdown> </div> </div>'),a.put("views/visual/switch.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}} </span> <div class="scenario-actions" ng-if="step.properties.all_match"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> <div class="scenario-actions" ng-if="!step.properties.all_match"> <div class="btn-remove" ng-click="deleteComponent()"> <i class="material-icons">cancel</i> </div> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div ng-if="!step.properties.all_match" ng-repeat="case in step.properties.switch track by case.name"> <div class="scenario-step-row" style="position: relative"> <div class="scenario-step-column"> <div style="display: inline-block; width: calc(50% - 21px)"> <resize-input2 placeholder="Input data" ng-blur="autosave()" ng-model="case.conditions[0].value" max-width="300" ng-keydown="($event.keyCode === 13) && !case.conditions[0].value && !case.conditions[0].target && step.properties.switch.length > 1 && step.properties.switch.splice($index, 1)" require="true" error-require-text="\'Input data cannot be empty\'" error-msg="errorMsg[$odd ? $index + 1 : $index]" set-error="setError()"> </resize-input2> </div> <div class="operators-dropdown dropdown"> <span class="operators-dropdown-current" id="dropdownSwitch_{{$index+1}}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> {{symbolCurrentCondition(case.conditions[0].operator)}} </span> <ul class="operators-dropdown-pop-up dropdown-menu" aria-labelledby="dropdownSwitch_{{$index+1}}"> <li class="operators-dropdown-item dropdown-item" ng-repeat="condition in condition.conditions" ng-click="case.conditions[0].operator = condition.name"> <span class="item-icon">{{condition.symbol}}</span> <span class="item-value">{{condition.value}}</span> </li> </ul> </div> <div style="display: inline-block; width: calc(50% - 31px); padding-left: 10px"> <resize-input2 placeholder="Value" ng-blur="autosave()" ng-model="case.conditions[0].target" max-width="300" ng-keydown="($event.keyCode === 13) && !case.conditions[0].value && !case.conditions[0].target && step.properties.switch.length > 1 && step.properties.switch.splice($index, 1)" require="true" error-require-text="\'Value cannot be empty\'" error-msg="errorMsg[$odd ? $index + 2 : $index + 1]" set-error="setError()"> </resize-input2> </div> </div> <div class="scenario-actions default"> <div class="btn-connection-add" ng-if="!step.action[case.name]"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, case.name, false)" select-existing="selectExisting({action: case.name, event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div class="btn-connection-remove" ng-if="step.action[case.name]" ng-click="deleteConnection({\'action\': case.name})"> <i class="material-icons">
81remove_circle</i> </div> <div style="position: relative; top: 8px; left: 20px" class="step-connection" id="step_connection_{{case.name}}_{{currentScenario.scenario_id}}_{{step.id}}"> </div> <div class="step-jumpers-out" ng-if="jumpersOut[case.name]" style="position: relative; top: -20px; right: -32px"> <div class="step-jumper step-jumper-trigger" id="step_jumper_{{case.name}}_{{currentScenario.scenario_id}}_{{step.id}}" ng-click="centerStep(currentScenario, step)"> <i class="material-icons">{{getJumperArrow(step, jumpersOut[case.name])}}</i> </div> </div> </div> </div> </div> <div ng-if="step.properties.all_match"> <div class="scenario-step-row" ng-repeat="c in step.properties.switch[0].conditions track by $index"> <div class="scenario-step-column"> <div style="display: inline-block; width: calc(50% - 21px)"> <resize-input2 placeholder="Input data" ng-blur="autosave()" ng-model="c.value" max-width="300" ng-keydown="($event.keyCode === 13) && !c.value && !c.target && step.properties.switch[0].conditions.splice($index, 1)" require="true" error-require-text="\'Input data cannot be empty\'" error-msg="errorMsg[$odd ? $index + 1 : $index]" set-error="setError()"> </resize-input2> </div> <div class="operators-dropdown dropdown"> <span class="operators-dropdown-current" id="dropdownSwitch_{{$index+1}}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> {{symbolCurrentCondition(c.operator)}} </span> <ul class="operators-dropdown-pop-up dropdown-menu" aria-labelledby="dropdownSwitch_{{$index+1}}"> <li class="operators-dropdown-item dropdown-item" ng-repeat="condition in condition.conditions" ng-click="c.operator = condition.name"> <span class="item-icon">{{condition.symbol}}</span> <span class="item-value">{{condition.value}}</span> </li> </ul> </div> <div style="display: inline-block; width: calc(50% - 31px); padding-left: 10px"> <resize-input2 placeholder="Value" ng-blur="autosave()" ng-model="c.target" max-width="300" ng-keydown="($event.keyCode === 13) && !c.value && !c.target && step.properties.switch[0].conditions.splice($index, 1)" require="true" error-require-text="\'Value cannot be empty\'" error-msg="errorMsg[$odd ? $index + 2 : $index + 1]" set-error="setError()"> </resize-input2> </div> </div> </div> </div> <div class="scenario-step-footer"> <span class="scenario-step-footer-button" ng-click="addSwitchesConditionOrCase()"> <i class="material-icons">add</i> <span>Condition</span> </span> <span ng-mousedown="$event.button === 0 && toggleSwitchMode()"> <div class="switch" ng-class="{\'switch-on\': step.properties.all_match, \'switch-off\': !step.properties.all_match}"></div> <span>All have to match</span> </span> </div>'), 82a.put("views/visual/tag-check_tags.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding: 13px 14px 12px"> <h3>Included</h3> <tag-input placeholder="Select tag" tag-id="1" ng-blur="updateTags()" max-width="true" only-exist="true" editable="false" ng-model="tag.include" additional-tags="tag.exclude" all-tags="allTags"> </tag-input> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding: 13px 14px 12px"> <h3>Excluded</h3> <tag-input placeholder="Select tag" tag-id="2" ng-blur="updateTags()" max-width="true" only-exist="true" editable="false" ng-model="tag.exclude" additional-tags="tag.include" all-tags="allTags"> </tag-input> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="width: calc(50% - 4px); flex-grow: 0; margin-left: auto"> <div class="scenario-actions"> <span>Not matched</span> <div ng-if="!step.action.fallback" class="btn-connection-add"> <i class="material-icons">add_circle</i> <visual-component-menu available-components="availableComponents" step-to-copy="stepToCopy" add-component="addNextAction(component, type, metaType, copied, \'fallback\')" select-existing="selectExisting({action: \'fallback\', event: event})" expert-mode="expertMode" switch-expert-mode="switchExpertMode()"> </visual-component-menu> </div> <div ng-if="step.action.fallback" ng-click="deleteConnection({\'action\': \'fallback\'})" class="btn-connection-remove"> <i class="material-icons">
82remove_circle</i> </div> </div> </div> </div>'),a.put("views/visual/tag.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding: 13px 14px 12px"> <h3>Add</h3> <tag-input placeholder="New tag" tag-id="1" ng-blur="updateTags()" max-width="true" only-exist="false" editable="true" ng-model="tag.add" additional-tags="tag.remove" all-tags="allTags"> </tag-input> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding: 13px 14px 12px"> <h3>Remove</h3> <tag-input placeholder="Select tag" tag-id="2" ng-blur="updateTags()" max-width="true" only-exist="true" editable="false" ng-model="tag.remove" additional-tags="tag.add" all-tags="allTags"> </tag-input> </div> </div>'),a.put("views/visual/text-buttons.html",'<div class="scenario-step-header"> <span class="scenario-step-name">Message with buttons</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="display: flex; align-items: center; padding-top: 15px; padding-bottom: 10px"> <i class="material-icons">text_format</i> <resize-input2 style="flex-grow: 1" placeholder="Type here" ng-blur="autosave()" multiline="true" max-width="300" ng-model="step.properties.content" require="true" error-require-text="\'Message cannot be empty.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row scenario-step-row-button" ng-repeat="button in step.properties.buttons" uib-dropdown auto-close="outsideClick"> <div class="scenario-step-column" style="display: flex; align-items: center" uib-dropdown-toggle> <i class="material-icons">format_bold</i> <span ng-if="button.title">{{button.title}}</span> <span ng-if="!button.title" class="button-placeholder">Not assigned button</span> </div> <div class="dropdown-menu inside" role="menu" uib-dropdown-menu aria-labelledby="{{step.id+\'btn_\'+$index}}"> <div class="dropdown-container"> <div class="scenario-step-header"> <span>Button</span> <div class="scenario-actions"> <div class="btn-remove" ng-click="deleteTextButton($index)"> <i class="material-icons">delete</i> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Title" ng-blur="autosave()" max-width="300" ng-model="button.title"> </resize-input2> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column"> <custom-dropdown ng-model="button.type" array="[{name: \'Suggestion\', value: \'suggest\'}, {name: \'Link\', value: \'link\'}]" opt-description="name" opt-value="value" is-model-init="true" is-back-placeholder="true" ng-change="updateTextButton($index)" placeholder=""> </custom-dropdown> </div> </div> <div ng-if="button.type == \'suggest\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Type here" ng-blur="autosave()" multiline="true" max-width="300" ng-model="button.content.value"> </resize-input2> </div> </div> <div ng-if="button.type == \'link\'" class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 13px; padding-bottom: 12px"> <resize-input2 placeholder="Link" ng-blur="autosave()" max-width="300" ng-model="button.url"> </resize-input2> </div> </div> <div ng-if="button.type == \'link\'" class="scenario-step-footer"> <div ng-click="button.webview = !button.webview; autosave();"> <div class="switch {{button.webview?\'switch-on\':\'switch-off\'}}"></div> <span>Webview</span> </div> </div> </div> </div> </div> <div class="scenario-step-footer scenario-step-footer-button" ng-click="addButton()"> <i class="material-icons">add</i> <span>Button</span> </div>'),a.put("views/visual/text-content.html",'<div class="scenario-step-header"> <span class="scenario-step-name">{{stepComponent.name}}</span> <span ng-click="copyId()" uib-tooltip="Copied" tooltip-trigger="none" tooltip-is-open="showCopied()" class="scenario-step-id prevent-drag">{{step.id}}</span> <div class="scenario-actions"> <div ng-if="hint" class="btn-help brn-hint-wrapper"> <i class="material-icons">help</i> <brn-hint position="top" category="{{hintCategory}}" name="{{hintName}}"></brn-hint> </div> </div> </div> <div class="scenario-step-row"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Message" ng-blur="autosave()" multiline="true" max-width="300" ng-model="step.properties.content" require="true" error-require-text="\'Message cannot be empty.\'" error-msg="errorMsg[0]" set-error="setError();"> </resize-input2> </div> </div> <div class="scenario-step-row" ng-repeat="phrase in step.properties.phrases track by $index"> <div class="scenario-step-column" style="padding-top: 15px; padding-bottom: 10px"> <resize-input2 placeholder="Type here" ng-blur="!step.properties.phrases[$index] && deleteTextPhrase($index) || autosave()" multiline="true" max-width="300" ng-model="step.properties.phrases[$index]"> </resize-input2> </div> </div> <div class="scenario-step-footer scenario-step-footer-button" ng-click="addTextPhrase()"> <i class="material-icons">add</i> <span>Synonym</span> </div>'),a.put("views/vivacruises.html",'<div> <img src="/images/other/Viva-cruises-screenshot.png" class="viva-page-img"> \x3c!-- <widget bot-name=\'Viva Cruises\'\n bot-image=\'https://api.brn.ai/upload/img/bots/rTsvK0hHAx.png\'\n show-by-timer="true"\n page-id="240329493245701"\n input-placeholder="Ja bitte, senden Sie mir weitere Infos"\n welcome-text="Herzlich willkommen. Sie wollen weitere Informationen über den Viva Cruises Service">\n </widget> --\x3e </div>'),a.put("views/wechat.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 2px;top: 5px; font-size: 21px" ng-click="close()"> close </i> {{exist? $resolve.translations.settings_conections_editConection : $resolve.translations.settings_conections_addConection}} </div> <h2 class="mb20" style="color:#94cc25; top: -12px">{{$resolve.translations.wechat}}</h2> </div> <form ng-submit="updateConnection()"> <div class="mb10"> <custom-input placeholder="{{$resolve.translations.channelId}}" ng-model="wechat.provider_data.app_id" title="{{$resolve.translations.channelId}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.secretKey}}" ng-model="wechat.provider_data.secret" title="{{$resolve.translations.secretKey}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.botLink}}" ng-model="wechat.provider_data.link" title="{{$resolve.translations.botLink}}" is-required="true" is-back-placeholder="true"> </custom-input> <custom-input placeholder="{{$resolve.translations.appUrl}}" ng-model="wechat.redirect_url" title="{{$resolve.translations.appUrl}}" is-readonly="true" is-back-placeholder="true"> </custom-input> <div class="bots-list-text"> {{$resolve.translations.wechat_urlDescription}} </div> <custom-input placeholder="{{$resolve.translations.settings_token}}" ng-model="wechat.provider_data.token" title="{{$resolve.translations.settings_token}}" is-readonly="true" is-back-placeholder="true"> </custom-input> <div class="bots-list-text"> {{$resolve.translations.wechat_tokenDescription}} </div> </div> <div> <button type="submit" class="brn-btn brn-primary" style="min-width: 0px; margin-right:10px">{{$resolve.translations.save_btn}}</button> <button ng-if="wechat.provider_data.user_secret" ng-click="deleteConnection()" type="button" class="brn-btn brn-delete-transparent" style="min-width: 0px">{{$resolve.translations.delete}}</button> </div> </form> </div> </div> <div style="width: 100%;height: 100%;position: absolute" ng-show="isProgres"> <div class="showbox"> <div class="google-loader"> <svg class="circular" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"> </svg> </div> </div> </div> </div>'),a.put("views/widget-template.html",'<div class="widget-wrap"> <div class="brn-widget-open" ng-click="toogleWidget()"> <div ng-if="isMessage" class="message-count">1</div> </div>
82 <div class="brn-widget-event sample-show-hide" ng-if="firstFbInit" ng-show="eventVisibility"> <div class="brn-widget-event-close" ng-click="closeWidget()"> <i class="material-icons">close</i> </div> <div class="brn-widget-event-conversation"> <div class="brn-widget-conversation-avatar"> <img src="{{botImage?(botImage):(\'images/tf.png\')}}" alt=""></div> <div class="brn-widget-conversation-message"> <div class="brn-widget-conversation-message-author"> {{botName}} <span class="online-mark"></span> </div> {{welcomeText}} </div> \x3c!-- <div class="brn-widget-unread-count">1</div> --\x3e </div> <div class="user-input-container"> <custom-input ng-model="message.text" placeholder="{{inputPlaceholder}}" title="" style="margin-top: 4px" is-back-placeholder="false" is-back-placeholder-show="true"> </custom-input> </div> <div class="brn-widget-event-footer"> <div class="fb-input-container"> <div id="fb-messenger_widget_button_container" class="fb-btn"></div> <img src="/images/other/send_fb.png" alt="" style="position: absolute; top: -2px; z-index: 0"> </div> </div> </div> </div>'),a.put("views/widget.html",'<div class="brn-widget"> <div class="brn-widget-header"> <span>{{bot.username}}</span> </div> <div class="brn-widget-body" scroll-glue> <div class="" ng-repeat="message in messages"> <div class="messages {{message.author == \'client\' ? \'author_message\' : \'\'}}"> <div class="message-img-wrap" ng-if="!hideImage"> <img src="http://lorempixel.com/35/35/" alt="author"> </div> <div class="message-info"> <div class="message-text"> {{message.text | nl2br}} </div> <div class="message-date"> {{message.created | date:\'dd-MM-yyyy HH:mm:ss\'}} </div> </div> </div> </div> </div> <div class="brn-widget-footer"> <form ng-submit="sendMessage()" id="widget"> <input type="text" name="name" class="" ng-model="message.text"> <button type="button" ng-click="newDialog()">Clear</button> </form> </div> </div>'),a.put("views/widget/add-to-intent-as-response.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap" style="min-height: 0px"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" ng-click="close()"> close </i> Add to intent </div> <div> <div class="mb10"> <custom-dropdown ng-model="intent" array="intents" is-model-init="true" opt-description="name" title="Intent" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-input placeholder="Intent Response" ng-model="text" title="Intent Response" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div> <button class="brn-btn brn-primary minimal" type="button" ng-click="addResponse()" style="margin-right: 12px"> Save </button> <button class="brn-btn brn-transparent minimal" type="button" ng-click="addResponse(true)" ng-if="isSendtoUser"> Save & Reply </button> </div> </div> </div> </div>'),a.put("views/widget/add-to-intent.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap" style="min-height: 0px"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" ng-click="close()"> close </i> Add to intent </div> <div> <div class="mb10"> <custom-dropdown ng-model="intent.intenty_id" array="intents" is-model-init="true" opt-description="name" opt-value="intent_id" title="Intent" placeholder="" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-input placeholder="Intent Expressions" ng-model="text" title="Intent Expressions" is-back-placeholder="true"> </custom-input> </div> </div> </div> <div> <button class="brn-btn brn-primary minimal" type="button" ng-click="addExpression()" style="margin-right: 12px"> Save </button> <button class="brn-btn brn-transparent minimal" type="button" ng-click="addExpression(true)" ng-if="isSendtoUser"> Save & Reply </button> </div> </div> </div> </div>'),a.put("views/widget/audio.html",'<div class="messages {{message.author == \'client\' ? \'author_message\' : \'\'}}"> <div class="message-img-wrap" ng-if="!hideImage">
82 <img src="{{image != \'false\' ?(image):(\'images/tf.png\')}}" alt="author"> </div> <div class="message-info"> <div class="message-text-wrapper"> <div class="message-text audio-el"> <div class="audio-el-wrapper"> <div class="audio-el-play"> <button ng-click="audio.paused ? audio.play() : audio.pause()"> <ng-include src="\'images/svg/play-button.svg\'" ng-if="audio.paused"></ng-include> <ng-include src="\'images/svg/two-lines.svg\'" ng-if="!audio.paused"></ng-include> </button> </div> <div class="audio-el-range"> <ng-include src="\'images/svg/speaker_volume.svg\'"></ng-include> <input type="range" min="0" max="1" step="0.01" ng-model="audio.volume"> </div> </div> </div> </div> <div class="message-date"> <span am-time-ago="message.created"></span> </div> </div> </div>'),a.put("views/widget/card.html",'<div class="messages"> <div class="message-img-wrap" ng-if="!hideImage"> <img src="{{image != \'false\' ?(image):(\'images/tf.png\')}}" alt="author"> </div> <div class="message-info"> <div class="card"> <img src="{{image?(image):(\'images/tf.png\')}}" alt=""> <div class="card-block"> <h4><a href="{{message.message.content[0].link}}" target="_blank">{{message.message.content[0].title}}</a></h4> <p class="card-text">{{message.message.content[0].text}}</p> </div> </div> <div class="message-date"> <span am-time-ago="message.created"></span> </div> </div> </div>'),a.put("views/widget/create-intent.html",'<div class="flex-row create-bot flex-row-centered"> <div class="flex-col-small"> <div class="create-bot-wrap" style="min-height: 0px"> <div> <div class="bots-list-item-name"> <i class="material-icons close-icon" style="margin-left: -30px; margin-right: 5px; top: 7px" ng-click="close()"> close </i> Create intent </div> <div> <custom-input placeholder="{translations.title_name}}" ng-model="newIntent.name" is-required="true" title="{{translations.title_name}}" is-back-placeholder="true"> </custom-input> <div class="mb10"> <custom-input placeholder="Intent Expressions" ng-model="text" title="Intent Expressions" is-back-placeholder="true"> </custom-input> </div> <div class="mb10"> <custom-dropdown ng-model="newIntent.response.type" array="intent_types" is-model-init="true" opt-description="label" opt-value="type" title="Intent response type" placeholder="" ng-change="handleTypeChange()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="mb10"> <custom-input ng-if="newIntent.response.type==\'reply\'" placeholder="Reply name" ng-model="reply.name" title="Reply name" enter="addReply()" is-back-placeholder="true"> <i class="material-icons" ng-click="addReply()" style="font-size: 20px; opacity: 0.6; position: relative; top: 2px; right: 6px"> add </i> </custom-input> <custom-dropdown ng-if="newIntent.response.type==\'scenario\'" ng-model="newIntent.response.scenario_id" array="bot_scenarios" opt-description="name" opt-value="scenario_id" title="Scenario name" placeholder="Add Scenario..." ng-change="handleScenarioChange()" is-back-placeholder="true"> </custom-dropdown> </div> <div class="tags-container" ng-if="newIntent.response.replies.length && newIntent.response.type==\'reply\'"> <span class="title">Replies</span> <div ng-repeat="reply in newIntent.response.replies"> <span>{{reply}}</span> <i class="material-icons close-icon" ng-click="deleteReply($index)"> close </i> </div> </div> </div> </div> <div> <button class="brn-btn brn-primary minimal" type="button" ng-click="addNewIntent()"> Create </button> <button class="brn-btn brn-transparent minimal" type="button" ng-click="addNewIntent(true)" ng-if="isSendtoUser"> Create & Reply </button> </div> </div> </div> </div>'),a.put("views/widget/file.html",'<div class="messages {{message.author == \'client\' ? \'author_message\' : \'\'}}"> <div class="message-img-wrap" ng-if="!hideImage"> <img src="{{image != \'false\' ?(image):(\'images/tf.png\')}}" alt="author"> </div> <div class="message-info"> <a href="{{message.message.content.url}}" target="_blank" class="file-uploader"> <span> <i class="fa fa-arrow-down" aria-hidden="true"></i> </span> <span>{{message.message.content.name}}</span> </a> <div class="message-date"> <span am-time-ago="message.created"></span> </div> </div> </div>'),a.put("views/widget/image.html",'<div class="messages {{message.author == \'client\' ? \'author_message\' : \'\'}}"> <div class="message-img-wrap" ng-if="!hideImage">
82 <img src="{{image != \'false\' ?(image):(\'images/tf.png\')}}" alt="author"> </div> <div class="message-info image-type"> <div class="card" style="background: #fff !important"> <a href="{{message.message.content.url}}" target="_blank"> <img ng-src="{{message.message.content.url}}" alt="widget image"> </a> </div> \x3c!--<svg ng-if="message.author == \'client\' && message.delivered" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 44 44" enable-background="new 0 0 44 44" width="512px" height="512px">--\x3e \x3c!--<path d="m22,0c-12.2,0-22,9.8-22,22s9.8,22 22,22 22-9.8 22-22-9.8-22-22-22zm12.7,15.1l0,0-16,16.6c-0.2,0.2-0.4,0.3-0.7,0.3-0.3,0-0.6-0.1-0.7-0.3l-7.8-8.4-.2-.2c-0.2-0.2-0.3-0.5-0.3-0.7s0.1-0.5 0.3-0.7l1.4-1.4c0.4-0.4 1-0.4 1.4,0l.1,.1 5.5,5.9c0.2,0.2 0.5,0.2 0.7,0l13.4-13.9h0.1c0.4-0.4 1-0.4 1.4,0l1.4,1.4c0.4,0.3 0.4,0.9 0,1.3z" fill="#b0bec5"/>--\x3e \x3c!--</svg>--\x3e \x3c!--<div class="showbox"--\x3e \x3c!--ng-if="message.author == \'client\' && !message.delivered">--\x3e \x3c!--<div class="google-loader">--\x3e \x3c!--<svg class="circular" viewBox="25 25 50 50">--\x3e \x3c!--<circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"/>--\x3e \x3c!--</svg>--\x3e \x3c!--</div>--\x3e \x3c!--</div>--\x3e <div class="message-date"> <span am-time-ago="message.created"></span> </div> </div> </div>'),a.put("views/widget/slider.html",'<div class="messages"> <div class="message-img-wrap" ng-if="!hideImage"> <img src="{{image != \'false\' ?(image):(\'images/tf.png\')}}" alt="author"> </div> <div class="message-info"> <uib-carousel active="active" interval="myInterval" no-wrap="true" autoscroll="false"> <uib-slide ng-repeat="slide in message.message.content.elements" index="$index" class="card-slide" ng-init="slide.limitTo = 300"> <div class="card {{slide.image && slide.image.length ? \'\': \'pt20\'}}"> <img ng-if="slide.image && slide.image.length" ng-src="{{slide.image?(slide.image):(\'\')}}" alt=""> <div class="card-block"> <h4 ng-if="slide.link.length"><a href="{{slide.link}}" target="_blank">{{slide.title}}</a></h4> <h4 ng-if="!slide.link.length">{{slide.title}}</h4> <p ng-if="slide.text.length" class="card-text" ng-bind-html="slide.text.trim() | limitTo: slide.limitTo"></p> <span ng-if="slide.text.trim().length > 300" ng-click="handleMoreInfo(slide)" class="widget-more-info"> {{slide.limitTo == 999999 ? \'Hide text\' : \'More info\'}} </span> </div> <uib-accordion close-others="false"> <div uib-accordion-group class="panel-default {{$index + 1 == slide.collapse.length ? \'mb15\' : \'\'}}" ng-repeat="accordionItem in slide.collapse" ng-if="accordionItem.content.trim().length"> <uib-accordion-heading> {{accordionItem.title}} <i class="fa fa-angle-down"></i> </uib-accordion-heading> <span ng-repeat="line in (accordionItem.content | newlines) track by $index" style="display: block"> {{htmlFormat(line)}} </span> </div> <div class="buttons"> <button type="button" class="btn btn-primary" ng-repeat="button in slide.buttons" ng-click="sendCommand(button)"> {{button.title}} </button> </div> </uib-accordion> </div> </uib-slide> </uib-carousel> <div class="message-date"> <span am-time-ago="message.created"></span> </div> </div> </div>'),a.put("views/widget/suggest.html",'<div class="messages suggest-msg {{message.author == \'client\' ? \'author_message\' : \'\'}}"> <div class="message-img-wrap" ng-if="!hideImage"> <img src="{{image != \'false\' ?(image):(\'images/tf.png\')}}" alt="author"> </div> <div class="message-info"> <div class="message-text"> <span ng-repeat="line in (message.message.content.text | newlines) track by $index" style="display: block"> {{line}} </span> </div> <div class="suggest-btns"> <button type="button" ng-repeat="btn in message.message.content.buttons" ng-click="sendCommand({type: \'suggest\', content: btn.content})"> {{btn.title}} </button> </div> <div class="message-date"> <span am-time-ago="message.created"></span> </div> </div> </div>'),a.put("views/widget/text.html",'<div class="messages {{message.author == \'client\' ? \'author_message\' : \'\'}}" ng-class="{buble : isBubleActive, \'suggest-msg\' : message.message.content.replies && message.message.content.replies.length}"> <div class="message-img-wrap" ng-if="!hideImage">
82 <img src="{{image != \'false\' ?(image):(\'images/tf.png\')}}" alt="author"> </div> <div class="message-info"> <div class="message-text-wrapper dropdown buble-dropdown" ng-mouseup="getSelectedText()" click-outside="toggleBuble()" ng-class="{open : isBubleActive}" ng-style="{\'flex-wrap\': message.message.content.replies && message.message.content.replies.length ? \'wrap\' : \'nowrap\'}" id="user_message_{{curentIndex}}"> <div class="dropdown-menu buble-dropdown-menu" role="menu" aria-labelledby="user_message_{{curentIndex}}"> <div class="dropdown-container"> <div class="inline-block buble-btn" ng-click="toggleNewIntent()" style="font-size: 9px"> New intent </div> <div class="horizontal-divider inline-block"> </div> <div class="inline-block buble-btn" ng-click="toggleExistIntent()" style="font-size: 9px"> Add to intent </div> <div class="horizontal-divider inline-block"> </div> <div class="inline-block buble-btn" ng-click="toggleExistIntentAsResponse()" style="font-size: 9px"> Add to intent as response </div> </div> <div class="before"></div> <div class="after"></div> </div> <div class="message-text" ng-style="{\'width\': message.message.content.replies && message.message.content.replies.length ? \'100%\' : \'auto\'}"> <span ng-repeat="line in (message.message.content.text | newlines) track by $index" style="display: block" ng-bind-html="htmlFormat(line)"> </span> </div> <div class="suggest-btns" ng-style="{\'width\': message.message.content.replies && message.message.content.replies.length ? \'100%\' : \'auto\'}"> <button type="button" ng-repeat="reply in message.message.content.replies" ng-click="sendCommand({type: \'suggest\', content: reply.content})"> {{reply.content}} </button> </div> </div> <div class="message-date"> <span am-time-ago="message.created"></span> </div> </div> </div> \x3c!-- <div class="messages {{message.author == \'client\' ? \'author_message\' : \'\'}}" ng-class="{buble : isBubleActive}" ng-if="message.message.content.replies">\n <div class="message-info">\n <div class="message-text-wrapper dropdown buble-dropdown"\n ng-mouseup="getSelectedText()"\n click-outside="toggleBuble()"\n ng-class="{open : isBubleActive}"\n id="user_message_{{curentIndex}}_replay">\n <div class="message-text" >\n <div ng-repeat="reply in message.message.content.replies track by $index">\n {{$index + 1}} {{reply.content}}\n </div>\n </div>\n </div>\n\n <div class="message-date">\n <span am-time-ago="message.created"></span>\n </div>\n </div>\n</div> --\x3e'),a.put("views/widget/video.html",'<div class="messages {{message.author == \'client\' ? \'author_message\' : \'\'}}"> <div class="message-img-wrap" ng-if="!hideImage"> <img src="{{image != \'false\' ?(image):(\'images/tf.png\')}}" alt="author"> </div> <div class="message-info"> <video src="{{trustSrc(message.message.content.url)}}" controls></video> <div class="message-date"> <span am-time-ago="message.created"></span> </div> </div> </div>'),a.put("views/widgetsettings.html",'<div class="modal-header text-center"> <h3 class="modal-title">Widget asdasdsad</h3> </div> <div class="modal-body"> <div class="bot-edit"> <form ng-submit="activateWidget()" ng-if="!provider_data.token"> <br> <input type="text" class="" ng-model="provider_data.settings.welcomeText" placeholder="Greetings text" required> <br> <input type="number" class="" ng-model="provider_data.settings.showWelcomeDelay" placeholder="Sec delay" required> <br> <select ng-model="provider_data.settings.position" ng-init="provider_data.settings.position = provider_data.settings.position || positionTypes[0].value" ng-options="option.value as option.name for option in positionTypes"> </select> <br> <button type="submit" class="brn-btn brn-primary">Activate</button> </form> <form ng-submit="editWidget()" ng-if="provider_data.token"> <br> <input type="text" class="" ng-model="provider_data.settings.welcomeText" placeholder="Greetings text" required> <br> <input type="number" class="" ng-model="provider_data.settings.showWelcomeDelay" placeholder="Sec delay" required> <br> asdasd <select ng-model="provider_data.settings.position" ng-init="provider_data.settings.position = provider_data.settings.position || positionTypes[0].value" ng-options="option.value as option.name for option in positionTypes"> </select> <h1>{{positionTypes | json}}</h1> <br> <button type="submit" class="brn-btn brn-primary">Edit</button> </form> <div ng-if="provider_data.token"> <h1>{{settingData | json}}</h1> <h1>{{provider_data.token}}</h1> <pre>\n {{strVar}}\n </pre> </div> </div> </div>')}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.