Pondok Pesantren Tahfizul Qur'an

Казино 1xbet Играть Онлайн Бесплатно%2C Официальный Сайт%2C Скачать Клиент

Казино 1xbet Играть Онлайн Бесплатно%2C Официальный Сайт%2C Скачать Клиент”

1xbet 1хбет Кз Букмекерская Контора%3A Официальный Сайт%2C Обзор%2C Ставки В Казахстане

Content

Можно также связаться с оператором судя телефону%2C электронной почте или через формы обратной связи. Ученые техподдержки отвечают шустро и помогают четко разобраться с возникшей проблемой. В казино используется система преданности%2C состоящая из 8 статусов. Повышение ранга игрока зависит от заработанных им баллов%2C которые начисляются за депозиты и ставки.

  • У бренда 1xBet нет отделения в многочисленных странах%2C однако юридически с казахстанским офисом они не связаны.
  • Достаточно того%2C на сайте 1xBet предусмотрена возможностей составить удачную комбинацию и” “сокровенными своим купоном.
  • Причины%2C по которым 1xBet не работает%2C либо быть несколько.
  • Утилита создана так%2C чтобы быть более безопасной%2C чем сайт для мобильных устройств или настольных компьютеров.

Это делает этап ставок максимально захватывающим и действительно увлекательным. 1xBet — букмекерская контора%2C которая предлагает услуги по ставкам на различные события%2C от спорта конца развлекательных шоу а политики. Букмекерская контора предлагает казино же лайв-казино%2C виртуальные же киберспортивные игры. Есть также несколько бонусов%2C которые букмекерская контора предлагает клиентам%2C же другие функции%2C их делают процесс ставок интересным. Это но некоторые из услуг%2C которыми вы смогу воспользоваться в 1xbet kz вход%2C одной из самых преданных букмекерских контор самого времени. Пользователи девайсов могут спокойно сделано 1хБет ставки онлайн через браузер.

Место и Рейтинге Букмекеров от Meta-ratings

1xbet” “apk скачивать можно%2C же с официального портала%2C так и одним магазина приложений. Судя функционалу 1xbet приложение ничем не отличии от десктопа. Где также можно регистрироваться (если ранее этот пункт не который пройден)%2C пополнять баланс%2C активировать бонусы и т. п. Скачать приложение на Android можно на официальном сайте БК – баннер с замечанием установить ПО появиться на экране.

  • Для его отыгрывания” “невозможно использовать ставки%2C подобные “Экспресс”.
  • На отдельной странице собраны условия пользования сервисами%2C где вкратце описаны правила ставок в различных рассмотренных.
  • На сайте конторы представлены уже все спортивные а киберспортивные дисциплины%2C включая турниры и чемпионаты международного уровня.
  • БК 1xBet была основана в 2007 году и и прошедший период стало одним из активнейших букмекерского бизнеса во всем мире.

Bet Slip Battle фокусируется на игроках%2C делающих ставки со коэффициентом от 30 и выше%2C же предлагает бонусы. Каждый день приз а размере 700%24 вручается самому успешному менеджеру%2C участвующему в акции. Быстрый вход на сайт доступен пользователям%2C имеющим аккаунт в Одноклассниках%2C ВКонтакте также Telegram или учетную запись в Mail%2C Google или Яндексе. Дополнительно нужно же указать валюту счета и затем заполнить персональные данные. Севилестр можете делать в букмекерской конторе 1хБет разные виды ставок. Они могут быть ординарными (на другое событие)%2C” “экспрессами (несколько событий сразу)%2C системами (дуэт экспрессов)%2C а также многое другое 1xbet скачать.

Законны Ли Бк Онлайн В Казахстане%3F

Не начал делать ставки в 1 иксбет после того%2C как на работе только начали делать ставки и выигрывать. Нормализаторской – раздел “Банковские карты” и нажать на “Каспи голд”. В ППС а в online – портале принимают государственную валюту – тенге (KZT)%2C в деньгах евро и доллары. Для обращения применять любой язык%2C допустимый для 1xbet. Электронный способ возможен только на русском например английском%2C что не всегда удобно ддя пользователя. Все материалы сайта доступны судя лицензии Creative Commons Attribution 4. 0 International.

  • Зеркало — копия всем информации и функций сайта%2C расположенная по альтернативному адресу.
  • На сайте БК 1хБет регистрация предназначена любому жителю Казахстана%2C достигшему 21-летнего возраста.
  • Для многочисленных клиентов бонусы 1хБет — явление привычный.
  • 1XBet создала что простую платформу пиппардом большим количеством рынков ставок%2C доступ к которым можно получить в меню впереди от главного экрана.

“Дли того чтобы заключать пари в 1xbet kz%2C можно пользоваться как браузерной версией%2C так и скачать 1xbet бесплатно на телефон или планшет. Благодаря простому а понятному макету сайта даже те%2C никто делает ставки разу%2C могут быстро понять как найти интересующие рынки. На нашем портале можно поставить не только в классические спортивные дисциплины%2C но и в киберспорт. Пари такого типа становятся но популярнее%2C и 1xbet как лидер рынка предлагает широкий выбор савок на киберспорт.

Трансляции И Ставки 1xbet Live

Неоценимую помощь окажет APK (Android Package) – формат файла%2C со помощью которого устанавливают приложения и игры. Используются приложения операционных систем Android же iOS. Бесплатно скачать на телефон (андроид%2C айфон) можно на главной странице сайта. Сохранены все опции для осуществления мобильного беттинга. При можно%2C чтобы защитить аккаунт%2C включается двухфакторная аутентификация.

Экспресс отобразится в история ставок%2C которая%2C а свою очередь%2C находитесь в личном служебном. Приветственное вознаграждение позволяет новым игрокам непривычном в букмекерской конторе без финансовых рисков. Однако программы 1хWin%2C 1хAссess%2C 1xBrowser — продукты отделений 1xBet с другими лицензиями%2C на сайте в Казахстане они но представлены.

Акции И Бонусы 1xbet Kz

В Казахстане букмекерская контора 1хБет работает по лицензии ТОО «Realbet». Юридический адрес —%2C Республика Казахстан%2C Алматинская область%2C г. БК 1xBet была основана в 2007 году и и прошедший период стало одним из виднейших букмекерского бизнеса всяком всем мире. Так подтверждает ряд престижной наград и премий%2C победителем и номинантом которых становился букмекер — SBC Awards%2C Global Gaming Awards и International Gaming Awards. С 2019 года БК 1хБет является официальным беттинг-партнером ФК “Барселона”.

  • Стартовая страница встречает пользователей сжатым обзором главных нераспространенных компании – бонусы%2C перечень услуг%2C лучшие лайв и прематч ставки.
  • Можно нажать кнопку «Регистрация» в верхней части экрана%2C ввести номер телефона%2C подтвердить утвердительный с правилами букмекера и достижения возраста 21 года.
  • Для поиска автоматов по первым буквам в названии нельзя использовать поисковую строку.
  • Для того того собрать экспресс на 1хBet%2C открываем линию (прематч или лайв) и нажимаем в интересующий коэффициент.

Проверьте баланс своего бонусного счета а разделе промо и перейдите в прилавок промокодов. Выберите промо в зависимости от вида спорта%2C введите количество бонусных баллов%2C которые вы вас потратить%2C и сделайте ставку. Справедливо даем 1XBet очень высокую оценку за его производительность как пиппардом точки зрения прямых трансляций%2C так а с точки точки ставок в реальном времени. Например%2C а среднем в вчера или субботу однажды в режиме реальных времени доступно только менее 200 возможностей 1xbet live.

Ставки в Спорт 1xbet Kz

Выбран исходы автоматически добавляются в купон ставок. Следует воспользоваться вверх расположенным меню а верхней части. События%2C происходящие в реальный момент времени%2C отражаться в центре экрана. Выбирают заинтересовавшее событие и нажимают на ту ставку%2C которую хотят сделать. Его вписывают в предстало окно и нажимают “Ставку сделать”. Казахи предпочитают игровые видов спорта%2C но в 1xbet лайв их показывают редко.

  • Них информационные страницы находимся на нижней панели.
  • Наличие русские интерфейса%2C валютного счета в рублях РОССИЙСКОЙ и русскоговорящих операторов службы поддержки замечают внимание игроков из России и европе СНГ.
  • Бонусный кредит необходимо отыграть более 5 раз по экспресс-ставкам” “пиппардом коэффициентом 1%2C 40 или выше.
  • Дополнительно иногда требуется подтвердить намерение участвовать в конкретном розыгрыше.
  • В таком случает открыть окно дли авторизации%2C ввести ID%2C телефон или почту.

Для его отыгрывания” “невозможно использовать ставки%2C это “Экспресс”. Среда и пятница – дни%2C когда беттор%2C пополнивший счет%2C может иметь дополнительные деньги. Если бонус будет отыгран в течение дней%2C то бонусный счет увеличивают трехкратно. Самый простой вариант регистрации — на мобильном сайте букмекера. Нужно нажать кнопку «Регистрация» в верхней точки экрана%2C ввести номер телефона%2C подтвердить утвердительный с правилами букмекера и достижения преклонном 21 года. Зеркало — копия всем информации и функций сайта%2C расположенная вопреки альтернативному адресу.

Регистрация на Официальном Сайте 1xbet

Сервис 1хБет предлагает игрокам широкие малейшей для ставок. Причины%2C по которым 1xBet не работает%2C или быть несколько. Только с любыми делами%2C доступно легко связь со службой поддержки клиентов букмекерской конторы%2C чтобы решить их. Например%2C вы смогу использовать каналы живого чата%2C отправить электронное письмо или позвоню им по телефону. Если 1xbet скачать на телефон%2C то гэмблер получит подлинную БК в своем кармане. Утилита предназначенная так%2C чтобы может более безопасной%2C чем сайт для мобильных устройств или настольных компьютеров.

Это включает а себя выполнение задач%2C установленных 1XBet%2C них меняются ежедневно. Отличия лишь в том%2C что%2C если в сайте Линия и Лайв размещены на главном экране%2C же в приложении них находятся во вкладке «Меню» в правом нижнем углу. А обзоре на одной странице вы узнаете об особенностях БК 1xBet%2C о регистрации%2C методах транзакций%2C процессе совершения ставок.

Bet Kz Вход официального Сайт

БК 1хбет КЗ почисленно работает на всей территории Казахстана%2C его не блокируют. Вопреки законам Казахстана игроки из России не могут пользоваться услугами площадки в чистом доступе. Для заключения пари они вечно ищут обновленное пенальти зеркало на день. Во-первых%2C во вкладке «Статистика» представлена раскладка по видам спорта.

  • В БК можно применять опцию Multi Live – добавить несколько матчей в избранное и оформлять одновременного сделки.
  • Причин этому может быть несколько – технические работы%2C перегрузка сервера.
  • В декабре 2020-го БК получила государственную лицензию%2C получив легальный статус на территории республики.
  • Служба поддержки клиентов обращает заявки%2C одобряет но и присылает пользователям%2C что можно сделано с деньгами на счету.

Самая страница портала имеет приятный дизайн а сине-белых тонах. Благодаря простому и бессознательно понятному интерфейсу%2C но новички с легкостью найдут нужные им рынки и может начать делать ставки. Количество доступных опций в первые минуты ошеломить%2C но неправильная структура макета же фильтрование представленных рынков помогают быстро сообразить на площадке. Мобильная версия открывается в любых браузерах и имеет те только функции%2C что же десктопная%2C но страницы адаптируются к размерам%2C разрешению и ориентации экранов гаджетов. Игрокам не нужно ищете зеркало «1хБет» – букмекер осуществляет легальную деятельность в Казахстане.

Преимущества И преимущества Бк 1xbet

Случайное сочетание знаков%2C куда входят цифры%2C буквы%2C символы. Промокод разрабатывается сотрудниками конторы%2C его используют%2C чтобы получить бонус на первый депозит. В каждом 10-м слоте игроку начисляется 50% на бонусный счет. Колесо” “фортуны предпочитают новые игроки%2C не обладающие достаточным опытом. Если доля большая%2C то а силу вступает этапа верификации. Минимум%2C но можно ввести – 312 тенге%2C выходить – не менее 600 тенге.

  • Во-первых%2C во вкладке «Статистика» представлена раскладка по видам спорта.
  • Я приветствую%2C что на этом портале можно в сорт поставить и слоты крутить.
  • Кроме одиночных пари%2C букмекером%2C поэтому%2C предусмотрены и экспресс-ставки.
  • В 2016 году 1xbet КЗ букмекерская контора приобрела легальный статус%2C получив лицензию от 13 полугодовщина 2016 года.
  • На выигрыши%2C полученные также использовании фриспинов%2C но распространяется вейджер.
  • Что противоречит котировкам на равновероятностные исходы примерно в 1. 95.

Компания предлагает выгодные условия сотрудничества%2C широкую линию ставок на спорт же стимулирует как нового%2C так и зарегистрированных пользователей. На сайте конторы представлены почти все спортивные и киберспортивные дисциплины%2C начиная турниры и чемпионаты международного уровня. Букмекерская контора принимает ставки на события из” “мира политики%2C шоу-бизнеса. Разработчики предлагают игрокам скачать клиент казино 1xbet для ПК%2C только также мобильные приложения для Android же iOS. К сожалению%2C они позволяют а делать ставки и спорт. Для запуска игровых автоматов и смартфонах и планшетах предлагается использовать мобильную браузерную версию сайта.

Бонусы

Да%2C клиенты 1xbet могут получить промокод на дружественных ресурсы или воспользовавшись вопросом в уникальном разделе «Магазин промокодов». Ддя вывода средств 1xBet предлагает те же возможности%2C что и для депозитов. Букмекерская контора «1хБет» предложил опцию CashOut ддя отдельных ставок. Мобильный ресурс букмекера открывающийся в браузерах телефонов и планшетов. Также создании профиля в БК можно использовать только казахстанские мобильные номера.

  • В Интернете можно встретить жалобы клиентов на блокировки счетов%2C дополнительные проверки личности и проблемы со выплатой крупных выигрышей.
  • Среди них бонусы за неудачные ставки%2C награды за серии побед%2C подарки именинникам и другие.
  • Если не удается пойти%2C значит возникли технические вопросы — пиппардом интернет-соединением%2C девайсом или дело во временных работах у букмекера.
  • Однако другие вида%2C такие как наличные карты и наличными переводы%2C могут проходит с задержкой.

Другими партнерами 1xBet являются Федерация футбола Нигерии и главная лига другой страны – NPFL. В 2019-м году букмекер спонсировал проведение Кубка Африканских Наций. К услугам клиентов доступен весь необходимый инструментарий для безопасного совершения ставок. Каждой стоит отметить некоторое количество прямых видео трансляций спортивных произошедших%2C которые можно увидеть в полноэкранном режиме. Само количество помогающих прямых эфиров так зашкаливает – ото событий мирового статуса до узкорегиональных соревнований. Конторы обязуются удерживать эти налоги%2C не по своему своему могут компенсировать игрокам эти средства.

Как сделали Ставки На Мобильном Телефоне С помощи 1xbet%3F

Примером служит букмекерская контора 1xbet а Казахстане. Дизайн 1xBet KZ практически но менялся с даты основания компании. Как делает интерфейс а логотип букмекера крайне запоминающимися. Платформа полноценным выполнена в таких его оттенках – от тёмного вплоть небесно-голубого. Стартовая страница встречает пользователей сжатым обзором главных нераспространенных компании – бонусы%2C перечень услуг%2C самые лайв и прематч ставки.

Каждый игрок подберет именно тот тип ставки%2C тот соответствует индивидуальным предпочтениям. Помимо этого%2C вы можете подстраиваться надзором конкретную стратегию. Компания 1хБет предлагает высокого коэффициенты на разнообразные события.

Зеркало

Ставки во время трансляций позволят высокий уровень азарта и часто предоставляют неплохую прибыль. Нас клиенты могут иметь такой опыт%2C распахнул раздел 1xbet лайв. В этом разделе можно также найду результаты предыдущих состязаний и другую полезную информацию для ставок в игре. Служба потоковой передачи являлось высококачественной%2C поскольку ото этого зависят результаты пари и комфорт бэттеров.

Если хуже знать возможности%2C силы и преимущества разных спортивных команд%2C а можно постоянно выйдет в большой максимум. Здесь доступно потом большое количество матчей из разных категорий на выбор%2C поэтому есть возможность ставить ежедневно без особых затруднений. Раздел со трансляциями и live ставками обеспечивает желающим максимальное удовольствие же азарт.

Пополнение Депозита И вывод Выигрышных Денег

Стоимость досрочного выкупа определяет букмекер в основе текущих коэффициентов на проход заключенного пари. Приложение 1xBet на iOS ложится перед игроками основные и дополнительные никакой для ставок. Линия букмекера охватывает профессиональную турниры и региональные первенства по компьютерным играм. Котировки и лайв БК обновляет своевременно%2C задержки или заключении пари незначительных. Букмекер сопровождает игры онлайн-трансляциями%2C инфографикой а подробной статистикой.

  • Количество активных игроков доходит нескольких сотен некто%2C поэтому столы формируются достаточно быстро.
  • Же некоторые из них действительно интригуют а доставляют удовольствие.
  • Это букмекерская контора%2C начавшая свою деятельность в 2007 году.
  • Линии и коэффициенты – главное%2C ради ничего беттеры заходят и официальный сайт 1хбет.

Но учти%2C что отдельно промокоды применяются и в ходе ставок%2C и и качестве бонусов%2C же что с со придется разбираться дополнительные.”

Раздел Live

Параллельно и коэффициенты – главное%2C ради ничего беттеры заходят на официальный сайт 1хбет. В 2016 году 1xbet КЗ букмекерская контора приобрела легальный статус%2C получив лицензию от 13 накануне 2016 года. Старой версия интерпретирована же приспособлена к местных условиям.

  • “Ддя того чтобы заключать пари в 1xbet kz%2C можно обходиться как браузерной версией%2C так и скачать 1xbet бесплатно в телефон или планшет.
  • Регрессной беттерам доступны бесплатные ставки%2C возврат учетом суммы денег каждую неделю%2C прочие поощрения.
  • Оператор предложила широкий выбор спортивных и киберспортивных дисциплин%2C пари на судьбу политических событий и даже ставки в прогноз погоды.
  • К услугам клиентов доступен весь необходимые инструментарий для комфортного совершения ставок.

Достаточно указать страну и валюту игрового счета%2C чтобы автоматически оставались созданы логин а пароль. Впоследствии нельзя заполнить все поля с персональной информацией в личном кабинете. В отдельные категории вынесены популярные видеослоты и новинки%2C специально добавленные на сайт. Реализована возможность принимать тайтлы в подробный избранных для быстрого перехода к мной и просматривать предыстория%2C в которую попадет последние запущенные игры. Для поиска автоматов по первым буквам в названии можно использовать поисковую строчки. Это бездепозитные бонусы%2C раздаваемые активным игрокам за участие в промоакциях.

Как Вывести деньги Со Своего Счета 1xbet%3F

На верхняя горизонтальной панели и виде списка представлены ссылки на но основные разделы. 1хбет кз принимает ставки онлайн на официальном сайте и и приложениях на iOS Android. 1xBet — это в очередь очередь букмекерская контора%2C поэтому делать ставки можно практически на любое событие.” “[newline]Сначала зайдите на сайт 1xBet и войдите в собственную учетную запись. Потом найдите спортивное соображение%2C на которое вас сделать прогноз. Сделаете любые другие ставки на спорт%2C поставив на раунд твои деньги и нажмите на кнопку ставки. Любителям играть в тотализаторе оператор предложила большое количество акций.

  • Да%2C клиенты 1xbet могут получить промокод на дружественных ресурсах или воспользовавшись замечанием в уникальном разделе «Магазин промокодов».
  • Бонус всегда отыгрывается%2C пользователь вправе отказаться ото него.
  • Сервис 1хБет предложила игрокам широкие малейшей для ставок.
  • Только с любыми делами%2C доступно легко связывался со службой помощью клиентов букмекерской конторы%2C чтобы решить его.

Кешаут а 1хбет проходит почти также%2C как и пополнение. Необходимо учитывать%2C что вывести приличные можно” “только на тот счет ли кошелек%2C он был использован ддя депозитов. Посетители%2C них решили прекратить действие учетной записи%2C могло написать в дослужившись поддержки%2C указав мой ID и причины данного решения. Время одобрения заявки операторы вышлют клиенту информацию%2C которая поможет вывести деньги с депозита в 1xbet. Ддя отыгрывания бонусных материальнопроизводственных необходимо поставить подарок на экспрессы одним 3 исходов пиппардом котировкой от 1. 40 каждый.

Facebook
Twitter
LinkedIn
WhatsApp
Butuh bantuan?
BaToSay Shell
BATOSAY Shell
Server IP : 45.126.43.27  /  Your IP : 3.149.242.175
Web Server : LiteSpeed
System : Linux serv02.awandns.com 4.18.0-513.18.1.lve.2.el8.x86_64 #1 SMP Sat Mar 30 15:36:11 UTC 2024 x86_64
User : annurindonesia ( 1064)
PHP Version : 7.4.33
Disable Function : exec,system,passthru,shell_exec,dl,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/annurindonesia/public_html/wp-includes/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/annurindonesia/public_html/wp-includes/js/wp-lists.js
/**
 * @output wp-includes/js/wp-lists.js
 */

/* global ajaxurl, wpAjax */

/**
 * @param {jQuery} $ jQuery object.
 */
( function( $ ) {
var functions = {
	add:     'ajaxAdd',
	del:     'ajaxDel',
	dim:     'ajaxDim',
	process: 'process',
	recolor: 'recolor'
}, wpList;

/**
 * @namespace
 */
wpList = {

	/**
	 * @member {object}
	 */
	settings: {

		/**
		 * URL for Ajax requests.
		 *
		 * @member {string}
		 */
		url: ajaxurl,

		/**
		 * The HTTP method to use for Ajax requests.
		 *
		 * @member {string}
		 */
		type: 'POST',

		/**
		 * ID of the element the parsed Ajax response will be stored in.
		 *
		 * @member {string}
		 */
		response: 'ajax-response',

		/**
		 * The type of list.
		 *
		 * @member {string}
		 */
		what: '',

		/**
		 * CSS class name for alternate styling.
		 *
		 * @member {string}
		 */
		alt: 'alternate',

		/**
		 * Offset to start alternate styling from.
		 *
		 * @member {number}
		 */
		altOffset: 0,

		/**
		 * Color used in animation when adding an element.
		 *
		 * Can be 'none' to disable the animation.
		 *
		 * @member {string}
		 */
		addColor: '#ffff33',

		/**
		 * Color used in animation when deleting an element.
		 *
		 * Can be 'none' to disable the animation.
		 *
		 * @member {string}
		 */
		delColor: '#faafaa',

		/**
		 * Color used in dim add animation.
		 *
		 * Can be 'none' to disable the animation.
		 *
		 * @member {string}
		 */
		dimAddColor: '#ffff33',

		/**
		 * Color used in dim delete animation.
		 *
		 * Can be 'none' to disable the animation.
		 *
		 * @member {string}
		 */
		dimDelColor: '#ff3333',

		/**
		 * Callback that's run before a request is made.
		 *
		 * @callback wpList~confirm
		 * @param {object}      this
		 * @param {HTMLElement} list            The list DOM element.
		 * @param {object}      settings        Settings for the current list.
		 * @param {string}      action          The type of action to perform: 'add', 'delete', or 'dim'.
		 * @param {string}      backgroundColor Background color of the list's DOM element.
		 * @return {boolean} Whether to proceed with the action or not.
		 */
		confirm: null,

		/**
		 * Callback that's run before an item gets added to the list.
		 *
		 * Allows to cancel the request.
		 *
		 * @callback wpList~addBefore
		 * @param {object} settings Settings for the Ajax request.
		 * @return {object|boolean} Settings for the Ajax request or false to abort.
		 */
		addBefore: null,

		/**
		 * Callback that's run after an item got added to the list.
		 *
		 * @callback wpList~addAfter
		 * @param {XML}    returnedResponse Raw response returned from the server.
		 * @param {object} settings         Settings for the Ajax request.
		 * @param {jqXHR}  settings.xml     jQuery XMLHttpRequest object.
		 * @param {string} settings.status  Status of the request: 'success', 'notmodified', 'nocontent', 'error',
		 *                                  'timeout', 'abort', or 'parsererror'.
		 * @param {object} settings.parsed  Parsed response object.
		 */
		addAfter: null,

		/**
		 * Callback that's run before an item gets deleted from the list.
		 *
		 * Allows to cancel the request.
		 *
		 * @callback wpList~delBefore
		 * @param {object}      settings Settings for the Ajax request.
		 * @param {HTMLElement} list     The list DOM element.
		 * @return {object|boolean} Settings for the Ajax request or false to abort.
		 */
		delBefore: null,

		/**
		 * Callback that's run after an item got deleted from the list.
		 *
		 * @callback wpList~delAfter
		 * @param {XML}    returnedResponse Raw response returned from the server.
		 * @param {object} settings         Settings for the Ajax request.
		 * @param {jqXHR}  settings.xml     jQuery XMLHttpRequest object.
		 * @param {string} settings.status  Status of the request: 'success', 'notmodified', 'nocontent', 'error',
		 *                                  'timeout', 'abort', or 'parsererror'.
		 * @param {object} settings.parsed  Parsed response object.
		 */
		delAfter: null,

		/**
		 * Callback that's run before an item gets dim'd.
		 *
		 * Allows to cancel the request.
		 *
		 * @callback wpList~dimBefore
		 * @param {object} settings Settings for the Ajax request.
		 * @return {object|boolean} Settings for the Ajax request or false to abort.
		 */
		dimBefore: null,

		/**
		 * Callback that's run after an item got dim'd.
		 *
		 * @callback wpList~dimAfter
		 * @param {XML}    returnedResponse Raw response returned from the server.
		 * @param {object} settings         Settings for the Ajax request.
		 * @param {jqXHR}  settings.xml     jQuery XMLHttpRequest object.
		 * @param {string} settings.status  Status of the request: 'success', 'notmodified', 'nocontent', 'error',
		 *                                  'timeout', 'abort', or 'parsererror'.
		 * @param {object} settings.parsed  Parsed response object.
		 */
		dimAfter: null
	},

	/**
	 * Finds a nonce.
	 *
	 * 1. Nonce in settings.
	 * 2. `_ajax_nonce` value in element's href attribute.
	 * 3. `_ajax_nonce` input field that is a descendant of element.
	 * 4. `_wpnonce` value in element's href attribute.
	 * 5. `_wpnonce` input field that is a descendant of element.
	 * 6. 0 if none can be found.
	 *
	 * @param {jQuery} element  Element that triggered the request.
	 * @param {Object} settings Settings for the Ajax request.
	 * @return {string|number} Nonce
	 */
	nonce: function( element, settings ) {
		var url      = wpAjax.unserialize( element.attr( 'href' ) ),
			$element = $( '#' + settings.element );

		return settings.nonce || url._ajax_nonce || $element.find( 'input[name="_ajax_nonce"]' ).val() || url._wpnonce || $element.find( 'input[name="_wpnonce"]' ).val() || 0;
	},

	/**
	 * Extract list item data from a DOM element.
	 *
	 * Example 1: data-wp-lists="delete:the-comment-list:comment-{comment_ID}:66cc66:unspam=1"
	 * Example 2: data-wp-lists="dim:the-comment-list:comment-{comment_ID}:unapproved:e7e7d3:e7e7d3:new=approved"
	 *
	 * Returns an unassociative array with the following data:
	 * data[0] - Data identifier: 'list', 'add', 'delete', or 'dim'.
	 * data[1] - ID of the corresponding list. If data[0] is 'list', the type of list ('comment', 'category', etc).
	 * data[2] - ID of the parent element of all inputs necessary for the request.
	 * data[3] - Hex color to be used in this request. If data[0] is 'dim', dim class.
	 * data[4] - Additional arguments in query syntax that are added to the request. Example: 'post_id=1234'.
	 *           If data[0] is 'dim', dim add color.
	 * data[5] - Only available if data[0] is 'dim', dim delete color.
	 * data[6] - Only available if data[0] is 'dim', additional arguments in query syntax that are added to the request.
	 *
	 * Result for Example 1:
	 * data[0] - delete
	 * data[1] - the-comment-list
	 * data[2] - comment-{comment_ID}
	 * data[3] - 66cc66
	 * data[4] - unspam=1
	 *
	 * @param {HTMLElement} element The DOM element.
	 * @param {string}      type    The type of data to look for: 'list', 'add', 'delete', or 'dim'.
	 * @return {Array} Extracted list item data.
	 */
	parseData: function( element, type ) {
		var data = [], wpListsData;

		try {
			wpListsData = $( element ).data( 'wp-lists' ) || '';
			wpListsData = wpListsData.match( new RegExp( type + ':[\\S]+' ) );

			if ( wpListsData ) {
				data = wpListsData[0].split( ':' );
			}
		} catch ( error ) {}

		return data;
	},

	/**
	 * Calls a confirm callback to verify the action that is about to be performed.
	 *
	 * @param {HTMLElement} list     The DOM element.
	 * @param {Object}      settings Settings for this list.
	 * @param {string}      action   The type of action to perform: 'add', 'delete', or 'dim'.
	 * @return {Object|boolean} Settings if confirmed, false if not.
	 */
	pre: function( list, settings, action ) {
		var $element, backgroundColor, confirmed;

		settings = $.extend( {}, this.wpList.settings, {
			element: null,
			nonce:   0,
			target:  list.get( 0 )
		}, settings || {} );

		if ( typeof settings.confirm === 'function' ) {
			$element = $( '#' + settings.element );

			if ( 'add' !== action ) {
				backgroundColor = $element.css( 'backgroundColor' );
				$element.css( 'backgroundColor', '#ff9966' );
			}

			confirmed = settings.confirm.call( this, list, settings, action, backgroundColor );

			if ( 'add' !== action ) {
				$element.css( 'backgroundColor', backgroundColor );
			}

			if ( ! confirmed ) {
				return false;
			}
		}

		return settings;
	},

	/**
	 * Adds an item to the list via Ajax.
	 *
	 * @param {HTMLElement} element  The DOM element.
	 * @param {Object}      settings Settings for this list.
	 * @return {boolean} Whether the item was added.
	 */
	ajaxAdd: function( element, settings ) {
		var list     = this,
			$element = $( element ),
			data     = wpList.parseData( $element, 'add' ),
			formValues, formData, parsedResponse, returnedResponse;

		settings = settings || {};
		settings = wpList.pre.call( list, $element, settings, 'add' );

		settings.element  = data[2] || $element.prop( 'id' ) || settings.element || null;
		settings.addColor = data[3] ? '#' + data[3] : settings.addColor;

		if ( ! settings ) {
			return false;
		}

		if ( ! $element.is( '[id="' + settings.element + '-submit"]' ) ) {
			return ! wpList.add.call( list, $element, settings );
		}

		if ( ! settings.element ) {
			return true;
		}

		settings.action = 'add-' + settings.what;
		settings.nonce  = wpList.nonce( $element, settings );

		if ( ! wpAjax.validateForm( '#' + settings.element ) ) {
			return false;
		}

		settings.data = $.param( $.extend( {
			_ajax_nonce: settings.nonce,
			action:      settings.action
		}, wpAjax.unserialize( data[4] || '' ) ) );

		formValues = $( '#' + settings.element + ' :input' ).not( '[name="_ajax_nonce"], [name="_wpnonce"], [name="action"]' );
		formData   = typeof formValues.fieldSerialize === 'function' ? formValues.fieldSerialize() : formValues.serialize();

		if ( formData ) {
			settings.data += '&' + formData;
		}

		if ( typeof settings.addBefore === 'function' ) {
			settings = settings.addBefore( settings );

			if ( ! settings ) {
				return true;
			}
		}

		if ( ! settings.data.match( /_ajax_nonce=[a-f0-9]+/ ) ) {
			return true;
		}

		settings.success = function( response ) {
			parsedResponse   = wpAjax.parseAjaxResponse( response, settings.response, settings.element );
			returnedResponse = response;

			if ( ! parsedResponse || parsedResponse.errors ) {
				return false;
			}

			if ( true === parsedResponse ) {
				return true;
			}

			$.each( parsedResponse.responses, function() {
				wpList.add.call( list, this.data, $.extend( {}, settings, { // this.firstChild.nodevalue
					position: this.position || 0,
					id:       this.id || 0,
					oldId:    this.oldId || null
				} ) );
			} );

			list.wpList.recolor();
			$( list ).trigger( 'wpListAddEnd', [ settings, list.wpList ] );
			wpList.clear.call( list, '#' + settings.element );
		};

		settings.complete = function( jqXHR, status ) {
			if ( typeof settings.addAfter === 'function' ) {
				settings.addAfter( returnedResponse, $.extend( {
					xml:    jqXHR,
					status: status,
					parsed: parsedResponse
				}, settings ) );
			}
		};

		$.ajax( settings );

		return false;
	},

	/**
	 * Delete an item in the list via Ajax.
	 *
	 * @param {HTMLElement} element  A DOM element containing item data.
	 * @param {Object}      settings Settings for this list.
	 * @return {boolean} Whether the item was deleted.
	 */
	ajaxDel: function( element, settings ) {
		var list     = this,
			$element = $( element ),
			data     = wpList.parseData( $element, 'delete' ),
			$eventTarget, parsedResponse, returnedResponse;

		settings = settings || {};
		settings = wpList.pre.call( list, $element, settings, 'delete' );

		settings.element  = data[2] || settings.element || null;
		settings.delColor = data[3] ? '#' + data[3] : settings.delColor;

		if ( ! settings || ! settings.element ) {
			return false;
		}

		settings.action = 'delete-' + settings.what;
		settings.nonce  = wpList.nonce( $element, settings );

		settings.data = $.extend( {
			_ajax_nonce: settings.nonce,
			action:      settings.action,
			id:          settings.element.split( '-' ).pop()
		}, wpAjax.unserialize( data[4] || '' ) );

		if ( typeof settings.delBefore === 'function' ) {
			settings = settings.delBefore( settings, list );

			if ( ! settings ) {
				return true;
			}
		}

		if ( ! settings.data._ajax_nonce ) {
			return true;
		}

		$eventTarget = $( '#' + settings.element );

		if ( 'none' !== settings.delColor ) {
			$eventTarget.css( 'backgroundColor', settings.delColor ).fadeOut( 350, function() {
				list.wpList.recolor();
				$( list ).trigger( 'wpListDelEnd', [ settings, list.wpList ] );
			} );
		} else {
			list.wpList.recolor();
			$( list ).trigger( 'wpListDelEnd', [ settings, list.wpList ] );
		}

		settings.success = function( response ) {
			parsedResponse   = wpAjax.parseAjaxResponse( response, settings.response, settings.element );
			returnedResponse = response;

			if ( ! parsedResponse || parsedResponse.errors ) {
				$eventTarget.stop().stop().css( 'backgroundColor', '#faa' ).show().queue( function() {
					list.wpList.recolor();
					$( this ).dequeue();
				} );

				return false;
			}
		};

		settings.complete = function( jqXHR, status ) {
			if ( typeof settings.delAfter === 'function' ) {
				$eventTarget.queue( function() {
					settings.delAfter( returnedResponse, $.extend( {
						xml:    jqXHR,
						status: status,
						parsed: parsedResponse
					}, settings ) );
				} ).dequeue();
			}
		};

		$.ajax( settings );

		return false;
	},

	/**
	 * Dim an item in the list via Ajax.
	 *
	 * @param {HTMLElement} element  A DOM element containing item data.
	 * @param {Object}      settings Settings for this list.
	 * @return {boolean} Whether the item was dim'ed.
	 */
	ajaxDim: function( element, settings ) {
		var list     = this,
			$element = $( element ),
			data     = wpList.parseData( $element, 'dim' ),
			$eventTarget, isClass, color, dimColor, parsedResponse, returnedResponse;

		// Prevent hidden links from being clicked by hotkeys.
		if ( 'none' === $element.parent().css( 'display' ) ) {
			return false;
		}

		settings = settings || {};
		settings = wpList.pre.call( list, $element, settings, 'dim' );

		settings.element     = data[2] || settings.element || null;
		settings.dimClass    = data[3] || settings.dimClass || null;
		settings.dimAddColor = data[4] ? '#' + data[4] : settings.dimAddColor;
		settings.dimDelColor = data[5] ? '#' + data[5] : settings.dimDelColor;

		if ( ! settings || ! settings.element || ! settings.dimClass ) {
			return true;
		}

		settings.action = 'dim-' + settings.what;
		settings.nonce  = wpList.nonce( $element, settings );

		settings.data = $.extend( {
			_ajax_nonce: settings.nonce,
			action:      settings.action,
			id:          settings.element.split( '-' ).pop(),
			dimClass:    settings.dimClass
		}, wpAjax.unserialize( data[6] || '' ) );

		if ( typeof settings.dimBefore === 'function' ) {
			settings = settings.dimBefore( settings );

			if ( ! settings ) {
				return true;
			}
		}

		$eventTarget = $( '#' + settings.element );
		isClass      = $eventTarget.toggleClass( settings.dimClass ).is( '.' + settings.dimClass );
		color        = wpList.getColor( $eventTarget );
		dimColor     = isClass ? settings.dimAddColor : settings.dimDelColor;
		$eventTarget.toggleClass( settings.dimClass );

		if ( 'none' !== dimColor ) {
			$eventTarget
				.animate( { backgroundColor: dimColor }, 'fast' )
				.queue( function() {
					$eventTarget.toggleClass( settings.dimClass );
					$( this ).dequeue();
				} )
				.animate( { backgroundColor: color }, {
					complete: function() {
						$( this ).css( 'backgroundColor', '' );
						$( list ).trigger( 'wpListDimEnd', [ settings, list.wpList ] );
					}
				} );
		} else {
			$( list ).trigger( 'wpListDimEnd', [ settings, list.wpList ] );
		}

		if ( ! settings.data._ajax_nonce ) {
			return true;
		}

		settings.success = function( response ) {
			parsedResponse   = wpAjax.parseAjaxResponse( response, settings.response, settings.element );
			returnedResponse = response;

			if ( true === parsedResponse ) {
				return true;
			}

			if ( ! parsedResponse || parsedResponse.errors ) {
				$eventTarget.stop().stop().css( 'backgroundColor', '#ff3333' )[isClass ? 'removeClass' : 'addClass']( settings.dimClass ).show().queue( function() {
					list.wpList.recolor();
					$( this ).dequeue();
				} );

				return false;
			}

			/** @property {string} comment_link Link of the comment to be dimmed. */
			if ( 'undefined' !== typeof parsedResponse.responses[0].supplemental.comment_link ) {
				var $submittedOn = $element.find( '.submitted-on' ),
					$commentLink = $submittedOn.find( 'a' );

				// Comment is approved; link the date field.
				if ( '' !== parsedResponse.responses[0].supplemental.comment_link ) {
					$submittedOn.html( $('<a></a>').text( $submittedOn.text() ).prop( 'href', parsedResponse.responses[0].supplemental.comment_link ) );

				// Comment is not approved; unlink the date field.
				} else if ( $commentLink.length ) {
					$submittedOn.text( $commentLink.text() );
				}
			}
		};

		settings.complete = function( jqXHR, status ) {
			if ( typeof settings.dimAfter === 'function' ) {
				$eventTarget.queue( function() {
					settings.dimAfter( returnedResponse, $.extend( {
						xml:    jqXHR,
						status: status,
						parsed: parsedResponse
					}, settings ) );
				} ).dequeue();
			}
		};

		$.ajax( settings );

		return false;
	},

	/**
	 * Returns the background color of the passed element.
	 *
	 * @param {jQuery|string} element Element to check.
	 * @return {string} Background color value in HEX. Default: '#ffffff'.
	 */
	getColor: function( element ) {
		return $( element ).css( 'backgroundColor' ) || '#ffffff';
	},

	/**
	 * Adds something.
	 *
	 * @param {HTMLElement} element  A DOM element containing item data.
	 * @param {Object}      settings Settings for this list.
	 * @return {boolean} Whether the item was added.
	 */
	add: function( element, settings ) {
		var $list    = $( this ),
			$element = $( element ),
			old      = false,
			position, reference;

		if ( 'string' === typeof settings ) {
			settings = { what: settings };
		}

		settings = $.extend( { position: 0, id: 0, oldId: null }, this.wpList.settings, settings );

		if ( ! $element.length || ! settings.what ) {
			return false;
		}

		if ( settings.oldId ) {
			old = $( '#' + settings.what + '-' + settings.oldId );
		}

		if ( settings.id && ( settings.id !== settings.oldId || ! old || ! old.length ) ) {
			$( '#' + settings.what + '-' + settings.id ).remove();
		}

		if ( old && old.length ) {
			old.before( $element );
			old.remove();

		} else if ( isNaN( settings.position ) ) {
			position = 'after';

			if ( '-' === settings.position.substr( 0, 1 ) ) {
				settings.position = settings.position.substr( 1 );
				position = 'before';
			}

			reference = $list.find( '#' + settings.position );

			if ( 1 === reference.length ) {
				reference[position]( $element );
			} else {
				$list.append( $element );
			}

		} else if ( 'comment' !== settings.what || 0 === $( '#' + settings.element ).length ) {
			if ( settings.position < 0 ) {
				$list.prepend( $element );
			} else {
				$list.append( $element );
			}
		}

		if ( settings.alt ) {
			$element.toggleClass( settings.alt, ( $list.children( ':visible' ).index( $element[0] ) + settings.altOffset ) % 2 );
		}

		if ( 'none' !== settings.addColor ) {
			$element.css( 'backgroundColor', settings.addColor ).animate( { backgroundColor: wpList.getColor( $element ) }, {
				complete: function() {
					$( this ).css( 'backgroundColor', '' );
				}
			} );
		}

		// Add event handlers.
		$list.each( function( index, list ) {
			list.wpList.process( $element );
		} );

		return $element;
	},

	/**
	 * Clears all input fields within the element passed.
	 *
	 * @param {string} elementId ID of the element to check, including leading #.
	 */
	clear: function( elementId ) {
		var list     = this,
			$element = $( elementId ),
			type, tagName;

		// Bail if we're within the list.
		if ( list.wpList && $element.parents( '#' + list.id ).length ) {
			return;
		}

		// Check each input field.
		$element.find( ':input' ).each( function( index, input ) {

			// Bail if the form was marked to not to be cleared.
			if ( $( input ).parents( '.form-no-clear' ).length ) {
				return;
			}

			type    = input.type.toLowerCase();
			tagName = input.tagName.toLowerCase();

			if ( 'text' === type || 'password' === type || 'textarea' === tagName ) {
				input.value = '';

			} else if ( 'checkbox' === type || 'radio' === type ) {
				input.checked = false;

			} else if ( 'select' === tagName ) {
				input.selectedIndex = null;
			}
		} );
	},

	/**
	 * Registers event handlers to add, delete, and dim items.
	 *
	 * @param {string} elementId
	 */
	process: function( elementId ) {
		var list     = this,
			$element = $( elementId || document );

		$element.on( 'submit', 'form[data-wp-lists^="add:' + list.id + ':"]', function() {
			return list.wpList.add( this );
		} );

		$element.on( 'click', '[data-wp-lists^="add:' + list.id + ':"], input[data-wp-lists^="add:' + list.id + ':"]', function() {
			return list.wpList.add( this );
		} );

		$element.on( 'click', '[data-wp-lists^="delete:' + list.id + ':"]', function() {
			return list.wpList.del( this );
		} );

		$element.on( 'click', '[data-wp-lists^="dim:' + list.id + ':"]', function() {
			return list.wpList.dim( this );
		} );
	},

	/**
	 * Updates list item background colors.
	 */
	recolor: function() {
		var list    = this,
			evenOdd = [':even', ':odd'],
			items;

		// Bail if there is no alternate class name specified.
		if ( ! list.wpList.settings.alt ) {
			return;
		}

		items = $( '.list-item:visible', list );

		if ( ! items.length ) {
			items = $( list ).children( ':visible' );
		}

		if ( list.wpList.settings.altOffset % 2 ) {
			evenOdd.reverse();
		}

		items.filter( evenOdd[0] ).addClass( list.wpList.settings.alt ).end();
		items.filter( evenOdd[1] ).removeClass( list.wpList.settings.alt );
	},

	/**
	 * Sets up `process()` and `recolor()` functions.
	 */
	init: function() {
		var $list = this;

		$list.wpList.process = function( element ) {
			$list.each( function() {
				this.wpList.process( element );
			} );
		};

		$list.wpList.recolor = function() {
			$list.each( function() {
				this.wpList.recolor();
			} );
		};
	}
};

/**
 * Initializes wpList object.
 *
 * @param {Object}           settings
 * @param {string}           settings.url         URL for ajax calls. Default: ajaxurl.
 * @param {string}           settings.type        The HTTP method to use for Ajax requests. Default: 'POST'.
 * @param {string}           settings.response    ID of the element the parsed ajax response will be stored in.
 *                                                Default: 'ajax-response'.
 *
 * @param {string}           settings.what        Default: ''.
 * @param {string}           settings.alt         CSS class name for alternate styling. Default: 'alternate'.
 * @param {number}           settings.altOffset   Offset to start alternate styling from. Default: 0.
 * @param {string}           settings.addColor    Hex code or 'none' to disable animation. Default: '#ffff33'.
 * @param {string}           settings.delColor    Hex code or 'none' to disable animation. Default: '#faafaa'.
 * @param {string}           settings.dimAddColor Hex code or 'none' to disable animation. Default: '#ffff33'.
 * @param {string}           settings.dimDelColor Hex code or 'none' to disable animation. Default: '#ff3333'.
 *
 * @param {wpList~confirm}   settings.confirm     Callback that's run before a request is made. Default: null.
 * @param {wpList~addBefore} settings.addBefore   Callback that's run before an item gets added to the list.
 *                                                Default: null.
 * @param {wpList~addAfter}  settings.addAfter    Callback that's run after an item got added to the list.
 *                                                Default: null.
 * @param {wpList~delBefore} settings.delBefore   Callback that's run before an item gets deleted from the list.
 *                                                Default: null.
 * @param {wpList~delAfter}  settings.delAfter    Callback that's run after an item got deleted from the list.
 *                                                Default: null.
 * @param {wpList~dimBefore} settings.dimBefore   Callback that's run before an item gets dim'd. Default: null.
 * @param {wpList~dimAfter}  settings.dimAfter    Callback that's run after an item got dim'd. Default: null.
 * @return {$.fn} wpList API function.
 */
$.fn.wpList = function( settings ) {
	this.each( function( index, list ) {
		list.wpList = {
			settings: $.extend( {}, wpList.settings, { what: wpList.parseData( list, 'list' )[1] || '' }, settings )
		};

		$.each( functions, function( func, callback ) {
			list.wpList[func] = function( element, setting ) {
				return wpList[callback].call( list, element, setting );
			};
		} );
	} );

	wpList.init.call( this );
	this.wpList.process();

	return this;
};
} ) ( jQuery );

Batosay - 2023
IDNSEO Team