Анализ сайта trust.onespan.com
Основное Готовность: 40%
Домен
trust.onespan.com
Состояние доменного имени
?
Проверяем корректность доменного имени и наличие технических проблем на уровне домена.
Используйте для продвижения только домен второго уровня.
Длина домена велика. Но если вы продвигаете запрос, входящий в название домена, то это хорошо.
Ответ сервера
200 Успешный ответ
HTTP-код ответа и цепочка редиректов
?
Код 200 — страница доступна. Коды 3xx — редиректы (цепочки замедляют загрузку и размывают ссылочный вес). Коды 4xx/5xx — ошибки, поисковик не сможет проиндексировать страницу.
Кол-во редиректов 3 слишком большое! Проверьте настройки сайта и веб-сервера!
Цепочка редиректов:
http://trust.onespan.com
301 MovedPermanently
https://trust.onespan.com/
301 MovedPermanently
https://support.onespan.com/csm
200 OK
Безопасность
Сайт безопасен
Использование HTTPS и SSL-сертификат
?
HTTPS — обязательный стандарт. Google и Яндекс отдают предпочтение защищённым сайтам. Отсутствие SSL или просроченный сертификат ведут к предупреждениям в браузере и снижению позиций.
На сайте работает защищенный протокол ssl и сайт открывается по https.
Ssl-сертификат действителен до 09.01.2027 2:59:59.
Включён HSTS (Strict-Transport-Security) — защита от подмены на http.
HTTP автоматически перенаправляется на HTTPS.
Поздравляем! Сайт не содержится в реестре РКН.
Кодировка
Кодировка символов страницы
?
Стандарт — UTF-8. Неправильная кодировка вызывает нечитаемые символы и мешает поисковику корректно распознать текст страницы.
Кодировка на странице не определена. Укажите явно кодировку документа!
Язык
en
Атрибут lang в HTML-теге
?
Атрибут lang (<html lang="ru">) сообщает поисковикам и браузерам, на каком языке написана страница. Помогает при ранжировании в региональном поиске.
Язык документа указан явно: en.
Скорость загрузки
~0,97сек
Время отклика сервера (TTFB)
?
Time To First Byte — время до получения первого байта от сервера. Норма до 200 мс. Медленный отклик ухудшает пользовательский опыт и ранжирование: Яндекс и Google учитывают скорость страниц.
Скорость загрузки сайта 0,97сек оптимальна.
Объем документа
168Кб
Размер HTML-кода страницы
?
Слишком большой HTML замедляет парсинг браузером и сканирование поисковым роботом. Рекомендуется не более 200 Кб.
Объем html-документа 168Кб оптимален.
Структура html-документа корректна.
Ресурсы
Ресурсы: 17
Внешние ресурсы страницы (CSS, JS, изображения)
?
Количество и тип подключённых ресурсов влияют на скорость загрузки. Большое число запросов увеличивает время рендеринга страницы.
Кол-во файлов ресурсов 17 много для одной страницы. Приемлемо до 10. Проведите оптимизацию файлов ресурсов!
Показать полный список ресурсов
| Тип | Название | Значение |
|---|---|---|
| stylesheet | styles/fonts/source-sans-pro/source-sans-pro-latin.css?v=6139516a833203143a5a3b447daad306 | |
| stylesheet | styles/css_includes_$sp.css?v=6139516a833203143a5a3b447daad306 | |
| stylesheet | text/css | styles/scss/sp-bootstrap-rem.scss?portal_id=89275a53cb13020000f8d856634c9c51&theme_id=517030d1531032007a97e192d5dc34d8&v=6139516a833203143a5a3b447daad306&uxf_theme_id=null&uxf_theme_variant_id=null&is_rtl=false&sp_variant_m2m_id= |
| stylesheet | styles/css_includes_$sp_later.css?v=6139516a833203143a5a3b447daad306 | |
| stylesheet | text/css | /styles/scss/csm-styles.scss?portal_id=5b49418bdb4aa200b1f6f78eaf96195f&c=2739116a833203143a5a3b447daad38b |
| stylesheet | text/css | /aae4f7dc23330300c6bf121727bf6584.spcssdbx?c=123&portal=89275a53cb13020000f8d856634c9c51&theme=517030d1531032007a97e192d5dc34d8 |
| stylesheet | text/css | /styles/retina_icons/retina_icons.css?v=07-04-2026_0037 |
| js | scripts/thirdparty/dompurify/purify.min.js?sysparm_substitute=false | |
| js | text/javascript | /scripts/js_includes_sp_libs_min.jsx?v=07-04-2026_0037&lp=Tue_Jul_28_11_49_19_PDT_2026&c=20_630 |
| js | text/javascript | /scripts/dist/sp_min.jsx?v=07-04-2026_0037 |
| js | sn_csm_uni_theme.csm_util.jsdbx?c=24 | |
| js | text/javascript | scripts/bootstrap-datetimepicker.js?v=07-04-2026_0037 |
| js | text/javascript | /scripts/GlideFlow.js?v=07-04-2026_0037 |
| js | text/javascript | /app_com.jsdbx?c=21 |
| js | text/javascript | /app_com.modelUtil.jsdbx?c=20 |
| js | text/javascript | /app_com.cxs.contextual_search.jsdbx?c=56 |
| js | text/javascript | /scripts/js_includes_now_canvas.jsx?v=07-04-2026_0037&lp=Tue_Jul_28_11_49_19_PDT_2026&c=20_630 |
Серверные заголовки
Кол-во: 16
HTTP-заголовки ответа сервера
?
Заголовки сервера передают браузеру и поисковику служебную информацию: кеширование, безопасность (CSP, HSTS), сжатие (gzip). Правильная настройка ускоряет загрузку и повышает защищённость.
Найдены серверные заголовки 16шт. Подробнее про серверные заголовки.
Показать полный список серверных заголовков
| Ключ | Значение |
|---|---|
| Server | snow_adc |
| Date | Sat, 22 Aug 2026 07:14:46 GMT |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Set-Cookie | BIGipServerpool_onespan=b1e377e3a602c7705afe3a0b2b6ce174; httponly; secure; samesite=None; path=/ |
| Server-Timing | t;desc="28bcd5a28372", sem_wait;dur=0, sesh_wait;dur=0 |
| Content-Security-Policy | frame-ancestors 'self' https://support.onespan.com |
| X-Content-Type-Options | nosniff |
| X-Robots-Tag | noindex |
| X-Is-Logged-In | false |
| X-Is-Visitor | false |
| X-Transaction-ID | 28bcd5a28372 |
| Pragma | no-store |
| Cache-Control | no-cache,no-store,must-revalidate,max-age=-1 |
| Referrer-Policy | same-origin |
| Strict-Transport-Security | max-age=63072000; includeSubDomains |
CMS
Не определена
Система управления сайтом (движок)
?
CMS — это движок, на котором работает сайт (WordPress, 1C-Bitrix, Tilda и др.). Знание CMS помогает понять возможности SEO-оптимизации и подобрать подходящие инструменты. «Не определена» — вероятно, самописный сайт или нестандартная сборка.
CMS не определена. Вероятно, сайт самописный либо движок надёжно скрыт. Это не ошибка.
Веб-сервер
snow_adc
Программное обеспечение сервера
?
Веб-сервер — это ПО, которое отдаёт страницы посетителям (nginx, Apache, IIS, LiteSpeed и др.). Определяется по серверным заголовкам ответа (Server, X-Powered-By и т.п.). «Не определён» — сервер намеренно скрывает эти заголовки, это нормальная практика безопасности.
В заголовке Server указано: snow_adc.
Мета-теги Готовность: 52%
Title
Customer Service Portal - Product Support
Заголовок страницы в браузере и поисковой выдаче
?
Title — главный SEO-заголовок страницы. Влияет на CTR в поиске и ранжирование. Оптимальная длина: 50–70 символов. Ключевые слова — ближе к началу.
Дублей словоформ в title не найдено.
Число символов в title 41 оптимально (норма: от 40 до 45).
Description
Описание страницы в поисковой выдаче (сниппет)
?
Meta Description — текст под заголовком в выдаче. Напрямую на позиции не влияет, но влияет на CTR. Оптимальная длина: 120–160 символов.
Установите мета-тег description!
Keywords
Список ключевых слов страницы (устаревший тег)
?
Meta Keywords не учитывается Яндексом и Google для ранжирования с 2009–2012 годов. Заполнение не обязательно, но не вредит. Конкурент может использовать содержимое для анализа.
Установите мета-тег keywords!
Канонический Url
Указывает поисковику основную версию страницы
?
Canonical (rel=canonical) предотвращает проблему дублей страниц. Должен точно совпадать с URL проверяемой страницы. Неправильный canonical может передать ссылочный вес на другую страницу.
Рекомендуем прописать канонический Url.
Robots
Ошибок нет
Директивы для поисковых роботов на уровне страницы
?
Meta Robots управляет индексацией конкретной страницы: index/noindex — индексировать ли, follow/nofollow — следовать ли по ссылкам. Noindex полностью исключает страницу из поиска.
Meta-тег robots не указан. Страница свободна для индексации.
Адаптивность
width=device-width, initial-scale=1.0
Настройка масштабирования на мобильных устройствах
?
Тег viewport (<meta name="viewport">) сообщает браузеру, как масштабировать страницу на мобильных. Стандарт: width=device-width, initial-scale=1. Отсутствие — признак отсутствия мобильной версии.
Meta-тег viewport со значением-константой width=device-width задаёт ширину страницы в соответствии с размером экрана.
Meta-тег viewport со значением initial-scale=1.0 определяет масштаб 1:1, т.е. «не масштабировать».
Разметка OpenGraph
Не найдено
Мета-теги для красивых превью в соцсетях
?
OpenGraph (og:title, og:description, og:image) управляет тем, как страница выглядит при репосте в социальных сетях и мессенджерах. Отсутствие OG-тегов — невзрачный превью при шеринге.
Разметка OpenGraph не задана. Страница не оптимизирована под социальные сети. Мета-теги с разметкой Og помогают социальным роботам лучше структурировать Ваш сайт.
Все мета-теги
Кол-во: 2
Полный список мета-тегов страницы
?
Таблица всех meta-тегов, включая нестандартные. Позволяет найти опечатки, дубли и лишние теги.
Найдены мета-теги 2шт. Мета-теги не видимы для человека и предназначены для обмена информацией между веб-страницей и поисковыми системами, браузерами и другими веб-службами. С ними роботы 🤖 и устройства ведут себя более ожидаемо.
Показать полный список мета-тегов
| Тип | Название | Значение |
|---|---|---|
| name | viewport | width=device-width, initial-scale=1.0 |
| name | mobile-web-app-capable | yes |
Оптимизация Готовность: 0%
Структура
Ошибок нет
Семантические HTML-элементы страницы
?
Проверяет наличие основных структурных элементов: nav, header, footer, main. Корректная семантическая структура помогает поисковику понять архитектуру страницы.
Структура документа корректна (теги <html> и <body> присутствуют в одном экземпляре).
Контент
Есть ошибки
Объём и качество текстового содержимого
?
Анализирует объём полезного текста на странице. Слишком мало — страница может считаться малополезной. Слишком много — ухудшается читаемость и восприятие.
Слова из title 0 встречаются в тексте редко. Добавьте в контент страницы слова из тега <title>!
Абзацев с текстом 0 слишком мало. Добавьте больше абзацев с текстом (тег <p>)!
Среднее число слов в абзаце 0 слишком мало. Сделайте контент более читаемым!
Кол-во знаков контента 52 слишком мало. Добавьте больше текста!
Кол-во слов 9 слишком мало. Добавьте больше текста (минимум 400 слов)!
Заголовки
Ошибок нет
Иерархия заголовков H1–H6
?
H1 должен быть один и содержать ключевой запрос. H2–H6 описывают подразделы. Пропуск уровней (H1 → H3) и несколько H1 — типичные ошибки, снижающие понятность страницы для поисковика.
На странице присутствуют заголовки <h2> 4. Это хорошо.
Тошнота
1,41
Насколько одно слово доминирует в тексте
?
Классическая тошнота = √(частота самого повторяющегося слова). Норма до 7–8: текст воспринимается естественно. Выше — поисковик может счесть страницу переспамленной.
Тошнота страницы в пределах нормы 3.
Академич. тошнота
11,11%
Насколько текст перенасыщен ключевыми словами
?
Академическая тошнота = (частота слова / общее количество слов) × 100%. Показывает долю конкретного слова в тексте. Норма 5–15%.
Академическая тошнота страницы в пределах нормы.
Семантическое ядро
2
Наиболее часто встречающиеся слова на странице
?
Топ слов по частоте использования. Показывает, какие слова доминируют в тексте с точки зрения поисковика.
Контент страницы не содержит осмысленного текста. Добавьте текст на страницу!
Показать список слов
| Слово | Кол-во | Частота |
|---|---|---|
| content | 2 | 22,22% |
| loading | 1 | 11,11% |
Индексация Готовность: 30%
Индексирование
Есть ошибки
Разрешено ли индексирование страницы
?
Проверяет, не закрыта ли страница от индексации через robots.txt, meta robots или X-Robots-Tag. Страница, закрытая от индексации, не появится в поисковой выдаче.
Анкоров на странице 2 слишком мало или они запрещены к индексации. Добавьте новые страницы на сайт и расставьте ссылки на них на главной странице и в файле robots.txt.
Robots.txt
Найден корректный robots.txt
Файл управления сканированием сайта роботами
?
Robots.txt указывает поисковым роботам, какие страницы сканировать, а какие — нет. Ошибки в файле могут случайно закрыть важные разделы от индексации.
Кол-во редиректов для файла robots.txt 3 слишком большое! Это может вызывать затруднение при индексации поисковыми роботами!
Проверяемая страница не запрещена в robots.txt.
Robots.txt доступен по постоянному адресу
Цепочка редиректов для файла robots.txt:
http://trust.onespan.com/robots.txt
301 MovedPermanently
https://trust.onespan.com/robots.txt
301 MovedPermanently
https://support.onespan.com/csm
200 OK
Показать содержимое robots.txt
<!DOCTYPE html><html lang="en" dir="ltr" ng-app="sn.$sp" ng-init="portal_id = '89275a53cb13020000f8d856634c9c51'" style="height: 100%" class="page-{{page.sys_id}} v{{page.sys_id}} ltr sn-sp-page" data-page-id="{{page.sys_id}}"><head sp-metatags=""><base href="/csm"></base><link rel="preload" href="/styles/fonts/glyphicons-halflings-regular.woff2" as="font" crossorigin="anonymous"></link><link rel="preload" href="/scripts/icon-fonts/font-awesome/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" crossorigin="anonymous"></link><title>Customer Service Portal - Product Support</title><meta http-equiv="X-UA-Compatible" content="IE=edge; IE=10"></meta><meta name="viewport" content="width=device-width, initial-scale=1.0"></meta><meta name="mobile-web-app-capable" content="yes"></meta><meta http-equiv="cache-control" content="public"></meta><meta http-equiv="cache-control" content="no-cache"></meta><meta http-equiv="cache-control" content="max-age=0"></meta><meta http-equiv="pragma" content="no-cache"></meta><link href="OneSpan_Logo.png" rel="shortcut icon"></link><link href="images/mobile/apple_touch_snc.png?v=07-04-2026_0037" rel="apple-touch-icon"></link><link rel="stylesheet" href="styles/fonts/source-sans-pro/source-sans-pro-latin.css?v=4b4991a297360710ffdebc76f053af19" media="none" onload="if(media!='all')media='all'"></link><link rel="stylesheet" href="styles/css_includes_$sp.css?v=4b4991a297360710ffdebc76f053af19" media="none" onload="if(media!='all')media='all'"></link><link href="styles/scss/sp-bootstrap-rem.scss?portal_id=89275a53cb13020000f8d856634c9c51&theme_id=517030d1531032007a97e192d5dc34d8&v=4b4991a297360710ffdebc76f053af19&uxf_theme_id=null&uxf_theme_variant_id=null&is_rtl=false&sp_variant_m2m_id=" rel="stylesheet" type="text/css"></link><link rel="stylesheet" href="styles/css_includes_$sp_later.css?v=4b4991a297360710ffdebc76f053af19" media="none" onload="if(media!='all')media='all'"></link><link href="/styles/scss/csm-styles.scss?portal_id=5b49418bdb4aa200b1f6f78eaf96195f&c=434991a297360710ffdebc76f053af20" type="text/css" rel="stylesheet"></link><script data-description="NOW glide web analytics siteid and url">window.snWebaConfig = window.snWebaConfig || {};
// glide web analytics config
window.snWebaConfig.siteId = "0";
window.snWebaConfig.trackerURL = "";
window.snWebaConfig.webaScriptPath = "/scripts/piwik-3.1.1/thirdparty/piwik.min.js";
window.snWebaConfig.ambClient = (window.g_ambClient) ? window.g_ambClient : ((window.amb)? window.amb.getClient(): "");
window.snWebaConfig.subscribed = false;</script><script data-description="NOW session, user_name, etc">window.NOW = window.NOW || {};
// record watch / presence
window.NOW.session_id = '60BC912A97360710FFDEBC76F053AF0C';
window.NOW.user_name = 'guest';
window.NOW.user_id = '5136503cc611227c0183e96598c4f706';
window.NOW.user_display_name = 'Guest';
window.NOW.user_initials = 'G';
window.NOW.user_avatar = '';
window.NOW.presence_interval = 60;
window.NOW.record_presence_interval = 20;
window.NOW.ambConnected = false;</script><script data-description="NOW ucm, analytics related default props">window.NOW.analytics_enabled = false;
window.NOW.performance_monitoring_enabled = true;
window.NOW.sp_analytics_plugin_active = false;
window.NOW.sp_analytics_portal_override = false;
window.NOW.ucm_invocations = 0;
window.NOW.ucm_portal_id = '';
window.NOW.enable_new_web_sdk = false;
window.NOW.ux_collection_mode = 'Both';
window.NOW.usage_tracking = window.NOW.usage_tracking || {};
window.NOW.usage_tracking.ucm_encountered_exception = true;
window.NOW.usage_tracking.user_consent = 'NoConsentRequired';
window.NOW.user_impersonating = undefined;
window.NOW.usage_tracking.usage_tracking_allowed_for_session = false;
window.NOW.usage_tracking.tracking_enabled = false;
window.NOW.usage_tracking.consent_toggle_available = false;
window.NOW.instrumentation_authkey = '';
window.NOW.user_id_hashed = '591bce70be21e6b30a1d83d4b795b2d49f9d2bf53042cf3a779bc475729c5b26';
window.NOW.instrumentation_api_host = '';
window.NOW.instance_id = '7f985250dbfe670049eac59705961945';
window.NOW.instance_name = 'onespan';
window.NOW.domain_id = '';
window.NOW.unauthenticated_user_tracking_enabled = false;
window.NOW.isForceRestrictedPortal = false;</script><script data-description="NOW ucm, analytics related props">window.NOW.analytics_enabled = 'true' == 'true';
window.NOW.performance_monitoring_enabled = ('true' == 'true' && 'true' == 'true');
window.NOW.sp_analytics_plugin_active = true;
window.NOW.sp_analytics_portal_override = '' == 'true';
window.NOW.ucm_invocations = parseInt('');
window.NOW.ucm_portal_id = '';
window.NOW.enable_new_web_sdk = 'false' == 'true';
window.NOW.ux_collection_mode = 'Both';
window.NOW.usage_tracking = window.NOW.usage_tracking || {};
window.NOW.usage_tracking.user_consent = '';
window.NOW.user_impersonating = false;
window.NOW.usage_tracking.usage_tracking_allowed_for_session = '' == 'true';
window.NOW.usage_tracking.tracking_enabled = '' == 'true';
window.NOW.usage_tracking.consent_toggle_available = '' == 'true';
window.NOW.instrumentation_authkey = 'b39c0d3e97632110894df307f053af2b';
window.NOW.user_id_hashed = '591bce70be21e6b30a1d83d4b795b2d49f9d2bf53042cf3a779bc475729c5b26';
window.NOW.instrumentation_api_host = 'https://api-appsee.service-now.com';
window.NOW.instance_id = '7f985250dbfe670049eac59705961945';
window.NOW.instance_name = 'onespan';
window.NOW.domain_id = '';window.NOW.unauthenticated_user_tracking_enabled = false;window.NOW.isForceRestrictedPortal = false;</script><script data-description="NOW vars set by properties, custom events, g_* globals">
window.g_ck = 'e0bc912a97360710ffdebc76f053af0c58a9f4635f8081016ddee767a427495eb2cc4d2c';
window.g_spd = '' === 'true';
window.logged_in = false;
if (!window.NOW)
window.NOW = {};
window.NOW.ac_wait_time = parseInt(250, 10);
window.NOW.ac_max_search_matches = parseInt(100, 10);
window.NOW.sp_dual_list_default_view = '';
window.NOW.sp_debug = 'false' == 'true';
window.NOW.sp_show_console_error = 'true' == 'true' && false;
window.NOW.page_id = '';
window.NOW.portal_id = '89275a53cb13020000f8d856634c9c51';
window.NOW.uxf_theme_id='null';
window.NOW.uxf_theme_variant_id='null';
window.NOW.start_page_id = 'csm_index';
window.NOW.ais_enabled = 'false';
window.NOW.tablet_devices_regex = '.*(ipad|tablet|kindle|playbook|nexus (7|9|10)|galaxy tab|xoom|surface).*';
window.NOW.now_assist_enabled = 'false';
window.NOW.nava_enabled = 'false';
window.NOW.dynamic_chat_enabled = 'false';
window.NOW.ai_native_chat_enabled = 'false';
window.NOW.ai_native_dialog_enabled = 'false';
window.NOW.portal_url_suffix = 'csm';
window.NOW.has_access = 'true' === 'true';
window.NOW.portal_theme_id = '517030d1531032007a97e192d5dc34d8';
try {
window.NOW.matching_uxf_theme_details = JSON.parse('{\"matching_now_experience_theme_id\":\"\",\"matching_now_experience_theme_name\":\"\"}');
} catch(e) {
window.NOW.matching_uxf_theme_details = {};
}
try {
window.NOW.pages_with_tours = JSON.parse('[]');
} catch(e) {
window.NOW.pages_with_tours = [];
}
window.NOW.embeddables_enabled = 'false' == 'true';
window.NOW.embeddable_macroponents_list = '';
window.NOW.uxf_lib_asset_bundle_enabled = 'true' == 'true';
window.NOW.uxf_should_load_asset_bundles = 'false' == 'true';
// script checks for environment
// if (NOW.sp) ...
// added Aug 1, 2016
window.NOW.sp = {};
window.NOW.sp.version = {};
window.NOW.sp.version.major = 1;
window.NOW.sp.version.minor = 2;
window.NOW.sp.version.dot = 0;
window.NOW.sp.enableTours = 'true' == 'true';
window.NOW.sp.can_debug = ('false' == 'true' || 'true' == 'false') || false;
window.NOW.sp.enableDateTranslation = '' == 'true';
window.NOW.sp.widgetCSSIncludes = {};
window.NOW.sp.uxfThemeEnable = 'false' === 'true';
window.NOW.sp.aisDeferLoadEnabled = 'false' == 'true';
window.NOW.sp.uxpcb = '1787381974024';
window.NOW.sp.isPortalMesp = 'false' == 'true';
window.NOW.currency = {};
window.NOW.currency.code = 'USD';
window.NOW.locale = {};
window.NOW.locale.code = 'en_US';
window.NOW.hasAdvanceChat = "false" === "true";
try {
window.NOW.dateFormat = JSON.parse("{\"timeAgo\": false, \"dateBoth\": false}");
} catch (e) {
window.NOW.dateFormat = {timeAgo: false, dateBoth: false};
}
var timeleft = parseInt('2', 10);
window.NOW.session_timeleft = isNaN(timeleft) ? 120 : timeleft * 60;
window.NOW.forgetMe = 'true'
// SP Context Manager
window.NOW.sp_ctx_mgr_timeout = parseInt(5000, 10);
// SP doesn't define app resources yet
window.SN_APP_RESOURCES = {};
window.NOW.interactive_view_enabled = true;
// script globals
var g_tz_offset = 7200000;
var g_tz = 'Europe/Brussels';
var g_first_day_of_week = parseInt(1, 10);
var g_date_picker_first_day_of_week = parseInt(0, 10);
var g_notif_timeout = parseInt(5, 10);
var g_notification_threshold = parseInt(5, 10);
var g_ck = 'e0bc912a97360710ffdebc76f053af0c58a9f4635f8081016ddee767a427495eb2cc4d2c';
var g_searchWaitTime = 100;
var g_amb_on_login = false;
var g_lang = 'en';
var g_system_lang = "en";
var g_user_date_time_format = "yyyy-MM-dd HH:mm:ss";
var g_user_date_format = "yyyy-MM-dd";
var g_user_decimal_separator = ".";
var g_user_grouping_separator = ",";
var g_text_direction = "ltr";
var g_accessibility = "false";
var g_accessibility_resizeText = "true" === "true";
var g_accessibility_visual_patterns = false;
var g_accessibility_screen_reader_table = false;
var g_glide_list_separator = ", ";
var g_sort_elements_by_session_language = "true" == "true";
var g_dirty_form_warning_enabled = "true" == "true";
var g_mandatory_field_msg = 'The following fields are incomplete:';
var g_field_error_msg = 'The following fields contain errors:';
var g_choose_date_msg = 'Choose date';
var g_tinymce_remove_script_host = "true" == "true";
var g_tinymce_convert_urls = "false" == "true";
var g_tinymce_relative_urls = "true" == "true";
var g_datepicker_validation_enable = "true" == "true";
var g_choices_show_missing = "true" == "true";
var g_builddate = "07-04-2026_0037";
var g_has_agent_chat_config = "false" === "true";
var g_portal_isrtl= "false" === "true";
//TODO: remove the sys_id related change once from below line once we have tinymce with uxf variables
var g_portal_dark_theme_enabled = "false" === "true" || window.NOW.uxf_theme_variant_id != "null";
var g_user_is_admin = "false" === "true";
var g_persist_msgs_through_page_nav = "true" == "true";
var g_attachment_force_download_all_mime_types = "false" === "true";
var g_attachment_force_download_mime_type = "application/xml,text/html,image/svg,image/svg+xml";
var g_universal_link_flag = "false" === "true";
var g_sso_open_in_window = "false" === "true";
var g_user_login_method = "";
var g_ref_ac_startswith = "true" == "true";
Object.defineProperty(window, "g_prevent_access_from_console", {
value: "false" == "true",
writable: false
});
window.NOW.multisso_enabled = "true" === "true";
window.NOW.ui_scripts_version_map = '{\"sn_ex_sp.mespBasicMultiSelect\":105,\"AstContractClientSideWSAPI\":30,\"sn_ex_sp.mespReferenceMultiSelect\":314,\"sn_ex_sp.mespTabList\":6,\"sn_ciwf_ui_cmpnt.banner_carousel\":0,\"sn_ex_sp.MultiSelectOverride\":456,\"global.GlideScratchpadProxy\":1,\"global.JSLogProxy\":6,\"global.GlideUser Proxy\":9,\"sn_ciwf_ui_cmpnt.knowledge_quick_links\":0,\"jspdf.min.js\":0,\"global.DateTimeProxy\":20,\"WebAuthnUtil\":44,\"RiskAssessmentResults\":5,\"global.GetMessageProxy\":2,\"sn_ex_sp.ec_url_whitelist\":0,\"global.Browser Console Proxy\":9,\"sn_gf.FieldsBasedOnAutomateHandlerWS\":3,\"global.GlideAjaxProxy\":62,\"sn_ciwf_ui_cmpnt.faq\":0,\"sn_ciwf_ui_cmpnt.browse_taxonomy\":0,\"sn_ciwf_ui_cmpnt.tabs\":2,\"sn_ex_sp.mespBasicSingleSelect\":2,\"global.GlideServiceCatalogProxy\":1,\"global.GetMessagesProxy\":4,\"PmPreDatedTaskHandler\":64,\"sn_ciwf_ui_cmpnt.data_list\":4,\"utils.validators.email\":3,\"sp.validation.executor\":128,\"sn_ciwf_ui_cmpnt.banner\":0,\"sn_uxc_gen_ai.WWNACaretPosition\":18,\"sn_ciwf_ui_cmpnt.catalog_quick_links\":0,\"PmClientDateAndDurationHandler\":146,\"global.WindowProxy\":30,\"sn_ciwf_ui_cmpnt.case_cards\":1,\"jspdfautotable.js\":0,\"SkippedRecordRuleEngineUtils\":40,\"sn_ciwf_ui_cmpnt.advanced_list\":0,\"sn_ciwf_ui_cmpnt.object\":5,\"global.DateTimeConstantsProxy\":2}' ? JSON.parse('{\"sn_ex_sp.mespBasicMultiSelect\":105,\"AstContractClientSideWSAPI\":30,\"sn_ex_sp.mespReferenceMultiSelect\":314,\"sn_ex_sp.mespTabList\":6,\"sn_ciwf_ui_cmpnt.banner_carousel\":0,\"sn_ex_sp.MultiSelectOverride\":456,\"global.GlideScratchpadProxy\":1,\"global.JSLogProxy\":6,\"global.GlideUser Proxy\":9,\"sn_ciwf_ui_cmpnt.knowledge_quick_links\":0,\"jspdf.min.js\":0,\"global.DateTimeProxy\":20,\"WebAuthnUtil\":44,\"RiskAssessmentResults\":5,\"global.GetMessageProxy\":2,\"sn_ex_sp.ec_url_whitelist\":0,\"global.Browser Console Proxy\":9,\"sn_gf.FieldsBasedOnAutomateHandlerWS\":3,\"global.GlideAjaxProxy\":62,\"sn_ciwf_ui_cmpnt.faq\":0,\"sn_ciwf_ui_cmpnt.browse_taxonomy\":0,\"sn_ciwf_ui_cmpnt.tabs\":2,\"sn_ex_sp.mespBasicSingleSelect\":2,\"global.GlideServiceCatalogProxy\":1,\"global.GetMessagesProxy\":4,\"PmPreDatedTaskHandler\":64,\"sn_ciwf_ui_cmpnt.data_list\":4,\"utils.validators.email\":3,\"sp.validation.executor\":128,\"sn_ciwf_ui_cmpnt.banner\":0,\"sn_uxc_gen_ai.WWNACaretPosition\":18,\"sn_ciwf_ui_cmpnt.catalog_quick_links\":0,\"PmClientDateAndDurationHandler\":146,\"global.WindowProxy\":30,\"sn_ciwf_ui_cmpnt.case_cards\":1,\"jspdfautotable.js\":0,\"SkippedRecordRuleEngineUtils\":40,\"sn_ciwf_ui_cmpnt.advanced_list\":0,\"sn_ciwf_ui_cmpnt.object\":5,\"global.DateTimeConstantsProxy\":2}') : {};
var g_has_encryption_context = false;
var g_has_kmf_encryption = "" === "opt_in";
// PRB1395165: prevent ClientScriptScoper errors from scoped UI Scripts
ScopedGlideDialogWindowGenerator = function() { return null; };
ScopedGlideAjaxGenerator = function() { return null; };
ScopedGFormGenerator = function() { return null; };
window.NOW.req_has_lang = 'false' == 'true';
</script><script src="scripts/thirdparty/dompurify/purify.min.js?sysparm_substitute=false"></script><script type="text/javascript" src="/scripts/js_includes_sp_libs_min.jsx?v=07-04-2026_0037&lp=Tue_Jul_28_11_49_19_PDT_2026&c=20_630"></script><script type="text/javascript" src="/scripts/dist/sp_min.jsx?v=07-04-2026_0037"></script><script language="javascript" src="sn_csm_uni_theme.csm_util.jsdbx?c=24"></script><script type="text/javascript" src="scripts/bootstrap-datetimepicker.js?v=07-04-2026_0037"></script><script type="text/javascript" src="/scripts/GlideFlow.js?v=07-04-2026_0037"></script><link rel="stylesheet" type="text/css" href="/aae4f7dc23330300c6bf121727bf6584.spcssdbx?c=123&portal=89275a53cb13020000f8d856634c9c51&theme=517030d1531032007a97e192d5dc34d8"></link><script type="text/javascript" src="/app_com.jsdbx?c=21"></script><script type="text/javascript" src="/app_com.modelUtil.jsdbx?c=20"></script><script type="text/javascript" src="/app_com.cxs.contextual_search.jsdbx?c=56"></script><link rel="stylesheet" type="text/css" href="/styles/retina_icons/retina_icons.css?v=07-04-2026_0037"></link><script data-description="set sp.dependencies">(function(){
angular.module('sp.dependencies', ["sn.app_common.cxs"]);
var portal = JSON.parse('{\"sqanda_knowledge_base_dv\":\"\",\"sc_category_page_dv\":\"\",\"sc_catalog\":\"65bcd377c3011200b12d9f2974d3aea0\",\"ts_index_group\":\"2c3e7d1513c93300e618bfd63244b0d7\",\"sc_catalog_page\":\"fe87a11147132100ba13a5554ee490b9\",\"ts_index_group_dv\":\"portal_index_group\",\"enable_favorites\":false,\"inactive\":false,\"alternate_portal_dv\":\"\",\"notfound_page_dv\":\"404\",\"logo\":\"8977153b8779911052da64a80cbb3594.iix\",\"sys_name\":\"Product Support\",\"enable_local_login\":false,\"quick_start_config\":\"[{\\n\\t\\\"tagline\\\": {\\n\\t\\t\\\"table\\\" : \\\"sp_instance\\\",\\n\\t\\t\\\"sys_id\\\" : \\\"ffb9c4b7cb01120000f8d856634c9c53\\\",\\n\\t\\t\\\"field\\\" : \\\"title\\\"\\n\\t},\\n\\t\\\"hero_background\\\": {\\n\\t\\t\\\"table\\\" : \\\"sp_container\\\",\\n\\t\\t\\\"sys_id\\\" : \\\"14bed744cb01120000f8d856634c9c2e\\\",\\n\\t\\t\\\"field\\\" : \\\"background_image\\\"\\n\\t},\\n\\t\\\"footerMenu\\\": {\\\"sys_id\\\" : \\\"f01612cf3b643200367aee1234efc48e\\\"},\\n\\t\\\"secondaryMenu\\\": {\\\"sys_id\\\": \\\"53616d1e3b013200367aee1234efc439\\\"},\\n\\t\\\"default_interaction_queue\\\": \\\"0e4d82d0738513000f4012562ef6a772\\\",\\n\\t\\\"isCSMPortal\\\": true\\n}]\",\"css_variables\":\"$brand-primary:#00D9AD;\\n$body-bg:#fefefe;\\n$state-success-text:#5cb85c;\\n$sp-homepage-bg:#fff;\\n$sp-navbar-divider-color:#fff;\\n$text-color:#717171;\\n$sp-logo-margin-y:5px;\\n$navbar-inverse-link-hover-color:#E6E7E8;\\n$panel-bg:#fff;\\n$brand-success:#5cb85c;\\n$navbar-inverse-bg:#008598;\\n$brand-warning:#f0ad4e;\\n$brand-danger:#cf1d25;\\n$sp-tagline-color:#fff;\\n$navbar-inverse-link-color:#fff;\\n$brand-info:#008598;\\n$link-color:#428bca;\\n$sp-logo-margin-x:10px;\\n$btn-default-bg:#fff;\\n$text-muted:#bdc0c4;\\n\",\"enable_early_redirection\":false,\"sp_chat_queue_dv\":\"Customer Service\",\"enable_certificate_based_authentication\":false,\"kb_knowledge_base\":\"05ff44289f011200550bf7b6077fcfa3\",\"sp_rectangle_menu\":\"4a5303ee3b103200367aee1234efc496\",\"icon\":\"\",\"kb_knowledge_page_dv\":\"kb_view2\",\"title\":\"Product Support\",\"sys_class_name\":\"sp_portal\",\"sys_id\":\"89275a53cb13020000f8d856634c9c51\",\"theme_dv\":\"CSM Default\",\"default\":true,\"enable_ais\":false,\"homepage_dv\":\"csm_index\",\"sc_catalog_dv\":\"Customer Service\",\"sp_rectangle_menu_dv\":\"CSM Unified Portal Header Menu\",\"theme\":\"517030d1531032007a97e192d5dc34d8\",\"sp_chat_queue\":\"4bc7a3f3c31331001c845cb981d3ae44\",\"sys_scope\":\"global\",\"search_results_configuration_dv\":\"\",\"sc_catalog_page_dv\":\"sc_home\",\"hide_portal_name\":false,\"sys_class_name_dv\":\"Service Portal\",\"search_application_dv\":\"\",\"enable_portal_authentication\":false,\"kb_knowledge_page\":\"26c2e030d7201200a9addd173e24d437\",\"sys_tags\":\"\",\"login_page_dv\":\"csm_login\",\"rtl_enabled\":false,\"notfound_page\":\"3c2c9063cb11020000f8d856634c9c1f\",\"kb_knowledge_base_dv\":\"Customer Service\",\"enable_embeddables\":false,\"login_page\":\"a0e3b3acc3521200b0449f2974d3ae14\",\"url_suffix\":\"csm\",\"dark_theme_dv\":\"\",\"homepage\":\"eb84cfd7cb13020000f8d856634c9c4b\"}');
var portalId = portal.sys_id;
var portalLogoData = JSON.parse('{\"logo_alt_text\":\"\",\"logo\":\"8977153b8779911052da64a80cbb3594.iix\"}');
portal.logo = portalLogoData.logo;
portal.logo_alt_text = portalLogoData.logo_alt_text;
angular.module('sp.pageData', []).factory('spPageData', function() {
return {
getPortal: function () {
return portal;
}
}
});
})();</script><script>$(document).ready(function() {
if ('ontouchstart' in window || (navigator.maxTouchPoints !== 'undefined' && navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints !== 'undefined' && navigator.msMaxTouchPoints > 0)) {
$("body").addClass('touch_scroll');
}
});</script><style type="text/css">.gsfBackground {
border-color: #fff779;
font-size: 16;
margin-bottom: 5;
}</style></head><body class=" windows chrome " ng-class="[main.style, 'false' == 'true' ? 'has-agent-chat' : '', 'false' == 'true' || 'null' != 'null' ? 'dark-theme' : '' ]" ng-cloak="true" ng-controller="spPageCtrl as main" accessibility="false"><div class="flex-row sp-na-root-container"><div class="sp-page-root page flex-column" id="sp-main-wrapper" ng-class="{'sp-loading': main.firstPage, 'sp-can-animate': main.doAnimate}"><div ng-if="main.firstPage" class="sp-page-loader h4" role="status"> <fa name="spinner" spin="true"></fa> Loading...</div><div><sn-banner banner-api-url="bannerApiUrl"></sn-banner></div><header ng-if="theme.header && theme.navbar_fixed" role="banner"><div class="skip-links-container"><a class="skip-link sr-only" ng-click="main.focusOnPageTitle(true, $event)" href="javascript:void(0)">Skip to page content</a></div><sp-announcements></sp-announcements><sp-widget widget="theme.header" page="page"></sp-widget><div ng-if="subheader" ng-repeat="subheader in subheaders" ng-switch="subheader.semantic_tag" ng-style="main.parseJSON(subheader.background)" ng-class="::[subheader.class_name, 'c' + subheader.sys_id]"><sp-semantic-element ng-if="spSemanticService.isValidTag(subheader.semantic_tag)" tag="{{subheader.semantic_tag}}" ng-class="::main.getContainerClasses(subheader)" aria-label="{{subheader.aria_label}}" role="{{getRoleForTag(subheader.semantic_tag)}}"><sp-page-row ng-repeat="row in ::subheader.rows" columns="::row.columns" row="::row" container="::subheader"></sp-page-row></sp-semantic-element><div ng-if="!spSemanticService.isValidTag(subheader.semantic_tag)" ng-class="::main.getContainerClasses(subheader)"><sp-page-row ng-repeat="row in ::subheader.rows" columns="::row.columns" row="::row" container="::subheader"></sp-page-row></div></div></header><sp-notifications></sp-notifications><div class="sp-page-loader-mobile visible-xs visible-sm sp-loading-indicator la-sm" ng-class="{invisible: main.firstPage || !main.loadingIndicator}"><div></div><div></div><div></div></div><section ng-switch="page.has_custom_main_tag" class="flex-grow page sp-scroll flex-column" role="presentation" tabindex="-1"><header ng-if="theme.header && !theme.navbar_fixed" role="banner"><div class="skip-links-container"><a class="skip-link sr-only" ng-click="main.focusOnPageTitle(true, $event)" href="javascript:void(0)">Skip to page content</a></div><sp-announcements></sp-announcements><sp-widget widget="theme.header" page="page"></sp-widget><div ng-if="subheader" ng-repeat="subheader in subheaders" ng-switch="subheader.semantic_tag" ng-style="main.parseJSON(subheader.background)" ng-class="::[subheader.class_name, 'c' + subheader.sys_id]"><sp-semantic-element ng-if="spSemanticService.isValidTag(subheader.semantic_tag)" tag="{{subheader.semantic_tag}}" ng-class="::main.getContainerClasses(subheader)" aria-label="{{subheader.aria_label}}" role="{{getRoleForTag(subheader.semantic_tag)}}"><sp-page-row ng-repeat="row in ::subheader.rows" columns="::row.columns" row="::row" container="::subheader"></sp-page-row></sp-semantic-element><div ng-if="!spSemanticService.isValidTag(subheader.semantic_tag)" ng-class="::main.getContainerClasses(subheader)"><sp-page-row ng-repeat="row in ::subheader.rows" columns="::row.columns" row="::row" container="::subheader"></sp-page-row></div></div></header><header ng-if="!theme.header" role="banner"><sp-announcements></sp-announcements></header><main ng-switch-when="false" class="body padding-top flex-grow" data-page-id="{{page.sys_id}}" data-page-title="{{page.title}}" role="main"><sp-aria-page-title page-title="page.title"></sp-aria-page-title><div ng-switch="container.semantic_tag" ng-repeat="container in containers" ng-style="main.parseJSON(container.background)" ng-class="::[container.class_name, 'c' + container.sys_id]"><sp-semantic-element ng-if="spSemanticService.isValidTag(container.semantic_tag)" tag="{{container.semantic_tag}}" ng-class="::main.getContainerClasses(container)" aria-label="{{container.aria_label}}" role="{{getRoleForTag(container.semantic_tag)}}"><h2 class="sr-only" ng-if="::container.title" ng-bind="::container.title"></h2><sp-page-row ng-repeat="row in ::container.rows track by row.sys_id" columns="::row.columns" row="::row" container="::container"></sp-page-row></sp-semantic-element><div ng-if="!spSemanticService.isValidTag(container.semantic_tag)" ng-class="::main.getContainerClasses(container)"><h2 class="sr-only" ng-if="::container.title" ng-bind="::container.title"></h2><sp-page-row ng-repeat="row in ::container.rows track by row.sys_id" columns="::row.columns" row="::row" container="::container"></sp-page-row></div></div></main><div ng-switch-default="" class="body padding-top flex-grow" data-page-id="{{page.sys_id}}" data-page-title="{{page.title}}"><sp-aria-page-title page-title="page.title"></sp-aria-page-title><div ng-switch="container.semantic_tag" ng-repeat="container in containers" ng-style="main.parseJSON(container.background)" ng-class="::[container.class_name, 'c' + container.sys_id]"><sp-semantic-element ng-if="spSemanticService.isValidTag(container.semantic_tag)" tag="{{container.semantic_tag}}" ng-class="::main.getContainerClasses(container)" aria-label="{{container.aria_label}}" role="{{getRoleForTag(container.semantic_tag)}}"><h2 class="sr-only" ng-if="::container.title" ng-bind="::container.title"></h2><sp-page-row ng-repeat="row in ::container.rows track by row.sys_id" columns="::row.columns" row="::row" container="::container"></sp-page-row></sp-semantic-element><div ng-if="!spSemanticService.isValidTag(container.semantic_tag)" ng-class="::main.getContainerClasses(container)"><h2 class="sr-only" ng-if="::container.title" ng-bind="::container.title"></h2><sp-page-row ng-repeat="row in ::container.rows track by row.sys_id" columns="::row.columns" row="::row" container="::container"></sp-page-row></div></div></div><footer ng-if="!main.isObjectEmpty(theme.footer) && !theme.footer_fixed"><sp-widget widget="theme.footer"></sp-widget></footer></section><footer ng-if="!main.isObjectEmpty(theme.footer) && theme.footer_fixed"><sp-widget widget="theme.footer"></sp-widget></footer></div></div><sp-aria-live></sp-aria-live><script id="sp_page_row_content.xml" type="text/ng-template"><div ng-repeat="column in columns track by column.sys_id" ng-switch="column.semantic_tag" class="{{::column.class_name}} {{(!container.bootstrap_alt) ? column.size_classes : ''}}"><div ng-switch-default="" ng-if="!spSemanticService.isValidTag(column.semantic_tag)" ng-repeat="row in column.rows track by row.sys_id" class="repeated-row-container"><sp-page-row columns="row.columns" row="row" container="container"></sp-page-row></div><span ng-if="!spSemanticService.isValidTag(column.semantic_tag)" ng-switch-default="" ng-repeat="rectangle in column.widgets track by rectangle.instance_id"><sp-widget widget="rectangle.widget"></sp-widget></span><sp-semantic-element ng-if="spSemanticService.isValidTag(column.semantic_tag)" tag="{{column.semantic_tag}}" role="{{getRoleForTag(column.semantic_tag)}}" aria-label="{{column.aria_label}}"><div ng-repeat="row in column.rows track by row.sys_id" class="repeated-row-container"><sp-page-row columns="row.columns" row="row" container="container"></sp-page-row></div><span ng-repeat="rectangle in column.widgets track by rectangle.instance_id"><sp-widget widget="rectangle.widget"></sp-widget></span></sp-semantic-element></div></script><script id="sp_image_chooser.xml" type="text/ng-template"><div class="sp-image-chooser-div"><input id="imageChooser{{ field.name }}" type="file" style="display: none;" ng-file-select="fileSelect($files, field)"></input><img ng-show="field.value" style="max-height: 200px; max-width: 200px;" ng-src="{{ field.value }}"></img><span ng-show="disabled() && !field.value">No image</span><span ng-show="!disabled()"><a ng-show="!field.value" style="margin: 5px;" class="btn btn-default" ng-click="clickChoose()">Choose</a><a ng-show="field.value" style="margin: 5px;" class="btn btn-default" ng-click="clickChoose()">Change</a><a ng-show="field.value" style="margin: 5px;" class="btn btn-default" ng-click="clickClear()">Remove</a></span></div></script><script id="sp_dialog.xml" type="text/ng-template"><span><div sn-dialog="true" disable-auto-focus="true" name="{{name}}" modal="true" role="dialog" aria-labelledby="dialog-title" context="parms" class="sp-message-dialog {{ dialogClass }}"><div class="sp-message-dialog-title" id="dialog-title"><div class="sp-message-dialog-title-inner">{{title}}</div></div><div class="sp-message-dialog-content "><div class="sp-message-dialog-content-block">{{message}}</div><div class="sp-message-dialog-content-block" ng-if="parms.details">{{parms.details}}</div><div class="sp-message-dialog-content-block" ng-if="question">{{question}}</div><div class="sp-message-dialog-content-block" ng-if="checkboxMessage"><div class="pull-left"><input type="checkbox" class="sp-message-dialog-content-input-field" ng-model="checkboxModel.value" ng-change="update()"></input></div><div class="pull-left">{{checkboxMessage}}</div></div></div><div class="sp-message-dialog-buttons"><button class="btn btn-cancel sp-message-dialog-cancel-button" title="{{cancel}}" ng-click="parms.cancel()" ng-if="cancel">{{cancel}}</button><button class="btn btn-primary sp-field-elem-margin" title="{{ok}}" ng-click="parms.ok()" ng-if="ok">{{ok}}</button></div></div></span></script><script id="sp_page_row" type="text/ng-template"><div ng-if="!spSemanticService.isValidTag(row.semantic_tag)" ng-include="'sp_page_row_content.xml'" class="sp-row-content {{::row.class_name}} {{(!container.bootstrap_alt) ? 'row' : ''}}"></div><sp-semantic-element ng-if="spSemanticService.isValidTag(row.semantic_tag)" tag="{{row.semantic_tag}}" role="{{getRoleForTag(row.semantic_tag)}}" aria-label="{{row.aria_label}}" class-name="sp-row-content {{::row.class_name}} {{(!container.bootstrap_alt) ? 'row' : ''}}"><ng-include src="'sp_page_row_content.xml'"></ng-include></sp-semantic-element></script><script id="sp_form_field.xml" type="text/ng-template"><div class="form-group" ng-class="{'form-group-has-focus': hasValueOrFocus()}"><div ng-if="::c.showLabel(field)" role="group" aria-labelledby="sp_field_label_{{::field.name}}"><label class="field-label field-label-question" for="sp_formfield_{{::(field.type=='html' || field.type=='translated_html') ? (field.sys_id || field.name) : field.name }}"><span class="field-decorations" ng-click="handleClickInMobileView($event)"><span ng-if="field.mandatory" class="fa fa-asterisk mandatory sp-field-label-padding" ng-class="{'mandatory-filled': field.mandatory_filled()}" aria-label="{{field.mandatory_filled()? 'Required Filled ' : 'Required '}}" ng-attr-aria-hidden="{{getFieldAriaHidden(field)}}" role="img"></span><span ng-repeat="decoration in field.decorations" ng-if="!field._cat_variable || (field._cat_variable === true && decoration.icon !== 'icon-ai-sparkle-fill') " class="decoration {{decoration.icon}}" title="{{decoration.text}}" data-toggle="tooltip" data-placement="right"></span></span><span id="sp_field_label_{{::field.name}}" class="sp-field-label-padding" ng-attr-title="{{::accessible ? undefined : field.hint}}" data-placement="right" data-toggle="tooltip" ng-attr-aria-label="{{::accessible && field.hint ? field.label : getFieldAriaLabel(field)}}">{{field.label}}</span><sp-ai-tag ng-if="field.hasAiSparkle"></sp-ai-tag><sp-help-tag field="::field" ng-if="::(accessible && field.hint && !field.help_text && !field.instructions)"></sp-help-tag><sp-help-tag field="::field" ng-if="::(field.help_text || field.instructions)"></sp-help-tag></label></div><span class="type-{{::field.type}} field-actual question-width" ng-switch="::field.type" ng-class="{'state-mandatory': field.mandatory, 'state-readonly': field.read_only, 'state-hidden': field.hidden, 'has-error': field.isInvalid}"><span ng-switch-when="boolean"><label title="{{::field.hint}}" data-placement="right" data-toggle="tooltip"><input type="checkbox" name="{{::field.name}}" ng-model="fieldValue" ng-if="!fieldRerendering" ng-true-value="'true'" ng-false-value="'false'" ng-model-options="{getterSetter: true}" aria-disabled="{{field.isReadonly()}}" ng-readonly="field.isReadonly()" aria-readonly="{{field.isReadonly()}}" ng-click="handleClick($event)" id="sp_formfield_{{::field.name}}" aria-required="{{field.isMandatory()}}" aria-labelledby="label_{{::field.name}} tooltip_{{::field.name}}"></input><span class="boolean-control" id="label_{{::field.name}}"><span ng-if="field._parent && !formModel._fields[field._parent].render_label && formModel._fields[field._parent].mandatory && formModel._fields[field._parent].isVisible()" class="fa fa-asterisk mandatory sp-field-label-padding" ng-class="{'mandatory-filled': formModel._fields[field._parent].mandatory_filled()}" title="Required" aria-label="{{formModel._fields[field._parent].mandatory_filled()? 'Required Filled ' : 'Required '}}" ng-attr-aria-hidden="{{getFieldAriaHidden(field)}}" role="img"></span><span ng-if="!field._parent && !field.render_label && field.mandatory && field.isVisible()" class="fa fa-asterisk mandatory sp-field-label-padding" ng-class="{'mandatory-filled': field.mandatory_filled()}" title="Required" aria-label="field.mandatory_filled()? 'Required Filled ' : 'Required '}}" ng-attr-aria-hidden="{{getFieldAriaHidden(field)}}" role="img"></span>{{field.label}}<span ng-if="::enhancePriceLabels(field)" class="inline">{{getCheckBoxPrice(field)}}</span></span></label><span class="sr-only" id="tooltip_{{::field.name}}">{{::field.hint}}</span><sp-ai-tag ng-if="field.hasAiSparkle"></sp-ai-tag></span><sp-assessment-details ng-if="::field.details" html-details="field.details" label="field.label" padding-required="true" field-id="field.sys_id" clamp-line="6" ng-class="{'text-center': formModel.is_kiosk_survey}"></sp-assessment-details><sp-choice-list ng-switch-when="choice" field="field" glide-form="getGlideForm()" default-value-setter="setDefaultValue(fieldName,fieldInternalValue,fieldDisplayValue)" sn-options="{placeholder: field.placeholder}"></sp-choice-list><span ng-switch-when="boolean_confirm"><span class="fa fa-asterisk mandatory sp-field-label-padding" ng-class="{'mandatory-filled': field.mandatory_filled()}" title="Required"></span><label title="{{::field.hint}}" data-placement="right" data-toggle="tooltip" for="sp_formfield_{{::field.name}}"><input type="checkbox" name="{{::field.name}}" ng-model="fieldValue" ng-if="!fieldRerendering" ng-true-value="'true'" ng-false-value="'false'" ng-model-options="{getterSetter: true}" ng-readonly="field.isReadonly()" aria-readonly="{{field.isReadonly()}}" aria-disabled="{{field.isReadonly()}}" ng-click="handleClick($event)" id="sp_formfield_{{::field.name}}"></input><span class="boolean-control"><span class="sr-only" ng-show="!field.mandatory_filled()">Required -</span><span class="sr-only" ng-show="field.mandatory_filled()">Required Filled -</span>{{field.label}}</span></label><span class="sr-only">{{::field.hint}}</span><span ng-if="::field._pricing">{{getCheckBoxPrice(field)}}</span></span><sp-color-picker ng-switch-when="color" field="field" glide-form="getGlideForm()" sn-change="fieldValue(newValue)" sn-disabled="field.isReadonly()" ng-if="c.depsLoaded"></sp-color-picker><sp-css-editor ng-switch-when="css" class="form-control" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded"></sp-css-editor><span ng-switch-when="currency2|document_id|domain_id|schedule_date_time|integer_date" class="padder" ng-switch-when-separator="|">{{field.displayValue}}</span><sp-duration-element ng-switch-when="glide_duration" field="field" ng-model="fieldValue" ng-model-options="{getterSetter: true}"></sp-duration-element><sp-url-element ng-switch-when="url" name="{{::field.name}}" field="field"></sp-url-element><sp-link-element ng-switch-when="link" name="{{::field.name}}" field="field"></sp-link-element><sn-field-reference ng-switch-when="field_name" field="field" id="sp_formfield_{{::field.name}}" glide-form="getGlideForm()" sn-change="fieldValue(newValue)" sn-disabled="field.isReadonly()"></sn-field-reference><sn-field-list-element ng-switch-when="field_list" field="field" glide-form="getGlideForm()" sn-disabled="field.isReadonly()" sn-change="fieldValue(newValue, displayValue)"></sn-field-list-element><sp-date-picker sn-change="fieldValue(newValue, displayValue)" ng-switch-when="glide_date" field="field" sn-disabled="field.isReadonly()" ng-model="field.stagedValue" ng-model-options="{getterSetter: true}"></sp-date-picker><sp-date-picker sn-change="fieldValue(newValue, displayValue)" ng-switch-when="glide_date_time" field="field" sn-disabled="field.isReadonly()" ng-model="field.stagedValue" ng-model-options="{getterSetter: true}" sn-include-time="true"></sp-date-picker><sp-reference-element ng-switch-when="glide_list" field="field" sn-select-width="100%" ref-table="::formModel.table" ref-id="formModel.sys_id" glide-form="getGlideForm()" record-values="getEncodedRecordValues()" sn-options="{multiple: true, placeholder: field.placeholder}" sn-disabled="field.isReadonly()"></sp-reference-element><sp-glyph-picker ng-switch-when="glyphicon" field="field" sn-disabled="field.isReadonly()"></sp-glyph-picker><sp-html-editor ng-switch-when="xml" field="field" id="sp_formfield_{{::field.name}}" class="form-control" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded"></sp-html-editor><sp-html-editor ng-switch-when="html_template" class="form-control" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded"></sp-html-editor><sp-script-editor ng-switch-when="json" class="form-control" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded" ng-model="field.stagedValue"></sp-script-editor><sp-mask-element ng-switch-when="masked" field="field" placeholder="field.placeholder" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" glide-form="getGlideForm()"></sp-mask-element><sp-radio-option ng-switch-when="multiple_choice" glide-form="getGlideForm()" field="field" cat-item-sys-id="formModel.sys_id"></sp-radio-option><sp-radio-option ng-switch-when="numericscale" glide-form="getGlideForm()" field="field" cat-item-sys-id="formModel.sys_id"></sp-radio-option><sp-textarea ng-switch-when="multi_two_lines" field="field" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" autocomplete="{{getAutocompleteValue()}}" class="form-control" ng-model="field.stagedValue" ng-change="stagedValueChange()" data-type="{{::field.type}}" ng-readonly="field.isReadonly()" aria-invalid="{{field.isInvalid || false}}" glide-form="getGlideForm()"></sp-textarea><sp-textarea ng-switch-when="multi_small" field="field" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" autocomplete="{{getAutocompleteValue()}}" class="form-control multi-small" ng-model="field.stagedValue" ng-change="stagedValueChange()" data-type="{{::field.type}}" ng-readonly="field.isReadonly()" aria-invalid="{{field.isInvalid || false}}" glide-form="getGlideForm()"></sp-textarea><sp-currency-element ng-switch-when="price" field="field" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()"></sp-currency-element><sp-currency-element ng-switch-when="currency" field="field" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()"></sp-currency-element><input ng-switch-when="password" type="password" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" autocomplete="off" class="form-control" ng-model="field.stagedValue" ng-change="stagedValueChange()" ng-disabled="field.isReadonly()"></input><input ng-switch-when="password2" type="password" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" autocomplete="off" class="form-control" ng-model="field.stagedValue" ng-change="stagedValueChange()" ng-disabled="field.isReadonly()"></input><sp-code-mirror ng-switch-when="properties" class="form-control" mode="properties" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded"></sp-code-mirror><sp-reference-field ng-switch-when="reference" id="sp_formfield_reference_{{::field.name}}" tabindex="-1" ng-class="{'field-has-reference': field.value != '', 'field-empty-reference': field.value == ''}"></sp-reference-field><sp-script-editor ng-switch-when="script_server" class="form-control" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded" ng-model="field.stagedValue"></sp-script-editor><sp-script-editor ng-switch-when="script" class="form-control" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded" es-latest-version="formModel._fields[field.name].useEsLatest" ng-model="field.stagedValue"></sp-script-editor><sp-script-editor ng-switch-when="script_plain" class="form-control" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded" es-latest-version="formModel._fields[field.name].useEsLatest" ng-model="field.stagedValue"></sp-script-editor><sn-table-reference ng-switch-when="table_name" field="field" sn-change="fieldValue(newValue)" sn-disabled="field.isReadonly()"></sn-table-reference><sp-textarea ng-switch-when="textarea" field="field" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" class="form-control" ng-model="field.stagedValue" ng-change="stagedValueChange()" data-type="{{::field.type}}" ng-readonly="field.isReadonly()" autocomplete="{{getAutocompleteValue()}}" aria-invalid="{{field.isInvalid || false}}" glide-form="getGlideForm()"></sp-textarea><sp-tinymce-editor ng-switch-when="html" id="sp_formfield_{{::field.name}}" ng-attr-tabindex="{{field.isReadonly() ? undefined : '-1'}}" name="{{::field.name}}" text-id="sp_formfield_{{::field.sys_id || field.name}}" ng-model="field.stagedValue" ng-model-options="{getterSetter: true}" sn-blur="fieldValue(field.stagedValue)" field="field" glide-form="getGlideForm()" ng-change="stagedValueChange()" attachment-guid="c.getAttachmentGuid()"></sp-tinymce-editor><sp-tinymce-editor ng-switch-when="translated_html" id="sp_formfield_{{::field.name}}" ng-attr-tabindex="{{field.isReadonly() ? undefined : '-1'}}" name="{{::field.name}}" text-id="sp_formfield_{{::field.sys_id || field.name}}" ng-model="field.stagedValue" sn-blur="fieldValue(field.stagedValue)" ng-model-options="{getterSetter: true}" field="field" glide-form="getGlideForm()" ng-change="stagedValueChange()" attachment-guid="c.getAttachmentGuid()"></sp-tinymce-editor><span ng-switch-when="user_image"><img ng-if="field.displayValue" ng-src="{{field.displayValue}}" style="max-height: 128px; max-width: 128px;"></img><sn-image-uploader ng-if="!field.isReadonly()" table-name="{{formModel.table}}" sys-id="{{formModel._attachmentGUID || formModel.sys_id}}" field-name="{{::field.name}}" field-label="{{::field.label}}" read-only="field.isReadonly()" on-upload="onImageUpload(thumbnail, sys_id)" on-delete="onImageDelete()" upload-message="{{field.isMandatory() && !field.mandatory_filled() ? 'Required -' : ''}} Upload an image" src="field.displayValue"></sn-image-uploader></span><sp-widget ng-switch-when="widget" widget="field.widget" page="{g_form: getGlideForm(), field: field, fieldValue: fieldValue}"></sp-widget><sp-widget ng-switch-when="widget_value" widget="field.widget" page="{g_form: getGlideForm(), field: field, fieldValue: fieldValue}"></sp-widget><span ng-switch-when="integer"><input name="{{::field.name}}" id="sp_formfield_{{::field.name}}" class="form-control" ng-readonly="field.isReadonly()" ng-model="field.stagedValue" ng-change="stagedValueChange()" ng-blur="formatNumber()" autocomplete="{{getAutocompleteValue()}}" ng-attr-placeholder="{{field.placeholder}}"></input></span><span ng-switch-when="decimal|float" ng-switch-when-separator="|"><input name="{{::field.name}}" id="sp_formfield_{{::field.name}}" class="form-control" ng-readonly="field.isReadonly()" ng-model="field.stagedValue" ng-change="stagedValueChange()" ng-blur="formatNumber()" autocomplete="{{getAutocompleteValue()}}"></input></span><sp-catalog-variable ng-if="field._cat_variable" ng-switch-when="sc_multi_row"></sp-catalog-variable><sp-email-element ng-switch-when="email" field="field" glide-form="getGlideForm()"></sp-email-element><sp-rich-text-label ng-switch-when="rich_text_label" field="field"></sp-rich-text-label><sp-variable-attachment ng-switch-when="sc_attachment" field="field" attachment-guid="formModel._attachmentGUID || formModel.sys_id" g-form="getGlideForm()"></sp-variable-attachment><sp-file-attachment ng-switch-when="file_attachment" field="field" attachment-guid="formModel._attachmentGUID || formModel.sys_id" g-form="getGlideForm()"></sp-file-attachment><span ng-switch-default="true"><input sp-ignore-composition="" ng-if="::!c.isTextArea(field)" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" ng-trim="false" class="form-control" maxlength="{{::field.max_length}}" data-type="{{::field.type}}" ng-model="field.stagedValue" ng-model-options="{allowInvalid: true}" ng-change="stagedValueChange()" autocomplete="{{getAutocompleteValue()}}" ng-readonly="field.isReadonly()" ng-attr-placeholder="{{field.placeholder}}" type="text" aria-required="{{field.isMandatory()}}" aria-invalid="{{field.isInvalid || false}}" aria-label="{{field.label}}"></input><sp-textarea ng-if="::c.isTextArea(field)" field="field" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" class="form-control" data-type="{{::field.type}}" ng-model="field.stagedValue" ng-model-options="{allowInvalid: true}" ng-change="stagedValueChange()" autocomplete="{{getAutocompleteValue()}}" ng-readonly="field.isReadonly()" aria-invalid="{{field.isInvalid || false}}" glide-form="getGlideForm()"></sp-textarea></span></span><div ng-show="field.messages" id="sp_formfield_{{::field.name}}_fieldmsgs_container"><div ng-repeat="message in field.messages | unique: 'message'" class="wrapper-xs r m-t-xs" ng-class="{'bg-danger': message.type == 'error', 'bg-warning': message.type == 'warning', 'bg-info': message.type == 'info'}">{{message.message}}</div></div></div></script><script id="sp_reference_field.xml" type="text/ng-template"><span class="ref-picker-container"><div class="add-on" ng-if="field.value != ''"><button type="button" class="btn btn-default bg-white lookup" ng-click="openReference(field, formModel.view)" ng-disabled="field.isReadonly() && !field.readonlyClickthrough" data-original-title="{{field.label}}, Preview this record {{field.displayValue}}" data-toggle="tooltip" data-placement="top" aria-label="{{field.label}}, Preview this record {{field.displayValue}}"><span class="fa fa-info-circle"></span></button></div><div class="reference"><sp-reference-element field="field" sn-select-width="100%" ref-table="formModel.table" ref-id="formModel.sys_id" glide-form="getGlideForm()" sn-options="{placeholder: field.placeholder}" record-values="getEncodedRecordValues()" sn-disabled="field.isReadonly()" label-id="sp_reference_element_sr_{{::field.name}}"></sp-reference-element></div></span></script><script id="sp_model.xml" type="text/ng-template"><div><sp-variable-layout ng-if="!delayView" ng-attr-id="{{::formModel.table}}.do" embedded_in_modal="embeddedInModal"></sp-variable-layout><div ng-init="execItemScripts()"></div></div></script><script id="sp_editable_field.xml" type="text/ng-template"><span><small ng-if="block && fieldModel.displayValue" class="text-muted">{{fieldModel.label}}</small><span class="sp-editable-field" ng-style="blockDisplay" ng-class="{'editable-underline': editable}"><span ng-if="editable" ng-class="{'text-muted': !fieldModel.displayValue}" uib-popover-template="'sp_editable_popover.xml'" popover-placement="auto bottom" popover-is-open="shadowModel.popoverIsOpen" ng-click="toggleClick($event);" ng-keydown="toggleKeydown($event);" class="show-text bs-popover editable-text popover-trigger-{{::fieldID}}" aria-label="{{fieldModel.label}} - {{fieldModel.displayValue || '(Empty)'}} - Press enter to edit" aria-haspopup="dialog" aria-expanded="false" tabindex="0"><span ng-switch="fieldModel.type"><span ng-switch-when="user_image"><img ng-if="fieldModel.displayValue !=''" ng-src="{{fieldModel.displayValue}}"></img><span ng-if="fieldModel.displayValue ==''">Upload an image</span></span><span ng-switch-when="html" ng-bind-html="trustedHTML(fieldModel.displayValue)"></span><span ng-switch-when="translated_html" ng-bind-html="trustedHTML(fieldModel.displayValue)"></span><span ng-switch-default="true"><span ng-if="!block" id="field-{{::fieldID}}" ng-style="getLtrStyleForPhoneField(fieldModel)">{{fieldModel.displayValue || "(Empty)"}}</span><span ng-if="block" id="field-{{::fieldID}}" ng-style="getLtrStyleForPhoneField(fieldModel)">{{fieldModel.displayValue || fieldModel.label}}</span></span></span></span><span ng-if="!editable" class="show-text" ng-switch="fieldModel.type"><span ng-switch-when="user_image"><img ng-if="fieldModel.displayValue !=''" ng-src="{{fieldModel.displayValue}}"></img><span ng-if="fieldModel.displayValue ==''">Upload an image</span></span><span ng-switch-when="html" ng-bind-html="trustedHTML(fieldModel.displayValue)"></span><span ng-switch-when="translated_html" ng-bind-html="trustedHTML(fieldModel.displayValue)"></span><span ng-switch-default="true" ng-style="getLtrStyleForPhoneField(fieldModel)">{{fieldModel.displayValue}}</span></span></span></span></script><script id="sp_editable_field2.xml" type="text/ng-template"><form ng-submit="saveForm();"><sp-form-field form-model="fieldModel" field="fieldModel" glide-form="getGlideForm()"></sp-form-field></form></script><script id="sp_editable_popover.xml" type="text/ng-template"><div class="popover-content-body popover-{{::fieldID}}"><h3 class="popover-title" ng-bind="title" ng-show="title"></h3><div class="popover-content"><form id="editableSaveForm" ng-submit="saveForm();"><sp-form-field form-model="shadowModel" field="shadowModel" glide-form="getGlideForm()"></sp-form-field></form></div><div class="popover-footer pull-right"><button ng-click="closePopover()" type="button" class="m-b-xs m-r-xs btn btn-default">Cancel</button><button ng-click="saveForm()" type="button" class="m-b-xs m-r-xs btn btn-primary">Save</button></div></div></script><script id="sp_element_duration.xml" type="text/ng-template"><div class="form-inline"><now-message key="days" value="Days"></now-message><now-message key="hours" value="Hours"></now-message><now-message key="minutes" value="Minutes"></now-message><now-message key="seconds" value="Seconds"></now-message><fieldset class="form-group sp-duration-field" id="sp_formfield_{{::field.name}}" tabindex="-1" role="group"><legend ng-attr-title="{{::$parent.accessible ? undefined : field.hint}}" ng-attr-aria-label="{{::$parent.accessible && field.hint ? undefined : getFieldAriaLabel(field)}}"><span class="field-decorations"><span ng-show="field.isMandatory()" class="fa fa-asterisk mandatory sp-field-label-padding" ng-class="{'mandatory-filled': field.mandatory_filled()}" aria-label="{{field.mandatory_filled()? 'Required Filled ' : 'Required '}}" role="img"></span><span ng-repeat="decoration in field.decorations" ng-if="!field._cat_variable || (field._cat_variable === true && decoration.icon !== 'icon-ai-sparkle-fill') " class="decoration {{decoration.icon}}" title="{{decoration.text}}"></span></span><span class="sp-field-label-padding" ng-attr-title="{{::$parent.accessible ? undefined : field.hint}}" data-placement="right" data-toggle="tooltip">{{field.label}}</span><sp-ai-tag ng-if="field.hasAiSparkle"></sp-ai-tag><sp-help-tag field="field"></sp-help-tag></legend><div class="duration-wrapper" tabindex="0"><div ng-repeat="unit in visibleUnits" class="input-group input-group-sm col-xs-{{12 / visibleUnits.length}} duration"><label class="input-group-addon text-capitalize" for="dur-{{unit}}-{{::field.name}}" sn-bind-i18n="{{unit}}"></label><input type="text" class="form-control" id="dur-{{unit}}-{{::field.name}}" ng-model="parts[unit]" ng-readonly="field.isReadonly()" ng-change="updateDuration()" title="{{durationUnits[unit]}}" data-toggle="tooltip" data-placement="bottom"></input></div></div></fieldset></div></script><script id="sp_element_currency.xml" type="text/ng-template"><div class="input-group"><span class="input-group-addon input-group-select"><span style="position: relative; display: inline-block;"><select class="form-control currency-element" ng-model="field.currencyCode" ng-options="c.code as c.symbol for c in field.currencyCodes" ng-disabled="field.isReadonly() || field.currencyCodes.length == 1" ng-change="formatValue(true)" aria-label="Currency"></select><i ng-if="field.currencyCodes.length > 1" aria-hidden="true" class="select-indicator fa fa-chevron-down"></i></span></span><input name="{{::field.name}}" id="sp_formfield_{{::field.name}}" class="form-control decimal" maxlength="14" data-type="{{::field.type}}" ng-model="field.currencyValue" ng-model-options="{allowInvalid: true}" ng-change="formatValue()" autocomplete="off" ng-readonly="field.isReadonly()"></input></div></script><script id="sp_element_email.xml" type="text/ng-template"><span class="ng-form-element"><span class="input-group" role="presentation"><input name="{{::field.name}}" id="sp_formfield_{{::field.name}}" aria-label="{{::field.label}}" autocomplete="{{getAutocompleteValue()}}" class="form-control" ng-model="field.stagedValue" ng-model-options="{allowInvalid: true}" type="email" ng-change="stagedValueChange()" ng-readonly="field.isReadonly()" placeholder="{{field.placeholder}}" maxlength="{{::field.max_length}}" data-type="email" aria-required="{{field.isMandatory()}}" aria-invalid="{{field.isInvalid || false}}"></input><span class="input-group-btn"><a ng-if="field.stagedValue && !field.isReadonly()" href="mailto: {{field.stagedValue}}" class="btn-ref btn btn-default" data-toggle="tooltip" data-placement="top" title="Send an email to this address" aria-label="Send an email to this address"><i class="fa fa-envelope-o" aria-hidden="true"></i></a><a ng-if="!field.stagedValue || field.isReadonly()" href="#" class="btn-ref btn btn-default disabled" tabindex="-1" title="Send an email to this address" aria-label="Send an email to this address" aria-disabled="true"><i class="fa fa-envelope-o" aria-hidden="true"></i></a></span></span></span></script><script id="sp_element_mask.xml" type="text/ng-template"><span class="ng-form-element" ng-class="{'has-error' : field.isInvalid}"><span ng-if="field.catalog_view_masked"><input name="{{::field.name}}" id="sp_formfield_{{::field.name}}" ng-attr-type="{{inputType}}" autocomplete="off" class="form-control masked-element" ng-model="field.stagedValue" ng-model-options="{getterSetter: true}" ng-blur="handleValueChanged()" ng-readonly="disabled" aria-required="{{field.mandatory}}" aria-invalid="{{field.isInvalid || false}}" placeholder="{{placeholder}}" maxlength="{{::field.max_length}}" aria-label="{{field.label}}"></input><button ng-if="field.stagedValue.length" ng-click="c.togglePassword()" class="btn sp-show-hide-masked-button btn-link" title="show/hide this value">{{toggleShowHide}}</button></span><span ng-if="!field.catalog_view_masked"><input name="{{::field.name}}" id="sp_formfield_{{::field.name}}" ng-attr-type="{{inputType}}" autocomplete="off" class="form-control" ng-model="field.stagedValue" ng-model-options="{getterSetter: true}" ng-blur="c.validate()" ng-readonly="disabled" ng-keydown="c.cleanData()" aria-required="{{field.mandatory}}" aria-invalid="{{field.isInvalid || false}}" placeholder="{{placeholder}}" maxlength="{{::field.max_length}}" aria-label="{{field.label}}"></input></span><span ng-if="field.useConfirmation"><label class="field-label" for="sp_formfield_confirm.{{::field.name}}">{{reEnter}}</label><input name="sp_formfield_confirm.{{::field.name}}" id="sp_formfield_confirm.{{::field.name}}" type="password" autocomplete="off" class="form-control" ng-readonly="disabled" ng-blur="c.validate()" ng-keydown="c.cleanData()" ng-model="field.confirmPassword" ng-model-options="{getterSetter: true}" aria-invalid="{{field.isInvalid || false}}" placeholder="{{placeholder}}" maxlength="{{::field.max_length}}" aria-label="{{::reEnter}}" aria-describedby="confirmation-error.{{::field.name}}"></input><span id="confirmation-error.{{::field.name}}" ng-if="field.isInvalid" class="sp-date-format-info" style="display:table-row;" role="alert">{{misMatch}}</span></span></span></script><script id="sp_catalog_variable.xml" type="text/ng-template"><div><sp-sc-multi-row-element ng-if="field.type == spSCConf.MULTI_ROW_TYPE" id="sp_formfield_{{::field.name}}" field="field" glide-form="getGlideForm()" native="::formModel.native_mobile" parent-fields="::formModel._fields"></sp-sc-multi-row-element></div></script><script id="sp_element_sc_multi_row.xml" type="text/ng-template"><div><style>.button-container {
min-height: 0px;
text-align: right;
}
.table-container {
max-height: 40rem;
overflow: auto;
width: 100%;
}
.mrvs-sticky-header {
position: sticky;
top: 0;
z-index: 2;
}
.table-row {
word-break: keep-all;
}
.table-cell {
text-overflow: ellipsis;
}</style><now-message key="Add a row for {0}" value="Add a row for {0}"></now-message><now-message key="Remove all rows for {0}" value="Remove all rows for {0}"></now-message><div class="wrapper-md r-2x" ng-if="field.columns_meta.length > 0" ng-class="{'b': !c.isMEE}"><sp-widget widget="c.activeRow" ng-if="c.activeRow"></sp-widget><div ng-if="!field.readonly && !field.sys_readonly" ng-class="{'m-l m-b ': c.isMEE, 'form-group': !c.isMEE}" class="button-container"><button type="button" title="{{::field.max_row_tooltip_msg}}" class="btn btn-primary m-r" ng-click="c.createRow()" ng-disabled="!c.canInsert()" id="{{::field.sys_id}}_add_row" aria-label="{{c.addButtonAriaLabel}}" aria-required="{{field.isMandatory()}}">Add</button><button type="button" class="btn btn-default" ng-click="c.clearValue()" ng-disabled="!c.canClearValue()" aria-label="{{c.removeAllButtonAriaLabel}}">Remove All</button></div><div class="table-bordered table-container"><table class="table table-striped" ng-class="{'m-b': c.isMEE, 'm-b-xs': !c.isMEE}" aria-describedby="id-caption-mrvs-{{::field.sys_id}}"><caption id="id-caption-mrvs-{{::field.sys_id}}" class="sr-only">{{::field.label}}</caption><thead class="mrvs-sticky-header"><tr><th id="id-actions-{{::field.sys_id}}" scope="col" ng-if="!field.readonly && !field.sys_readonly" class="text-nowrap">Actions</th><th id="id-question-{{::col.id}}" scope="col" ng-if="::!col.hideOnGrid" ng-repeat="col in ::field.columns_meta track by col.id" class="text-nowrap">{{::col.label}}</th></tr></thead><tbody><tr ng-if="field._value.length == 0 "><td ng-if="!field._loadingData" class="text-center" colspan="{{::field.columns_meta.length + 1}}">No data to display</td></tr><tr ng-if="field._loadingData"><td class="text-center" ng-if="field._value.length == 0" colspan="{{::field.columns_meta.length + 1}}"><i class="fa fa-spinner fa-pulse fa-3x fa-fw" aria-hidden="true" title="Updating value"></i><span class="sr-only">Updating value</span></td></tr><tr ng-repeat="row_display_value in field._displayValue track by $index" ng-animate="{enter: 'animate-enter', leave: 'animate-leave'}" class="table-row"><td headers="id-actions-{{::field.sys_id}}" ng-if="!field.readonly && !field.sys_readonly" ng-class="{ 'actions-mobile': {{ c.isMEE }} }" class="text-nowrap"><a href="javascript:void(0);" class="wrapper-xs fa fa-pencil" role="button" data-original-title="Edit Row" aria-label="Edit Row {{$index + 1}}" data-toggle="tooltip" data-placement="top" ng-click="c.updateRow($index)" ng-class="{'btn disabled no-border' : c.disableMRVSActions}"></a><a href="javascript:void(0);" class="wrapper-xs fa fa-close" role="button" data-original-title="Remove Row" aria-label="Remove Row {{$index + 1}}" data-toggle="tooltip" data-placement="top" ng-click="c.deleteRow($index)" ng-class="{'btn disabled no-border' : c.disableMRVSActions}" id="remove-row-{{$index}}"></a></td><td headers="id-question-{{::col.id}}" ng-if="::!col.hideOnGrid" ng-repeat="col in ::field.columns_meta track by col.id" class="table-cell">{{c.getCellDisplayValue(row_display_value[col.name], col.type)}}</td></tr></tbody></table></div></div></div></script><script id="sp_element_sc_request_for.xml" type="text/ng-template"><div class="form-group"><label class="field-label field-label-question" for="sp_formfield_requested_for_{{::field.name}}" data-original-title="{{::field.hint}}" aria-label="{{field.hint + ' '+ getReferenceLabelContents(field)}} " data-toggle="tooltip" data-placement="right"><span class="field-decorations"><span ng-show="field.mandatory" class="fa fa-asterisk mandatory sp-field-label-padding" ng-class="{'mandatory-filled': field.mandatory_filled()}" title="Required" aria-label="{{field.mandatory_filled()? 'Required Filled' : 'Required'}}" role="img"></span><span ng-repeat="decoration in field.decorations" ng-if="field._cat_variable === false || (field._cat_variable === true && decoration.icon !== 'icon-ai-sparkle-fill')" class="decoration {{decoration.icon}}" title="{{decoration.text}}"></span></span>{{field.label}}<sp-ai-tag ng-if="field.hasAiSparkle"></sp-ai-tag><sp-help-tag field="::field"></sp-help-tag></label><span class="type-{{::field.type}} field-actual" ng-class="{'state-mandatory': field.mandatory, 'state-readonly': field.read_only, 'state-hidden': field.hidden, 'has-error': field.isInvalid}"><div ng-class="{'input-group input-group-': alsoRequestForEnabled()}"><sp-reference-field id="sp_formfield_reference_{{::field.name}}" tabindex="-1" ng-class="{'field-has-reference': field.value != '', 'field-empty-reference': field.value == ''}"></sp-reference-field><div ng-if="alsoRequestForEnabled()" class="input-group-btn" style="padding-inline-start:1rem"><button type="button" class="btn btn-default bg-white lookup" style="border-radius:0.4rem" id="also_request_for_button" ng-click="toggleUserSelect()" ng-disabled="disabled" aria-expanded="{{actions.isAlsoRequestForExpanded}}" data-original-title="Request for multiple users" data-toggle="tooltip" data-placement="top" aria-label="Request for multiple users"><span class="fa fa-users" ng-class="{'text-primary': showList}"></span><span class="sr-only">Request for multiple users</span></button></div></div></span><div ng-show="field.messages"><div ng-repeat="message in field.messages | unique: 'message'" class="wrapper-xs r m-t-xs" ng-class="{'bg-danger': message.type == 'error', 'bg-warning': message.type == 'warning', 'bg-info': message.type == 'info'}">{{message.message}}</div></div><div ng-if="alsoRequestForEnabled()" ng-show="showAlsoRequestFor" style="margin-top:15px"><label class="field-label" for="sp_formfield_sn_sc_also_request_for">{{::sn_sc_also_request_for.label}}</label><div ng-if="showLess" class="sp-field-elem-margin">{{sn_sc_also_request_for.display_value_list.join(", ")}}</div><span ng-show="showList"><sn-sc-also-request-for sn-select-width="100%" field="sn_sc_also_request_for" glide-form="getGlideForm()" sn-options="{placeholder: sn_sc_also_request_for.placeholder}" requested-for="field.value"></sn-sc-also-request-for></span><div ng-show="sn_sc_also_request_for.validationMessages"><div ng-repeat="message in sn_sc_also_request_for.validationMessages | unique: 'message'" class="wrapper-xs r m-t-xs" ng-class="{'bg-danger': message.type == 'error', 'bg-warning': message.type == 'warning', 'bg-info': message.type == 'info'}">{{message.message}}</div></div></div></div></script><script id="sp_element_radio_down.xml" type="text/ng-template"><fieldset id="sp_formfield_{{::field.name}}" role="group" aria-labelledby="sp_radio_down_label_{{::field.name}}" class="radio m-t-none"><legend class="ng-hide" id="sp_radio_down_label_{{::field.name}}"><span ng-if="field.isMandatory() && !field.mandatory_filled()">Required -</span><span ng-if="field.isMandatory() && field.mandatory_filled()">Required filled -</span>{{::field.label}}</legend><div role="radiogroup" class="radio-control"><div ng-repeat="c in field.choices" class="block"><label class="radio-element"><input aria-checked="{{ field.value === c.value }}" ng-value="c.value" ng-model="fieldValue" ng-model-options="{getterSetter: true}" ng-readonly="field.isReadonly()" aria-disabled="{{field.isReadonly()}}" ng-init="onButtonLoad()" name="radio_button_down_{{field.sys_id}}_{{catItemSysId}}" aria-label="{{c.label + (c.priceLabel && field.value != c.value ? ' ' + c.priceLabel : '')}}" type="radio"></input><span aria-hidden="true">{{c.label}}<div ng-if="c.priceLabel && field.value != c.value" class="inline">{{c.priceLabel}}</div></span></label></div></div></fieldset></script><script id="sp_element_radio_across.xml" type="text/ng-template"><fieldset class="radio m-t-none" id="sp_formfield_{{::field.name}}" aria-labelledby="sp_radio_across_label_{{::field.name}}"><legend class="ng-hide" id="sp_radio_across_label_{{::field.name}}"><span ng-if="field.isMandatory() && !field.mandatory_filled()">Required -</span><span ng-if="field.isMandatory() && field.mandatory_filled()">Required filled -</span>{{::field.label}}</legend><div role="radiogroup" class="radio-control"><label ng-repeat="c in field.choices" class="radio-element"><input aria-checked="{{ field.value == c.value ? true : false}}" ng-value="c.value" ng-model="fieldValue" ng-model-options="{getterSetter: true}" ng-readonly="field.isReadonly()" aria-disabled="{{field.isReadonly()}}" role="radio" type="radio" name="radio_button_across_{{field.sys_id}}_{{catItemSysId}}" ng-init="onButtonLoad()" aria-label="{{c.label + (c.priceLabel && field.value != c.value ? ' ' + c.priceLabel : '')}}"></input><span aria-hidden="true">{{c.label}}<div ng-if="c.priceLabel && field.value != c.value" class="inline">{{c.priceLabel}}</div></span></label></div></fieldset></script><script id="angular.do?sysparm_type=get_partial&name=directive.snImageUploader" type="text/ng-template"><div class="sn-component sn-component-image-upload"><input ng-show="false" type="file" ng-file-select="onFileSelect($files)"></input><div ng-file-drop="onFileSelect($files)" ng-file-drag-over-class="sn-dragover" title="{{getTitle()}}" style="margin-top: .5em;" aria-hidden="true"><div style="position:relative; display: inline-block;"><div ng-if="!uploading" ng-click="openFileSelector($event)" style="cursor: pointer; margin-bottom: .25em; margin-right: 0.25em; display: inline-block;" role="presentation"><button class="btn btn-primary" aria-label="{{uploadMessage}} - {{fieldLabel}}"><sn-glyph char="upload"></sn-glyph><small>{{uploadMessage}}</small></button></div><span class="upload-container" ng-click="activateUpload($event)" ng-if="!uploading" ng-transclude="" role="presentation" tabindex="-1"></span></div><div ng-if="uploading" style="position:relative; display: inline-block;" role="presentation"><button class="btn btn-default" aria-label="Uploading - {{fieldLabel}}"><sn-glyph char="refresh"></sn-glyph><small>Uploading</small></button></div><div ng-if="src" ng-click="deleteAttachment()" style="cursor: pointer; display: inline-block;" title="Immediately delete this image" role="presentation"><button class="btn btn-default" aria-label="Delete - {{fieldLabel}}"><sn-glyph char="remove"></sn-glyph><small>Delete</small></button></div></div></div></script><script id="angular.do?sysparm_type=get_partial&name=sp_attachment" type="text/ng-template"><div class="sp-attachment-block file-attachment" id="{{attachment.sys_id}}"><a ng-if="attachment.viewImage && attachment.thumbSrc && attachment.state === 'available'" class="view-attachment thumbnail" style="border: none;" ng-click="attachmentHandler.viewAttachment($event, attachment)" href="javascript:void(0)" aria-label="View attachment {{::attachment.file_name}}"><img alt="{{::attachment.file_name}}" class="attachment-thumbnail" ng-src="{{attachment.thumbSrc}}"></img></a><img ng-if="((!attachment.viewImage || attachment.state !== 'available' ) && attachment.thumbSrc )" style="border: none; margin-left: auto; margin-right: auto;" alt="{{::attachment.file_name}}" class="img-responsive" ng-src="{{attachment.thumbSrc}}"></img><div class="file-name"><a ng-if="attachment.state === 'available'" class="get-attachment" ng-click="attachmentHandler.downloadAttachment(attachment)" ng-attr-title="Download {{attachment.file_name}}" href="javascript:void(0)">{{::attachment.file_name}} ({{::attachment.size}})</a><a ng-if="attachment.state === '' || attachment.state === 'pending' || attachment.state === 'available_conditionally'" class="get-attachment" ng-click="attachmentHandler.scanAttachment(attachment)" ng-attr-title="Download {{attachment.file_name}}" href="javascript:void(0)">{{::attachment.file_name}} ({{::attachment.size}})</a><span ng-if="attachment.state === 'not_available'" class="get-attachment not_available" ng-attr-title="Download {{attachment.file_name}}">{{::attachment.file_name}}<span class="error">(File failed security scan)</span></span><div class="tools"><div class="btn-group tools-items" role="group" ng-if="attachment.canWrite || attachment.canDelete"><button ng-if="attachment.canWrite" type="button" class="btn btn-default btn-clear" ng-click="attachmentHandler.editAttachment($event, attachment)" aria-label="Edit file name {{::attachment.file_name}}" title="Edit file name {{::attachment.file_name}}" data-toggle="tooltip" data-placement="bottom" data-container="body"><i class="fa fa-pencil" aria-hidden="true"></i></button><button ng-if="attachment.canDelete" type="button" class="btn btn-default btn-clear" ng-click="confirmDeleteAttachment(attachment, $event)" aria-label="Delete {{::attachment.file_name}}" title="Delete {{::attachment.file_name}}" data-toggle="tooltip" data-placement="bottom" data-container="body"><i class="fa fa-times" aria-hidden="true"></i></button></div><div style="text-align: center;"><time><sn-time-ago timestamp="::attachment.sys_created_on"></sn-time-ago></time></div></div><input tabindex="-1" ng-keydown="attachmentHandler.onKeyDown($event, attachment)" ng-blur="attachmentHandler.updateAttachment($event, attachment)" aria-label="File name" class="form-control" style="display: none;"></input></div></div></script><script id="sp_variable_layout.xml" type="text/ng-template"><div ng-repeat="container in containers" class="sp-form-container" ng-class="{'sp-form-documentation-container': container.id === documentationSectionId}" ng-show="paintForm(container)" ng-attr-role="{{(container.caption || container.captionDisplay) ? 'group' : undefined}}" ng-attr-aria-labelledby="{{(container.caption || container.captionDisplay) ? 'container_' + container.id : undefined}}"><span ng-if="container.id !== documentationSectionId"><span ng-if="(container.caption || container.captionDisplay)" class="container-caption form-container-caption" style="width:100%"><span class="h4" role="heading" aria-level="{{embeddedInModal ? '2' : '3'}}" id="container_{{::container.id}}">{{container.captionDisplay || container.caption}}</span><sp-help-tag field="::formModel._fields[container.name]"></sp-help-tag></span><div class="row"><div ng-repeat="column in container.columns" class="col-md-{{::12 / container.columns.length }}"><div ng-switch="::f.type" ng-repeat="f in ::column.fields" id="{{::getVarID(f)}}" ng-class="::{'form-inline': isInlineForm === true }"><div ng-switch-when="label" ng-if="formModel._fields[f.name]" ng-show="formModel._fields[f.name].isVisible()"><label ng-bind="f.label" style="display:inline"></label><sp-help-tag field="::formModel._fields[f.name]"></sp-help-tag><hr class="sp_label_hr"></hr></div><sp-form-field ng-switch-when="field" ng-if="formModel._fields[f.name] && formModel._fields[f.name]._class_name != 'RequestedForQuestion'" form-model="formModel" field="formModel._fields[f.name]" glide-form="getGlideForm()" ng-show="formModel._fields[f.name].isVisible()" default-value-setter="setDefaultValue(fieldName,fieldInternalValue,fieldDisplayValue)"></sp-form-field><sp-variable-layout ng-switch-when="container" ng-init="containers=[f]"></sp-variable-layout><sp-checkbox-group ng-switch-when="checkbox_container" name="f.name" form-model="formModel" containers="f.containers" glide-form="getGlideForm()" class="checkbox-container"></sp-checkbox-group><sp-widget ng-switch-when="formatter" ng-if="formModel._formatters[f.id].widgetInstance" widget="formModel._formatters[f.id].widgetInstance" page="{g_form: getGlideForm()}"></sp-widget><hr ng-switch-when="break" ng-show="formModel._fields[f.name].isVisible()"></hr><sp-sc-request-for ng-switch-when="field" ng-if="formModel._fields[f.name] && formModel._fields[f.name]._class_name == 'RequestedForQuestion'" form-model="formModel" field="formModel._fields[f.name]" glide-form="getGlideForm()" ng-show="formModel._fields[f.name].isVisible()" id="sp_formfield_requested_for_{{::field.name}}" tabindex="-1"></sp-sc-request-for></div></div></div></span><span ng-if="container.id === documentationSectionId"><div class="row"><div ng-repeat="column in container.columns" class="col-md-{{::12 / container.columns.length }}"><div ng-switch="::f.type" ng-repeat="f in ::column.fields" id="{{::getVarID(f)}}" ng-class="::{'form-inline': isInlineForm === true }"><div ng-switch-when="label" ng-if="formModel._fields[f.name]" ng-show="formModel._fields[f.name].isVisible()"><label ng-bind="f.label"></label><sp-help-tag field="::formModel._fields[f.name]"></sp-help-tag><hr class="sp_label_hr"></hr></div><sp-form-field ng-switch-when="field" ng-if="formModel._fields[f.name] && formModel._fields[f.name]._class_name != 'RequestedForQuestion'" form-model="formModel" field="formModel._fields[f.name]" glide-form="getGlideForm()" ng-show="formModel._fields[f.name].isVisible()" default-value-setter="setDefaultValue(fieldName,fieldInternalValue,fieldDisplayValue)"></sp-form-field></div></div></div></span></div></script><script id="sp_multirow_vs_summarizer.html" type="text/ng-template"><div><button type="button" tab-index="0" id="closePopoverButton" style="position: relative; top :-35px;" class="close pull-right hidden-xs" aria-label="Close" ng-click="closePopover($index)"><span aria-hidden="true">×</span></button><div class="table-responsive ng-scope" style="max-height: 400px; max-width: 600px;"><table class="table table-striped"><thead><tr><th ng-repeat="col in variable.table_variable[0]" ng-if="::!col.hideOnGrid" class="text-nowrap" tabindex="0" scope="col" aria-label="{{::col.label}}">{{::col.label}}</th></tr></thead><tbody><tr ng-repeat="row in variable.table_variable" style="word-break: keep-all;"><td ng-repeat="col in row" tabindex="0" ng-if="::!col.hideOnGrid" aria-label="{{::col.label}}: {{::col.display_value}}">{{::col.display_value}}</td></tr></tbody></table></div></div></script><script id="sp_announcements.xml" type="text/ng-template"><div class="announcement-wrapper" ng-if="c.totalAnnouncements !== 0"><div ng-repeat="a in c.announcements" ng-style="::c.getStyle(a)" ng-class="{'announcement-center-block': c.getStyle(a).textAlign === 'center'}"><div class="announcement-container" ng-class="{'linktype-none': a.linkType === 'none'}"><div aria-live="assertive" ng-if="c.totalAnnouncements === 1 && !c.isMobile" ng-init="c.linkSetup(a)" class="text-container"><div class="icon-title" ng-style="::{justifyContent: c.getJustifyContentValue(a)}"><div class="icon"><span class="glyphicon fa title-dismiss-icons" ng-class="::('fa-' + a.glyph)" role="img" ng-attr-aria-hidden="{{::a.glyphAltText? false : true}}" alt="{{::a.glyphAltText}}" data-toggle="tooltip" data-placement="bottom" title="{{::a.glyphAltText}}" data-container="body"></span></div><div class="title-announcement" ng-class="{'no-glyph-title': a.glyph === 'empty', 'announcement-left': c.getStyle(a).textAlign !== 'center'}">{{::a.title}}</div></div><p class="content" ng-class="{expanded: c.showAll && a.summary}" ng-bind="::a.summary"></p></div><div aria-live="assertive" ng-if="!(c.totalAnnouncements === 1 && !c.isMobile)" ng-init="c.linkSetup(a)" class="text-container"><div class="icon-title" ng-style="::{justifyContent: c.getJustifyContentValue(a)}"><div class="icon"><span class="glyphicon fa title-dismiss-icons" ng-class="::('fa-' + a.glyph)" role="img" ng-attr-tabindex="{{::a.glyphAltText ? -1 : undefined}}" ng-attr-aria-hidden="{{::a.glyphAltText && !c.isMobile ? false : true}}" alt="{{::a.glyphAltText}}" data-toggle="tooltip" data-placement="bottom" title="{{::a.glyphAltText}}" data-container="body"></span></div><div class="title-announcement" ng-class="{'no-glyph-title': a.glyph === 'empty', 'announcement-left': c.getStyle(a).textAlign !== 'center'}">{{::a.title}}</div></div><p class="content" ng-class="{expanded: c.showAll && a.summary}" ng-bind="::a.summary"></p></div><span ng-if="a.linkType != 'none'" class="actions-container"><a class="info-link" target="{{a.linkTarget}}" ng-attr-aria-label="{{::(!c.isMobile ? a.title : undefined)}}" ng-href="{{::a.targetLink}}" ng-style="::{color: c.getStyle(a).color}" title="{{::a.targetLinkText || c.i18n.defaultLinkDetailText}}" data-toggle="tooltip" data-placement="auto" data-container="body">{{::a.targetLinkText || c.i18n.defaultLinkText}}</a></span><button ng-if="::a.dismissOption !== 'NOT_DISMISSIBLE'" ng-click="::c.dismiss(a.id, $index, $event)" aria-label="{{::c.i18n.dismiss_announcement}} {{::a.title}}" class="close fa fa-times fa-lg title-dismiss-icons" ng-style="::{color: c.getStyle(a).color}" title="{{::c.i18n.dismiss_announcement}} {{::a.title}}" data-toggle="tooltip" data-placement="bottom" data-container="body"></button></div><button ng-if="($first || $last) && (c.totalAnnouncements > 1 || (c.totalAnnouncements == 1 && a.summary))" ng-click="::c.toggleShowAll($event)" class="sp-announcement-list-actions" ng-style="::{'filter': 'brightness(90%)', backgroundColor: c.getStyle(a).backgroundColor}" ng-class="{'smaller-resolution': c.totalAnnouncements === 1 && a.summary}" aria-label="{{c.showMore}} {{c.totalAnnouncements === 1 ? c.i18n.announcement : c.i18n.announcements}}" aria-expanded="{{c.showAll}}"><span class="more-button">{{c.showMore}}</span><span class="fa fa-md arrow-icon" ng-class="{'fa-angle-down': !c.showAll, 'fa-angle-up': c.showAll }" aria-hidden="true"></span></button></div></div></script><script id="sp_carousel.xml" type="text/ng-template"><div class="carousel" ng-swipe-right="prev()" ng-swipe-left="next()"><a role="button" href="javascript:void(0)" class="left carousel-control" ng-click="prev()" ng-show="slides.length > 1" aria-label="{{getPreviousButtonAriaLabel()}}"><span aria-hidden="true" ng-class="{'glyphicon-chevron-right' : g_portal_isrtl, 'glyphicon-chevron-left' : !g_portal_isrtl}" class="glyphicon"></span><span class="sr-only">previous</span></a><div class="carousel-inner" ng-transclude=""></div><a role="button" href="javascript:void(0)" class="right carousel-control" ng-click="next()" ng-show="slides.length > 1" aria-label="{{getNextButtonAriaLabel()}}"><span aria-hidden="true" ng-class="{'glyphicon-chevron-left' : g_portal_isrtl, 'glyphicon-chevron-right' : !g_portal_isrtl}" class="glyphicon"></span><span class="sr-only">next</span></a><div class="carousel-indicators " ng-show="slides.length > 1"><button ng-repeat="slide in slides | orderBy:indexOfSlide track by $index" ng-class="{ active: isActive(slide) }" ng-click="select(slide)"><span class="sr-only ">slide {{ $index + 1 }} of {{ slides.length }}<span ng-if="isActive(slide) ">, currently active</span></span></button><button class="fa toggle-animation" ng-class="{'fa-pause': !carouselPaused, 'fa-play': carouselPaused}" aria-label="{{carouselPaused ? playAnimation : pauseAnimation}}" ng-click="carouselPaused = !carouselPaused; (carouselPaused ? pause() : play())"></button></div></div></script><script id="sp_search_nav.xml" type="text/ng-template"><div><h2 class="sr-only">{{::c.i18n.search_categories}}</h2><sp-list-menu menu="c.searchSources" onclick-fn="c.onSearchSourceClick(menu, input)" list-view="listView" show-toggle="showToggle"></sp-list-menu></div></script><script id="sp_facet_list.xml" type="text/ng-template"><div><div ng-if="::c.show" class="sp-facet-list"><div class="panel panel-default"><div class="panel-heading"><div><span class="panel-title"><div ng-if="!toggleSearchsource" style="background-color:inherit"><span class="label-title" role="heading" aria-level="2">{{::listTitle}}</span></div><button aria-label="{{c.collapse? c.i18n.expand : c.i18n.collapse}} {{::listTitle}}" class="toggle-icon btn" ng-if="toggleSearchsource" style="background-color:inherit" ng-click="c.toggleIcon(listTitle)"><span class="label-title">{{::listTitle}}</span><i class="fa" ng-class="{'fa-caret-right flip-icon-rtl':c.collapsed,'fa-caret-down':!c.collapsed}" aria-hidden="true"></i></button></span></div><div><span><button aria-label="{{::c.i18n.clearAllFacets}}" ng-click="c.clearAll()" ng-disabled="!c.showClearAll" class="btn btn-link clear-all pull-right" ng-class="{'disabled': !c.showClearAll}">{{::c.i18n.clearAll}}</button></span></div></div></div><div class="collapse" ng-class="{'in': !c.collapsed}"><div ng-repeat="facet in facets" class="inner-facet-list"><sp-list-menu list-view="true" collapsed="c.isCollapsed(facet.id)" menu="facet" onclick-fn="c.onSelectFacet(menu, input)" onclear-fn="c.clearFacet(menu)" ontoggle-fn="c.onFacetToggle(menuId, collapsed)" show-clear="c.showClear(facet)" show-toggle="true"></sp-list-menu></div></div></div></div></script><script id="sp_list_menu.xml" type="text/ng-template"><div class="sp-list-menu"><div data-menu-id="{{::menu.id}}" class="panel panel-default" ng-class="::{'list-view':listView, 'panel-heading-multiselect': c.isMultiSelect}" ng-if="::c.show()"><div class="panel-heading"><div><span class="panel-title"><div ng-if="!c.showToggle" style="background-color:inherit"><span class="label-title" role="heading" aria-level="2">{{::menu.label}}</span></div><button ng-if="c.showToggle" tabindex="0" aria-expanded="{{!c.collapsed}}" class="toggle-icon" ng-click="c.toggleIcon($event, menu.label)" aria-label="{{::menu.label}}" style="background-color:inherit"><span class="label-title">{{::menu.label}}</span><i class="fa" ng-class="{'fa-caret-right flip-icon-rtl':c.collapsed,'fa-caret-down':!c.collapsed}" ng-attr-title="{{::menu.label}}" data-toggle="tooltip" data-container="body" data-placement="right" aria-hidden="true"></i></button></span></div><div><span><button ng-if="c.showClearButton()" class="btn btn-link clear pull-right" ng-click="c.clear()" aria-label="{{::c.i18n.clear}} {{::menu.label}}">{{::c.i18n.clear}}</button></span></div></div><div class="panel-content collapse" ng-class="{'in': !c.collapsed}"><div ng-if="::c.isMultiSelect"><sp-list-menu-items menu="menu" type="MULTI_SELECT" onclick-fn="c.onItemClickFn(menu, item)"></sp-list-menu-items></div><div ng-if="::!c.isMultiSelect"><sp-list-menu-items menu="menu" onclick-fn="c.onItemClickFn(menu, item)"></sp-list-menu-items></div></div><button ng-if="c.isMultiSelect && !c.showClearButton()" ng-disabled="!c.showApplyButton()" ng-class="{'disabled': !c.showApplyButton()}" class="btn btn-link clear pull-right multiselect-apply" ng-click="c.submit()">{{::c.i18n.apply}}</button></div></div></script><script id="sp_list_menu_item.xml" type="text/ng-template"><div class="sp-list-menu-items" role="navigation" aria-label="{{c.i18n.search_by}}"><ul><li ng-repeat="item in c.items track by item.value" class="sp-list-menu-item"><button class="btn-link" ng-click="c.onClick(item)" aria-label="{{::menu.label}} {{::item.label}} {{item.selected ? c.i18n.selected : ''}}" ng-class="{'active':item.selected}" style="padding: 0" role="link">{{::item.label}}</button></li><li ng-repeat="item in c.nextItems track by item.value" class="sp-list-menu-item" ng-class="{'hidden': !c.showNextItems}"><button class="btn-link" aria-label="{{::menu.label}} {{::item.label}} {{item.selected ? c.i18n.selected : ''}}" ng-click="c.onClick(item)" ng-class="{'active':item.selected}" style="padding: 0" role="link">{{::item.label}}</button></li></ul><div ng-if="::c.nextItems" class="sp-list-menu-item"><button ng-if="c.showMoreButton()" type="button" class="btn btn-link" ng-click="c.onMoreButtonClick()">{{::c.i18n.see_more}}</button><button ng-if="c.showNextItems" type="button" class="btn btn-link" ng-click="c.onLessButtonClick()">{{::c.i18n.see_less}}</button></div></div></script><script id="sp_list_menu_checkbox.xml" type="text/ng-template"><div class="sp-list-menu-items"><ul aria-label="Filter results by category"><li ng-repeat="item in c.items track by item.value" class="sp-list-menu-item sp-facet-checkbox"><label><div class="sp-facet-checkbox-input"><input type="checkbox" ng-checked="item.selected" ng-click="c.onClick(item)" aria-label="{{::item.label}}"></input></div><span ng-class="{'active': item.selected}">{{::item.label}}</span></label></li><li ng-repeat="item in c.nextItems track by item.value" class="sp-list-menu-item sp-facet-checkbox" ng-class="{'hidden': !c.showNextItems}"><label><div class="sp-facet-checkbox-input"><input type="checkbox" ng-checked="item.selected" ng-click="c.onClick(item)"></input></div><span ng-class="{'active': item.selected}">{{::item.label}}</span></label></li></ul><div ng-if="::c.nextItems" class="sp-list-menu-item"><button ng-if="c.showMoreButton()" type="button" class="btn btn-link" ng-click="c.onMoreButtonClick()">{{::c.i18n.see_more}}</button><button ng-if="c.showNextItems" type="button" class="btn btn-link" ng-click="c.onLessButtonClick()">{{::c.i18n.see_less}}</button></div></div></script><script id="sp_checkbox_group.xml" type="text/ng-template"><div ng-repeat="container in containers"><fieldset ng-show="field.isVisible()" ng-class="{'state-mandatory': field.mandatory, 'has-error': field.isInvalid}"><legend class="field-label" ng-if="::field.render_label" id="sp_grp_checkbox_{{::field.name}}" ng-attr-aria-label="{{::$parent.accessible && field.hint ? undefined : getFieldAriaLabel(field)}}"><span class="field-decorations"><span ng-show="field.isMandatory()" class="fa fa-asterisk mandatory sp-field-label-padding" ng-class="{'mandatory-filled': field.mandatory_filled()}" aria-label="{{field.mandatory_filled()? 'Required Filled ' : 'Required '}}" role="img"></span><span ng-repeat="decoration in field.decorations" class="decoration {{decoration.icon}}" title="{{decoration.text}}"></span></span><span class="sp-field-label-padding" ng-attr-title="{{::$parent.accessible ? undefined : field.hint}}" data-placement="right" data-toggle="tooltip">{{field.label}}</span><span class="sr-only">{{::field.hint}}</span><sp-help-tag field="::field"></sp-help-tag></legend><div class="row" id="sp_formfield_{{::field.name}}"><div ng-repeat="column in container.columns" class="col-md-{{::12 / container.columns.length }}"><div ng-repeat="f in ::column.fields" id="{{::getVarID(f)}}" ng-class="::{'form-inline': isInlineForm === true , 'sp-sc-single-checkbox' : !field.render_label}"><sp-form-field ng-if="formModel._fields[f.name]" form-model="formModel" field="formModel._fields[f.name]" glide-form="getGlideForm()" ng-show="formModel._fields[f.name].isVisible()"></sp-form-field></div></div></div></fieldset></div></script><script id="sp_help_tag.xml" type="text/ng-template"><span ng-if="::(accessible && field.hint && !field.help_text && !field.instructions)" role="button" data-toggle="tooltip" data-placement="right" tabindex="0" class="fa fa-question-circle padder-xs help-tag-icon" data-original-title="{{getFieldAriaLabel(field)}}" aria-labelledby="sp_field_label_{{::field.name}}"></span><span class="fa fa-question-circle padder-xs help-tag-icon" ng-click="toggleHelpText($event)" ng-if="::(field.help_text || field.instructions)" data-placement="right" data-toggle="tooltip" title="{{::field.help_tag}}" aria-label="{{::getHelpAriaLabel()}}" aria-expanded="{{field.expand_help}}" tabindex="0"></span><div class="help-tag"><div ng-if="field.expand_help" class="well wrapper-xs m-b-sm flex-row justify-between"><div class="help-tag-container" id="sp_help_tag_{{::field.sys_id}}"><span title="{{::field.help_text}}" ng-bind-html="::field.help_text" style="white-space: pre-line;"></span><p ng-if="::(!!field.instructions)" ng-bind-html="::trustedHTML(field.instructions)"></p></div><div><i class="fa fa-times pull-right help-tag-icon wrapper-xs padder-t-none" ng-click="hideHelp($event)" aria-label="Close {{field.help_tag}} for {{::field.name}}" aria-describedby="sp_help_tag_{{::field.sys_id}}" ng-if="field.expand_help" tabindex="0" data-placement="top" data-toggle="tooltip" title="Close"></i></div></div></div><now-message key="{h} for {f}" value="{h} for {f}"></now-message><now-message key="Help for {f}" value="Help for {f}"></now-message></script><script id="sp_agent_chat.xml" type="text/ng-template"><div class="sp-ac-root" ng-if="c.isVisible" ng-class="{'sp-ac-desktop': !c.isMobile}" aria-label="{{::c.i18n.agentChatWindow}}" aria-expanded="{{c.isOpen}}" role="region" tabindex="-1"><section class="sp-ac-conversation" ng-class="'false' == 'true' ? 'sp-nava' : ''" ng-show="c.isOpen"><iframe class="sp-ac-frame" title="{{::c.i18n.agentChatWindow}}" scrolling="no" horizontalscrolling="no" verticalscrolling="no" style="border:none;" ng-src="{{c.frameUrl}}"></iframe></section><div class="sp-ac-btn-wrapper"><button class="sp-ac-btn" ng-class="{open: c.isOpen, closed: !c.isOpen}" ng-click="::c.toggle($event)" data-original-title="{{c.getBadgeAriaLabel()}}" data-toggle="tooltip" data-placement="top" aria-label="{{c.getBadgeAriaLabel()}}"><span class="sp-ac-unread-msg" ng-if="c.hasUnreadMessage">{{c.unreadMessages}}</span><span class="sp-ac-btn-icon" ng-class="{'icon-cross': c.isOpen, 'fa-flip-horizontal': c.g_portal_isrtl}"></span></button></div></div></script><script id="uxa_analytics.xml" type="text/ng-template"><div class="uxa-analytics-root" aria-label="{{c.i18n.analyticsWindow}}" aria-expanded="{{c.isOpen}}" role="region"><div ng-if="c.isOpen" class="uxa-analytics-backdrop"></div><section class="uxa-analytics-modal hide-analytics-frame" ng-show="{{!firstLoad}}"><div ng-if="showLoader" class="uxa-loader fa fa-spinner fa-spin"></div><button class="uxa-analytics-close-button" ng-click="c.toggle($event)"><i class="fa fa-close" aria-label="{{c.i18n.minimizeAnalyticsWindow}}"></i></button><iframe ng-show="!showLoader && c.isOpen" id="uxa-iframe" class="uxa-analytics-frame" ng-src="{{frameUrl}}" title="{{::c.i18n.analyticsWindow}}" scrolling="no" horizontalscrolling="no" verticalscrolling="no"></iframe></section><button class="uxa-analytics-btn" ng-click="c.toggle($event)" data-original-title="{{c.getBadgeAriaLabel()}}" data-toggle="tooltip" data-placement="top" aria-label="{{c.getBadgeAriaLabel()}}" tabindex="0"><i class="fa fa-pie-chart"></i></button></div></script><script id="sp_element_url.xml" type="text/ng-template"><div style="display:flex;justify-content:space-between" data-unlock-empty-url="false" class="field-url"><span id="empty_url_{{::field.name}}" class="field-url-empty-label" ng-show="fieldIsLocked && field.stagedValue == ''">(empty)</span><a id="sp_formfield_{{::field.name}}_link" class="web web-inline form-control-static field-url-link" target="_blank" name="sp_formfield_{{::field.name}}_link" href="{{field.stagedValue}}" ng-show="fieldIsLocked && field.stagedValue != ''">{{field.stagedValue}}</a><input ng-style="fieldIsLocked && {'display':'none'}" name="{{::field.name}}" aria-label="{{::field.label}}" id="sp_formfield_{{::field.name}}" autocomplete="url" class="form-control" ng-model="field.stagedValue" aria-required="{{field.isMandatory()}}" ng-model-options="{allowInvalid: true}" ng-change="stagedValueChange()" placeholder="{{::field.placeholder}}" ng-readonly="field.isReadonly() == true" maxlength="{{::field.max_length}}" data-type="{{::field.type}}"></input><button class="btn btn-default btn-ref" type="button" aria-label="Lock {{::field.label}}" id="sp_formfield_{{::field.name}}_lock" data-ref="sp_formfield_{{::field.name}}" title="Lock {{::field.label}}" ng-readonly="field.isReadonly()" aria-disabled="{{field.isReadonly()}}" ng-show="fieldIsLocked == false" ng-click="lockField($event);" data-toggle="tooltip" data-container="body" data-placement="top"><span class="fa fa-unlock flip-icon-rtl" aria-hidden="true"></span></button><button class="btn btn-default btn-ref" type="button" aria-label="Edit {{::field.label}}" id="sp_formfield_{{::field.name}}_unlock" data-ref="sp_formfield_{{::field.name}}" ng-readonly="field.isReadonly()" aria-disabled="{{field.isReadonly()}}" ng-show="fieldIsLocked" ng-click="unlockField($event);" title="Edit {{::field.label}}" data-toggle="tooltip" data-container="body" data-placement="top"><span class="fa fa-lock" aria-hidden="true"></span></button></div></script><script id="sp_element_link.xml" type="text/ng-template"><div style="display: flex; justify-content: space-between;" data-unlock-empty-url="{{ gs.getProperty('glide.ui.unlock_empty_url') }}" class="field-url"><span id="empty_url_{{ ::field.name }}" class="field-url-empty-label" ng-show="!field.link">{{ gs.getMessage('(empty)') }}</span><span class="web web-inline form-control-static" style="width: 100%; padding:0; margin: -8px 0 4px 0;" ng-bind-html="::trustedHTML"></span></div></script><script id="sp_assessment_signature.xml" type="text/ng-template"><div><div class="row wrapper-xs"><div ng-class="{'col-xs-3': !variable.isNative}"><label class="wrapper-xs" for="sign-auth-username">{{variable.msgs.username}}</label></div><div ng-class="{'col-xs-9': !variable.isNative}"><input ng-model="variable.username" class="form-control" id="sign-auth-username" type="text" name="sign-auth-username" disabled="true"></input></div></div><div class="row wrapper-xs"><div ng-class="{'col-xs-3': !variable.isNative}"><label class="wrapper-xs" for="sign-auth-password">{{variable.msgs.password}}</label></div><div ng-class="{'col-xs-9': !variable.isNative}"><input class="form-control" id="sign-auth-password" type="password" ng-model="variable.password" name="sign-auth-password"></input></div></div></div></script><script id="sp_assessment_accordion.xml" type="text/ng-template"><div><div uib-accordion-transclude="heading" class="container-fluid no-padder accordion-header-heading sp-asmt-auto-focus"><span uib-accordion-header=""></span></div><div ng-transclude="" ng-if="isDisabled "></div><div class="'panel-collapse collapse" uib-collapse="!isOpen" ng-if="!isDisabled"><div ng-transclude=""></div></div></div></script><script id="sp_assessment_layout.xml" type="text/ng-template"><div ng-repeat="page in pages track by $index" ng-if="page.id == currentPage" class="m-b-lg"><div ng-if="!hasPagination" class="asmt-modal-layout asmt-padding-xl panel panel-default survey-intro-block"><div ng-if="(renderFields && page.isPageMandatory) || formModel.not_show_intro_note" style="overflow: hidden;" class="asmt-padding-b-xl asmt-category-border" ng-class="{'asmt-padding-b-lg' : formModel.trigger_id != ''}"><div ng-if="formModel.not_show_intro_note" class="survey-label font-bold pull-left" ng-class="formModel.trigger_id != '' ? 'asmt-margin-b-sm' : 'm-b-sm'">{{formModel.display}}</div><span ng-if="renderFields && page.isPageMandatory" class="pull-right"><span class="fa fa-asterisk mandatory" title="asterisk"><span class="sr-only">asterisk</span></span>Indicates required</span><div ng-if="formModel.not_show_intro_note && formModel.trigger_id" style="clear: both; padding-left: 1.2rem;">{{getTransaltedMessage('{0} for', formModel.evaluation_method_display)}}<span ng-if="::!c.isNative" style="margin: 0 2px;"><a href="?id=ticket&table={{formModel.trigger_table}}&sys_id={{formModel.trigger_id}}">{{formModel.trigger_display}}</a></span><span ng-if="::c.isNative" style="margin: 0 2px;">{{formModel.trigger_display}}</span><span ng-if="formModel.trigger_desc" style="font-size: 12px">[{{formModel.trigger_desc}}]</span></div></div><uib-accordion close-others="false"><uib-accordion-group ng-attr-style="{{formModel.is_kiosk_survey && 'margin-bottom: 0px !important; border:none;'}}" template-url="sp_assessment_accordion.xml" ng-repeat="category in page.categories track by $index" is-disabled="formModel.is_kiosk_survey" is-open="!category.collapsed" class="asmt-accordion-group asmt-category-border m-n category-container"><uib-accordion-heading uib-collapse="category.collapsed" ng-if="!formModel.is_kiosk_survey"><div role="button" ng-show="(formModel.evaluation_method == 'assessment' || formModel.evaluation_method == 'risk_assessment') && category.assessableRecord.assessable_record_name && (category.sourceId != page.categories[$index-1].sourceId)" class="font-bold break-word btn btn-group-justified wrapper-sm assessable-record-label asmt-category-border no-radius" tabindex="0" ng-class="{'disabled-view': formModel.readonly_form, 'btn-primary' : !formModel.readonly_form, 'survey-label' : formModel.evaluation_method == 'assessment' || formModel.evaluation_method == 'risk_assessment'}" aria-expanded="{{page.categoriesExpanded[category.sourceId]}}" ng-click="toggleAssessableRecordCategories(category.sourceId);"><div class="pull-left">{{category.assessableRecord.assessable_record_name}}</div><div class="pull-right"><span class="fa accordion-icon chevron-border" id="assessable_record_{{::category.sysId}}_{{::category.sourceId}}" ng-class="page.categoriesExpanded[category.sourceId] ? 'fa-chevron-up' : 'fa-chevron-down'" data-placement="right" data-toggle="tooltip" data-original-title="{{getTooltipTitle(category, true)}}" ng-click="updateTooltip(false, category.sysId, category.sourceId);"><div class="sr-only">{{getTooltipTitle(category, true)}}</div></span></div></div><div id="{{::category.sysId}}_{{::category.sourceId}}" role="button" class="wrapper-sm category-heading category-heading-section cursor-pointer" tabindex="0" aria-expanded="{{!category.collapsed}}" ng-click="$parent.$parent.toggleOpen(); category.collapsed = !category.collapsed; categoryToggled(category.sourceId);"><span class="fa fa-asterisk mandatory" style="padding-right: .25em" ng-if="category.isMandatory" aria-required="category.isMandatory" aria-hidden="true"></span><span role="heading" class="font-bold break-word category-label" aria-level="2">{{category.name}}</span><span ng-if="(formModel.evaluation_method == 'assessment' || formModel.evaluation_method == 'risk_assessment') && category.assessableRecord.assessable_record_name" class="fa fa-info-circle padder-xs m-b-xs" role="tooltip" data-placement="right" data-toggle="tooltip" title="{{getTransaltedMessage('For {0}', category.assessableRecord.assessable_record_name)}}" data-original-title="{{getTransaltedMessage('For {0}', category.assessableRecord.assessable_record_name)}}" aria-label="{{getTransaltedMessage('For {0}', category.assessableRecord.assessable_record_name)}}" tabindex="0" ng-click="$event.stopPropagation();"><div class="sr-only">{{getTransaltedMessage('For {0}', category.assessableRecord.assessable_record_name)}}</div></span><div class="pull-right" style="margin-right: 3px;"><span class="fa accordion-icon" id="category_{{::category.sysId}}_{{::category.sourceId}}" ng-class="category.collapsed ? 'fa-chevron-down' : 'fa-chevron-up'" data-placement="right" data-toggle="tooltip" data-original-title="{{getTooltipTitle(category, false)}}" ng-click="updateTooltip(true, category.sysId, category.sourceId);"><div class="sr-only">{{getTooltipTitle(category, false)}}</div></span></div></div></uib-accordion-heading><div role="tab" ng-if="formModel.is_kiosk_survey"></div><sp-assessment-details class="asmt-cat-details" ng-if="::category.details && !formModel.is_kiosk_survey" html-details="category.details" label="category.name" padding-required="false" is-mobile="isMobile" field-id="category.sysId + category.sourceId" clamp-line="6" is-category="true"></sp-assessment-details><div class="sp-form-field-parent" ng-class="{'asmt-padding-t-xxl': !formModel.is_kiosk_survey}"><div ng-repeat="question in category.questions track by $index" ng-class="{'asmt-question-border asmt-margin-t-xxl': !formModel.is_kiosk_survey}" class="asmt-padding-t-xxl asmt-padding-l-r-md" ng-if="checkQuestionVisibility(isMobile, formModel, question)"><sp-assessment-form-field ng-if="renderFields" ng-class=" {'center-label-block': formModel.is_kiosk_survey && !isNative, 'text-center': formModel.is_kiosk_survey && formModel._fields[question].type != 'multiple_choice' && !isNative}" form-model="formModel" field="formModel._fields[question]" glide-form="getGlideForm()" ng-show="checkQuestionVisibility(isMobile, formModel, question)" is-mobile="isMobile" is-native="isNative"></sp-assessment-form-field><sp-assessment-add-info field="formModel._fields[question]" ng-if="formModel._fields[question].allow_add_info" is-mobile="isMobile" is-native="isNative"></sp-assessment-add-info></div></div></uib-accordion-group></uib-accordion><sp-assessment-nav-buttons ng-if="(!formModel.is_kiosk_survey || isMobile) && !isNative && !formModel.readonly_form"></sp-assessment-nav-buttons></div><div ng-if="hasPagination" ng-repeat="category in page.categories track by $index" class="asmt-modal-layout panel panel-default survey-intro-block" ng-class="{'asmt-padding-xl' : !isNative}"><sp-assessment-progress-bar ng-if="formModel.show_progress_bar && pages.length!=1"></sp-assessment-progress-bar><div ng-if="formModel.not_show_intro_note" class="survey-label font-bold padder-l-none padder-r-none" ng-class="formModel.trigger_id != '' ? 'asmt-margin-b-sm' : 'asmt-padding-b-l'">{{formModel.display}}</div><div ng-if="formModel.not_show_intro_note && formModel.trigger_id" style="padding-bottom: 24px;">{{getTransaltedMessage('{0} for', formModel.evaluation_method_display)}}<span ng-if="::!c.isNative" style="margin: 0 2px;"><a href="?id=ticket&table={{formModel.trigger_table}}&sys_id={{formModel.trigger_id}}">{{formModel.trigger_display}}</a></span><span ng-if="::c.isNative" style="margin: 0 2px;">{{formModel.trigger_display}}</span><span ng-if="formModel.trigger_desc" style="font-size: 12px">[{{formModel.trigger_desc}}]</span></div><div ng-if="!formModel.is_kiosk_survey || isMobile" class="category-container"><div role="heading" ng-if="(formModel.evaluation_method == 'assessment' || formModel.evaluation_method == 'risk_assessment') && category.assessableRecord.assessable_record_name" class="font-bold break-word category-label" ng-class="{'survey-label bg-primary wrapper-sm m-b': !isMobile && !isNative}" aria-level="2">{{category.assessableRecord.assessable_record_name}}</div><div style="overflow: hidden;" class="category-heading-section" ng-attr-style="{{(formModel.evaluation_method == 'assessment') && !isMobile && !isNative && 'padding: 0 10px;'}}"><div role="heading" style="margin-bottom:16px !important" ng-class="{'inline': !category.details || !page.showCategoryDetails, 'field-label': !isNative}" class="font-bold break-word" aria-level="2">{{category.name}}</div><sp-assessment-details style="display: inline-block;" ng-if="::category.details && page.showCategoryDetails" html-details="category.details" label="category.name" padding-required="false" is-mobile="isMobile" field-id="category.sysId" clamp-line="6" is-category="true"></sp-assessment-details><div ng-if="renderFields && category.isMandatory" class="pull-right" style="text-align: right;"><span ng-class="{'m-b-xs': isMobile}"><span class="fa fa-asterisk mandatory" title="asterisk" ng-attr-role="{{isNative ? 'text' : undefined}}"><span class="sr-only">asterisk</span></span>Indicates required</span></div></div></div><div class="sp-form-field-parent asmt-margin-t-xl panel-top-border"><div ng-repeat="question in category.questions track by $index" class="asmt-question-border asmt-margin-t-xxl asmt-padding-t-xxl asmt-padding-l-r-md" ng-if="checkQuestionVisibility(isMobile, formModel, question)"><sp-assessment-form-field ng-if="renderFields" ng-class=" {'text-center': formModel.is_kiosk_survey && !isNative}" form-model="formModel" field="formModel._fields[question]" glide-form="getGlideForm()" ng-show="checkQuestionVisibility(isMobile, formModel, question)" is-mobile="isMobile" is-native="isNative"></sp-assessment-form-field><sp-assessment-add-info field="formModel._fields[question]" ng-if="formModel._fields[question].allow_add_info" is-mobile="isMobile" is-native="isNative"></sp-assessment-add-info></div></div><div class="text-center padder-b" ng-if="isNative"><span aria-hidden="true">{{currentPage + 1}}/{{pages.length}}</span><span class="sr-only">Page {{currentPage + 1}} of {{pages.length}}</span></div><sp-assessment-nav-buttons ng-if="(!formModel.is_kiosk_survey || isMobile) && !isNative"></sp-assessment-nav-buttons></div></div></script><script id="sp_assessment_model.xml" type="text/ng-template"><div><sp-assessment-layout form-model="formModel"></sp-assessment-layout><div ng-init="execItemScripts()"></div></div></script><script id="sp_assessment_form_field.xml" type="text/ng-template"><div class="sp-asmt-auto-focus"><div ng-if="c.renderSPFormField(field)" ng-class="{'survey-question': !isMobile && !formModel.is_kiosk_survey}"><sp-form-field form-model="formModel" field="field" glide-form="getGlideForm()"></sp-form-field></div><div ng-if="!c.renderSPFormField(field)" class="form-group" ng-class="{'survey-question': !isMobile && !formModel.is_kiosk_survey}"><div class="wrap-label-text" ng-if="::c.showLabel(field)" ng-class="{'m-b-sm': isNative}"><label class="field-label label-override" for="sp_formfield_{{::field.name}}"><span class="field-decorations"><span ng-show="field.mandatory" style="padding-right: .25em" class="fa fa-asterisk mandatory" ng-class="{'mandatory-filled': field.mandatory_filled()}" title="Required" aria-label="{{field.mandatory_filled()? 'Required Filled ' : 'Required '}}" role="img"></span></span><span ng-attr-title="{{::accessible ? undefined : field.hint}}" data-placement="right" data-toggle="tooltip">{{field.label}}</span></label></div><sp-assessment-details ng-if="::field.details && (isMobile || field.type != 'template')" html-details="field.details" label="field.label" padding-required="true" field-id="field.sys_id" clamp-line="6"></sp-assessment-details><span class="type-{{::field.type}} field-actual" ng-switch="::field.type" ng-class="{'state-mandatory': field.mandatory, 'state-readonly': field.read_only, 'state-hidden': field.hidden, 'has-error': field.isInvalid}"><sp-assessment-checkbox-group ng-switch-when="multiplecheckbox" field="field" sn-change="fieldValueChanged(newValue)" id="sp_formfield_{{::field.name }}"></sp-assessment-checkbox-group><sp-assessment-attachment ng-switch-when="attachment" field="field" sn-change="fieldValueChanged(newValue)" id="sp_formfield_{{::field.name }}" allowed-file-size="formModel.sys_properties.allowedFileSize" allowed-file-extensions="formModel.sys_properties.allowedFileExtensions"></sp-assessment-attachment><sp-assessment-image-scale ng-switch-when="imagescale" field="field" sn-change="fieldValueChanged(newValue)" id="sp_formfield_{{::field.name }}" is-mobile="isMobile" is-kiosk-survey="formModel.is_kiosk_survey" is-native="isNative"></sp-assessment-image-scale><span ng-switch-when="template"><sp-assessment-template ng-if="field.template.firstQuestion && !isMobile" field="field" template-group="formModel.template_groups[field.template_group]" fields="templateGroupFields" glide-form="getGlideForm()" id="sp_formfield_{{::field.name }}"></sp-assessment-template><sp-assessment-image-scale ng-if="field.template.allow_image && isMobile" field="field" sn-change="fieldValueChanged(newValue)" id="sp_formfield_{{::field.name }}" is-mobile="isMobile" is-native="isNative"></sp-assessment-image-scale><sp-assessment-mobile-field ng-if="!field.template.allow_image && isMobile"></sp-assessment-mobile-field></span><sp-assessment-number class="question-width" ng-switch-when="number" field="field" sn-change="fieldValueChanged(newValue)" id="sp_formfield_{{::field.name }}" is-mobile="isMobile" is-native="isNative"></sp-assessment-number><sp-assessment-ranking ng-switch-when="ranking" field="field" sn-change="fieldValueChanged(newValue)" id="sp_formfield_{{::field.name }}" is-native="isNative"></sp-assessment-ranking><sp-assessment-mobile-field class="question-width" ng-switch-when="numericscale" id="sp_formfield_{{::field.name }}"></sp-assessment-mobile-field><sp-assessment-mobile-field class="question-width" ng-switch-when="multiple_choice" id="sp_formfield_{{::field.name }}"></sp-assessment-mobile-field><div ng-switch-when="signature" ng-class="{'type-boolean' : field.signType == 'checkbox'}"><label ng-style="field.signType == 'checkbox' && (!isNative && {'display':'inline-flex'}) || {'display':'inline'}" ng-class="{'no-padder' : isNative}" for="sp_formfield_{{::field.name}}"><input ng-if="field.signType == 'checkbox'" type="checkbox" ng-model="field.value" value="field.value" id="sp_formfield_{{::field.name }}" ng-change="stagedValueChange()" ng-disabled="{{field.isReadonly()}}" aria-required="{{field.mandatory}}"></input><span ng-class="{'boolean-control' : field.signType == 'checkbox'}"><span ng-show="field.signType == 'checkbox'" class="fa fa-asterisk mandatory m-r-xs" ng-class="{'mandatory-filled': field.value}" title="Required" role="img" aria-hidden="true"></span><span ng-if="field.htmlLabel" id="{{::field.sys_id}}_label" ng-bind-html="field.htmlLabel" style="display:inline-block; word-break: break-word"></span></span></label><div ng-if="field.signType == 'full_name'"><sp-form-field form-model="formModel" field="field" glide-form="getGlideForm()"></sp-form-field></div></div></span></div></div></script><script id="sp_assessment_nav_buttons.xml" type="text/ng-template"><div style="width:100%;" ng-class="{'container-fluid': !isMobile, 'asmt-sticky-buttons': formModel.actions_footer}" ng-attr-style="{{hasPagination && 'margin-top: 3.2rem;'}}"><div style="overflow: hidden;" class="row asmt-padding-t-xxxl panel-top-border" ng-if="!isMobile"><div class="m-b-xs col-sm-5"><button class="btn btn-default hidden-xs" ng-disabled="isSavingOrSubmitting()" ng-if="!formModel.hide_cancel" ng-show="currentPage == 0" ng-click="validatePageAndSave('cancel')">Cancel</button><button class="btn btn-default hidden-xs" ng-disabled="isSavingOrSubmitting()" ng-click="navigatePage('previous')" ng-show="currentPage != 0 && hasPagination">Previous</button></div><div class="m-t-sm col-sm-2 text-center hidden-xs"><span aria-hidden="true">{{currentPage + 1}}/{{pages.length}}</span><span class="sr-only">Page {{currentPage + 1}} of {{pages.length}}</span></div><div class="m-b-xs col-sm-5 flex-row justify-end"><button ng-disabled="isSavingOrSubmitting()" ng-if="!formModel.is_page_public && currentPage == pages.length-1 && !formModel.hide_save" class="btn btn-default hidden-xs asmt-margin-r-md" ng-click="validatePageAndSave('save')">{{ currentAction == 'save' ? controlMessages['Saving...'] : controlMessages['Save'] }}</button><button ng-disabled="isSavingOrSubmitting()" class="btn btn-primary hidden-xs" ng-click="validatePageAndSave('next')" ng-show="currentPage != pages.length - 1 && hasPagination">Next</button><button ng-disabled="isSavingOrSubmitting()" class="btn btn-primary hidden-xs" ng-click="validatePageAndSave('submit')" ng-show="currentPage == pages.length-1">{{ currentAction == 'submit' ? controlMessages['Submitting...'] : controlMessages['Submit'] }}</button></div></div><div class="visible-xs" style="overflow:hidden;" ng-class="{'asmt-border-top': hasPagination}"><div class="text-center" style="padding:24px 0px"><span aria-hidden="true">{{currentPage + 1}}/{{pages.length}}</span><span class="sr-only">Page {{currentPage + 1}} of {{pages.length}}}</span></div><button ng-disabled="isSavingOrSubmitting()" class="btn btn-default" style="float:left;width:48%" ng-click="navigatePage('previous')" ng-show="currentPage != 0 && hasPagination">Previous</button><button ng-disabled="isSavingOrSubmitting()" class="btn btn-primary" style="float:right;width:48%" ng-click="validatePageAndSave('next')" ng-show="currentPage != pages.length - 1 && hasPagination">Next</button><button ng-disabled="isSavingOrSubmitting()" class="btn btn-primary" style="float:right;width:48%" ng-click="validatePageAndSave('submit')" ng-show="currentPage == pages.length-1 && !formModel.readonly_form">{{ currentAction == 'submit' ? controlMessages['Submitting...'] : controlMessages['Submit'] }}</button></div></div></script><script id="sp_assessment_progressbar.xml" type="text/ng-template"><div class="m-b-lg" style="margin-top:12px"><uib-progressbar title="{{progress}}" class="assessment-progress inline m-b-none m-r" style="width:100%" value="progress"></uib-progressbar><div id="{{progress}}" aria-hidden="true">{{progressText}}</div></div></script><script id="sp_assessment_mobile_field.xml" type="text/ng-template"><fieldset><legend class="sr-only"><span ng-if="field.isMandatory() && !field.mandatory_filled()">Required -</span><span ng-if="field.isMandatory() && field.mandatory_filled()">Required filled -</span><span>{{field.label}}</span></legend><div ng-repeat="c in field.choices track by $index" class="wrapper-xs" ng-class="{'m-l' : isNative}"><button class="btn btn-block" elem-id="sp-asmt-mobile-{{::c.sys_id}}" ng-click="fieldValueChanged(c.value)" aria-pressed="{{c.value == field.value}}" ng-class="{'btn-primary' : field.value == c.value, 'btn-default' : field.value != c.value, 'asmt-primary-btn-disabled': field.isReadonly() && c.value == field.value}" ng-disabled="field.isReadonly()"><span style="white-space: normal">{{c.label}}</span></button></div></fieldset></script><script id="sp_assessment_image_scale.xml" type="text/ng-template"><div><fieldset><legend class="sr-only"><span ng-if="field.isMandatory() && !field.mandatory_filled()">Required -</span><span ng-if="field.isMandatory() && field.mandatory_filled()">Required filled -</span><span>{{field.label}}</span></legend><div ng-if="!isMobile" style="display:flex; flex-wrap:wrap;" class="row" ng-class="{single_question_survey_image: isKioskSurvey}" role="radiogroup"><div ng-repeat="c in field.choices track by $index" class="sp-asmt-auto-focus col-xs-6 col-sm-2 text-center asmt-img-scale img-scale-{{::field.sys_id}} full-md-width" ng-attr-style="{{field.isReadonly() ? 'cursor: default; margin: 2rem;' : 'cursor: pointer; margin: 2rem;'}}" role="radio" ng-keydown="selectOption($event, $index)" aria-checked="{{field.value == c.value}}" aria-label="{{::c.label}}" ng-attr-tabindex="{{field.isReadonly() ? null : getTabIndex($index, c)}}" ng-click="field.isReadonly() || chooseOption($event, $index)" ng-class="{'col-sm-2': !isKioskSurvey, 'col-sm-3': isKioskSurvey, 'col-md-2': isKioskSurvey}"><label ng-if="!!c.selected_image"><img ng-if="field.unselected_image_all_present" src="{{c.value == field.value ? c.selected_image : c.unselected_image}}?t=small" role="presentation" alt="" class="asmt-img-size m-b-sm m-t-sm" ng-style="{'opacity': initialOpacity ? initialOpacity : c.opacity}" ng-click="field.isReadonly() || chooseOption($event, $index)" ng-class="{'img_size' : !isKioskSurvey, 'disabled-pointer' : field.isReadonly(), 'cursor-pointer' : !field.isReadonly()}" ng-disabled="{{field.isReadonly()}}"></img><img ng-if="!field.unselected_image_all_present" src="{{c.selected_image }}?t=small" role="presentation" alt="" class="asmt-img-size m-b-sm m-t-sm" ng-style="{'opacity': initialOpacity ? initialOpacity : c.opacity}" ng-click="field.isReadonly() || chooseOption($event, $index)" ng-class="{'img_size' : !isKioskSurvey, 'disabled-pointer' : field.isReadonly(), 'cursor-pointer' : !field.isReadonly()}" ng-disabled="{{field.isReadonly()}}"></img><span style="overflow: hidden; white-space: normal; word-wrap: break-word;" class="btn btn-default btn-block " ng-class=" { 'btn-primary': c.value == field.value, 'asmt-primary-btn-disabled': field.isReadonly() && c.value == field.value}" ng-if="!isKioskSurvey" ng-click="selectChoice($event, c)" title="{{::c.label}}" ng-disabled="{{field.isReadonly()}}">{{::c.label}}</span><span style="overflow: hidden; white-space: normal; word-wrap: break-word;font-weight:bold" class="btn btn-block" ng-click="field.isReadonly() || selectChoice($event, c)" ng-if="c.value == field.value && isKioskSurvey" ng-disabled="{{field.isReadonly()}}" title="{{::c.label}}">{{::c.label}}</span></label><label ng-if="!c.selected_image" style="margin: auto;"><div ng-click="field.isReadonly() || chooseOption($event, $index)" class="m-b-sm text-overflow-ellipsis v-middle text-center asmt-image-scale-img-not-present asmt-img-size" ng-class="{'disabled-pointer' : field.isReadonly()}" title="{{::c.label}}" ng-disabled="{{field.isReadonly()}}">{{::c.label}}</div><span style="overflow: hidden; white-space: normal; word-wrap: break-word;" class="btn btn-default btn-block " ng-class=" { 'btn-primary': c.value == field.value, 'asmt-primary-btn-disabled': field.isReadonly() && c.value == field.value}" ng-if="!isKioskSurvey" ng-click="selectChoice($event, c)" title="{{::c.label}}" ng-disabled="{{field.isReadonly()}}">{{::c.label}}</span><span style="overflow: hidden; white-space: normal; word-wrap: break-word;font-weight:bold" class="btn btn-block" ng-click="field.isReadonly() || selectChoice($event, c)" ng-if="c.value == field.value && isKioskSurvey" ng-disabled="{{field.isReadonly()}}" title="{{::c.label}}">{{::c.label}}</span></label></div></div><div ng-if="isMobile" class="wrapper-xs row"><div class="col-xs-12 wrapper-sm text-center"><div ng-if="mobileChoice.selected_image"><img src="{{mobileChoice.selected_image}}?t=small" title="{{mobileChoice.label}}" alt="{{mobileChoice.label}}" class="asmt-img-size"></img></div><div ng-if="!mobileChoice.selected_image"><div title="{{::mobileChoice.label}}" class="m-b-sm text-overflow-ellipsis v-middle text-center asmt-image-scale-img-not-present asmt-img-size">{{mobileChoice.label}}</div></div></div><div ng-repeat="c in field.choices track by $index" class="wrapper-xs text-center" ng-class="{'m-l' : isNative}"><button class="btn btn-block" ng-class="{'btn-default' : c.value !== field.value, 'btn-primary': c.value == field.value,'asmt-primary-btn-disabled': field.isReadonly() && c.value == field.value }" aria-pressed="{{c.value == field.value}}" ng-click="field.isReadonly() || selectChoice($event, c);" title="{{::c.label}}" ng-disabled="{{field.isReadonly()}}"><span style="white-space: normal">{{::c.label}}</span></button></div></div></fieldset></div></script><script id="sp_assessment_number.xml" type="text/ng-template"><div ng-class="{'m-l' : isNative}"><div class="inline pad-right"><input id="asmt_number_{{::field.sys_id}}" aria-label="{{field.label}} range {{field.minValue}} to {{field.maxValue}}" name="{{::field.name}}" aria-required="{{field.isMandatory()}}" aria-invalid="{{field.isInvalid}}" class="form-control m-r-xs inline padder-xs" ng-class="{'text-center': isMobile}" ng-model="field.stagedValue" ng-change="validate()" style="width:75px;" ng-disabled="field.isReadonly()"></input><span ng-if="::field.showPercentage">%</span></div><div class="inline"><span>Range: {{::field.minValue}} - {{::field.maxValue}}</span></div><div><span class="asmt-inline-info"><span ng-if="field.isInvalidInput" class="asmt-error" role="alert">{{translations['The value is not valid or it is out of range.']}}</span><span ng-if="field.isConverted && !field.isInvalidInput" role="alert">{{translations['The entered value has been changed to an integer.']}}</span></span></div></div></script><script id="sp_assessment_checkbox_group.xml" type="text/ng-template"><fieldset><legend class="sr-only" id="sp_asmt_grp_checkbox_{{::field.sys_id}}"><span class="field-decorations"><span ng-if="field.isMandatory() && !field.mandatory_filled()">Required -</span><span ng-if="field.isMandatory() && field.mandatory_filled()">Required filled -</span>{{::field.label}}</span></legend><div ng-repeat="c in field.choices track by $index" role="group" aria-labelledby="sp_asmt_grp_checkbox_{{::field.sys_id}}" class="type-boolean"><label><input id="checkbox-input-{{::c.sys_id}}" aria-label="{{::c.label}}" type="checkbox" name="{{::c.name}}" ng-change="setFieldValue(c)" aria-checked="{{c.selected}}" ng-model="c.selected" ng-disabled="{{field.isReadonly()}}"></input><span class="boolean-control"><span>{{::c.label}}</span></span></label></div></fieldset></script><script id="sp_assessment_details.xml" type="text/ng-template"><div ng-class="{'padding-details': paddingRequired}"><div style="overflow-wrap: break-word;" id="sp_assessment_details_{{::fieldId}}" class="show-more-box" ng-class="{'details-text': showMore, 'no-padder': paddingRequired, 'm-l' : isNative && !isCategory, 'padder-l-none padder-r-none': isMobile}" ng-bind-html="trustedHTML(htmlDetails)"></div><div class="sp-asmt-auto-focus" ng-if="showButton"><button ng-click="showMoreClicked();" aria-label="{{showMore ? showMoreMsg : showLessMsg}}" aria-expanded="{{!showMore}}" class="btn show-more-control" ng-class="{'btn-sm show-more-control-color': !isNative, 'btn-default native-mobile-show-more-control': isNative}" ng-attr-style="{{paddingRequired && 'margin: .2rem auto 2.2rem auto !important'}}"><span>{{showMore ? controlMessages['Show more'] : controlMessages['Show less']}}</span></button></div></div></script><script id="sp_assessment_add_info.xml" type="text/ng-template"><div ng-class="{'adjust-width': !isMobile, 'm': isNative}"><span class="question-label">{{::field.add_info_label}}</span><textarea class="form-control asmt-margin-t-sm asmt-margin-b-sm" rows="4" ng-attr-style="{{field.isReadonly() ? 'resize: none' : 'resize: vertical'}}" name="{{::field.add_info_name}}" aria-label="{{::field.add_info_label + ' for ' + field.label}}" ng-model="field.add_info" autocomplete="off" ng-disabled="field.isReadonly()"></textarea></div></script><script id="sp_assessment_template.xml" type="text/ng-template"><div><table class="table table-responsive" role="presentation"><thead><tr><td ng-style="{width: questionWidth + '%'}"></td><td class="text-center" ng-style="{width: (100 - questionWidth) + '%'}"><div class="inline" style="overflow-wrap:break-word;font-size:1.4rem;" ng-repeat="c in field.choices track by $index" ng-style="{width: choiceWidth + '%'}">{{::c.label}}</div></td></tr></thead><tbody><tr ng-repeat="qid in templateGroup.questions track by $index" ng-class="{'has-error': _field.isInvalid}" ng-init="_field = fields[qid]"><td ng-style="{width: questionWidth + '%'}" class="padder-l-none padder-t-md" ng-if="_field.visible"><span><span class="field-decorations"><span ng-show="_field.mandatory" class="fa fa-asterisk mandatory" aria-hidden="true" ng-class="{'mandatory-filled': _field.mandatory_filled()}" style="padding-right: .25em"></span></span><span class="field-label" ng-attr-title="{{::accessible ? undefined : field.hint}}" data-placement="right" data-toggle="tooltip">{{::_field.label}}</span><sp-assessment-details ng-if="::_field.details" html-details="_field.details" padding-required="true" label="_field.label" field-id="field.sys_id" clamp-line="4" class="padding-child"></sp-assessment-details></span></td><td class="text-center radio padder-t-md" ng-style="{width: (100 - questionWidth) + '%'}" style="display: table-cell;" ng-if="_field.visible"><fieldset class="radio-control m-l-none"><legend class="sr-only"><span ng-if="_field.isMandatory() && !_field.mandatory_filled()">Required -</span><span ng-if="_field.isMandatory() && _field.mandatory_filled()">Required filled -</span>{{::_field.label}}</legend><div class="inline" ng-style="{width: choiceWidth + '%'}" ng-repeat="c in _field.choices track by $index"><label ng-if="::!_field.template.allow_image || !_field.selected_image_all_present"><input name="radio-button-{{qid}}" class="template-radio-choice" aria-label="{{::c.label}}" aria-checked="{{_field.value == c.value}}" ng-checked="_field.value == c.value" ng-click="selectChoice(_field.name, c.value)" type="radio" value="{{::c.value}}" ng-disabled="field.isReadonly()"></input><span class="m-l-none m-r-none"><div class="sr-only">{{::c.label}}</div></span></label><span ng-if="_field.template.allow_image && _field.selected_image_all_present"><label><span class="sr-only">{{c.label}}</span><input class="fade" name="radio-button-{{qid}}" style="position: absolute;" aria-checked="{{_field.value == c.value}}" ng-checked="_field.value == c.value" ng-click="selectChoice(_field.name, c.value)" type="radio" value="{{::c.value}}" ng-disabled="field.isReadonly()"></input><div class="asmt-img-choice" ng-if="!_field.unselected_image_all_present" ng-class="{'disabled-pointer' : _field.isReadonly()}"><img src="{{c.selected_image}}?t=small" ng-style="{'opacity' : (c.value == _field.value) ? '1' : '0.5'}" class="asmt-img-size"></img></div><div class="asmt-img-choice" ng-if="_field.unselected_image_all_present" ng-class="{'disabled-pointer' : _field.isReadonly()}"><img src="{{(c.value == _field.value) ? c.selected_image : c.unselected_image}}?t=small" class="asmt-img-size"></img></div></label></span></div></fieldset></td></tr></tbody></table></div></script><script id="sp_assessment_attachment.xml" type="text/ng-template"><div><div class="question-width" ng-class="{'m-l m-b-xs' : isNative}"><div ng-if="field.attachments.length" class="file-list-wrap"><ul class="list-group m-b-none"><li class="list-group-item" ng-repeat="attachment in field.attachments"><ng-include src="getAttachmentTemplate()" onload="attachmentHandler.manageFocus()"></ng-include></li></ul></div><div ng-show="errorMessages.length"><div ng-repeat="error in errorMessages" class="wrapper-xs r m-t-xs bg-danger" ng-if="$last">{{error.msg}}</div></div></div><input ng-show="false" type="file" ng-file-select="onAttachmentSelect($files)" multiple="true"></input><button ng-click="isNative ? showAttachOptions() : openAttachmentSelector($event)" type="button" id="sp_asmt_formfield_{{::field.name}}" style="display:flex; align-items: center" class="btn btn-primary" ng-class="{'m-t-sm' : !isNative, 'm-l' : isNative}" aria-label="Upload Attachment for {{field.label}} " ng-disabled="field.isReadonly()"><sn-glyph char="upload" class="m-r-xs"></sn-glyph><small>{{field.isMandatory() && !field.mandatory_filled() ? "Required - Upload" : "Upload"}}</small></button></div></script><script id="sp_assessment_ranking.xml" type="text/ng-template"><div class="container-fluid"><div class="row"><div class="col-xs-12 col-sm-6"><fieldset><legend class="sr-only"><span ng-if="field.isMandatory() && !field.mandatory_filled()">Required -</span><span ng-if="field.isMandatory() && field.mandatory_filled()">Required filled -</span>{{::field.label}}</legend><input class="select2-offscreen" tabindex="-1" aria-hidden="true" ng-focus="setFocusToSelect(0)" name="asmt_ranking_{{::field.sys_id}}"></input><ul class="asmt-ranking-list item-list-style-type-none" ng-class="{'has-error': field.isInvalid, 'm-l' : isNative}"><li class="row" ng-repeat="c in field.choices track by $index"><div class="col-sm-3" ng-class="{'col-xs-4 asmt-padding-xss' : isNative, 'col-xs-4 wrapper-xs' : !isNative}"><select id="{{::c.sys_id}}" name="{{c.name}}" aria-label="{{::c.label}}" ng-change="onSelectChange(c)" autocomplete="off" class="form-control wrapper-xs" ng-model="c.value" ng-disabled="field.isReadonly()"><option value="-1" ng-selected="c.value == -1">--None--</option><option ng-repeat="i in field.choices track by $index" value="{{$index + 1}}" ng-selected="$index + 1 == c.value">{{$index + 1}}</option></select></div><div class="col-sm-8 break-word" aria-hidden="true" ng-class="{'padder-v-xs col-xs-6' : isNative, 'wrapper-sm col-xs-6' : !isNative}"><span id="label_{{::c.sys_id}}">{{c.label}}</span></div><div class="col-xs-2 col-sm-1" aria-hidden="true" ng-class="{'padder-v-xs ' : isNative, 'wrapper-sm' : !isNative}" ng-attr-style="{{field.isReadonly() ? 'opacity: .5' : undefined}}"><span class="fa fa-bars pull-right wrapper-xs"></span></div></li></ul></fieldset></div></div></div></script><script type="text/ng-template" id="sp-modal.html"><div class="modal-header" ng-style="options.headerStyle"><button type="button" ng-if="options.showCloseIcon" class="close pull-right" ng-click="$dismiss()" title="Close modal" data-toggle="tooltip" data-placement="bottom" aria-label="Close modal" autofocus="autofocus">×</button><h2 class="modal-title h4" ng-bind-html="options.title" id="modal-title"></h2></div><div class="modal-body" ng-keyup="keyPress($event.keyCode)"><p ng-if="options.message" ng-bind-html="options.message"></p><p ng-if="options.errorMessage" class="alert alert-danger ng-binding ng-scope" role="alert" ng-bind-html="options.errorMessage"></p><div ng-if="options.widget"><sp-widget widget="options.widget"></sp-widget></div><div ng-if="options.input"><form name="form.xpForm" ng-if="options.input" ng-submit="submit()"><div class="form-group"><label for="xpInput" ng-if="options.label"><span class="field-decorations"><span class="fa fa-asterisk mandatory sp-field-label-padding" title="Required"></span>{{options.label}}</span></label><input id="xpInput" type="text" class="form-control" ng-model="input.value" required="true" ng-change="changed=true" ng-blur="clearFocusListCache()" ng-if="!options.values || options.values.length === 0" autocomplete="off" aria-invalid="{{(changed == true && form.xpForm.$invalid) || false}}"></input><div class="input-group" ng-if="options.values"><input id="xpInput" type="text" class="form-control" ng-model="input.value" required="true" ng-change="changed=true" ng-blur="clearFocusListCache()" autocomplete="off" aria-invalid="{{(changed == true && form.xpForm.$invalid) || false}}"></input><div class="input-group-btn" dropdown="true"><button type="button" class="btn btn-default dropdown-toggle" dropdown-toggle="true" data-toggle="dropdown"><span class="caret"></span></button><ul class="dropdown-menu pull-right"><li ng-repeat="value in options.values"><a href="" ng-click="input.name = value">{{value}}</a></li></ul></div></div></div></form></div></div><div class="modal-footer" ng-style="options.footerStyle"><button ng-repeat="button in options.buttons track by button.label" sp-focus-if="button.focus" ng-disabled="button.primary && options.input && form.xpForm.$invalid" class="btn btn-default {{button.class}}" ng-class="{'btn-primary':button.primary}" ng-click="buttonClicked(button)">{{button.label}}</button></div></script><style>.modal .panel {
margin-bottom: 0;
}
.sp-form-modal-body {
padding: 0px;
}
.sp-form-modal-body .panel-heading {
padding-right: 4rem;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}
.sp-form-modal-body .panel-title {
width: calc(95% - 20px);
}
@media all and (max-width: 549px) {
.sp-form-modal-body .panel-title {
width: calc(85% - 20px);
}
}
.sp-form-modal-body .sp-form-modal-close-button {
position: absolute;
right: 0px;
top: 0px;
z-index: 1;
border-top-right-radius: 0.3rem;
padding: 1.4rem 1.3rem 1.5rem 1.3rem;
}
/* RTL overrides */
[dir="rtl"].rtl .sp-form-modal-body .panel-heading {
padding-left: 4rem;
padding-right: 1.5rem;
}
[dir="rtl"].rtl .sp-form-modal-body .sp-form-modal-close-button {
left: 0;
right: auto;
border-top-left-radius: 0.3rem;
}</style><script type="text/ng-template" id="sp_form_modal"><div class="modal-body sp-form-modal-body"><sp-widget widget="item.form"></sp-widget></div></script><script type="text/ng-template" id="sp_modal"><div class="modal-header"><button type="button" class="close" ng-click="cancel()">X</button><h4>This is the title</h4></div><div class="modal-body">{{item.name}}</div><div class="modal-footer"><button class="btn btn-default" ng-click="cancel()">Cancel</button><button class="btn btn-primary" ng-click="ok()">OK</button></div></script><script type="text/ng-template" id="sp_attachment_picker.html"><div class="sn-file-drop-zone" id="sn-file-drop-zone" multiple="true" ng-paste="paste($event)" ng-file-drop="dropFiles($files)" stop-propagation="true" ng-file-drag-over-class="dragover"><div class="sn-file-drop-zone__info sn-file-drop-zone__info--default" ng-transclude=""><div class="sn-file-drop-zone__cloud-icon fa fa-cloud-upload" aria-hidden="true"></div><div class="sn-file-drop-zone__drag-info" spellcheck="false"><input type="file" style="display: none" multiple="true" ng-file-select="selectFiles($files)" class="sp-attachments-input"></input><span role="button" tabindex="0" class="sn-file-drop-zone__file-button sp-attachment-add-btn btn-link" ng-click="pickFile($event)" aria-describedby="sn-file-drop-zone">{{i18Strings['Choose a file']}}</span>{{i18Strings['or drag it here.']}}</div><div ng-if="isPasteFilesSupported" class="sn-file-drop-zone__clipboard-info">{{i18Strings["Copy and paste clipboard files here."]}}</div></div><div ng-if="disablePickerOverlay != 'true'" class="sn-file-drop-zone__info sn-file-drop-zone__info--dragover"><div class="sn-file-drop-zone__add-icon icon-add"></div></div></div></script><script type="text/ng-template" id="sp_attachment_modal.html"><div class="modal-attachment-picker"><div class="modal-attachment-picker__header"><h2 class="attachment-header-title modal-attachment-picker__header-title h4" id="attachment-header-title">Add attachments</h2><button type="button" class="close pull-right" ng-click="$dismiss()" title="Close modal" data-toggle="tooltip" data-placement="bottom" aria-label="Close modal" autofocus="autofocus">×</button></div><div class="attachment-body modal-attachment-picker__body"><sp-attachment-picker on-file-pick="fileSelectHandler($files)" ng-show="!loadingIndicator"></sp-attachment-picker><div class="modal-attachment-picker__progress-info" ng-show="loadingIndicator" role="status" aria-live="assertive"><progress class="modal-attachment-picker__progress" aria-valuetext="Uploading"></progress><label>Uploading</label></div><div ng-if="supportedExtensions !== ''" ng-show="!loadingIndicator" class="modal-attachment-picker__supported"><span>Supported:</span><span class="break-all">{{supportedExtensions}}</span></div></div></div></script><script type="text/ng-template" id="angular.do?sysparm_type=get_partial&name=sn_avatar.xml"><div class="avatar-container" ng-class="avatarType()" title="{{ avatartooltip() }}" tabindex="-1"><div class="avatar soloAvatar top" ng-if="(users.length > 1 && !groupAvatar)" context-menu="contextOptions"><div class="sub-avatar" ng-style="getBackgroundStyle(users[1])"><span ng-if="!users[1].avatar">{{ users[1].initials }}</span></div></div><div class="avatar soloAvatar bottom" context-menu="contextOptions"><div class="sub-avatar" ng-style="getBackgroundStyle(users[0] || primary)"><span ng-if="(!users[0].avatar && !groupAvatar)">{{ users[0].initials }}</span></div></div><div class="avatar soloAvatar top" ng-if="users.length > 2 && !groupAvatar" context-menu="contextOptions"><div class="sub-avatar" ng-style="getBackgroundStyle(users[2])"><span ng-if="!users[2].avatar">{{ users[2].initials }}</span></div></div><div class="avatar soloAvatar top" ng-if="users.length > 3 && !groupAvatar" context-menu="contextOptions"><div class="sub-avatar" ng-style="getBackgroundStyle(users[3])"><span ng-if="!users[3].avatar">{{ users[3].initials }}</span></div></div><span class="inner-details" ng-transclude=""></span><sn-presence ng-if="::presenceEnabled" user="(users[0].userID || users[0].document)" on-presence-change="onPresenceChange(status)"></sn-presence></div></script><script type="text/ng-template" id="angular.do?sysparm_type=get_partial&name=sp_tinymce_editor.xml"><div><div ng-show="!field.isReadonly() && !attrs.disabled"><span ng-if="::accessibilityEnabled" role="note" data-toggle="tooltip" tabindex="0" class="fa fa-question-circle" aria-label="In the editor, press Alt+F10 to focus on the toolbar. Mac press Option+F10 to focus on the toolbar. Press escape to return to the editor." title="In the editor, press Alt+F10 to focus on the toolbar. Mac press Option+F10 to focus on the toolbar. Press escape to return to the editor."></span><textarea ui-tinymce="tinyMCEOptions" name="{{attrs.name}}" label="{{attrs.name}}" ng-model="model" ng-model-options="options" ng-change="onChangeModel()" rows="10" id="{{textareaId}}"></textarea><input ng-file-select="attachFiles({files: $files})" ng-click="$event.stopPropagation();" tabindex="-1" aria-hidden="true" multiple="" accept="image/jpeg,image/png,image/bmp,image/x-windows-bmp,image/gif,image/x-icon,image/svg+xml" type="file" style="display: none;"></input></div><div ng-if="field.isReadonly() || attrs.disabled"><div class="tinymce-html-content" ng-bind-html="::trustedHTML(model)"></div></div></div></script><now-message key="Created" value="Created"></now-message><now-message key="track requests from 'My Requests' in the navbar or click" value="track requests from My Requests in the navbar or click"></now-message><now-message key="here to view" value="here to view"></now-message><now-message key="Submitted" value="Submitted"></now-message><now-message key="after" value="after"></now-message><now-message key="at or after" value="at or after"></now-message><now-message key="is anything" value="is anything"></now-message><now-message key="before" value="before"></now-message><now-message key="at or before" value="at or before"></now-message><now-message key="is empty" value="is empty"></now-message><now-message key="is empty string" value="is empty string"></now-message><now-message key="ends with" value="ends with"></now-message><now-message key="is" value="is"></now-message><now-message key="greater than" value="greater than"></now-message><now-message key="greater than or is" value="greater than or is"></now-message><now-message key="is a" value="is a"></now-message><now-message key="contains" value="contains"></now-message><now-message key="less than" value="less than"></now-message><now-message key="less than or is" value="less than or is"></now-message><now-message key="Upload file attachment failed for {0}" value="Upload file attachment failed for {0}"></now-message><now-message key="is not empty" value="is not empty"></now-message><now-message key="is not" value="is not"></now-message><now-message key="does not contain" value="does not contain"></now-message><now-message key="not on" value="not on"></now-message><now-message key="on" value="on"></now-message><now-message key="starts with" value="starts with"></now-message><now-message key="Open" value="Open"></now-message><now-message key="Knowledge" value="Knowledge"></now-message><now-message key="Catalog" value="Catalog"></now-message><now-message key="Catalogs" value="Catalogs"></now-message><now-message key="Fetched" value="Fetched"></now-message><now-message key="additional {0}" value="additional {0}"></now-message><now-message key="additional items" value="additional items"></now-message><now-message key="Requests" value="Requests"></now-message><now-message key="All" value="All"></now-message><now-message key="Search" value="Search"></now-message><now-message key="Searching..." value="Searching..."></now-message><now-message key="No matches found" value="No matches found"></now-message><now-message key="Loading more results..." value="Loading more results..."></now-message><now-message key="Price" value="Price"></now-message><now-message key="Recurring price" value="Recurring price"></now-message><now-message key="Submit" value="Submit"></now-message><now-message key="price_subtract" value="subtract"></now-message><now-message key="price_add" value="-add"></now-message><now-message key="has added" value="has added"></now-message><now-message key="will add" value="will add"></now-message><now-message key="has added {0}" value="has added {0}"></now-message><now-message key="will add {0}" value="will add {0}"></now-message><now-message key="has added {0} | has added {1}" value="has added {0} | has added {1}"></now-message><now-message key="will add {0} | will add {1}" value="will add {0} | will add {1}"></now-message><now-message key="add {0} | add {1}" value="add {0} | add {1}"></now-message><now-message key="add {0} | subtract {1}" value="add {0} | subtract {1}"></now-message><now-message key="subtract {0} | add {1}" value="subtract {0} | add {1}"></now-message><now-message key="add {0}" value="add {0}"></now-message><now-message key="subtract {0} | subtract {1}" value="subtract {0} | subtract {1}"></now-message><now-message key="subtract {0}" value="subtract {0}"></now-message><now-message key="Required - " value="Required - "></now-message><now-message key="There was an error processing your request" value="There was an error processing your request"></now-message><now-message key="Open Performance Analyzer" value="Open Performance Analyzer"></now-message><now-message key="Drag image or click to select" value="Drag image or click to select"></now-message><now-message key="{0} {1} results returned{2}" value="{0} {1} results returned{2}"></now-message><now-message key="{0} {1} result returned{2}" value="{0} {1} result returned{2}"></now-message><now-message key="{0} {1} results returned for the corrected search term {2}" value="{0} {1} results returned for the corrected search term {2}"></now-message><now-message key="{0} {1} result returned for the corrected search term {2}" value="{0} {1} result returned for the corrected search term {2}"></now-message><now-message key="{0} results returned{1}" value="{0} results returned{1}"></now-message><now-message key="{0} result returned{1}" value="{0} result returned{1}"></now-message><now-message key="{0} results returned for the corrected search term {1}" value="{0} results returned for the corrected search term {1}"></now-message><now-message key="{0} result returned for the corrected search term {1}" value="{0} result returned for the corrected search term {1}"></now-message><now-message key="Go to {0} Homepage" value="Go to {0} Homepage"></now-message><now-message key="To preview {0} details go back to preview button" value="To preview {0} details go back to preview button"></now-message><now-message key="A new preview button has been generated before the current element. To preview {0} details go back to preview button" value="A new preview button has been generated before the current element. To preview {0} details go back to preview button"></now-message><now-message key="{0} out of {1} selected" value="{0} out of {1} selected"></now-message><now-message key="Double tap to rate {0} out of {1} star" value="Double tap to rate {0} out of {1} star"></now-message><now-message key="Filtered {0} list showing {1} to {2} of {3} records" value="Filtered {0} list showing {1} to {2} of {3} records"></now-message><now-message key="Unfiltered {0} list showing {1} to {2} of {3} records" value="Unfiltered {0} list showing {1} to {2} of {3} records"></now-message><now-message key="Filtered {0} list showing 0 records" value="Filtered {0} list showing 0 records"></now-message><now-message key="Unfiltered {0} list showing 0 records" value="Unfiltered {0} list showing 0 records"></now-message><now-message key="Search by {0}" value="Search by {0}"></now-message><now-message key="Hours" value="Hours"></now-message><now-message key="Minutes" value="Minutes"></now-message><now-message key="Seconds" value="Seconds"></now-message><now-message key="Days" value="Days"></now-message><now-message key="Instance Options" value="Instance Options"></now-message><now-message key="Instance in Page Editor {0}" value="Instance in Page Editor {0}"></now-message><now-message key="Page in Designer {0}" value="Page in Designer {0}"></now-message><now-message key="Edit Container Background" value="Edit Container Background"></now-message><now-message key="Widget Options Schema" value="Widget Options Schema"></now-message><now-message key="Widget in Form Modal" value="Widget in Form Modal"></now-message><now-message key="Widget in Editor {0}" value="Widget in Editor {0}"></now-message><now-message key="Log to console: {0}" value="Log to console: {0}"></now-message><now-message key="{0} generated in: {1}" value="{0} generated in: {1}"></now-message><now-message key="Read only - {0}" value="Read only - {0}"></now-message><now-message key="OK" value="OK"></now-message><now-message key="Remove" value="Remove"></now-message><now-message key="Cancel" value="Cancel"></now-message><now-message key="Keywords" value="Keywords"></now-message><now-message key="Save Filter" value="Save Filter"></now-message><now-message key="Add attachments" value="Add attachments"></now-message><now-message key="Lookup using list" value="Lookup using list"></now-message><now-message key="Closing modal page" value="Closing modal page"></now-message><now-message key="Attachment" value="Attachment"></now-message><now-message key="Enable edit mode on attachments" value="Enable edit mode on attachments"></now-message><now-message key="Finish editing attachments" value="Finish editing attachments"></now-message><now-message key="Edit" value="Edit"></now-message><now-message key="Done" value="Done"></now-message><now-message key="Attachments" value="Attachments"></now-message><now-message key="Delete" value="Delete"></now-message><now-message key="Enter date in format" value="Enter date in format"></now-message><now-message key="Date in format" value="Date in format"></now-message><now-message key="Date in format {0}" value="Date in format {0}"></now-message><now-message key="YYYY-MM-DD" value="YYYY-MM-DD"></now-message><now-message key="MM/DD/YY" value="MM/DD/YY"></now-message><now-message key="MM/DD/YYYY" value="MM/DD/YYYY"></now-message><now-message key="MM-DD-YYYY" value="MM-DD-YYYY"></now-message><now-message key="DD/MM/YYYY" value="DD/MM/YYYY"></now-message><now-message key="DD-MM-YYYY" value="DD-MM-YYYY"></now-message><now-message key="DD-MMM-YY" value="DD-MMM-YY"></now-message><now-message key="DD.MM.YYYY" value="DD.MM.YYYY"></now-message><now-message key="HH:mm:ss" value="HH:mm:ss"></now-message><now-message key="HH.mm.ss" value="HH.mm.ss"></now-message><now-message key="hh:mm:ss A" value="hh:mm:ss A"></now-message><now-message key="hh.mm.ss A" value="hh.mm.ss A"></now-message><now-message key="Use format" value="Use format"></now-message><now-message key="Entered date not valid. Enter date in format" value="Entered date not valid. Enter date in format"></now-message><now-message key="Switching to date picker." value="Switching to date picker."></now-message><now-message key="Switching to date time picker." value="Switching to date time picker."></now-message><now-message key="Showing date time picker." value="Showing date time picker."></now-message><now-message key="Showing date picker." value="Showing date picker."></now-message><now-message key="Date time picker is opened." value="Date time picker is opened."></now-message><now-message key="Date picker is opened." value="Date picker is opened."></now-message><now-message key="Date picker is closed." value="Date picker is closed."></now-message><now-message key="Date time picker is closed." value="Date time picker is closed."></now-message><now-message key="Toggle date time picker" value="Toggle date time picker"></now-message><now-message key="Date and time" value="Date and time"></now-message><now-message key="Previous month" value="Previous month"></now-message><now-message key="Previous year" value="Previous year"></now-message><now-message key="Previous decade" value="Previous decade"></now-message><now-message key="Next month" value="Next month"></now-message><now-message key="Next year" value="Next year"></now-message><now-message key="Next decade" value="Next decade"></now-message><now-message key="Toggle month" value="Toggle month"></now-message><now-message key="Toggle year" value="Toggle year"></now-message><now-message key="Toggle decade" value="Toggle decade"></now-message><now-message key="{0} hours. hour picker" value="{0} hours. hour picker"></now-message><now-message key="increment Hours" value="increment Hours"></now-message><now-message key="increment Minutes" value="increment Minutes"></now-message><now-message key="decrement Minutes" value="decrement Minutes"></now-message><now-message key="decrement Hours" value="decrement Hours"></now-message><now-message key="{0} minutes. minute picker" value="{0} minutes. minute picker"></now-message><now-message key="hour picker opened" value="hour picker opened"></now-message><now-message key="minute picker opened" value="minute picker opened"></now-message><now-message key="{0} minutes" value="{0} minutes"></now-message><now-message key="{0} hours" value="{0} hours"></now-message><now-message key="{0} is selected" value="{0} is selected"></now-message><now-message key="Date" value="Date"></now-message><now-message key="picker" value="picker"></now-message><now-message key="Show Calendar for {0}" value="Show Calendar for {0}"></now-message><now-message key="Required" value="Required"></now-message><now-message key="Remove {0} facet filter" value="Remove {0} facet filter"></now-message><now-message key="Error" value="Error"></now-message><now-message key="Close Notification" value="Close Notification"></now-message><now-message key="Close Window" value="Close Window"></now-message><now-message key="File not available" value="The file failed the security scan. We canceled the download for you and let your admin know. You can contact them for more info."></now-message><now-message key="File pending" value="Our servers got busy, and the scan timed out. Sorry about that. Please try again later."></now-message><now-message key="File failed security scan" value="File failed security scan"></now-message><now-message key="Exception when adding attachment: {0}" value="Exception when adding attachment: {0}"></now-message><now-message key="Upload file scan failed" value="Your file {0} failed the security scan. Your system is still safe - we quarantined the file and let your admin know. You can contact your admin for more info."></now-message><now-message key="Also request for" value="Also request for"></now-message><now-message key="Item is unavailable for {0}" value="Item is unavailable for {0}"></now-message><now-message key="Do you want to add a row for {0}" value="Do you want to add a row for {0}"></now-message><now-message key="Request for multiple users" value="Request for multiple users"></now-message><now-message key="Item is unavailable for this user" value="Item is unavailable for this user"></now-message><now-message key="Remove {0} from {1}" value="Remove {0} from {1}"></now-message><now-message key="Uploading" value="Uploading"></now-message><now-message key="Choose a file" value="Choose a file"></now-message><now-message key="or drag it here." value="or drag it here."></now-message><now-message key="Copy and paste clipboard files here." value="Copy and paste clipboard files here."></now-message><now-message key="Upload and Encrypt" value="Upload and Encrypt"></now-message><now-message key="Upload Without Encrypting" value="Upload Without Encrypting"></now-message><now-message key="Encrypt attachment?" value="Encrypt attachment?"></now-message><now-message key="Encrypt attachments?" value="Encrypt attachments?"></now-message><now-message key="Attached by {0} {1}" value="Attached by {0} {1}"></now-message><now-message key="Encrypted" value="Encrypted"></now-message><now-message key="Attachment successfully uploaded" value="Attachment successfully uploaded"></now-message><now-message key="Attachment deleted successfully" value="Attachment deleted successfully"></now-message><now-message key="Attachment renamed successfully" value="Attachment renamed successfully"></now-message><now-message key="Profile picture updated successfully" value="Profile picture updated successfully"></now-message><now-message key="Collapse" value="Collapse"></now-message><now-message key="Expand" value="Expand"></now-message><now-message key="announcement" value="announcement"></now-message><now-message key="announcements" value="announcements"></now-message><now-message key="More information about" value="More information about"></now-message><now-message key="Dismiss" value="Dismiss"></now-message><now-message key="Dismiss announcement" value="Dismiss announcement"></now-message><now-message key="Learn More" value="Learn More"></now-message><now-message key="MORE" value="MORE"></now-message><now-message key="LESS" value="LESS"></now-message><now-message key="Show next, Slide {0} of {1}" value="Show next, Slide {0} of {1}"></now-message><now-message key="Show previous, Slide {0} of {1}" value="Show previous, Slide {0} of {1}"></now-message><now-message key="EXPAND OTHER {0}" value="EXPAND OTHER {0}"></now-message><now-message key="HIDE OTHER" value="HIDE OTHER"></now-message><now-message key="Specified username does not match with the username of currently logged in user" value="Specified username does not match with the username of currently logged in user"></now-message><now-message key="Learn more details on this announcement" value="Learn more details on this announcement"></now-message><now-message key="User name or password invalid" value="User name or password invalid"></now-message><now-message key="User name, password or token invalid" value="User name, password or token invalid"></now-message><now-message key="Credentials for Approver and User logged in do not match" value="Credentials for Approver and User logged in do not match"></now-message><now-message key="Additional authentication required, enter your username, password and token to continue." value="Additional authentication required, enter your username, password and token to continue."></now-message><now-message key="Additional authentication is required, enter your usename and password to continue." value="Additional authentication is required, enter your usename and password to continue."></now-message><now-message key="Approver authentication" value="Approver authentication"></now-message><now-message key="Confirmation must match" value="Confirmation must match"></now-message><now-message key="Re-enter" value="Re-enter"></now-message><now-message key="Re-enter `{0}`" value="Re-enter `{0}`"></now-message><now-message key="u_show" value="SHOW"></now-message><now-message key="u_hide" value="HIDE"></now-message><now-message key="The size of the uploaded file cannot exceed {0} MB" value="The size of the uploaded file cannot exceed {0} MB"></now-message><now-message key="The uploaded file type is not permitted; allowed types are {0}" value="The uploaded file type is not permitted; allowed types are {0}"></now-message><now-message key="Invalid value" value="Invalid value"></now-message><now-message key="Save Changes" value="Save changes"></now-message><now-message key="Do you want to save your changes before leaving this page?" value="Do you want to save your changes before leaving this page?"></now-message><now-message key="Discard" value="Discard"></now-message><now-message key="Save" value="Save"></now-message><now-message key="Clear" value="Clear"></now-message><now-message key="Apply" value="Apply"></now-message><now-message key="Sources" value="Sources"></now-message><now-message key="Clear All" value="Clear All"></now-message><now-message key="Clear all active filters" value="Clear all active filters"></now-message><now-message key="Loading" value="Loading"></now-message><now-message key="See more" value="See more"></now-message><now-message key="See less" value="See less"></now-message><now-message key="Clear field {0}" value="Clear field {0}"></now-message><now-message key="Click to remove" value="Click to remove"></now-message><now-message key="Select" value="Select"></now-message><now-message key="Selected" value="Selected"></now-message><now-message key="Enabled" value="Enabled"></now-message><now-message key="Disabled" value="Disabled"></now-message><now-message key="filter selection has cleared for {0} and search results updated" value="filter selection has cleared for {0} and search results updated"></now-message><now-message key="Filter selected {0} and search results updated" value="Filter selected {0} and search results updated"></now-message><now-message key="Filter with value" value="Filter with value"></now-message><now-message key="{0} is collapsed" value="{0} is collapsed"></now-message><now-message key="{0} is Expanded" value="{0} is Expanded"></now-message><now-message key="Filter selected {0} {1} and Search results updated" value="Filter selected {0} {1} and search results updated"></now-message><now-message key="Search Categories" value="Search Categories"></now-message><now-message key="All facets have been cleared, and search results have been updated" value="All facets have been cleared, and search results are updated"></now-message><now-message key="Facet removed, search results updated" value="Facet removed, search results updated"></now-message><now-message key="There is a JavaScript error in your browser console" value="There is a JavaScript error in your browser console"></now-message><now-message key="Loading {0} widget" value="Loading {0} widget"></now-message><now-message key="Guided Tours" value="Guided Tours"></now-message><now-message key="This page currently has {0} tours" value="This page currently has {0} tours"></now-message><now-message key="This page currently has 1 tour" value="This page currently has 1 tour"></now-message><now-message key="Tours" value="Tours"></now-message><now-message key="You have no tours on this page" value="You have no tours on this page"></now-message><now-message key="Tours appear when your administrator creates them on specific pages" value="Tours appear when your administrator creates them on specific pages"></now-message><now-message key="Are you sure you want to delete all rows?" value="Are you sure you want to delete all rows?"></now-message><now-message key="Are you sure you want to delete the row?" value="Are you sure you want to delete the row?"></now-message><now-message key="Stop Guided Tour" value="Stop Guided Tour"></now-message><now-message key="Do you want to stop this tour from auto launching again?" value="Do you want to stop this tour from auto launching again?"></now-message><now-message key="Apply for all tours on this page" value="Apply for all tours on this page"></now-message><now-message key="Yes" value="Yes"></now-message><now-message key="No" value="No"></now-message><now-message key="Next" value="Next"></now-message><now-message key="Previous" value="Previous"></now-message><now-message key="Complete" value="Complete"></now-message><now-message key="Tour ended because the next step was not found." value="Tour ended because the next step was not found."></now-message><now-message key="Tour was abandoned" value="Tour was abandoned"></now-message><now-message key="This tour is currently in draft status" value="This tour is currently in draft status"></now-message><now-message key="Cannot start a new tour while another tour is in progress." value="Cannot start a new tour while another tour is in progress."></now-message><now-message key="Close" value="Close"></now-message><now-message key="Cancel Tour" value="Cancel Tour"></now-message><now-message key="Error in fetching tour details" value="Error in fetching tour details"></now-message><now-message key="{0} saved" value="{0} saved"></now-message><now-message key="Open chat window" value="Open chat window"></now-message><now-message key="Open chat window. {0} unread messages" value="Open chat window. {0} unread messages"></now-message><now-message key="Minimize chat window" value="Minimize chat window"></now-message><now-message key="Agent Chat Window" value="Agent Chat Window"></now-message><now-message key="Open diagnostics information" value="Open diagnostics information"></now-message><now-message key="Color codes" value="Color codes"></now-message><now-message key="Widget" value="Widget"></now-message><now-message key="Compare with Base system" value="Compare with Base system"></now-message><now-message key="Open widget in platform" value="Open widget in platform"></now-message><now-message key="Widget Diagnostics" value="Widget Diagnostics"></now-message><now-message key="Compare with previous version" value="Compare with previous version"></now-message><now-message key="Compare with base widget" value="Compare with base widget"></now-message><now-message key="Show Widget Customizations" value="Show Widget Customizations"></now-message><now-message key="Hide Widget Customizations" value="Hide Widget Customizations"></now-message><now-message key="Cloned" value="Cloned"></now-message><now-message key="New" value="New"></now-message><now-message key="Customized" value="Customized"></now-message><now-message key="Base system" value="Base system"></now-message><now-message key="Enable Analytics" value="Enable Analytics"></now-message><now-message key="Enable voice input for Now Assist in Virtual Agent" value="Enable voice input for Now Assist in Virtual Agent"></now-message><now-message key="Agree" value="Agree"></now-message><now-message key="Choose" value="Choose"></now-message><now-message key="Value is invalid or out of range" value="The value is not valid or it is out of range."></now-message><now-message key="The entered value has been changed to an integer." value="The entered value has been changed to an integer."></now-message><now-message key="Attached" value="Attached"></now-message><now-message key="{0} Attached" value="{0} Attached"></now-message><now-message key="{0} complete" value="{0} complete"></now-message><now-message key="Submitting..." value="Submitting..."></now-message><now-message key="Saving..." value="Saving..."></now-message><now-message key="Delete Attachment?" value="Delete Attachment?"></now-message><now-message key="{0} details show more" value="{0} details show more"></now-message><now-message key="{0} details show less" value="{0} details show less"></now-message><now-message key="Leave page?" value="Leave page?"></now-message><now-message key="Changes you made will be lost." value="Changes you made will be lost."></now-message><now-message key="Leave" value="Leave"></now-message><now-message key="1 item selected" value="1 item selected"></now-message><now-message key="{0} items selected" value="{0} items selected"></now-message><now-message key="For {0}" value="For {0}"></now-message><now-message key="{0} for" value="{0} for"></now-message><now-message key="Expand all categories for {0}" value="Expand all categories for {0}"></now-message><now-message key="Collapse all categories for {0}" value="Collapse all categories for {0}"></now-message><now-message key="Attached files must be smaller than {0} MB, or the files must have {1} file extensions." value="Attached files must be smaller than {0} MB, or the files must have {1} file extensions."></now-message><now-message key="{0} {1} {2} Article" value="{0} {1} {2} Article"></now-message><now-message key="{0} {1} {2} Articles" value="{0} {1} {2} Articles"></now-message><now-message key="Extend your session." value="Extend your session."></now-message><now-message key="Your current session will expire soon. Click extend to continue with your current session." value="Your current session will expire soon. Click extend to continue with your current session."></now-message><now-message key="Extend session." value="Extend session."></now-message><now-message key="Extend session" value="Extend session"></now-message><now-message key="Your session has expired." value="Your session has expired."></now-message><now-message key="Your login session has expired. Please login again." value="Your login session has expired. Please login again."></now-message><now-message key="Log in" value="Log in"></now-message><now-message key="Login" value="Log in"></now-message><now-message key="Close modal" value="Close modal"></now-message><now-message key="Session Expiration Notification" value="Session Expiration Notification"></now-message><now-message key="Your session will expire within {X} minutes. Please complete your ongoing tasks to prevent loss of work." value="Your session will expire within {X} minutes. Please complete your ongoing tasks to prevent loss of work."></now-message><now-message key="Ok" value="OK"></now-message><now-message key="{0} has been approved" value="{0} has been approved"></now-message><now-message key="{0} has been rejected" value="{0} has been rejected"></now-message><now-message key="Updating the attachment will delete the previous attachment permanently. Do you want to continue?" value="Updating the attachment will delete the previous attachment permanently. Do you want to continue?"></now-message><now-message key="Your analytics preference has been updated and synced across interfaces." value="Your analytics preference has been updated and synced across interfaces."></now-message><now-message key="Something went wrong and your request could not be submitted. Please contact your system administrator" value="Something went wrong and your request could not be submitted. Please contact your system administrator"></now-message><now-message key="Remove {0} from Preferred Communication Channels" value="Remove {0} from Preferred Communication Channels"></now-message><now-message key="Play animation" value="Play animation"></now-message><now-message key="Pause animation" value="Pause animation"></now-message><now-message key="Search icon" value="Search icon"></now-message><now-message key="Clear all notifications" value="Clear all notifications"></now-message><now-message key="Year" value="Year"></now-message><now-message key="{0}, required" value="{0}, required"></now-message><now-message key="Reject" value="Reject"></now-message><now-message key="Turn on ECMAScript 2021 (ES12) mode" value="Turn on ECMAScript 2021 (ES12) mode"></now-message><now-message key="Turning on ECMAScript 2021 (ES12) mode supports using the latest supported JavaScript features in this script. If this option is turned off, you can use the features supported by the application's JavaScript mode only." value="Turning on ECMAScript 2021 (ES12) mode supports using the latest supported JavaScript features in this script. If this option is turned off, you can use the features supported by the application's JavaScript mode only."></now-message><now-message key="Could not save record because of a compile error: {0}" value="Could not save record because of a compile error: {0}"></now-message><now-message key="Published" value="Published"></now-message><now-message key="Open usage insights" value="Open usage insights"></now-message><now-message key="Minimize usage insights" value="Minimize usage insights"></now-message><now-message key="Agent analytics window" value="Agent analytics window"></now-message><now-message key="Select {0}" value="Select {0}"></now-message><now-message key="Open user's profile" value="Open user's profile"></now-message><now-message key="Defer widget loading" value="Defer widget loading"></now-message><now-message key="Learn more about defer widget loading" value="Learn more about defer widget loading"></now-message><now-message key="in the documentation" value="in the documentation"></now-message><now-message key="previous button" value="previous button"></now-message><now-message key="next button" value="next button"></now-message><now-message key="{0} - {1} of {2}" value="{0} - {1} of {2}"></now-message><now-message key="AI predicted this field based on data in other fields. Check it for accuracy." value="AI predicted this field based on data in other fields. Check it for accuracy."></now-message><now-message key="%d ago" value="%d ago"></now-message><now-message key="%d from now" value="%d from now"></now-message><now-message key="less than a minute" value="less than a minute"></now-message><now-message key="just now" value="just now"></now-message><now-message key="about a minute" value="%dm"></now-message><now-message key="%d minutes" value="%dm"></now-message><now-message key="about an hour" value="about an hour"></now-message><now-message key="about %d hours" value="%dh"></now-message><now-message key="a day" value="a day"></now-message><now-message key="%d days" value="%dd"></now-message><now-message key="about a month" value="about a month"></now-message><now-message key="%d months" value="%dmo"></now-message><now-message key="about a year" value="about a year"></now-message><now-message key="%d years" value="%dy"></now-message><now-message key="today" value="Today"></now-message><now-message key="%d minutes_verbose" value="%d minutes"></now-message><now-message key="%d days_verbose" value="%d days"></now-message><now-message key="%d months_verbose" value="%d months"></now-message><now-message key="%d years_verbose" value="%d years"></now-message><now-message key="about %d hours_verbose" value="%d hours"></now-message><now-message key="{0} is typing" value="{0} is typing"></now-message><now-message key="{0} is viewing" value="{0} is viewing"></now-message><now-message key="{0} has entered" value="{0} has entered"></now-message><now-message key="{0} has probably left" value="{0} has probably left"></now-message><now-message key="{0} has exited" value="{0} has exited"></now-message><now-message key="{0} is offline" value="{0} is offline"></now-message><now-message key="{0} was {1}" value="{0} was {1}"></now-message><now-message key="was" value="was"></now-message><now-message key="entered" value="entered"></now-message><now-message key="online" value="Online"></now-message><now-message key="viewing" value="viewing"></now-message><now-message key="maybe offline" value="maybe offline"></now-message><now-message key="probably offline" value="probably offline"></now-message><now-message key="offline" value="Offline"></now-message><now-message key="Activities: {0}" value="Activities: {0}"></now-message><now-message key="The file {0} did not pass security scan and cannot be downloaded" value="The file <b> {0} </b> did not pass security scan and cannot be downloaded"></now-message><script>if(!window.aiex) {
window.aiex = {};
}
if(!window.aiex.cacheBuster) {
window.aiex.cacheBuster = 1787381974024;
}
window.aiex.VERSION = "3.3.2";</script><script type="text/javascript" src="/scripts/js_includes_now_canvas.jsx?v=07-04-2026_0037&lp=Tue_Jul_28_11_49_19_PDT_2026&c=20_630"></script></body></html>
Sitemap
Кол-во: 0
XML-карта сайта для поисковиков
?
Sitemap.xml помогает поисковику быстрее находить и индексировать страницы. Особенно важен для крупных сайтов и новых страниц, на которые ещё нет входящих ссылок.
Robots.txt не содержит ссылку на карту сайта. Рекомендуется добавить карту сайта и указать ссылку на нее в robots.txt.
Внутренние ссылки
Не найдено
Ссылки на другие страницы своего сайта
?
Внутренние ссылки распределяют ссылочный вес между страницами и помогают поисковику обходить сайт. Пустые анкоры и ссылки на запрещённые robots.txt страницы — типичные ошибки.
Внутренних ссылок на странице 0 оптимально.
Внешние ссылки
Не найдено
Ссылки на сторонние сайты
?
Исходящие внешние ссылки передают часть ссылочного веса на чужие сайты. Ссылки на авторитетные ресурсы безопасны; ссылки на мусорные сайты могут навредить репутации страницы.
Внешних ссылок на странице не найдено.
Конкуренты Готовность: 0%
Конкуренты в Яндексе
Кол-во: 0
Топ сайтов-конкурентов в Яндексе
?
Сайты, чаще всего появляющиеся в ТОПе Яндекса по запросам из семантического ядра этой страницы.
Мы не нашли у вас конкурентов в Яндексе. Сайт или очень молодой или плохо продвигается.
Конкурентов в ТОП-10 Яндекса не нашлось.
Конкуренты в Google
Кол-во: 0
Топ сайтов-конкурентов в Google
?
Сайты, чаще всего появляющиеся в ТОПе Google по запросам из семантического ядра этой страницы.
Конкуренты в Google тоже не найдены. Займитесь продвижением сайта!
Конкурентов в ТОП-10 Google не нашлось.
ЗоЗПП: права потребителей Готовность: 100%
Нарушения
Не выявлены
Признаков дистанционной продажи товаров (интернет-магазина) не обнаружено — требования ЗоЗПП о раскрытии информации продавца к сайту не применяются. Нарушений нет.
ФЗ-149: рекомендательные технологии Готовность: 100%
Нарушения
Не выявлены
Рекомендательные блоки («с этим покупают», «похожие товары» и т.п.) на сайте не обнаружены — требования ст. 10.7 ФЗ-149 к сайту не применяются. Нарушений нет.
ФЗ-38: реклама Готовность: 100%
Нарушения
Не выявлены
Рекламных тематик с обязательными оговорками (медицина, БАД, кредиты и займы, новостройки) на сайте не обнаружено. Нарушений нет.
ФЗ-436: защита детей Готовность: 100%
Нарушения
Не выявлены
Признаков информационной продукции (новости, видео, книги, игры, курсы) не обнаружено — обязательная возрастная маркировка по ФЗ-436 сайту не требуется. Нарушений нет.
Вердикт
Выполнен подробный анализ сайта trust.onespan.com: готовность на 30%. Чтобы выполнить все условия и попасть на первую страницу выдачи поисковых систем требуется:
Постарайтесь исправить общие ошибки.
Исправьте ошибки в мета-тегах.
Исправьте ошибки оптимизации.
Исправьте ошибки индексации.
Поделитесь с друзьями: