본문으로 건너뛰기

회원가입, 게시판 보안 강화

PHP 8 · GODO25
변경 파일 수: 162개
변경 파일 목록
162
data (149)
popup_goods_board_write.htmlskin/front/moment/board/view.htmlskin/front/moment/board/skin/default/write.htmlskin/front/moment/board/skin/default/view.htmlskin/front/moment/board/skin/event/write.htmlskin/front/moment/board/skin/event/view.htmlskin/front/moment/board/skin/gallery/write.htmlskin/front/moment/board/skin/gallery/write.htmlskin/front/moment/board/skin/qa/write.htmlskin/front/moment/board/template/default/write.htmlskin/front/moment/board/template/event/write.htmlskin/front/moment/board/template/gallery/write.htmlskin/front/moment/board/template/qa/goods_board_review_view.htmlskin/front/moment/goods/goods_board_write.htmlskin/front/moment/goods/goods_view.htmlskin/front/moment/goods/altcha.jsskin/front/moment/js/altcha/i18n.jsskin/front/moment/js/altcha/gd_board_goods.jsskin/front/moment/js/gd_board_view.jsskin/front/moment/js/gd_board_write.jsskin/front/moment/js/gd_common.jsskin/front/moment/js/gd_member2.jsskin/front/moment/js/join.htmlskin/front/moment/member/_join_view_captcha.htmlskin/front/moment/member/_altcha.htmlskin/front/moment/share/popup_goods_board_write.htmlskin/front/mygreek/board/view.htmlskin/front/mygreek/board/skin/default/write.htmlskin/front/mygreek/board/skin/default/view.htmlskin/front/mygreek/board/skin/event/write.htmlskin/front/mygreek/board/skin/event/view.htmlskin/front/mygreek/board/skin/gallery/write.htmlskin/front/mygreek/board/skin/gallery/write.htmlskin/front/mygreek/board/skin/qa/write.htmlskin/front/mygreek/board/template/default/write.htmlskin/front/mygreek/board/template/event/write.htmlskin/front/mygreek/board/template/gallery/write.htmlskin/front/mygreek/board/template/qa/goods_board_review_view.htmlskin/front/mygreek/goods/goods_board_write.htmlskin/front/mygreek/goods/goods_view.htmlskin/front/mygreek/goods/altcha.jsskin/front/mygreek/js/altcha/i18n.jsskin/front/mygreek/js/altcha/gd_board_goods.jsskin/front/mygreek/js/gd_board_view.jsskin/front/mygreek/js/gd_board_write.jsskin/front/mygreek/js/gd_common.jsskin/front/mygreek/js/gd_member2.jsskin/front/mygreek/js/join.htmlskin/front/mygreek/member/_join_view_captcha.htmlskin/front/mygreek/member/_altcha.htmlskin/front/mygreek/share/popup_goods_board_write.htmlskin/front/story_g/board/view.htmlskin/front/story_g/board/skin/default/write.htmlskin/front/story_g/board/skin/default/view.htmlskin/front/story_g/board/skin/event/write.htmlskin/front/story_g/board/skin/event/view.htmlskin/front/story_g/board/skin/gallery/write.htmlskin/front/story_g/board/skin/gallery/write.htmlskin/front/story_g/board/skin/qa/write.htmlskin/front/story_g/board/template/default/write.htmlskin/front/story_g/board/template/event/write.htmlskin/front/story_g/board/template/gallery/write.htmlskin/front/story_g/board/template/qa/gd_contents.cssskin/front/story_g/css/gd_goods-view.cssskin/front/story_g/css/goods_board_review_view.htmlskin/front/story_g/goods/goods_board_write.htmlskin/front/story_g/goods/goods_view.htmlskin/front/story_g/goods/altcha.jsskin/front/story_g/js/altcha/i18n.jsskin/front/story_g/js/altcha/gd_board_goods.jsskin/front/story_g/js/gd_board_view.jsskin/front/story_g/js/gd_board_write.jsskin/front/story_g/js/gd_common.jsskin/front/story_g/js/gd_member2.jsskin/front/story_g/js/join.htmlskin/front/story_g/member/_join_view_captcha.htmlskin/front/story_g/member/_altcha.htmlskin/front/story_g/share/view.htmlskin/mobile/moment/board/skin/default/write.htmlskin/mobile/moment/board/skin/default/view.htmlskin/mobile/moment/board/skin/event/write.htmlskin/mobile/moment/board/skin/event/view.htmlskin/mobile/moment/board/skin/gallery/write.htmlskin/mobile/moment/board/skin/gallery/write.htmlskin/mobile/moment/board/skin/qa/write.htmlskin/mobile/moment/board/template/default/write.htmlskin/mobile/moment/board/template/event/write.htmlskin/mobile/moment/board/template/gallery/write.htmlskin/mobile/moment/board/template/qa/goods_board_qa_list.htmlskin/mobile/moment/goods/goods_board_review_list.htmlskin/mobile/moment/goods/goods_board_view.htmlskin/mobile/moment/goods/goods_view.htmlskin/mobile/moment/goods/altcha.jsskin/mobile/moment/js/altcha/i18n.jsskin/mobile/moment/js/altcha/gd_board_view.jsskin/mobile/moment/js/gd_board_write.jsskin/mobile/moment/js/gd_common.jsskin/mobile/moment/js/gd_member2.jsskin/mobile/moment/js/join.htmlskin/mobile/moment/member/_join_view_captcha.htmlskin/mobile/moment/member/_altcha.htmlskin/mobile/moment/share/view.htmlskin/mobile/mygreek/board/skin/default/write.htmlskin/mobile/mygreek/board/skin/default/view.htmlskin/mobile/mygreek/board/skin/event/write.htmlskin/mobile/mygreek/board/skin/event/view.htmlskin/mobile/mygreek/board/skin/gallery/write.htmlskin/mobile/mygreek/board/skin/gallery/write.htmlskin/mobile/mygreek/board/skin/qa/write.htmlskin/mobile/mygreek/board/template/default/write.htmlskin/mobile/mygreek/board/template/event/write.htmlskin/mobile/mygreek/board/template/gallery/write.htmlskin/mobile/mygreek/board/template/qa/goods_board_qa_list.htmlskin/mobile/mygreek/goods/goods_board_review_list.htmlskin/mobile/mygreek/goods/goods_board_view.htmlskin/mobile/mygreek/goods/goods_view.htmlskin/mobile/mygreek/goods/altcha.jsskin/mobile/mygreek/js/altcha/i18n.jsskin/mobile/mygreek/js/altcha/gd_board_view.jsskin/mobile/mygreek/js/gd_board_write.jsskin/mobile/mygreek/js/gd_common.jsskin/mobile/mygreek/js/gd_member2.jsskin/mobile/mygreek/js/join.htmlskin/mobile/mygreek/member/_join_view_captcha.htmlskin/mobile/mygreek/member/_altcha.htmlskin/mobile/mygreek/share/view.htmlskin/mobile/story_g/board/skin/default/write.htmlskin/mobile/story_g/board/skin/default/view.htmlskin/mobile/story_g/board/skin/event/write.htmlskin/mobile/story_g/board/skin/event/view.htmlskin/mobile/story_g/board/skin/gallery/write.htmlskin/mobile/story_g/board/skin/gallery/write.htmlskin/mobile/story_g/board/skin/qa/write.htmlskin/mobile/story_g/board/template/default/write.htmlskin/mobile/story_g/board/template/event/write.htmlskin/mobile/story_g/board/template/gallery/write.htmlskin/mobile/story_g/board/template/qa/goods_board_qa_list.htmlskin/mobile/story_g/goods/goods_board_review_list.htmlskin/mobile/story_g/goods/goods_board_view.htmlskin/mobile/story_g/goods/goods_view.htmlskin/mobile/story_g/goods/altcha.jsskin/mobile/story_g/js/altcha/i18n.jsskin/mobile/story_g/js/altcha/gd_board_view.jsskin/mobile/story_g/js/gd_board_write.jsskin/mobile/story_g/js/gd_common.jsskin/mobile/story_g/js/gd_member2.jsskin/mobile/story_g/js/join.htmlskin/mobile/story_g/member/_join_view_captcha.htmlskin/mobile/story_g/member/_altcha.htmlskin/mobile/story_g/share/
변경 파일 코드
추가삭제
Admin/board/board_register.php+4-4
변경 전board_register.php
<label class="checkbox-inline"><input type="checkbox" name="bdSpamMemoFl[]"
value="1" <?= gd_isset($checked['bdSpamMemoFl'][1]) ?> /> 외부유입차단</label>
<label class="checkbox-inline"><input type="checkbox" name="bdSpamMemoFl[]"
value="2" <?= gd_isset($checked['bdSpamMemoFl'][2]) ?> /> 자동등록방지문자</label>
<label class="checkbox-inline"><input type="checkbox" name="bdPasswordMemoFl"
value="y" <?= gd_isset($checked['bdPasswordMemoFl']['y']) ?> /> 비밀댓글 암호보안</label>
 
value="1" <?= gd_isset($checked['bdSpamBoardFl'][1]) ?> /> 외부유입차단 </label>
<label class="checkbox-inline"><input type="checkbox" name="bdSpamBoardFl[]"
value="2" <?= gd_isset($checked['bdSpamBoardFl'][2]) ?> />
자동등록방지문자</label>
</td>
</tr>
</table>
<label class="checkbox-inline"><input type="checkbox" name="bdSpamMemoFl[]"
value="1" <?= gd_isset($checked['bdSpamMemoFl'][1]) ?> /> 외부유입차단</label>
<label class="checkbox-inline"><input type="checkbox" name="bdSpamMemoFl[]"
value="2" <?= gd_isset($checked['bdSpamMemoFl'][2]) ?> /> 자동등록방지문자</label>
<label class="checkbox-inline"><input type="checkbox" name="bdPasswordMemoFl"
value="y" <?= gd_isset($checked['bdPasswordMemoFl']['y']) ?> /> 비밀댓글 암호보안</label>
 
value="1" <?= gd_isset($checked['bdSpamBoardFl'][1]) ?> /> 외부유입차단 </label>
<label class="checkbox-inline"><input type="checkbox" name="bdSpamBoardFl[]"
value="2" <?= gd_isset($checked['bdSpamBoardFl'][2]) ?> />
자동등록방지문자</label>
</td>
</tr>
</table>
 
변경 후board_register.php
<label class="checkbox-inline"><input type="checkbox" name="bdSpamMemoFl[]"
value="1" <?= gd_isset($checked['bdSpamMemoFl'][1]) ?> /> 외부유입차단</label>
<label class="checkbox-inline"><input type="checkbox" name="bdSpamMemoFl[]"
value="2" <?= gd_isset($checked['bdSpamMemoFl'][2]) ?> /> 자동등록방지</label>
<label class="checkbox-inline"><input type="checkbox" name="bdPasswordMemoFl"
value="y" <?= gd_isset($checked['bdPasswordMemoFl']['y']) ?> /> 비밀댓글 암호보안</label>
 
value="1" <?= gd_isset($checked['bdSpamBoardFl'][1]) ?> /> 외부유입차단 </label>
<label class="checkbox-inline"><input type="checkbox" name="bdSpamBoardFl[]"
value="2" <?= gd_isset($checked['bdSpamBoardFl'][2]) ?> />
자동등록방지</label>
</td>
</tr>
</table>
<label class="checkbox-inline"><input type="checkbox" name="bdSpamMemoFl[]"
value="1" <?= gd_isset($checked['bdSpamMemoFl'][1]) ?> /> 외부유입차단</label>
<label class="checkbox-inline"><input type="checkbox" name="bdSpamMemoFl[]"
value="2" <?= gd_isset($checked['bdSpamMemoFl'][2]) ?> /> 자동등록방지</label>
<label class="checkbox-inline"><input type="checkbox" name="bdPasswordMemoFl"
value="y" <?= gd_isset($checked['bdPasswordMemoFl']['y']) ?> /> 비밀댓글 암호보안</label>
 
value="1" <?= gd_isset($checked['bdSpamBoardFl'][1]) ?> /> 외부유입차단 </label>
<label class="checkbox-inline"><input type="checkbox" name="bdSpamBoardFl[]"
value="2" <?= gd_isset($checked['bdSpamBoardFl'][2]) ?> />
자동등록방지</label>
</td>
</tr>
</table>
 
Admin/member/member_joinitem.php+2-2
변경 전member_joinitem.php
<col class="width-xs center"/>
</colgroup>
<tr>
<th>자동등록방지문자</th>
<td>
<label class="checkbox-inline" title="사용여부를 선택해주세요!">
<input type="checkbox" name="captcha[use]" value="y"/>
<col class="width-xs center"/>
</colgroup>
<tr>
<th>자동등록방지문자</th>
<td>
<label class="checkbox-inline" title="사용여부를 선택해주세요!">
<input type="checkbox" name="captcha[use]" value="y"/>
 
변경 후member_joinitem.php
<col class="width-xs center"/>
</colgroup>
<tr>
<th>자동등록방지</th>
<td>
<label class="checkbox-inline" title="사용여부를 선택해주세요!">
<input type="checkbox" name="captcha[use]" value="y"/>
<col class="width-xs center"/>
</colgroup>
<tr>
<th>자동등록방지</th>
<td>
<label class="checkbox-inline" title="사용여부를 선택해주세요!">
<input type="checkbox" name="captcha[use]" value="y"/>
 
Component/Board/Board.php+16-2
변경 전Board.php
$switch = ($bdSpamBoardFl & 1 ? '12' : '00') . (($bdSpamBoardFl & 2) ? '3' : '0');
$rst = BoardUtil::antiSpam(strtoupper(gd_isset($this->req['captchaKey'])), $switch, 'post');
if (substr($rst['code'], 0, 1) == '4') {
throw new \Exception(__('자동등록방지 문자가 틀렸습니다'));
 
 
 
 
 
 
 
}
if ($rst['code'] != '0000') {
throw new \Exception(__('무단링크를 금지합니다.'));
$switch = ($bdSpamBoardFl & 1 ? '12' : '00') . (($bdSpamBoardFl & 2) ? '3' : '0');
$rst = BoardUtil::antiSpam(strtoupper(gd_isset($this->req['captchaKey'])), $switch, 'post');
if (substr($rst['code'], 0, 1) == '4') {
throw new \Exception(__('자동등록방지 문자가 틀렸습니다'));
 
 
 
 
 
 
 
}
if ($rst['code'] != '0000') {
throw new \Exception(__('무단링크를 금지합니다.'));
 
변경 후Board.php
$switch = ($bdSpamBoardFl & 1 ? '12' : '00') . (($bdSpamBoardFl & 2) ? '3' : '0');
$rst = BoardUtil::antiSpam(strtoupper(gd_isset($this->req['captchaKey'])), $switch, 'post');
if (substr($rst['code'], 0, 1) == '4') {
\Logger::channel('board')->warning(__METHOD__ . ' 자동등록방지 인증 실패', [
'bdId' => $this->cfg['bdId'],
'code' => $rst['code'],
'msg' => $rst['msg'],
'mode' => $this->req['mode'],
'isMemo' => $isMemo,
]);
throw new \Exception(__('자동등록방지 인증에 실패했습니다'));
}
if ($rst['code'] != '0000') {
throw new \Exception(__('무단링크를 금지합니다.'));
$switch = ($bdSpamBoardFl & 1 ? '12' : '00') . (($bdSpamBoardFl & 2) ? '3' : '0');
$rst = BoardUtil::antiSpam(strtoupper(gd_isset($this->req['captchaKey'])), $switch, 'post');
if (substr($rst['code'], 0, 1) == '4') {
\Logger::channel('board')->warning(__METHOD__ . ' 자동등록방지 인증 실패', [
'bdId' => $this->cfg['bdId'],
'code' => $rst['code'],
'msg' => $rst['msg'],
'mode' => $this->req['mode'],
'isMemo' => $isMemo,
]);
throw new \Exception(__('자동등록방지 인증에 실패했습니다'));
}
if ($rst['code'] != '0000') {
throw new \Exception(__('무단링크를 금지합니다.'));
 
Component/Board/BoardUtil.php+40-2
변경 전BoardUtil.php
namespace Bundle\Component\Board;
use Bundle\Component\Captcha\Captcha;
 
use DB;
use Framework\Utility\ArrayUtils;
use Framework\Utility\StringUtils;
return ['code' => '0000', 'msg' => 'Succeed in verifing'];
}
static public function checkCaptcha($captchaKey) {
 
 
 
 
 
 
$captcha = new Captcha();
$rst = $captcha->verify($captchaKey, 1);
return $rst;
}
 
 
 
 
 
 
 
 
 
 
 
 
/**
* 파일이름을 형식에 맞게 정리하기
*
namespace Bundle\Component\Board;
use Bundle\Component\Captcha\Captcha;
 
use DB;
use Framework\Utility\ArrayUtils;
use Framework\Utility\StringUtils;
return ['code' => '0000', 'msg' => 'Succeed in verifing'];
}
static public function checkCaptcha($captchaKey) {
 
 
 
 
 
 
$captcha = new Captcha();
$rst = $captcha->verify($captchaKey, 1);
return $rst;
}
 
 
 
 
 
 
 
 
 
 
 
 
/**
* 파일이름을 형식에 맞게 정리하기
*
 
변경 후BoardUtil.php
namespace Bundle\Component\Board;
use Bundle\Component\Captcha\Captcha;
use Origin\Service\Captcha\AltchaService;
use DB;
use Framework\Utility\ArrayUtils;
use Framework\Utility\StringUtils;
return ['code' => '0000', 'msg' => 'Succeed in verifing'];
}
public static function checkCaptcha($captchaKey) {
// ALTCHA payload 가 있으면 ALTCHA 로, 없으면 기존 이미지 캡차로 검증 (하위 호환)
$altchaPayload = Request::post()->get('altcha');
if (!empty($altchaPayload)) {
return \App::getInstance(AltchaService::class)->verify((string) $altchaPayload);
}
$captcha = new Captcha();
$rst = $captcha->verify($captchaKey, 1);
return $rst;
}
/**
* ALTCHA 챌린지 발급 (클라이언트 위젯이 PoW 를 풀기 위해 요청)
*
* ALTCHA v2(KDF) 규격의 challenge 객체를 반환한다. 위젯은 parameters 로 PoW 를 풀고
* signature 로 서버 위조 검증을 통과한다. (⚠️ 표준 classic 위젯이 아니라 v2 규격 위젯 필요)
*
* @return array{parameters: array{algorithm:string, cost:int, keyLength:int, keyPrefix:string, nonce:string, salt:string, expiresAt:int}, signature:string}
*/
public static function getAltchaChallenge() {
return \App::getInstance(AltchaService::class)->createChallenge();
}
/**
* 파일이름을 형식에 맞게 정리하기
*
namespace Bundle\Component\Board;
use Bundle\Component\Captcha\Captcha;
use Origin\Service\Captcha\AltchaService;
use DB;
use Framework\Utility\ArrayUtils;
use Framework\Utility\StringUtils;
return ['code' => '0000', 'msg' => 'Succeed in verifing'];
}
public static function checkCaptcha($captchaKey) {
// ALTCHA payload 가 있으면 ALTCHA 로, 없으면 기존 이미지 캡차로 검증 (하위 호환)
$altchaPayload = Request::post()->get('altcha');
if (!empty($altchaPayload)) {
return \App::getInstance(AltchaService::class)->verify((string) $altchaPayload);
}
$captcha = new Captcha();
$rst = $captcha->verify($captchaKey, 1);
return $rst;
}
/**
* ALTCHA 챌린지 발급 (클라이언트 위젯이 PoW 를 풀기 위해 요청)
*
* ALTCHA v2(KDF) 규격의 challenge 객체를 반환한다. 위젯은 parameters 로 PoW 를 풀고
* signature 로 서버 위조 검증을 통과한다. (⚠️ 표준 classic 위젯이 아니라 v2 규격 위젯 필요)
*
* @return array{parameters: array{algorithm:string, cost:int, keyLength:int, keyPrefix:string, nonce:string, salt:string, expiresAt:int}, signature:string}
*/
public static function getAltchaChallenge() {
return \App::getInstance(AltchaService::class)->createChallenge();
}
/**
* 파일이름을 형식에 맞게 정리하기
*
 
Component/Member/Member.php+20-6
변경 전Member.php
use Bundle\Component\Apple\AppleLogin;
use Bundle\Component\Captcha\Captcha;
use Bundle\Component\Godo\GodoKakaoServerApi;
 
use Bundle\Component\Policy\KakaoLoginPolicy;
use Component\Database\DBTableField;
use Component\Member\Company\CompanyCertification;
$mall = \APP::load('\\Component\\Mall\\Mall');
$joinField = MemberUtil::getJoinField($mall->getSession('sno'));
if ($joinField['captcha']['use'] === 'y') {
$captcha = \App::load(Captcha::class);
$rst = $captcha->verify(strtoupper(gd_isset($params['captchaKey'])), 1);
 
 
 
 
 
 
if ($rst['code'] != '0000') {
throw new Exception(__('자동등록방지 문자가 틀렸습니다.'));
} else {
$session->del('captchaGraph1');
}
use Bundle\Component\Apple\AppleLogin;
use Bundle\Component\Captcha\Captcha;
use Bundle\Component\Godo\GodoKakaoServerApi;
 
use Bundle\Component\Policy\KakaoLoginPolicy;
use Component\Database\DBTableField;
use Component\Member\Company\CompanyCertification;
$mall = \APP::load('\\Component\\Mall\\Mall');
$joinField = MemberUtil::getJoinField($mall->getSession('sno'));
if ($joinField['captcha']['use'] === 'y') {
$captcha = \App::load(Captcha::class);
$rst = $captcha->verify(strtoupper(gd_isset($params['captchaKey'])), 1);
 
 
 
 
 
 
if ($rst['code'] != '0000') {
throw new Exception(__('자동등록방지 문자가 틀렸습니다.'));
} else {
$session->del('captchaGraph1');
}
 
변경 후Member.php
use Bundle\Component\Apple\AppleLogin;
use Bundle\Component\Captcha\Captcha;
use Bundle\Component\Godo\GodoKakaoServerApi;
use Origin\Service\Captcha\AltchaService;
use Bundle\Component\Policy\KakaoLoginPolicy;
use Component\Database\DBTableField;
use Component\Member\Company\CompanyCertification;
$mall = \APP::load('\\Component\\Mall\\Mall');
$joinField = MemberUtil::getJoinField($mall->getSession('sno'));
if ($joinField['captcha']['use'] === 'y') {
// ALTCHA payload 가 있으면 ALTCHA 로, 없으면 기존 이미지 캡차로 검증 (하위 호환)
$altchaPayload = gd_isset($params['altcha']);
if (!empty($altchaPayload)) {
$rst = \App::getInstance(AltchaService::class)->verify((string) $altchaPayload);
} else {
$captcha = \App::load(Captcha::class);
$rst = $captcha->verify(strtoupper(gd_isset($params['captchaKey'])), 1);
}
if ($rst['code'] != '0000') {
throw new Exception(__('자동등록방지 인증에 실패했습니다'));
} else {
$session->del('captchaGraph1');
}
use Bundle\Component\Apple\AppleLogin;
use Bundle\Component\Captcha\Captcha;
use Bundle\Component\Godo\GodoKakaoServerApi;
use Origin\Service\Captcha\AltchaService;
use Bundle\Component\Policy\KakaoLoginPolicy;
use Component\Database\DBTableField;
use Component\Member\Company\CompanyCertification;
$mall = \APP::load('\\Component\\Mall\\Mall');
$joinField = MemberUtil::getJoinField($mall->getSession('sno'));
if ($joinField['captcha']['use'] === 'y') {
// ALTCHA payload 가 있으면 ALTCHA 로, 없으면 기존 이미지 캡차로 검증 (하위 호환)
$altchaPayload = gd_isset($params['altcha']);
if (!empty($altchaPayload)) {
$rst = \App::getInstance(AltchaService::class)->verify((string) $altchaPayload);
} else {
$captcha = \App::load(Captcha::class);
$rst = $captcha->verify(strtoupper(gd_isset($params['captchaKey'])), 1);
}
if ($rst['code'] != '0000') {
throw new Exception(__('자동등록방지 인증에 실패했습니다'));
} else {
$session->del('captchaGraph1');
}
 
Controller/Front/Board/CaptchaController.php+10
변경 전CaptchaController.php
public function index()
{
try {
 
 
 
 
 
$captcha = new Captcha();
 
$db = \App::load('DB');
public function index()
{
try {
 
 
 
 
 
$captcha = new Captcha();
 
$db = \App::load('DB');
 
변경 후CaptchaController.php
public function index()
{
try {
// ALTCHA 위젯이 GET 으로 챌린지를 요청하면 JSON 으로 응답
if (Request::get()->get('mode') === 'altchaChallenge') {
$this->json(\Bundle\Component\Board\BoardUtil::getAltchaChallenge());
}
 
$captcha = new Captcha();
 
$db = \App::load('DB');
public function index()
{
try {
// ALTCHA 위젯이 GET 으로 챌린지를 요청하면 JSON 으로 응답
if (Request::get()->get('mode') === 'altchaChallenge') {
$this->json(\Bundle\Component\Board\BoardUtil::getAltchaChallenge());
}
 
$captcha = new Captcha();
 
$db = \App::load('DB');
 
Controller/Front/Member/CaptchaController.php+12
변경 전CaptchaController.php
namespace Bundle\Controller\Front\Member;
 
use Bundle\Component\Captcha\Captcha;
 
use Request;
 
/**
public function index()
{
try {
 
 
 
 
 
$captcha = new Captcha();
$getData = array();
 
namespace Bundle\Controller\Front\Member;
 
use Bundle\Component\Captcha\Captcha;
 
use Request;
 
/**
public function index()
{
try {
 
 
 
 
 
$captcha = new Captcha();
$getData = array();
 
 
변경 후CaptchaController.php
namespace Bundle\Controller\Front\Member;
 
use Bundle\Component\Captcha\Captcha;
use Origin\Service\Captcha\AltchaService;
use Request;
 
/**
public function index()
{
try {
// ALTCHA 위젯이 GET 으로 챌린지를 요청하면 JSON 으로 응답
if (Request::get()->get('mode') === 'altchaChallenge') {
$this->json(\App::getInstance(AltchaService::class)->createChallenge());
}
 
$captcha = new Captcha();
$getData = array();
 
namespace Bundle\Controller\Front\Member;
 
use Bundle\Component\Captcha\Captcha;
use Origin\Service\Captcha\AltchaService;
use Request;
 
/**
public function index()
{
try {
// ALTCHA 위젯이 GET 으로 챌린지를 요청하면 JSON 으로 응답
if (Request::get()->get('mode') === 'altchaChallenge') {
$this->json(\App::getInstance(AltchaService::class)->createChallenge());
}
 
$captcha = new Captcha();
$getData = array();
 
 
Controller/Front/Member/JoinAgreementController.php+2-4
변경 전JoinAgreementController.php
$wonderLoginPolicy = gd_policy('member.wonderLogin');
if (empty(Session::has(GodoWonderServerApi::SESSION_ACCESS_TOKEN)) === false && $wonderLoginPolicy['useFl'] === 'y' && Request::get()->get('joinType') === 'wonder') {
$snsMemberAuthFl = $chkSNSMemberAuthFl;
$siteLink = new \Component\SiteLink\SiteLink();
$this->setData('joinActionUrl', $siteLink->link('../member/member_ps.php', 'ssl'));
$wonderToken = Session::get(GodoWonderServerApi::SESSION_ACCESS_TOKEN);
$wonderApi = new GodoWonderServerApi();
$userProfile = $wonderApi->getUserProfile($wonderToken);
$wonderLoginPolicy = gd_policy('member.wonderLogin');
if (empty(Session::has(GodoWonderServerApi::SESSION_ACCESS_TOKEN)) === false && $wonderLoginPolicy['useFl'] === 'y' && Request::get()->get('joinType') === 'wonder') {
$snsMemberAuthFl = $chkSNSMemberAuthFl;
$siteLink = new \Component\SiteLink\SiteLink();
$this->setData('joinActionUrl', $siteLink->link('../member/member_ps.php', 'ssl'));
$wonderToken = Session::get(GodoWonderServerApi::SESSION_ACCESS_TOKEN);
$wonderApi = new GodoWonderServerApi();
$userProfile = $wonderApi->getUserProfile($wonderToken);
 
변경 후JoinAgreementController.php
$wonderLoginPolicy = gd_policy('member.wonderLogin');
if (empty(Session::has(GodoWonderServerApi::SESSION_ACCESS_TOKEN)) === false && $wonderLoginPolicy['useFl'] === 'y' && Request::get()->get('joinType') === 'wonder') {
$snsMemberAuthFl = $chkSNSMemberAuthFl;
$this->setData('joinActionUrl', '../member/member_ps.php');
 
$wonderToken = Session::get(GodoWonderServerApi::SESSION_ACCESS_TOKEN);
$wonderApi = new GodoWonderServerApi();
$userProfile = $wonderApi->getUserProfile($wonderToken);
$wonderLoginPolicy = gd_policy('member.wonderLogin');
if (empty(Session::has(GodoWonderServerApi::SESSION_ACCESS_TOKEN)) === false && $wonderLoginPolicy['useFl'] === 'y' && Request::get()->get('joinType') === 'wonder') {
$snsMemberAuthFl = $chkSNSMemberAuthFl;
$this->setData('joinActionUrl', '../member/member_ps.php');
 
$wonderToken = Session::get(GodoWonderServerApi::SESSION_ACCESS_TOKEN);
$wonderApi = new GodoWonderServerApi();
$userProfile = $wonderApi->getUserProfile($wonderToken);
 
Controller/Front/Member/JoinController.php+2-4
변경 전JoinController.php
}
 
 
$siteLink = new \Component\SiteLink\SiteLink();
$this->setData('joinField', \Component\Member\Util\MemberUtil::getJoinField(\Component\Mall\Mall::getSession('sno')));
$this->setData('joinActionUrl', $siteLink->link('../member/member_ps.php', 'ssl'));
$this->setData('data', \Component\Member\Util\MemberUtil::saveJoinInfoBySession($request->post()->all()));
$this->setData('paycoProfile', json_encode($paycoProfile));
$this->setData('isPaycoJoin', !empty($paycoProfile));
}
 
 
$siteLink = new \Component\SiteLink\SiteLink();
$this->setData('joinField', \Component\Member\Util\MemberUtil::getJoinField(\Component\Mall\Mall::getSession('sno')));
$this->setData('joinActionUrl', $siteLink->link('../member/member_ps.php', 'ssl'));
$this->setData('data', \Component\Member\Util\MemberUtil::saveJoinInfoBySession($request->post()->all()));
$this->setData('paycoProfile', json_encode($paycoProfile));
$this->setData('isPaycoJoin', !empty($paycoProfile));
 
변경 후JoinController.php
}
 
 
 
$this->setData('joinField', \Component\Member\Util\MemberUtil::getJoinField(\Component\Mall\Mall::getSession('sno')));
$this->setData('joinActionUrl', '../member/member_ps.php');
$this->setData('data', \Component\Member\Util\MemberUtil::saveJoinInfoBySession($request->post()->all()));
$this->setData('paycoProfile', json_encode($paycoProfile));
$this->setData('isPaycoJoin', !empty($paycoProfile));
}
 
 
 
$this->setData('joinField', \Component\Member\Util\MemberUtil::getJoinField(\Component\Mall\Mall::getSession('sno')));
$this->setData('joinActionUrl', '../member/member_ps.php');
$this->setData('data', \Component\Member\Util\MemberUtil::saveJoinInfoBySession($request->post()->all()));
$this->setData('paycoProfile', json_encode($paycoProfile));
$this->setData('isPaycoJoin', !empty($paycoProfile));
 
Controller/Mobile/Board/CaptchaController.php+10
변경 전CaptchaController.php
public function index()
{
try {
 
 
 
 
 
$captcha = new Captcha();
 
$db = \App::load('DB');
public function index()
{
try {
 
 
 
 
 
$captcha = new Captcha();
 
$db = \App::load('DB');
 
변경 후CaptchaController.php
public function index()
{
try {
// ALTCHA 위젯이 GET 으로 챌린지를 요청하면 JSON 으로 응답
if (Request::get()->get('mode') === 'altchaChallenge') {
$this->json(\Bundle\Component\Board\BoardUtil::getAltchaChallenge());
}
 
$captcha = new Captcha();
 
$db = \App::load('DB');
public function index()
{
try {
// ALTCHA 위젯이 GET 으로 챌린지를 요청하면 JSON 으로 응답
if (Request::get()->get('mode') === 'altchaChallenge') {
$this->json(\Bundle\Component\Board\BoardUtil::getAltchaChallenge());
}
 
$captcha = new Captcha();
 
$db = \App::load('DB');
 
Controller/Mobile/Member/CaptchaController.php+12
변경 전CaptchaController.php
namespace Bundle\Controller\Mobile\Member;
 
use Bundle\Component\Captcha\Captcha;
 
use Request;
 
/**
public function index()
{
try {
 
 
 
 
 
$captcha = new Captcha();
$getData = array();
 
namespace Bundle\Controller\Mobile\Member;
 
use Bundle\Component\Captcha\Captcha;
 
use Request;
 
/**
public function index()
{
try {
 
 
 
 
 
$captcha = new Captcha();
$getData = array();
 
 
변경 후CaptchaController.php
namespace Bundle\Controller\Mobile\Member;
 
use Bundle\Component\Captcha\Captcha;
use Origin\Service\Captcha\AltchaService;
use Request;
 
/**
public function index()
{
try {
// ALTCHA 위젯이 GET 으로 챌린지를 요청하면 JSON 으로 응답
if (Request::get()->get('mode') === 'altchaChallenge') {
$this->json(\App::getInstance(AltchaService::class)->createChallenge());
}
 
$captcha = new Captcha();
$getData = array();
 
namespace Bundle\Controller\Mobile\Member;
 
use Bundle\Component\Captcha\Captcha;
use Origin\Service\Captcha\AltchaService;
use Request;
 
/**
public function index()
{
try {
// ALTCHA 위젯이 GET 으로 챌린지를 요청하면 JSON 으로 응답
if (Request::get()->get('mode') === 'altchaChallenge') {
$this->json(\App::getInstance(AltchaService::class)->createChallenge());
}
 
$captcha = new Captcha();
$getData = array();
 
 
Widget/Front/Share/AltchaWidget.php+58
변경 전AltchaWidget.php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후AltchaWidget.php
<?php
 
/*
* Copyright (C) 2026 NHN COMMERCE. - All Rights Reserved
*
* Unauthorized copying or redistribution of this file in source and binary forms via any medium
* is strictly prohibited.
*/
namespace Bundle\Widget\Front\Share;
 
/**
* Class AltchaWidget
*
* 자동등록방지(ALTCHA) 위젯 공통 파셜(share/_altcha.html) 렌더 진입점.
* 정적 마크업만 출력하며, challenge URL 등은 includeWidget 인자로 setData 되어 파셜에서 사용된다.
*
* @package Bundle\Widget\Front\Share
*/
class AltchaWidget extends \Widget\Front\Widget
{
/**
* @inheritdoc
*/
public function index()
{
// challenge 발급 mode 토큰은 서버 사이드에서 주입
$this->setData('altchaMode', 'altchaChallenge');
}
}
<?php
 
/*
* Copyright (C) 2026 NHN COMMERCE. - All Rights Reserved
*
* Unauthorized copying or redistribution of this file in source and binary forms via any medium
* is strictly prohibited.
*/
namespace Bundle\Widget\Front\Share;
 
/**
* Class AltchaWidget
*
* 자동등록방지(ALTCHA) 위젯 공통 파셜(share/_altcha.html) 렌더 진입점.
* 정적 마크업만 출력하며, challenge URL 등은 includeWidget 인자로 setData 되어 파셜에서 사용된다.
*
* @package Bundle\Widget\Front\Share
*/
class AltchaWidget extends \Widget\Front\Widget
{
/**
* @inheritdoc
*/
public function index()
{
// challenge 발급 mode 토큰은 서버 사이드에서 주입
$this->setData('altchaMode', 'altchaChallenge');
}
}
 
Widget/Mobile/Share/AltchaWidget.php+58
변경 전AltchaWidget.php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후AltchaWidget.php
<?php
 
/*
* Copyright (C) 2026 NHN COMMERCE. - All Rights Reserved
*
* Unauthorized copying or redistribution of this file in source and binary forms via any medium
* is strictly prohibited.
*/
namespace Bundle\Widget\Mobile\Share;
 
/**
* Class AltchaWidget
*
* 자동등록방지(ALTCHA) 위젯 공통 파셜(share/_altcha.html) 렌더 진입점 (모바일).
* 정적 마크업만 출력하며, challenge URL 등은 includeWidget 인자로 setData 되어 파셜에서 사용된다.
*
* @package Bundle\Widget\Mobile\Share
*/
class AltchaWidget extends \Widget\Mobile\Widget
{
/**
* @inheritdoc
*/
public function index()
{
// challenge 발급 mode 토큰은 서버 사이드에서 주입
$this->setData('altchaMode', 'altchaChallenge');
}
}
<?php
 
/*
* Copyright (C) 2026 NHN COMMERCE. - All Rights Reserved
*
* Unauthorized copying or redistribution of this file in source and binary forms via any medium
* is strictly prohibited.
*/
namespace Bundle\Widget\Mobile\Share;
 
/**
* Class AltchaWidget
*
* 자동등록방지(ALTCHA) 위젯 공통 파셜(share/_altcha.html) 렌더 진입점 (모바일).
* 정적 마크업만 출력하며, challenge URL 등은 includeWidget 인자로 setData 되어 파셜에서 사용된다.
*
* @package Bundle\Widget\Mobile\Share
*/
class AltchaWidget extends \Widget\Mobile\Widget
{
/**
* @inheritdoc
*/
public function index()
{
// challenge 발급 mode 토큰은 서버 사이드에서 주입
$this->setData('altchaMode', 'altchaChallenge');
}
}
 
data/skin/front/moment/board/popup_goods_board_write.html+6-28
변경 전popup_goods_board_write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="../board/captcha.php?ch={=time()}" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}" class="va-m"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{ / }-->
}
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<!--{ ? bdWrite.cfg.bdEditorFl == 'y' }-->
<script type="text/javascript">
var editorPath = '{=c.PATH_SKIN}js/smart';
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="../board/captcha.php?ch={=time()}" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}" class="va-m"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{ / }-->
}
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<!--{ ? bdWrite.cfg.bdEditorFl == 'y' }-->
<script type="text/javascript">
var editorPath = '{=c.PATH_SKIN}js/smart';
 
변경 후popup_goods_board_write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
}
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!--{ ? bdWrite.cfg.bdEditorFl == 'y' }-->
<script type="text/javascript">
var editorPath = '{=c.PATH_SKIN}js/smart';
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
}
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!--{ ? bdWrite.cfg.bdEditorFl == 'y' }-->
<script type="text/javascript">
var editorPath = '{=c.PATH_SKIN}js/smart';
 
data/skin/front/moment/board/skin/default/view.html+8-60
변경 전view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
data/skin/front/moment/board/skin/default/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/moment/board/skin/event/view.html+8-60
변경 전view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
data/skin/front/moment/board/skin/event/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/moment/board/skin/gallery/view.html+8-60
변경 전view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
data/skin/front/moment/board/skin/gallery/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/moment/board/skin/qa/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/moment/board/template/default/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/moment/board/template/event/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/moment/board/template/gallery/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/moment/board/template/qa/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/moment/goods/goods_board_review_view.html+4-60
변경 전goods_board_review_view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
 
변경 후goods_board_review_view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
 
data/skin/front/moment/goods/goods_board_write.html+2-28
변경 전goods_board_write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="../board/captcha.php?ch={=time()}" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}" class="va-m"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{ / }-->
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="../board/captcha.php?ch={=time()}" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}" class="va-m"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{ / }-->
 
변경 후goods_board_write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php', 'altchaSrc', 'y')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php', 'altchaSrc', 'y')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
 
data/skin/front/moment/goods/goods_view.html+4
변경 전goods_view.html
<!--//플러스리뷰 레이어 --><div id="writePop" class="layer_wrap plus_review_edit_layer dn"></div>
 
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_goods.js" charset="utf-8"></script>
 
 
 
{=fbGoodsViewScript}
{ # footer }
<!--//플러스리뷰 레이어 --><div id="writePop" class="layer_wrap plus_review_edit_layer dn"></div>
 
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_goods.js" charset="utf-8"></script>
 
 
 
{=fbGoodsViewScript}
{ # footer }
 
변경 후goods_view.html
<!--//플러스리뷰 레이어 --><div id="writePop" class="layer_wrap plus_review_edit_layer dn"></div>
 
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_goods.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
{=fbGoodsViewScript}
{ # footer }
<!--//플러스리뷰 레이어 --><div id="writePop" class="layer_wrap plus_review_edit_layer dn"></div>
 
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_goods.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
{=fbGoodsViewScript}
{ # footer }
 
data/skin/front/moment/js/altcha/altcha.js+3780
변경 전altcha.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후altcha.js
const DEV = false;
var is_array = Array.isArray;
var index_of = Array.prototype.indexOf;
var includes = Array.prototype.includes;
var array_from = Array.from;
var object_keys = Object.keys;
var define_property = Object.defineProperty;
var get_descriptor = Object.getOwnPropertyDescriptor;
var get_descriptors = Object.getOwnPropertyDescriptors;
var object_prototype = Object.prototype;
var array_prototype = Array.prototype;
var get_prototype_of = Object.getPrototypeOf;
var is_extensible = Object.isExtensible;
const noop = () => {
};
function run_all(arr) {
for (var i = 0; i < arr.length; i++) {
arr[i]();
}
}
function deferred() {
var resolve;
var reject;
var promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
return { promise, resolve, reject };
}
const DERIVED = 1 << 1;
const EFFECT = 1 << 2;
const RENDER_EFFECT = 1 << 3;
const MANAGED_EFFECT = 1 << 24;
const BLOCK_EFFECT = 1 << 4;
const BRANCH_EFFECT = 1 << 5;
const ROOT_EFFECT = 1 << 6;
const BOUNDARY_EFFECT = 1 << 7;
const CONNECTED = 1 << 9;
const CLEAN = 1 << 10;
const DIRTY = 1 << 11;
const MAYBE_DIRTY = 1 << 12;
const INERT = 1 << 13;
const DESTROYED = 1 << 14;
const REACTION_RAN = 1 << 15;
const DESTROYING = 1 << 25;
const EFFECT_TRANSPARENT = 1 << 16;
const EAGER_EFFECT = 1 << 17;
const HEAD_EFFECT = 1 << 18;
const EFFECT_PRESERVED = 1 << 19;
const USER_EFFECT = 1 << 20;
const WAS_MARKED = 1 << 16;
const REACTION_IS_UPDATING = 1 << 21;
const ASYNC = 1 << 22;
const ERROR_VALUE = 1 << 23;
const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state");
const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props");
const LOADING_ATTR_SYMBOL = /* @__PURE__ */ Symbol("");
const ATTRIBUTES_CACHE = /* @__PURE__ */ Symbol("attributes");
const CLASS_CACHE = /* @__PURE__ */ Symbol("class");
const STYLE_CACHE = /* @__PURE__ */ Symbol("style");
const TEXT_CACHE = /* @__PURE__ */ Symbol("text");
const FORM_RESET_HANDLER = /* @__PURE__ */ Symbol("form reset");
const STALE_REACTION = new class StaleReactionError extends Error {
name = "StaleReactionError";
message = "The reaction that called `getAbortSignal()` was re-run or destroyed";
}();
const IS_XHTML = (
// We gotta write it like this because after downleveling the pure comment may end up in the wrong location
!!globalThis.document?.contentType && /* @__PURE__ */ globalThis.document.contentType.includes("xml")
);
const TEXT_NODE = 3;
const COMMENT_NODE = 8;
function equals(value) {
return value === this.v;
}
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function safe_equals(value) {
return !safe_not_equal(value, this.v);
}
function lifecycle_outside_component(name) {
{
throw new Error(`https://svelte.dev/e/lifecycle_outside_component`);
}
}
function async_derived_orphan() {
{
throw new Error(`https://svelte.dev/e/async_derived_orphan`);
}
}
function effect_in_teardown(rune) {
{
throw new Error(`https://svelte.dev/e/effect_in_teardown`);
}
}
function effect_in_unowned_derived() {
{
throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`);
}
}
function effect_orphan(rune) {
{
throw new Error(`https://svelte.dev/e/effect_orphan`);
}
}
function effect_update_depth_exceeded() {
{
throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);
}
}
function hydration_failed() {
{
throw new Error(`https://svelte.dev/e/hydration_failed`);
}
}
function state_descriptors_fixed() {
{
throw new Error(`https://svelte.dev/e/state_descriptors_fixed`);
}
}
function state_prototype_fixed() {
{
throw new Error(`https://svelte.dev/e/state_prototype_fixed`);
}
}
function state_unsafe_mutation() {
{
throw new Error(`https://svelte.dev/e/state_unsafe_mutation`);
}
}
function svelte_boundary_reset_onerror() {
{
throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);
}
}
let tracing_mode_flag = false;
const TEMPLATE_FRAGMENT = 1;
const TEMPLATE_USE_IMPORT_NODE = 1 << 1;
const HYDRATION_START = "[";
const HYDRATION_START_ELSE = "[!";
const HYDRATION_START_FAILED = "[?";
const HYDRATION_END = "]";
const HYDRATION_ERROR = {};
const UNINITIALIZED = /* @__PURE__ */ Symbol("uninitialized");
const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml";
const NAMESPACE_SVG = "http://www.w3.org/2000/svg";
const NAMESPACE_MATHML = "http://www.w3.org/1998/Math/MathML";
const ATTACHMENT_KEY = "@attach";
let component_context = null;
function set_component_context(context) {
component_context = context;
}
function push(props, runes = false, fn) {
component_context = {
p: component_context,
i: false,
c: null,
e: null,
s: props,
x: null,
r: (
/** @type {Effect} */
active_effect
),
l: null
};
}
function pop(component2) {
var context = (
/** @type {ComponentContext} */
component_context
);
var effects = context.e;
if (effects !== null) {
context.e = null;
for (var fn of effects) {
create_user_effect(fn);
}
}
if (component2 !== void 0) {
context.x = component2;
}
context.i = true;
component_context = context.p;
return component2 ?? /** @type {T} */
{};
}
function is_runes() {
return true;
}
let micro_tasks = [];
function run_micro_tasks() {
var tasks = micro_tasks;
micro_tasks = [];
run_all(tasks);
}
function queue_micro_task(fn) {
if (micro_tasks.length === 0 && !is_flushing_sync) {
var tasks = micro_tasks;
queueMicrotask(() => {
if (tasks === micro_tasks) run_micro_tasks();
});
}
micro_tasks.push(fn);
}
function flush_tasks() {
while (micro_tasks.length > 0) {
run_micro_tasks();
}
}
function derived_inert() {
{
console.warn(`https://svelte.dev/e/derived_inert`);
}
}
function hydration_mismatch(location2) {
{
console.warn(`https://svelte.dev/e/hydration_mismatch`);
}
}
function select_multiple_invalid_value() {
{
console.warn(`https://svelte.dev/e/select_multiple_invalid_value`);
}
}
function svelte_boundary_reset_noop() {
{
console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);
}
}
let hydrating = false;
function set_hydrating(value) {
hydrating = value;
}
let hydrate_node;
function set_hydrate_node(node) {
if (node === null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return hydrate_node = node;
}
function hydrate_next() {
return set_hydrate_node(/* @__PURE__ */ get_next_sibling(hydrate_node));
}
function reset(node) {
if (!hydrating) return;
if (/* @__PURE__ */ get_next_sibling(hydrate_node) !== null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
hydrate_node = node;
}
function next(count = 1) {
if (hydrating) {
var i = count;
var node = hydrate_node;
while (i--) {
node = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(node);
}
hydrate_node = node;
}
}
function skip_nodes(remove = true) {
var depth = 0;
var node = hydrate_node;
while (true) {
if (node.nodeType === COMMENT_NODE) {
var data = (
/** @type {Comment} */
node.data
);
if (data === HYDRATION_END) {
if (depth === 0) return node;
depth -= 1;
} else if (data === HYDRATION_START || data === HYDRATION_START_ELSE || // "[1", "[2", etc. for if blocks
data[0] === "[" && !isNaN(Number(data.slice(1)))) {
depth += 1;
}
}
var next2 = (
/** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(node)
);
if (remove) node.remove();
node = next2;
}
}
function read_hydration_instruction(node) {
if (!node || node.nodeType !== COMMENT_NODE) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return (
/** @type {Comment} */
node.data
);
}
function proxy(value) {
if (typeof value !== "object" || value === null || STATE_SYMBOL in value) {
return value;
}
const prototype = get_prototype_of(value);
if (prototype !== object_prototype && prototype !== array_prototype) {
return value;
}
var sources = /* @__PURE__ */ new Map();
var is_proxied_array = is_array(value);
var version = /* @__PURE__ */ state(0);
var parent_version = update_version;
var with_parent = (fn) => {
if (update_version === parent_version) {
return fn();
}
var reaction = active_reaction;
var version2 = update_version;
set_active_reaction(null);
set_update_version(parent_version);
var result = fn();
set_active_reaction(reaction);
set_update_version(version2);
return result;
};
if (is_proxied_array) {
sources.set("length", /* @__PURE__ */ state(
/** @type {any[]} */
value.length
));
}
return new Proxy(
/** @type {any} */
value,
{
defineProperty(_, prop2, descriptor) {
if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) {
state_descriptors_fixed();
}
var s = sources.get(prop2);
if (s === void 0) {
with_parent(() => {
var s2 = /* @__PURE__ */ state(descriptor.value);
sources.set(prop2, s2);
return s2;
});
} else {
set(s, descriptor.value, true);
}
return true;
},
deleteProperty(target, prop2) {
var s = sources.get(prop2);
if (s === void 0) {
if (prop2 in target) {
const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
sources.set(prop2, s2);
increment(version);
}
} else {
set(s, UNINITIALIZED);
increment(version);
}
return true;
},
get(target, prop2, receiver) {
if (prop2 === STATE_SYMBOL) {
return value;
}
var s = sources.get(prop2);
var exists = prop2 in target;
if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) {
s = with_parent(() => {
var p = proxy(exists ? target[prop2] : UNINITIALIZED);
var s2 = /* @__PURE__ */ state(p);
return s2;
});
sources.set(prop2, s);
}
if (s !== void 0) {
var v = get(s);
return v === UNINITIALIZED ? void 0 : v;
}
return Reflect.get(target, prop2, receiver);
},
getOwnPropertyDescriptor(target, prop2) {
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor && "value" in descriptor) {
var s = sources.get(prop2);
if (s) descriptor.value = get(s);
} else if (descriptor === void 0) {
var source2 = sources.get(prop2);
var value2 = source2?.v;
if (source2 !== void 0 && value2 !== UNINITIALIZED) {
return {
enumerable: true,
configurable: true,
value: value2,
writable: true
};
}
}
return descriptor;
},
has(target, prop2) {
if (prop2 === STATE_SYMBOL) {
return true;
}
var s = sources.get(prop2);
var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2);
if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) {
if (s === void 0) {
s = with_parent(() => {
var p = has ? proxy(target[prop2]) : UNINITIALIZED;
var s2 = /* @__PURE__ */ state(p);
return s2;
});
sources.set(prop2, s);
}
var value2 = get(s);
if (value2 === UNINITIALIZED) {
return false;
}
}
return has;
},
set(target, prop2, value2, receiver) {
var s = sources.get(prop2);
var has = prop2 in target;
if (is_proxied_array && prop2 === "length") {
for (var i = value2; i < /** @type {Source<number>} */
s.v; i += 1) {
var other_s = sources.get(i + "");
if (other_s !== void 0) {
set(other_s, UNINITIALIZED);
} else if (i in target) {
other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
sources.set(i + "", other_s);
}
}
}
if (s === void 0) {
if (!has || get_descriptor(target, prop2)?.writable) {
s = with_parent(() => /* @__PURE__ */ state(void 0));
set(s, proxy(value2));
sources.set(prop2, s);
}
} else {
has = s.v !== UNINITIALIZED;
var p = with_parent(() => proxy(value2));
set(s, p);
}
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor?.set) {
descriptor.set.call(receiver, value2);
}
if (!has) {
if (is_proxied_array && typeof prop2 === "string") {
var ls = (
/** @type {Source<number>} */
sources.get("length")
);
var n = Number(prop2);
if (Number.isInteger(n) && n >= ls.v) {
set(ls, n + 1);
}
}
increment(version);
}
return true;
},
ownKeys(target) {
get(version);
var own_keys = Reflect.ownKeys(target).filter((key3) => {
var source3 = sources.get(key3);
return source3 === void 0 || source3.v !== UNINITIALIZED;
});
for (var [key2, source2] of sources) {
if (source2.v !== UNINITIALIZED && !(key2 in target)) {
own_keys.push(key2);
}
}
return own_keys;
},
setPrototypeOf() {
state_prototype_fixed();
}
}
);
}
function get_proxied_value(value) {
try {
if (value !== null && typeof value === "object" && STATE_SYMBOL in value) {
return value[STATE_SYMBOL];
}
} catch {
}
return value;
}
function is(a, b) {
return Object.is(get_proxied_value(a), get_proxied_value(b));
}
var $window;
var $document;
var is_firefox;
var first_child_getter;
var next_sibling_getter;
function init_operations() {
if ($window !== void 0) {
return;
}
$window = window;
$document = document;
is_firefox = /Firefox/.test(navigator.userAgent);
var element_prototype = Element.prototype;
var node_prototype = Node.prototype;
var text_prototype = Text.prototype;
first_child_getter = get_descriptor(node_prototype, "firstChild").get;
next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get;
if (is_extensible(element_prototype)) {
element_prototype[CLASS_CACHE] = void 0;
element_prototype[ATTRIBUTES_CACHE] = null;
element_prototype[STYLE_CACHE] = void 0;
element_prototype.__e = void 0;
}
if (is_extensible(text_prototype)) {
text_prototype[TEXT_CACHE] = void 0;
}
}
function create_text(value = "") {
return document.createTextNode(value);
}
// @__NO_SIDE_EFFECTS__
function get_first_child(node) {
return (
/** @type {TemplateNode | null} */
first_child_getter.call(node)
);
}
// @__NO_SIDE_EFFECTS__
function get_next_sibling(node) {
return (
/** @type {TemplateNode | null} */
next_sibling_getter.call(node)
);
}
function child(node, is_text) {
if (!hydrating) {
return /* @__PURE__ */ get_first_child(node);
}
var child2 = /* @__PURE__ */ get_first_child(hydrate_node);
if (child2 === null) {
child2 = hydrate_node.appendChild(create_text());
} else if (is_text && child2.nodeType !== TEXT_NODE) {
var text2 = create_text();
child2?.before(text2);
set_hydrate_node(text2);
return text2;
}
if (is_text) {
merge_text_nodes(
/** @type {Text} */
child2
);
}
set_hydrate_node(child2);
return child2;
}
function first_child(node, is_text = false) {
if (!hydrating) {
var first = /* @__PURE__ */ get_first_child(node);
if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first);
return first;
}
if (is_text) {
if (hydrate_node?.nodeType !== TEXT_NODE) {
var text2 = create_text();
hydrate_node?.before(text2);
set_hydrate_node(text2);
return text2;
}
merge_text_nodes(
/** @type {Text} */
hydrate_node
);
}
return hydrate_node;
}
function sibling(node, count = 1, is_text = false) {
let next_sibling = hydrating ? hydrate_node : node;
var last_sibling;
while (count--) {
last_sibling = next_sibling;
next_sibling = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(next_sibling);
}
if (!hydrating) {
return next_sibling;
}
if (is_text) {
if (next_sibling?.nodeType !== TEXT_NODE) {
var text2 = create_text();
if (next_sibling === null) {
last_sibling?.after(text2);
} else {
next_sibling.before(text2);
}
set_hydrate_node(text2);
return text2;
}
merge_text_nodes(
/** @type {Text} */
next_sibling
);
}
set_hydrate_node(next_sibling);
return next_sibling;
}
function clear_text_content(node) {
node.textContent = "";
}
function should_defer_append() {
return false;
}
function create_element(tag, namespace, is2) {
let options = void 0;
return (
/** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */
document.createElementNS(namespace ?? NAMESPACE_HTML, tag, options)
);
}
function merge_text_nodes(text2) {
if (
/** @type {string} */
text2.nodeValue.length < 65536
) {
return;
}
let next2 = text2.nextSibling;
while (next2 !== null && next2.nodeType === TEXT_NODE) {
next2.remove();
text2.nodeValue += /** @type {string} */
next2.nodeValue;
next2 = text2.nextSibling;
}
}
function handle_error(error) {
var effect2 = active_effect;
if (effect2 === null) {
active_reaction.f |= ERROR_VALUE;
return error;
}
if ((effect2.f & REACTION_RAN) === 0 && (effect2.f & EFFECT) === 0) {
throw error;
}
invoke_error_boundary(error, effect2);
}
function invoke_error_boundary(error, effect2) {
while (effect2 !== null) {
if ((effect2.f & BOUNDARY_EFFECT) !== 0) {
if ((effect2.f & REACTION_RAN) === 0) {
throw error;
}
try {
effect2.b.error(error);
return;
} catch (e) {
error = e;
}
}
effect2 = effect2.parent;
}
throw error;
}
const STATUS_MASK = -7169;
function set_signal_status(signal, status) {
signal.f = signal.f & STATUS_MASK | status;
}
function update_derived_status(derived2) {
if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) {
set_signal_status(derived2, CLEAN);
} else {
set_signal_status(derived2, MAYBE_DIRTY);
}
}
function clear_marked(deps) {
if (deps === null) return;
for (const dep of deps) {
if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {
continue;
}
dep.f ^= WAS_MARKED;
clear_marked(
/** @type {Derived} */
dep.deps
);
}
}
function defer_effect(effect2, dirty_effects, maybe_dirty_effects) {
if ((effect2.f & DIRTY) !== 0) {
dirty_effects.add(effect2);
} else if ((effect2.f & MAYBE_DIRTY) !== 0) {
maybe_dirty_effects.add(effect2);
}
clear_marked(effect2.deps);
set_signal_status(effect2, CLEAN);
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set2(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set2(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set2, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set: set2, update, subscribe };
}
function get$1(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let IS_UNMOUNTED = /* @__PURE__ */ Symbol("unmounted");
function store_get(store2, store_name, stores) {
const entry = stores[store_name] ??= {
store: null,
source: /* @__PURE__ */ mutable_source(void 0),
unsubscribe: noop
};
if (entry.store !== store2 && !(IS_UNMOUNTED in stores)) {
entry.unsubscribe();
entry.store = store2 ?? null;
if (store2 == null) {
entry.source.v = void 0;
entry.unsubscribe = noop;
} else {
var is_synchronous_callback = true;
entry.unsubscribe = subscribe_to_store(store2, (v) => {
if (is_synchronous_callback) {
entry.source.v = v;
} else {
set(entry.source, v);
}
});
is_synchronous_callback = false;
}
}
if (store2 && IS_UNMOUNTED in stores) {
return get$1(store2);
}
return get(entry.source);
}
function setup_stores() {
const stores = {};
function cleanup() {
teardown(() => {
for (var store_name in stores) {
const ref = stores[store_name];
ref.unsubscribe();
}
define_property(stores, IS_UNMOUNTED, {
enumerable: false,
value: true
});
});
}
return [stores, cleanup];
}
let first_batch = null;
let last_batch = null;
let current_batch = null;
let previous_batch = null;
let batch_values = null;
let last_scheduled_effect = null;
let is_flushing_sync = false;
let is_processing = false;
let collected_effects = null;
let legacy_updates = null;
var flush_count = 0;
var source_stacks = /* @__PURE__ */ new Set();
let uid = 1;
class Batch {
id = uid++;
/** True as soon as `#process` was called */
#started = false;
linked = true;
/** @type {Batch | null} */
#prev = null;
/** @type {Batch | null} */
#next = null;
/** @type {Map<Effect, ReturnType<typeof deferred<any>>>} */
async_deriveds = /* @__PURE__ */ new Map();
/**
* The current values of any signals that are updated in this batch.
* Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)
* They keys of this map are identical to `this.#previous`
* @type {Map<Value, [any, boolean]>}
*/
current = /* @__PURE__ */ new Map();
/**
* The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place.
* They keys of this map are identical to `this.#current`
* @type {Map<Value, any>}
*/
previous = /* @__PURE__ */ new Map();
/**
* Async effects which this batch doesn't take into account anymore when calculating blockers,
* as it has a value for it already.
* @type {Set<Effect>}
*/
unblocked = /* @__PURE__ */ new Set();
/**
* When the batch is committed (and the DOM is updated), we need to remove old branches
* and append new ones by calling the functions added inside (if/each/key/etc) blocks
* @type {Set<(batch: Batch) => void>}
*/
#commit_callbacks = /* @__PURE__ */ new Set();
/**
* If a fork is discarded, we need to destroy any effects that are no longer needed
* @type {Set<(batch: Batch) => void>}
*/
#discard_callbacks = /* @__PURE__ */ new Set();
/**
* Callbacks that should run only when a fork is committed.
* @type {Set<(batch: Batch) => void>}
*/
#fork_commit_callbacks = /* @__PURE__ */ new Set();
/**
* The number of async effects that are currently in flight
*/
#pending = 0;
/**
* Async effects that are currently in flight, _not_ inside a pending boundary
* @type {Map<Effect, number>}
*/
#blocking_pending = /* @__PURE__ */ new Map();
/**
* A deferred that resolves when the batch is committed, used with `settled()`
* TODO replace with Promise.withResolvers once supported widely enough
* @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}
*/
#deferred = null;
/**
* The root effects that need to be flushed
* @type {Effect[]}
*/
#roots = [];
/**
* Effects created while this batch was active.
* @type {Effect[]}
*/
#new_effects = [];
/**
* Deferred effects (which run after async work has completed) that are DIRTY
* @type {Set<Effect>}
*/
#dirty_effects = /* @__PURE__ */ new Set();
/**
* Deferred effects that are MAYBE_DIRTY
* @type {Set<Effect>}
*/
#maybe_dirty_effects = /* @__PURE__ */ new Set();
/**
* A map of branches that still exist, but will be destroyed when this batch
* is committed — we skip over these during `process`.
* The value contains child effects that were dirty/maybe_dirty before being reset,
* so they can be rescheduled if the branch survives.
* @type {Map<Effect, { d: Effect[], m: Effect[] }>}
*/
#skipped_branches = /* @__PURE__ */ new Map();
/**
* Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing
* @type {Set<Effect>}
*/
#unskipped_branches = /* @__PURE__ */ new Set();
is_fork = false;
#decrement_queued = false;
#is_deferred() {
if (this.is_fork) return true;
for (const effect2 of this.#blocking_pending.keys()) {
var e = effect2;
var skipped = false;
while (e.parent !== null) {
if (this.#skipped_branches.has(e)) {
skipped = true;
break;
}
e = e.parent;
}
if (!skipped) {
return true;
}
}
return false;
}
/**
* Add an effect to the #skipped_branches map and reset its children
* @param {Effect} effect
*/
skip_effect(effect2) {
if (!this.#skipped_branches.has(effect2)) {
this.#skipped_branches.set(effect2, { d: [], m: [] });
}
this.#unskipped_branches.delete(effect2);
}
/**
* Remove an effect from the #skipped_branches map and reschedule
* any tracked dirty/maybe_dirty child effects
* @param {Effect} effect
* @param {(e: Effect) => void} callback
*/
unskip_effect(effect2, callback = (e) => this.schedule(e)) {
var tracked = this.#skipped_branches.get(effect2);
if (tracked) {
this.#skipped_branches.delete(effect2);
for (var e of tracked.d) {
set_signal_status(e, DIRTY);
callback(e);
}
for (e of tracked.m) {
set_signal_status(e, MAYBE_DIRTY);
callback(e);
}
}
this.#unskipped_branches.add(effect2);
}
#process() {
this.#started = true;
if (flush_count++ > 1e3) {
this.#unlink();
infinite_loop_guard();
}
if (!this.#is_deferred()) {
for (const e of this.#dirty_effects) {
this.#maybe_dirty_effects.delete(e);
set_signal_status(e, DIRTY);
this.schedule(e);
}
for (const e of this.#maybe_dirty_effects) {
set_signal_status(e, MAYBE_DIRTY);
this.schedule(e);
}
}
const roots = this.#roots;
this.#roots = [];
this.apply();
var effects = collected_effects = [];
var render_effects = [];
var updates = legacy_updates = [];
for (const root2 of roots) {
try {
this.#traverse(root2, effects, render_effects);
} catch (e) {
reset_all(root2);
throw e;
}
}
current_batch = null;
if (updates.length > 0) {
var batch = Batch.ensure();
for (const e of updates) {
batch.schedule(e);
}
}
collected_effects = null;
legacy_updates = null;
if (this.#is_deferred()) {
this.#defer_effects(render_effects);
this.#defer_effects(effects);
for (const [e, t] of this.#skipped_branches) {
reset_branch(e, t);
}
if (updates.length > 0) {
/** @type {unknown} */
current_batch.#process();
}
return;
}
const earlier_batch = this.#find_earlier_batch();
if (earlier_batch) {
earlier_batch.#merge(this);
return;
}
this.#dirty_effects.clear();
this.#maybe_dirty_effects.clear();
for (const fn of this.#commit_callbacks) fn(this);
this.#commit_callbacks.clear();
previous_batch = this;
flush_queued_effects(render_effects);
flush_queued_effects(effects);
previous_batch = null;
this.#deferred?.resolve();
var next_batch = (
/** @type {Batch | null} */
/** @type {unknown} */
current_batch
);
if (this.linked && this.#pending === 0) {
this.#unlink();
}
if (this.#roots.length > 0) {
if (next_batch === null) {
next_batch = this;
this.#link();
}
const batch2 = next_batch;
batch2.#roots.push(...this.#roots.filter((r2) => !batch2.#roots.includes(r2)));
}
if (next_batch !== null) {
next_batch.#process();
}
}
/**
* Traverse the effect tree, executing effects or stashing
* them for later execution as appropriate
* @param {Effect} root
* @param {Effect[]} effects
* @param {Effect[]} render_effects
*/
#traverse(root2, effects, render_effects) {
root2.f ^= CLEAN;
var effect2 = root2.first;
while (effect2 !== null) {
var flags2 = effect2.f;
var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;
var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0;
var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.#skipped_branches.has(effect2);
if (!skip && effect2.fn !== null) {
if (is_branch) {
effect2.f ^= CLEAN;
} else if ((flags2 & EFFECT) !== 0) {
effects.push(effect2);
} else if (is_dirty(effect2)) {
if ((flags2 & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect2);
update_effect(effect2);
}
var child2 = effect2.first;
if (child2 !== null) {
effect2 = child2;
continue;
}
}
while (effect2 !== null) {
var next2 = effect2.next;
if (next2 !== null) {
effect2 = next2;
break;
}
effect2 = effect2.parent;
}
}
}
#find_earlier_batch() {
var batch = this.#prev;
while (batch !== null) {
if (!batch.is_fork) {
for (const [value, [, is_derived]] of this.current) {
if (batch.current.has(value) && !is_derived) {
return batch;
}
}
}
batch = batch.#prev;
}
return null;
}
/**
* @param {Batch} batch
*/
#merge(batch) {
for (const [source2, value] of batch.current) {
if (!this.previous.has(source2) && batch.previous.has(source2)) {
this.previous.set(source2, batch.previous.get(source2));
}
this.current.set(source2, value);
}
for (const [effect2, deferred2] of batch.async_deriveds) {
const d = this.async_deriveds.get(effect2);
if (d) deferred2.promise.then(d.resolve);
}
const mark = (value) => {
var reactions = value.reactions;
if (reactions === null) return;
for (const reaction of reactions) {
var flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark(
/** @type {Derived} */
reaction
);
} else {
var effect2 = (
/** @type {Effect} */
reaction
);
if (flags2 & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect2)) {
this.#maybe_dirty_effects.delete(effect2);
set_signal_status(effect2, DIRTY);
this.schedule(effect2);
}
}
}
};
for (const source2 of this.current.keys()) {
mark(source2);
}
this.oncommit(() => batch.discard());
batch.#unlink();
current_batch = this;
this.#process();
}
/**
* @param {Effect[]} effects
*/
#defer_effects(effects) {
for (var i = 0; i < effects.length; i += 1) {
defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);
}
}
/**
* Associate a change to a given source with the current
* batch, noting its previous and current values
* @param {Value} source
* @param {any} value
* @param {boolean} [is_derived]
*/
capture(source2, value, is_derived = false) {
if (source2.v !== UNINITIALIZED && !this.previous.has(source2)) {
this.previous.set(source2, source2.v);
}
if ((source2.f & ERROR_VALUE) === 0) {
this.current.set(source2, [value, is_derived]);
batch_values?.set(source2, value);
}
if (!this.is_fork) {
source2.v = value;
}
}
activate() {
current_batch = this;
}
deactivate() {
current_batch = null;
batch_values = null;
}
flush() {
try {
if (DEV) ;
is_processing = true;
current_batch = this;
this.#process();
} finally {
flush_count = 0;
last_scheduled_effect = null;
collected_effects = null;
legacy_updates = null;
is_processing = false;
current_batch = null;
batch_values = null;
old_values.clear();
}
}
discard() {
for (const fn of this.#discard_callbacks) fn(this);
this.#discard_callbacks.clear();
this.#fork_commit_callbacks.clear();
this.#unlink();
}
/**
* @param {Effect} effect
*/
register_created_effect(effect2) {
this.#new_effects.push(effect2);
}
#commit() {
this.#unlink();
for (let batch = first_batch; batch !== null; batch = batch.#next) {
var is_earlier = batch.id < this.id;
var sources = [];
for (const [source3, [value, is_derived]] of this.current) {
if (batch.current.has(source3)) {
var batch_value = (
/** @type {[any, boolean]} */
batch.current.get(source3)[0]
);
if (is_earlier && value !== batch_value) {
batch.current.set(source3, [value, is_derived]);
} else {
continue;
}
}
sources.push(source3);
}
if (is_earlier) {
for (const [effect2, deferred2] of this.async_deriveds) {
const d = batch.async_deriveds.get(effect2);
if (d) deferred2.promise.then(d.resolve);
}
}
if (!batch.#started) continue;
var others = [...batch.current.keys()].filter((s) => !this.current.has(s));
if (others.length === 0) {
if (is_earlier) {
batch.discard();
}
} else if (sources.length > 0) {
if (is_earlier) {
for (const unskipped of this.#unskipped_branches) {
batch.unskip_effect(unskipped, (e) => {
if ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) {
batch.schedule(e);
} else {
batch.#defer_effects([e]);
}
});
}
}
batch.activate();
var marked = /* @__PURE__ */ new Set();
var checked = /* @__PURE__ */ new Map();
for (var source2 of sources) {
mark_effects(source2, others, marked, checked);
}
checked = /* @__PURE__ */ new Map();
var current_unequal = [...batch.current.keys()].filter(
(c) => this.current.has(c) ? (
/** @type {[any, boolean]} */
this.current.get(c)[0] !== c.v
) : true
);
if (current_unequal.length > 0) {
for (const effect2 of this.#new_effects) {
if ((effect2.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 && depends_on(effect2, current_unequal, checked)) {
if ((effect2.f & (ASYNC | BLOCK_EFFECT)) !== 0) {
set_signal_status(effect2, DIRTY);
batch.schedule(effect2);
} else {
batch.#dirty_effects.add(effect2);
}
}
}
}
if (batch.#roots.length > 0) {
batch.apply();
for (var root2 of batch.#roots) {
batch.#traverse(root2, [], []);
}
batch.#roots = [];
}
batch.deactivate();
}
}
}
/**
* @param {boolean} blocking
* @param {Effect} effect
*/
increment(blocking, effect2) {
this.#pending += 1;
if (blocking) {
let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0;
this.#blocking_pending.set(effect2, blocking_pending_count + 1);
}
}
/**
* @param {boolean} blocking
* @param {Effect} effect
*/
decrement(blocking, effect2) {
this.#pending -= 1;
if (blocking) {
let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0;
if (blocking_pending_count === 1) {
this.#blocking_pending.delete(effect2);
} else {
this.#blocking_pending.set(effect2, blocking_pending_count - 1);
}
}
if (this.#decrement_queued) return;
this.#decrement_queued = true;
queue_micro_task(() => {
this.#decrement_queued = false;
if (this.linked) {
this.flush();
}
});
}
/**
* @param {Set<Effect>} dirty_effects
* @param {Set<Effect>} maybe_dirty_effects
*/
transfer_effects(dirty_effects, maybe_dirty_effects) {
for (const e of dirty_effects) {
this.#dirty_effects.add(e);
}
for (const e of maybe_dirty_effects) {
this.#maybe_dirty_effects.add(e);
}
dirty_effects.clear();
maybe_dirty_effects.clear();
}
/** @param {(batch: Batch) => void} fn */
oncommit(fn) {
this.#commit_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
ondiscard(fn) {
this.#discard_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
on_fork_commit(fn) {
this.#fork_commit_callbacks.add(fn);
}
run_fork_commit_callbacks() {
for (const fn of this.#fork_commit_callbacks) fn(this);
this.#fork_commit_callbacks.clear();
}
settled() {
return (this.#deferred ??= deferred()).promise;
}
static ensure() {
if (current_batch === null) {
const batch = current_batch = new Batch();
batch.#link();
if (!is_processing && !is_flushing_sync) {
queue_micro_task(() => {
if (!batch.#started) {
batch.flush();
}
});
}
}
return current_batch;
}
apply() {
{
batch_values = null;
return;
}
}
/**
*
* @param {Effect} effect
*/
schedule(effect2) {
last_scheduled_effect = effect2;
if (effect2.b?.is_pending && (effect2.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect2.f & REACTION_RAN) === 0) {
effect2.b.defer_effect(effect2);
return;
}
var e = effect2;
while (e.parent !== null) {
e = e.parent;
var flags2 = e.f;
if (collected_effects !== null && e === active_effect) {
if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) {
return;
}
}
if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {
if ((flags2 & CLEAN) === 0) {
return;
}
e.f ^= CLEAN;
}
}
this.#roots.push(e);
}
#link() {
if (last_batch === null) {
first_batch = last_batch = this;
} else {
last_batch.#next = this;
this.#prev = last_batch;
}
last_batch = this;
}
#unlink() {
var prev = this.#prev;
var next2 = this.#next;
if (prev === null) {
first_batch = next2;
} else {
prev.#next = next2;
}
if (next2 === null) {
last_batch = prev;
} else {
next2.#prev = prev;
}
this.linked = false;
}
}
function flushSync(fn) {
var was_flushing_sync = is_flushing_sync;
is_flushing_sync = true;
try {
var result;
if (fn) ;
while (true) {
flush_tasks();
if (current_batch === null) {
return (
/** @type {T} */
result
);
}
current_batch.flush();
}
} finally {
is_flushing_sync = was_flushing_sync;
}
}
function infinite_loop_guard() {
try {
effect_update_depth_exceeded();
} catch (error) {
invoke_error_boundary(error, last_scheduled_effect);
}
}
let eager_block_effects = null;
function flush_queued_effects(effects) {
var length = effects.length;
if (length === 0) return;
var i = 0;
while (i < length) {
var effect2 = effects[i++];
if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) {
eager_block_effects = /* @__PURE__ */ new Set();
update_effect(effect2);
if (effect2.deps === null && effect2.first === null && effect2.nodes === null && effect2.teardown === null && effect2.ac === null) {
unlink_effect(effect2);
}
if (eager_block_effects?.size > 0) {
old_values.clear();
for (const e of eager_block_effects) {
if ((e.f & (DESTROYED | INERT)) !== 0) continue;
const ordered_effects = [e];
let ancestor = e.parent;
while (ancestor !== null) {
if (eager_block_effects.has(ancestor)) {
eager_block_effects.delete(ancestor);
ordered_effects.push(ancestor);
}
ancestor = ancestor.parent;
}
for (let j = ordered_effects.length - 1; j >= 0; j--) {
const e2 = ordered_effects[j];
if ((e2.f & (DESTROYED | INERT)) !== 0) continue;
update_effect(e2);
}
}
eager_block_effects.clear();
}
}
}
eager_block_effects = null;
}
function mark_effects(value, sources, marked, checked) {
if (marked.has(value)) return;
marked.add(value);
if (value.reactions !== null) {
for (const reaction of value.reactions) {
const flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark_effects(
/** @type {Derived} */
reaction,
sources,
marked,
checked
);
} else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) {
set_signal_status(reaction, DIRTY);
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
}
function depends_on(reaction, sources, checked) {
const depends = checked.get(reaction);
if (depends !== void 0) return depends;
if (reaction.deps !== null) {
for (const dep of reaction.deps) {
if (includes.call(sources, dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on(
/** @type {Derived} */
dep,
sources,
checked
)) {
checked.set(
/** @type {Derived} */
dep,
true
);
return true;
}
}
}
checked.set(reaction, false);
return false;
}
function schedule_effect(effect2) {
current_batch.schedule(effect2);
}
function reset_branch(effect2, tracked) {
if ((effect2.f & BRANCH_EFFECT) !== 0 && (effect2.f & CLEAN) !== 0) {
return;
}
if ((effect2.f & DIRTY) !== 0) {
tracked.d.push(effect2);
} else if ((effect2.f & MAYBE_DIRTY) !== 0) {
tracked.m.push(effect2);
}
set_signal_status(effect2, CLEAN);
var e = effect2.first;
while (e !== null) {
reset_branch(e, tracked);
e = e.next;
}
}
function reset_all(effect2) {
set_signal_status(effect2, CLEAN);
var e = effect2.first;
while (e !== null) {
reset_all(e);
e = e.next;
}
}
function createSubscriber(start) {
let subscribers = 0;
let version = source(0);
let stop;
return () => {
if (effect_tracking()) {
get(version);
render_effect(() => {
if (subscribers === 0) {
stop = untrack(() => start(() => increment(version)));
}
subscribers += 1;
return () => {
queue_micro_task(() => {
subscribers -= 1;
if (subscribers === 0) {
stop?.();
stop = void 0;
increment(version);
}
});
};
});
}
};
}
var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;
function boundary(node, props, children, transform_error) {
new Boundary(node, props, children, transform_error);
}
class Boundary {
/** @type {Boundary | null} */
parent;
is_pending = false;
/**
* API-level transformError transform function. Transforms errors before they reach the `failed` snippet.
* Inherited from parent boundary, or defaults to identity.
* @type {(error: unknown) => unknown}
*/
transform_error;
/** @type {TemplateNode} */
#anchor;
/** @type {TemplateNode | null} */
#hydrate_open = hydrating ? hydrate_node : null;
/** @type {BoundaryProps} */
#props;
/** @type {((anchor: Node) => void)} */
#children;
/** @type {Effect} */
#effect;
/** @type {Effect | null} */
#main_effect = null;
/** @type {Effect | null} */
#pending_effect = null;
/** @type {Effect | null} */
#failed_effect = null;
/** @type {DocumentFragment | null} */
#offscreen_fragment = null;
#local_pending_count = 0;
#pending_count = 0;
#pending_count_update_queued = false;
/** @type {Set<Effect>} */
#dirty_effects = /* @__PURE__ */ new Set();
/** @type {Set<Effect>} */
#maybe_dirty_effects = /* @__PURE__ */ new Set();
/**
* A source containing the number of pending async deriveds/expressions.
* Only created if `$effect.pending()` is used inside the boundary,
* otherwise updating the source results in needless `Batch.ensure()`
* calls followed by no-op flushes
* @type {Source<number> | null}
*/
#effect_pending = null;
#effect_pending_subscriber = createSubscriber(() => {
this.#effect_pending = source(this.#local_pending_count);
return () => {
this.#effect_pending = null;
};
});
/**
* @param {TemplateNode} node
* @param {BoundaryProps} props
* @param {((anchor: Node) => void)} children
* @param {((error: unknown) => unknown) | undefined} [transform_error]
*/
constructor(node, props, children, transform_error) {
this.#anchor = node;
this.#props = props;
this.#children = (anchor) => {
var effect2 = (
/** @type {Effect} */
active_effect
);
effect2.b = this;
effect2.f |= BOUNDARY_EFFECT;
children(anchor);
};
this.parent = /** @type {Effect} */
active_effect.b;
this.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e);
this.#effect = block(() => {
if (hydrating) {
const comment2 = (
/** @type {Comment} */
this.#hydrate_open
);
hydrate_next();
const server_rendered_pending = comment2.data === HYDRATION_START_ELSE;
const server_rendered_failed = comment2.data.startsWith(HYDRATION_START_FAILED);
if (server_rendered_failed) {
const serialized_error = JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length));
this.#hydrate_failed_content(serialized_error);
} else if (server_rendered_pending) {
this.#hydrate_pending_content();
} else {
this.#hydrate_resolved_content();
}
} else {
this.#render();
}
}, flags);
if (hydrating) {
this.#anchor = hydrate_node;
}
}
#hydrate_resolved_content() {
try {
this.#main_effect = branch(() => this.#children(this.#anchor));
} catch (error) {
this.error(error);
}
}
/**
* @param {unknown} error The deserialized error from the server's hydration comment
*/
#hydrate_failed_content(error) {
const failed = this.#props.failed;
if (!failed) return;
this.#failed_effect = branch(() => {
failed(
this.#anchor,
() => error,
() => () => {
}
);
});
}
#hydrate_pending_content() {
const pending = this.#props.pending;
if (!pending) return;
this.is_pending = true;
this.#pending_effect = branch(() => pending(this.#anchor));
queue_micro_task(() => {
var fragment = this.#offscreen_fragment = document.createDocumentFragment();
var anchor = create_text();
fragment.append(anchor);
this.#main_effect = this.#run(() => {
return branch(() => this.#children(anchor));
});
if (this.#pending_count === 0) {
this.#anchor.before(fragment);
this.#offscreen_fragment = null;
pause_effect(
/** @type {Effect} */
this.#pending_effect,
() => {
this.#pending_effect = null;
}
);
this.#resolve(
/** @type {Batch} */
current_batch
);
}
});
}
#render() {
try {
this.is_pending = this.has_pending_snippet();
this.#pending_count = 0;
this.#local_pending_count = 0;
this.#main_effect = branch(() => {
this.#children(this.#anchor);
});
if (this.#pending_count > 0) {
var fragment = this.#offscreen_fragment = document.createDocumentFragment();
move_effect(this.#main_effect, fragment);
const pending = (
/** @type {(anchor: Node) => void} */
this.#props.pending
);
this.#pending_effect = branch(() => pending(this.#anchor));
} else {
this.#resolve(
/** @type {Batch} */
current_batch
);
}
} catch (error) {
this.error(error);
}
}
/**
* @param {Batch} batch
*/
#resolve(batch) {
this.is_pending = false;
batch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects);
}
/**
* Defer an effect inside a pending boundary until the boundary resolves
* @param {Effect} effect
*/
defer_effect(effect2) {
defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects);
}
/**
* Returns `false` if the effect exists inside a boundary whose pending snippet is shown
* @returns {boolean}
*/
is_rendered() {
return !this.is_pending && (!this.parent || this.parent.is_rendered());
}
has_pending_snippet() {
return !!this.#props.pending;
}
/**
* @template T
* @param {() => T} fn
*/
#run(fn) {
var previous_effect = active_effect;
var previous_reaction = active_reaction;
var previous_ctx = component_context;
set_active_effect(this.#effect);
set_active_reaction(this.#effect);
set_component_context(this.#effect.ctx);
try {
Batch.ensure();
return fn();
} catch (e) {
handle_error(e);
return null;
} finally {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_ctx);
}
}
/**
* Updates the pending count associated with the currently visible pending snippet,
* if any, such that we can replace the snippet with content once work is done
* @param {1 | -1} d
* @param {Batch} batch
*/
#update_pending_count(d, batch) {
if (!this.has_pending_snippet()) {
if (this.parent) {
this.parent.#update_pending_count(d, batch);
}
return;
}
this.#pending_count += d;
if (this.#pending_count === 0) {
this.#resolve(batch);
if (this.#pending_effect) {
pause_effect(this.#pending_effect, () => {
this.#pending_effect = null;
});
}
if (this.#offscreen_fragment) {
this.#anchor.before(this.#offscreen_fragment);
this.#offscreen_fragment = null;
}
}
}
/**
* Update the source that powers `$effect.pending()` inside this boundary,
* and controls when the current `pending` snippet (if any) is removed.
* Do not call from inside the class
* @param {1 | -1} d
* @param {Batch} batch
*/
update_pending_count(d, batch) {
this.#update_pending_count(d, batch);
this.#local_pending_count += d;
if (!this.#effect_pending || this.#pending_count_update_queued) return;
this.#pending_count_update_queued = true;
queue_micro_task(() => {
this.#pending_count_update_queued = false;
if (this.#effect_pending) {
internal_set(this.#effect_pending, this.#local_pending_count);
}
});
}
get_effect_pending() {
this.#effect_pending_subscriber();
return get(
/** @type {Source<number>} */
this.#effect_pending
);
}
/** @param {unknown} error */
error(error) {
if (!this.#props.onerror && !this.#props.failed) {
throw error;
}
if (current_batch?.is_fork) {
if (this.#main_effect) current_batch.skip_effect(this.#main_effect);
if (this.#pending_effect) current_batch.skip_effect(this.#pending_effect);
if (this.#failed_effect) current_batch.skip_effect(this.#failed_effect);
current_batch.on_fork_commit(() => {
this.#handle_error(error);
});
} else {
this.#handle_error(error);
}
}
/**
* @param {unknown} error
*/
#handle_error(error) {
if (this.#main_effect) {
destroy_effect(this.#main_effect);
this.#main_effect = null;
}
if (this.#pending_effect) {
destroy_effect(this.#pending_effect);
this.#pending_effect = null;
}
if (this.#failed_effect) {
destroy_effect(this.#failed_effect);
this.#failed_effect = null;
}
if (hydrating) {
set_hydrate_node(
/** @type {TemplateNode} */
this.#hydrate_open
);
next();
set_hydrate_node(skip_nodes());
}
var onerror = this.#props.onerror;
let failed = this.#props.failed;
var did_reset = false;
var calling_on_error = false;
const reset2 = () => {
if (did_reset) {
svelte_boundary_reset_noop();
return;
}
did_reset = true;
if (calling_on_error) {
svelte_boundary_reset_onerror();
}
if (this.#failed_effect !== null) {
pause_effect(this.#failed_effect, () => {
this.#failed_effect = null;
});
}
this.#run(() => {
this.#render();
});
};
const handle_error_result = (transformed_error) => {
try {
calling_on_error = true;
onerror?.(transformed_error, reset2);
calling_on_error = false;
} catch (error2) {
invoke_error_boundary(error2, this.#effect && this.#effect.parent);
}
if (failed) {
this.#failed_effect = this.#run(() => {
try {
return branch(() => {
var effect2 = (
/** @type {Effect} */
active_effect
);
effect2.b = this;
effect2.f |= BOUNDARY_EFFECT;
failed(
this.#anchor,
() => transformed_error,
() => reset2
);
});
} catch (error2) {
invoke_error_boundary(
error2,
/** @type {Effect} */
this.#effect.parent
);
return null;
}
});
}
};
queue_micro_task(() => {
var result;
try {
result = this.transform_error(error);
} catch (e) {
invoke_error_boundary(e, this.#effect && this.#effect.parent);
return;
}
if (result !== null && typeof result === "object" && typeof /** @type {any} */
result.then === "function") {
result.then(
handle_error_result,
/** @param {unknown} e */
(e) => invoke_error_boundary(e, this.#effect && this.#effect.parent)
);
} else {
handle_error_result(result);
}
});
}
}
function flatten(blockers, sync, async, fn) {
const d = derived;
var pending = blockers.filter((b) => !b.settled);
if (async.length === 0 && pending.length === 0) {
fn(sync.map(d));
return;
}
var parent = (
/** @type {Effect} */
active_effect
);
var restore = capture();
var blocker_promise = pending.length === 1 ? pending[0].promise : pending.length > 1 ? Promise.all(pending.map((b) => b.promise)) : null;
function finish(values) {
if ((parent.f & DESTROYED) !== 0) {
return;
}
restore();
try {
fn(values);
} catch (error) {
invoke_error_boundary(error, parent);
}
unset_context();
}
var decrement_pending = increment_pending();
if (async.length === 0) {
blocker_promise.then(() => finish(sync.map(d))).finally(decrement_pending);
return;
}
function run() {
Promise.all(async.map((expression) => /* @__PURE__ */ async_derived(expression))).then((result) => finish([...sync.map(d), ...result])).catch((error) => invoke_error_boundary(error, parent)).finally(decrement_pending);
}
if (blocker_promise) {
blocker_promise.then(() => {
restore();
run();
unset_context();
});
} else {
run();
}
}
function capture() {
var previous_effect = (
/** @type {Effect} */
active_effect
);
var previous_reaction = active_reaction;
var previous_component_context = component_context;
var previous_batch2 = (
/** @type {Batch} */
current_batch
);
return function restore(activate_batch = true) {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_component_context);
if (activate_batch && (previous_effect.f & DESTROYED) === 0) {
previous_batch2?.activate();
previous_batch2?.apply();
}
};
}
function unset_context(deactivate_batch = true) {
set_active_effect(null);
set_active_reaction(null);
set_component_context(null);
if (deactivate_batch) current_batch?.deactivate();
}
function increment_pending() {
var effect2 = (
/** @type {Effect} */
active_effect
);
var boundary2 = (
/** @type {Boundary} */
effect2.b
);
var batch = (
/** @type {Batch} */
current_batch
);
var blocking = boundary2.is_rendered();
boundary2.update_pending_count(1, batch);
batch.increment(blocking, effect2);
return () => {
boundary2.update_pending_count(-1, batch);
batch.decrement(blocking, effect2);
};
}
// @__NO_SIDE_EFFECTS__
function derived(fn) {
var flags2 = DERIVED | DIRTY;
if (active_effect !== null) {
active_effect.f |= EFFECT_PRESERVED;
}
const signal = {
ctx: component_context,
deps: null,
effects: null,
equals,
f: flags2,
fn,
reactions: null,
rv: 0,
v: (
/** @type {V} */
UNINITIALIZED
),
wv: 0,
parent: active_effect,
ac: null
};
return signal;
}
const OBSOLETE = /* @__PURE__ */ Symbol("obsolete");
// @__NO_SIDE_EFFECTS__
function async_derived(fn, label, location2) {
let parent = (
/** @type {Effect | null} */
active_effect
);
if (parent === null) {
async_derived_orphan();
}
var promise = (
/** @type {Promise<V>} */
/** @type {unknown} */
void 0
);
var signal = source(
/** @type {V} */
UNINITIALIZED
);
var should_suspend = !active_reaction;
var deferreds = /* @__PURE__ */ new Set();
async_effect(() => {
var effect2 = (
/** @type {Effect} */
active_effect
);
var d = deferred();
promise = d.promise;
try {
Promise.resolve(fn()).then(d.resolve, (e) => {
if (e !== STALE_REACTION) d.reject(e);
}).finally(unset_context);
} catch (error) {
d.reject(error);
unset_context();
}
var batch = (
/** @type {Batch} */
current_batch
);
if (should_suspend) {
if ((effect2.f & REACTION_RAN) !== 0) {
var decrement_pending = increment_pending();
}
if (
/** @type {Boundary} */
parent.b.is_rendered()
) {
batch.async_deriveds.get(effect2)?.reject(OBSOLETE);
} else {
for (const d2 of deferreds.values()) {
d2.reject(OBSOLETE);
}
}
deferreds.add(d);
batch.async_deriveds.set(effect2, d);
}
const handler = (value, error = void 0) => {
decrement_pending?.();
deferreds.delete(d);
if (error === OBSOLETE) return;
batch.activate();
if (error) {
signal.f |= ERROR_VALUE;
internal_set(signal, error);
} else {
if ((signal.f & ERROR_VALUE) !== 0) {
signal.f ^= ERROR_VALUE;
}
internal_set(signal, value);
}
batch.deactivate();
};
d.promise.then(handler, (e) => handler(null, e || "unknown"));
});
teardown(() => {
for (const d of deferreds) {
d.reject(OBSOLETE);
}
});
return new Promise((fulfil) => {
function next2(p) {
function go() {
if (p === promise) {
fulfil(signal);
} else {
next2(promise);
}
}
p.then(go, go);
}
next2(promise);
});
}
// @__NO_SIDE_EFFECTS__
function user_derived(fn) {
const d = /* @__PURE__ */ derived(fn);
push_reaction_value(d);
return d;
}
function destroy_derived_effects(derived2) {
var effects = derived2.effects;
if (effects !== null) {
derived2.effects = null;
for (var i = 0; i < effects.length; i += 1) {
destroy_effect(
/** @type {Effect} */
effects[i]
);
}
}
}
function execute_derived(derived2) {
var value;
var prev_active_effect = active_effect;
var parent = derived2.parent;
if (!is_destroying_effect && parent !== null && derived2.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead
(parent.f & (DESTROYED | INERT)) !== 0) {
derived_inert();
return derived2.v;
}
set_active_effect(parent);
{
try {
derived2.f &= ~WAS_MARKED;
destroy_derived_effects(derived2);
value = update_reaction(derived2);
} finally {
set_active_effect(prev_active_effect);
}
}
return value;
}
function update_derived(derived2) {
var value = execute_derived(derived2);
if (!derived2.equals(value)) {
derived2.wv = increment_write_version();
if (!current_batch?.is_fork || derived2.deps === null) {
if (current_batch !== null) {
current_batch.capture(derived2, value, true);
previous_batch?.capture(derived2, value, true);
} else {
derived2.v = value;
}
if (derived2.deps === null) {
set_signal_status(derived2, CLEAN);
return;
}
}
}
if (is_destroying_effect) {
return;
}
if (batch_values !== null) {
if (effect_tracking() || current_batch?.is_fork) {
batch_values.set(derived2, value);
}
} else {
update_derived_status(derived2);
}
}
function freeze_derived_effects(derived2) {
if (derived2.effects === null) return;
for (const e of derived2.effects) {
if (e.teardown || e.ac) {
e.teardown?.();
e.ac?.abort(STALE_REACTION);
if (e.fn !== null) e.teardown = noop;
e.ac = null;
remove_reactions(e, 0);
destroy_effect_children(e);
}
}
}
function unfreeze_derived_effects(derived2) {
if (derived2.effects === null) return;
for (const e of derived2.effects) {
if (e.teardown && e.fn !== null) {
update_effect(e);
}
}
}
let eager_effects = /* @__PURE__ */ new Set();
const old_values = /* @__PURE__ */ new Map();
let eager_effects_deferred = false;
function source(v, stack) {
var signal = {
f: 0,
// TODO ideally we could skip this altogether, but it causes type errors
v,
reactions: null,
equals,
rv: 0,
wv: 0
};
return signal;
}
// @__NO_SIDE_EFFECTS__
function state(v, stack) {
const s = source(v);
push_reaction_value(s);
return s;
}
// @__NO_SIDE_EFFECTS__
function mutable_source(initial_value, immutable = false, trackable = true) {
const s = source(initial_value);
if (!immutable) {
s.equals = safe_equals;
}
return s;
}
function set(source2, value, should_proxy = false) {
if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check
// to ensure we error if state is set inside an inspect effect
(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) {
state_unsafe_mutation();
}
let new_value = should_proxy ? proxy(value) : value;
return internal_set(source2, new_value, legacy_updates);
}
function internal_set(source2, value, updated_during_traversal = null) {
if (!source2.equals(value)) {
old_values.set(source2, is_destroying_effect ? value : source2.v);
var batch = Batch.ensure();
batch.capture(source2, value);
if ((source2.f & DERIVED) !== 0) {
const derived2 = (
/** @type {Derived} */
source2
);
if ((source2.f & DIRTY) !== 0) {
execute_derived(derived2);
}
if (batch_values === null) {
update_derived_status(derived2);
}
}
source2.wv = increment_write_version();
mark_reactions(source2, DIRTY, updated_during_traversal);
if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) {
if (untracked_writes === null) {
set_untracked_writes([source2]);
} else {
untracked_writes.push(source2);
}
}
if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {
flush_eager_effects();
}
}
return value;
}
function flush_eager_effects() {
eager_effects_deferred = false;
for (const effect2 of eager_effects) {
if ((effect2.f & CLEAN) !== 0) {
set_signal_status(effect2, MAYBE_DIRTY);
}
let dirty;
try {
dirty = is_dirty(effect2);
} catch {
dirty = true;
}
if (dirty) {
update_effect(effect2);
}
}
eager_effects.clear();
}
function increment(source2) {
set(source2, source2.v + 1);
}
function mark_reactions(signal, status, updated_during_traversal) {
var reactions = signal.reactions;
if (reactions === null) return;
var length = reactions.length;
for (var i = 0; i < length; i++) {
var reaction = reactions[i];
var flags2 = reaction.f;
var not_dirty = (flags2 & DIRTY) === 0;
if (not_dirty) {
set_signal_status(reaction, status);
}
if ((flags2 & EAGER_EFFECT) !== 0) {
eager_effects.add(
/** @type {Effect} */
reaction
);
} else if ((flags2 & DERIVED) !== 0) {
var derived2 = (
/** @type {Derived} */
reaction
);
batch_values?.delete(derived2);
if ((flags2 & WAS_MARKED) === 0) {
if (flags2 & CONNECTED && (active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)) {
reaction.f |= WAS_MARKED;
}
mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal);
}
} else if (not_dirty) {
var effect2 = (
/** @type {Effect} */
reaction
);
if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {
eager_block_effects.add(effect2);
}
if (updated_during_traversal !== null) {
updated_during_traversal.push(effect2);
} else {
schedule_effect(effect2);
}
}
}
}
function autofocus(dom, value) {
if (value) {
const body = document.body;
dom.autofocus = true;
queue_micro_task(() => {
if (document.activeElement === body) {
dom.focus();
}
});
}
}
let listening_to_form_reset = false;
function add_form_reset_listener() {
if (!listening_to_form_reset) {
listening_to_form_reset = true;
document.addEventListener(
"reset",
(evt) => {
Promise.resolve().then(() => {
if (!evt.defaultPrevented) {
for (
const e of
/**@type {HTMLFormElement} */
evt.target.elements
) {
e[FORM_RESET_HANDLER]?.();
}
}
});
},
// In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation)
{ capture: true }
);
}
}
function without_reactive_context(fn) {
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
return fn();
} finally {
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) {
element.addEventListener(event2, () => without_reactive_context(handler));
const prev = (
/** @type {any} */
element[FORM_RESET_HANDLER]
);
if (prev) {
element[FORM_RESET_HANDLER] = () => {
prev();
on_reset(true);
};
} else {
element[FORM_RESET_HANDLER] = () => on_reset(true);
}
add_form_reset_listener();
}
let is_updating_effect = false;
let is_destroying_effect = false;
function set_is_destroying_effect(value) {
is_destroying_effect = value;
}
let active_reaction = null;
let untracking = false;
function set_active_reaction(reaction) {
active_reaction = reaction;
}
let active_effect = null;
function set_active_effect(effect2) {
active_effect = effect2;
}
let current_sources = null;
function push_reaction_value(value) {
if (active_reaction !== null && true) {
if (current_sources === null) {
current_sources = [value];
} else {
current_sources.push(value);
}
}
}
let new_deps = null;
let skipped_deps = 0;
let untracked_writes = null;
function set_untracked_writes(value) {
untracked_writes = value;
}
let write_version = 1;
let read_version = 0;
let update_version = read_version;
function set_update_version(value) {
update_version = value;
}
function increment_write_version() {
return ++write_version;
}
function is_dirty(reaction) {
var flags2 = reaction.f;
if ((flags2 & DIRTY) !== 0) {
return true;
}
if (flags2 & DERIVED) {
reaction.f &= ~WAS_MARKED;
}
if ((flags2 & MAYBE_DIRTY) !== 0) {
var dependencies = (
/** @type {Value[]} */
reaction.deps
);
var length = dependencies.length;
for (var i = 0; i < length; i++) {
var dependency = dependencies[i];
if (is_dirty(
/** @type {Derived} */
dependency
)) {
update_derived(
/** @type {Derived} */
dependency
);
}
if (dependency.wv > reaction.wv) {
return true;
}
}
if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that
// traversal of the graph in the other batches still happens
batch_values === null) {
set_signal_status(reaction, CLEAN);
}
}
return false;
}
function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) {
var reactions = signal.reactions;
if (reactions === null) return;
if (current_sources !== null && includes.call(current_sources, signal)) {
return;
}
for (var i = 0; i < reactions.length; i++) {
var reaction = reactions[i];
if ((reaction.f & DERIVED) !== 0) {
schedule_possible_effect_self_invalidation(
/** @type {Derived} */
reaction,
effect2,
false
);
} else if (effect2 === reaction) {
if (root2) {
set_signal_status(reaction, DIRTY);
} else if ((reaction.f & CLEAN) !== 0) {
set_signal_status(reaction, MAYBE_DIRTY);
}
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
function update_reaction(reaction) {
var previous_deps = new_deps;
var previous_skipped_deps = skipped_deps;
var previous_untracked_writes = untracked_writes;
var previous_reaction = active_reaction;
var previous_sources = current_sources;
var previous_component_context = component_context;
var previous_untracking = untracking;
var previous_update_version = update_version;
var flags2 = reaction.f;
new_deps = /** @type {null | Value[]} */
null;
skipped_deps = 0;
untracked_writes = null;
active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;
current_sources = null;
set_component_context(reaction.ctx);
untracking = false;
update_version = ++read_version;
if (reaction.ac !== null) {
without_reactive_context(() => {
reaction.ac.abort(STALE_REACTION);
});
reaction.ac = null;
}
try {
reaction.f |= REACTION_IS_UPDATING;
var fn = (
/** @type {Function} */
reaction.fn
);
var result = fn();
reaction.f |= REACTION_RAN;
var deps = reaction.deps;
var is_fork = current_batch?.is_fork;
if (new_deps !== null) {
var i;
if (!is_fork) {
remove_reactions(reaction, skipped_deps);
}
if (deps !== null && skipped_deps > 0) {
deps.length = skipped_deps + new_deps.length;
for (i = 0; i < new_deps.length; i++) {
deps[skipped_deps + i] = new_deps[i];
}
} else {
reaction.deps = deps = new_deps;
}
if (effect_tracking() && (reaction.f & CONNECTED) !== 0) {
for (i = skipped_deps; i < deps.length; i++) {
(deps[i].reactions ??= []).push(reaction);
}
}
} else if (!is_fork && deps !== null && skipped_deps < deps.length) {
remove_reactions(reaction, skipped_deps);
deps.length = skipped_deps;
}
if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) {
for (i = 0; i < /** @type {Source[]} */
untracked_writes.length; i++) {
schedule_possible_effect_self_invalidation(
untracked_writes[i],
/** @type {Effect} */
reaction
);
}
}
if (previous_reaction !== null && previous_reaction !== reaction) {
read_version++;
if (previous_reaction.deps !== null) {
for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) {
previous_reaction.deps[i2].rv = read_version;
}
}
if (previous_deps !== null) {
for (const dep of previous_deps) {
dep.rv = read_version;
}
}
if (untracked_writes !== null) {
if (previous_untracked_writes === null) {
previous_untracked_writes = untracked_writes;
} else {
previous_untracked_writes.push(.../** @type {Source[]} */
untracked_writes);
}
}
}
if ((reaction.f & ERROR_VALUE) !== 0) {
reaction.f ^= ERROR_VALUE;
}
return result;
} catch (error) {
return handle_error(error);
} finally {
reaction.f ^= REACTION_IS_UPDATING;
new_deps = previous_deps;
skipped_deps = previous_skipped_deps;
untracked_writes = previous_untracked_writes;
active_reaction = previous_reaction;
current_sources = previous_sources;
set_component_context(previous_component_context);
untracking = previous_untracking;
update_version = previous_update_version;
}
}
function remove_reaction(signal, dependency) {
let reactions = dependency.reactions;
if (reactions !== null) {
var index = index_of.call(reactions, signal);
if (index !== -1) {
var new_length = reactions.length - 1;
if (new_length === 0) {
reactions = dependency.reactions = null;
} else {
reactions[index] = reactions[new_length];
reactions.pop();
}
}
}
if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear
// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`
// allows us to skip the expensive work of disconnecting and immediately reconnecting it
(new_deps === null || !includes.call(new_deps, dependency))) {
var derived2 = (
/** @type {Derived} */
dependency
);
if ((derived2.f & CONNECTED) !== 0) {
derived2.f ^= CONNECTED;
derived2.f &= ~WAS_MARKED;
}
if (derived2.v !== UNINITIALIZED) {
update_derived_status(derived2);
}
freeze_derived_effects(derived2);
remove_reactions(derived2, 0);
}
}
function remove_reactions(signal, start_index) {
var dependencies = signal.deps;
if (dependencies === null) return;
for (var i = start_index; i < dependencies.length; i++) {
remove_reaction(signal, dependencies[i]);
}
}
function update_effect(effect2) {
var flags2 = effect2.f;
if ((flags2 & DESTROYED) !== 0) {
return;
}
set_signal_status(effect2, CLEAN);
var previous_effect = active_effect;
var was_updating_effect = is_updating_effect;
active_effect = effect2;
is_updating_effect = true;
try {
if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {
destroy_block_effect_children(effect2);
} else {
destroy_effect_children(effect2);
}
execute_effect_teardown(effect2);
var teardown2 = update_reaction(effect2);
effect2.teardown = typeof teardown2 === "function" ? teardown2 : null;
effect2.wv = write_version;
var dep;
if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ;
} finally {
is_updating_effect = was_updating_effect;
active_effect = previous_effect;
}
}
async function tick() {
await Promise.resolve();
flushSync();
}
function get(signal) {
var flags2 = signal.f;
var is_derived = (flags2 & DERIVED) !== 0;
if (active_reaction !== null && !untracking) {
var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;
if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) {
var deps = active_reaction.deps;
if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {
if (signal.rv < read_version) {
signal.rv = read_version;
if (new_deps === null && deps !== null && deps[skipped_deps] === signal) {
skipped_deps++;
} else if (new_deps === null) {
new_deps = [signal];
} else {
new_deps.push(signal);
}
}
} else {
(active_reaction.deps ??= []).push(signal);
var reactions = signal.reactions;
if (reactions === null) {
signal.reactions = [active_reaction];
} else if (!includes.call(reactions, active_reaction)) {
reactions.push(active_reaction);
}
}
}
}
if (is_destroying_effect && old_values.has(signal)) {
return old_values.get(signal);
}
if (is_derived) {
var derived2 = (
/** @type {Derived} */
signal
);
if (is_destroying_effect) {
var value = derived2.v;
if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) {
value = execute_derived(derived2);
}
old_values.set(derived2, value);
return value;
}
var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0);
var is_new = (derived2.f & REACTION_RAN) === 0;
if (is_dirty(derived2)) {
if (should_connect) {
derived2.f |= CONNECTED;
}
update_derived(derived2);
}
if (should_connect && !is_new) {
unfreeze_derived_effects(derived2);
reconnect(derived2);
}
}
if (batch_values?.has(signal)) {
return batch_values.get(signal);
}
if ((signal.f & ERROR_VALUE) !== 0) {
throw signal.v;
}
return signal.v;
}
function reconnect(derived2) {
derived2.f |= CONNECTED;
if (derived2.deps === null) return;
for (const dep of derived2.deps) {
(dep.reactions ??= []).push(derived2);
if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {
unfreeze_derived_effects(
/** @type {Derived} */
dep
);
reconnect(
/** @type {Derived} */
dep
);
}
}
}
function depends_on_old_values(derived2) {
if (derived2.v === UNINITIALIZED) return true;
if (derived2.deps === null) return false;
for (const dep of derived2.deps) {
if (old_values.has(dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on_old_values(
/** @type {Derived} */
dep
)) {
return true;
}
}
return false;
}
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function validate_effect(rune) {
if (active_effect === null) {
if (active_reaction === null) {
effect_orphan();
}
effect_in_unowned_derived();
}
if (is_destroying_effect) {
effect_in_teardown();
}
}
function push_effect(effect2, parent_effect) {
var parent_last = parent_effect.last;
if (parent_last === null) {
parent_effect.last = parent_effect.first = effect2;
} else {
parent_last.next = effect2;
effect2.prev = parent_last;
parent_effect.last = effect2;
}
}
function create_effect(type, fn) {
var parent = active_effect;
if (parent !== null && (parent.f & INERT) !== 0) {
type |= INERT;
}
var effect2 = {
ctx: component_context,
deps: null,
nodes: null,
f: type | DIRTY | CONNECTED,
first: null,
fn,
last: null,
next: null,
parent,
b: parent && parent.b,
prev: null,
teardown: null,
wv: 0,
ac: null
};
current_batch?.register_created_effect(effect2);
var e = effect2;
if ((type & EFFECT) !== 0) {
if (collected_effects !== null) {
collected_effects.push(effect2);
} else {
Batch.ensure().schedule(effect2);
}
} else if (fn !== null) {
try {
update_effect(effect2);
} catch (e2) {
destroy_effect(effect2);
throw e2;
}
if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child
(e.f & EFFECT_PRESERVED) === 0) {
e = e.first;
if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {
e.f |= EFFECT_TRANSPARENT;
}
}
}
if (e !== null) {
e.parent = parent;
if (parent !== null) {
push_effect(e, parent);
}
if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) {
var derived2 = (
/** @type {Derived} */
active_reaction
);
(derived2.effects ??= []).push(e);
}
}
return effect2;
}
function effect_tracking() {
return active_reaction !== null && !untracking;
}
function teardown(fn) {
const effect2 = create_effect(RENDER_EFFECT, null);
set_signal_status(effect2, CLEAN);
effect2.teardown = fn;
return effect2;
}
function user_effect(fn) {
validate_effect();
var flags2 = (
/** @type {Effect} */
active_effect.f
);
var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & REACTION_RAN) === 0;
if (defer) {
var context = (
/** @type {ComponentContext} */
component_context
);
(context.e ??= []).push(fn);
} else {
return create_user_effect(fn);
}
}
function create_user_effect(fn) {
return create_effect(EFFECT | USER_EFFECT, fn);
}
function effect_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
return () => {
destroy_effect(effect2);
};
}
function component_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
return (options = {}) => {
return new Promise((fulfil) => {
if (options.outro) {
pause_effect(effect2, () => {
destroy_effect(effect2);
fulfil(void 0);
});
} else {
destroy_effect(effect2);
fulfil(void 0);
}
});
};
}
function effect(fn) {
return create_effect(EFFECT, fn);
}
function async_effect(fn) {
return create_effect(ASYNC | EFFECT_PRESERVED, fn);
}
function render_effect(fn, flags2 = 0) {
return create_effect(RENDER_EFFECT | flags2, fn);
}
function template_effect(fn, sync = [], async = [], blockers = []) {
flatten(blockers, sync, async, (values) => {
create_effect(RENDER_EFFECT, () => fn(...values.map(get)));
});
}
function block(fn, flags2 = 0) {
var effect2 = create_effect(BLOCK_EFFECT | flags2, fn);
return effect2;
}
function managed(fn, flags2 = 0) {
var effect2 = create_effect(MANAGED_EFFECT | flags2, fn);
return effect2;
}
function branch(fn) {
return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn);
}
function execute_effect_teardown(effect2) {
var teardown2 = effect2.teardown;
if (teardown2 !== null) {
const previously_destroying_effect = is_destroying_effect;
const previous_reaction = active_reaction;
set_is_destroying_effect(true);
set_active_reaction(null);
try {
teardown2.call(null);
} finally {
set_is_destroying_effect(previously_destroying_effect);
set_active_reaction(previous_reaction);
}
}
}
function destroy_effect_children(signal, remove_dom = false) {
var effect2 = signal.first;
signal.first = signal.last = null;
while (effect2 !== null) {
const controller = effect2.ac;
if (controller !== null) {
without_reactive_context(() => {
controller.abort(STALE_REACTION);
});
}
var next2 = effect2.next;
if ((effect2.f & ROOT_EFFECT) !== 0) {
effect2.parent = null;
} else {
destroy_effect(effect2, remove_dom);
}
effect2 = next2;
}
}
function destroy_block_effect_children(signal) {
var effect2 = signal.first;
while (effect2 !== null) {
var next2 = effect2.next;
if ((effect2.f & BRANCH_EFFECT) === 0) {
destroy_effect(effect2);
}
effect2 = next2;
}
}
function destroy_effect(effect2, remove_dom = true) {
var removed = false;
if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) {
remove_effect_dom(
effect2.nodes.start,
/** @type {TemplateNode} */
effect2.nodes.end
);
removed = true;
}
set_signal_status(effect2, DESTROYING);
destroy_effect_children(effect2, remove_dom && !removed);
remove_reactions(effect2, 0);
var transitions = effect2.nodes && effect2.nodes.t;
if (transitions !== null) {
for (const transition of transitions) {
transition.stop();
}
}
execute_effect_teardown(effect2);
effect2.f ^= DESTROYING;
effect2.f |= DESTROYED;
var parent = effect2.parent;
if (parent !== null && parent.first !== null) {
unlink_effect(effect2);
}
effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = effect2.b = null;
}
function remove_effect_dom(node, end) {
while (node !== null) {
var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
node.remove();
node = next2;
}
}
function unlink_effect(effect2) {
var parent = effect2.parent;
var prev = effect2.prev;
var next2 = effect2.next;
if (prev !== null) prev.next = next2;
if (next2 !== null) next2.prev = prev;
if (parent !== null) {
if (parent.first === effect2) parent.first = next2;
if (parent.last === effect2) parent.last = prev;
}
}
function pause_effect(effect2, callback, destroy = true) {
var transitions = [];
pause_children(effect2, transitions, true);
var fn = () => {
if (destroy) destroy_effect(effect2);
if (callback) callback();
};
var remaining = transitions.length;
if (remaining > 0) {
var check = () => --remaining || fn();
for (var transition of transitions) {
transition.out(check);
}
} else {
fn();
}
}
function pause_children(effect2, transitions, local) {
if ((effect2.f & INERT) !== 0) return;
effect2.f ^= INERT;
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition of t) {
if (transition.is_global || local) {
transitions.push(transition);
}
}
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
if ((child2.f & ROOT_EFFECT) === 0) {
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent,
// it means the parent block effect was pruned. In that case,
// transparency information was transferred to the branch effect.
(child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0;
pause_children(child2, transitions, transparent ? local : false);
}
child2 = sibling2;
}
}
function resume_effect(effect2) {
resume_children(effect2, true);
}
function resume_children(effect2, local) {
if ((effect2.f & INERT) === 0) return;
effect2.f ^= INERT;
if ((effect2.f & CLEAN) === 0) {
set_signal_status(effect2, DIRTY);
Batch.ensure().schedule(effect2);
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0;
resume_children(child2, transparent ? local : false);
child2 = sibling2;
}
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition of t) {
if (transition.is_global || local) {
transition.in();
}
}
}
}
function move_effect(effect2, fragment) {
if (!effect2.nodes) return;
var node = effect2.nodes.start;
var end = effect2.nodes.end;
while (node !== null) {
var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
fragment.append(node);
node = next2;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get$1(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get$1(scope.store), {
[name]: value
});
} else {
Object.assign(get$1(scope.store), name);
}
scope.store.set(get$1(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n = {
ariaLinkLabel: "Altcha (official website)",
cancel: "Cancel",
enterCode: "Enter code",
enterCodeAria: "Enter code you hear. Press Space to play audio.",
enterCodeFromImage: "To proceed, please enter the code from the image below.",
error: "Verification failed. Try again later.",
expired: "Verification expired. Try again.",
footer: 'Protected by <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (official website)">ALTCHA</a>',
getAudioChallenge: "Get an audio challenge",
label: "I'm not a robot",
loading: "Loading...",
reload: "Reload",
verify: "Verify",
verificationRequired: "Verification required!",
verified: "Verified",
verifying: "Verifying...",
waitAlert: "Verifying... please wait."
};
globalThis.$altcha.i18n.set("en", i18n);
const PUBLIC_VERSION = "5";
if (typeof window !== "undefined") {
((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION);
}
const event_symbol = /* @__PURE__ */ Symbol("events");
const all_registered_events = /* @__PURE__ */ new Set();
const root_event_handles = /* @__PURE__ */ new Set();
function create_event(event_name, dom, handler, options = {}) {
function target_handler(event2) {
if (!options.capture) {
handle_event_propagation.call(dom, event2);
}
if (!event2.cancelBubble) {
return without_reactive_context(() => {
return handler?.call(this, event2);
});
}
}
if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") {
queue_micro_task(() => {
dom.addEventListener(event_name, target_handler, options);
});
} else {
dom.addEventListener(event_name, target_handler, options);
}
return target_handler;
}
function event(event_name, dom, handler, capture2, passive) {
var options = { capture: capture2, passive };
var target_handler = create_event(event_name, dom, handler, options);
if (dom === document.body || // @ts-ignore
dom === window || // @ts-ignore
dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed
dom instanceof HTMLMediaElement) {
teardown(() => {
dom.removeEventListener(event_name, target_handler, options);
});
}
}
function delegated(event_name, element, handler) {
(element[event_symbol] ??= {})[event_name] = handler;
}
function delegate(events) {
for (var i = 0; i < events.length; i++) {
all_registered_events.add(events[i]);
}
for (var fn of root_event_handles) {
fn(events);
}
}
let last_propagated_event = null;
function handle_event_propagation(event2) {
var handler_element = this;
var owner_document = (
/** @type {Node} */
handler_element.ownerDocument
);
var event_name = event2.type;
var path = event2.composedPath?.() || [];
var current_target = (
/** @type {null | Element} */
path[0] || event2.target
);
last_propagated_event = event2;
var path_idx = 0;
var handled_at = last_propagated_event === event2 && event2[event_symbol];
if (handled_at) {
var at_idx = path.indexOf(handled_at);
if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */
window)) {
event2[event_symbol] = handler_element;
return;
}
var handler_idx = path.indexOf(handler_element);
if (handler_idx === -1) {
return;
}
if (at_idx <= handler_idx) {
path_idx = at_idx;
}
}
current_target = /** @type {Element} */
path[path_idx] || event2.target;
if (current_target === handler_element) return;
define_property(event2, "currentTarget", {
configurable: true,
get() {
return current_target || owner_document;
}
});
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
var throw_error;
var other_errors = [];
while (current_target !== null) {
var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */
current_target.host || null;
try {
var delegated2 = current_target[event_symbol]?.[event_name];
if (delegated2 != null && (!/** @type {any} */
current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well
// -> the target could not have been disabled because it emits the event in the first place
event2.target === current_target)) {
delegated2.call(current_target, event2);
}
} catch (error) {
if (throw_error) {
other_errors.push(error);
} else {
throw_error = error;
}
}
if (event2.cancelBubble || parent_element === handler_element || parent_element === null) {
break;
}
current_target = parent_element;
}
if (throw_error) {
for (let error of other_errors) {
queueMicrotask(() => {
throw error;
});
}
throw throw_error;
}
} finally {
event2[event_symbol] = handler_element;
delete event2.currentTarget;
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
const policy = (
// We gotta write it like this because after downleveling the pure comment may end up in the wrong location
globalThis?.window?.trustedTypes && /* @__PURE__ */ globalThis.window.trustedTypes.createPolicy("svelte-trusted-html", {
/** @param {string} html */
createHTML: (html2) => {
return html2;
}
})
);
function create_trusted_html(html2) {
return (
/** @type {string} */
policy?.createHTML(html2) ?? html2
);
}
function create_fragment_from_html(html2) {
var elem = create_element("template");
elem.innerHTML = create_trusted_html(html2.replaceAll("<!>", "<!---->"));
return elem.content;
}
function assign_nodes(start, end) {
var effect2 = (
/** @type {Effect} */
active_effect
);
if (effect2.nodes === null) {
effect2.nodes = { start, end, a: null, t: null };
}
}
// @__NO_SIDE_EFFECTS__
function from_html(content, flags2) {
var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0;
var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0;
var node;
var has_start = !content.startsWith("<!>");
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (node === void 0) {
node = create_fragment_from_html(has_start ? content : "<!>" + content);
if (!is_fragment) node = /** @type {TemplateNode} */
/* @__PURE__ */ get_first_child(node);
}
var clone = (
/** @type {TemplateNode} */
use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)
);
if (is_fragment) {
var start = (
/** @type {TemplateNode} */
/* @__PURE__ */ get_first_child(clone)
);
var end = (
/** @type {TemplateNode} */
clone.lastChild
);
assign_nodes(start, end);
} else {
assign_nodes(clone, clone);
}
return clone;
};
}
// @__NO_SIDE_EFFECTS__
function from_namespace(content, flags2, ns = "svg") {
var has_start = !content.startsWith("<!>");
var wrapped = `<${ns}>${has_start ? content : "<!>" + content}</${ns}>`;
var node;
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (!node) {
var fragment = (
/** @type {DocumentFragment} */
create_fragment_from_html(wrapped)
);
var root2 = (
/** @type {Element} */
/* @__PURE__ */ get_first_child(fragment)
);
{
node = /** @type {Element} */
/* @__PURE__ */ get_first_child(root2);
}
}
var clone = (
/** @type {TemplateNode} */
node.cloneNode(true)
);
{
assign_nodes(clone, clone);
}
return clone;
};
}
// @__NO_SIDE_EFFECTS__
function from_svg(content, flags2) {
return /* @__PURE__ */ from_namespace(content, flags2, "svg");
}
function text(value = "") {
if (!hydrating) {
var t = create_text(value + "");
assign_nodes(t, t);
return t;
}
var node = hydrate_node;
if (node.nodeType !== TEXT_NODE) {
node.before(node = create_text());
set_hydrate_node(node);
} else {
merge_text_nodes(
/** @type {Text} */
node
);
}
assign_nodes(node, node);
return node;
}
function comment() {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
var frag = document.createDocumentFragment();
var start = document.createComment("");
var anchor = create_text();
frag.append(start, anchor);
assign_nodes(start, anchor);
return frag;
}
function append(anchor, dom) {
if (hydrating) {
var effect2 = (
/** @type {Effect & { nodes: EffectNodes }} */
active_effect
);
if ((effect2.f & REACTION_RAN) === 0 || effect2.nodes.end === null) {
effect2.nodes.end = hydrate_node;
}
hydrate_next();
return;
}
if (anchor === null) {
return;
}
anchor.before(
/** @type {Node} */
dom
);
}
function is_capture_event(name) {
return name.endsWith("capture") && name !== "gotpointercapture" && name !== "lostpointercapture";
}
const DELEGATED_EVENTS = [
"beforeinput",
"click",
"change",
"dblclick",
"contextmenu",
"focusin",
"focusout",
"input",
"keydown",
"keyup",
"mousedown",
"mousemove",
"mouseout",
"mouseover",
"mouseup",
"pointerdown",
"pointermove",
"pointerout",
"pointerover",
"pointerup",
"touchend",
"touchmove",
"touchstart"
];
function can_delegate_event(event_name) {
return DELEGATED_EVENTS.includes(event_name);
}
const ATTRIBUTE_ALIASES = {
// no `class: 'className'` because we handle that separately
formnovalidate: "formNoValidate",
ismap: "isMap",
nomodule: "noModule",
playsinline: "playsInline",
readonly: "readOnly",
defaultvalue: "defaultValue",
defaultchecked: "defaultChecked",
srcobject: "srcObject",
novalidate: "noValidate",
allowfullscreen: "allowFullscreen",
disablepictureinpicture: "disablePictureInPicture",
disableremoteplayback: "disableRemotePlayback"
};
function normalize_attribute(name) {
name = name.toLowerCase();
return ATTRIBUTE_ALIASES[name] ?? name;
}
const PASSIVE_EVENTS = ["touchstart", "touchmove"];
function is_passive_event(name) {
return PASSIVE_EVENTS.includes(name);
}
function set_text(text2, value) {
var str = value == null ? "" : typeof value === "object" ? `${value}` : value;
if (str !== /** @type {any} */
(text2[TEXT_CACHE] ??= text2.nodeValue)) {
text2[TEXT_CACHE] = str;
text2.nodeValue = `${str}`;
}
}
function mount(component2, options) {
return _mount(component2, options);
}
function hydrate(component2, options) {
init_operations();
options.intro = options.intro ?? false;
const target = options.target;
const was_hydrating = hydrating;
const previous_hydrate_node = hydrate_node;
try {
var anchor = /* @__PURE__ */ get_first_child(target);
while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */
anchor.data !== HYDRATION_START)) {
anchor = /* @__PURE__ */ get_next_sibling(anchor);
}
if (!anchor) {
throw HYDRATION_ERROR;
}
set_hydrating(true);
set_hydrate_node(
/** @type {Comment} */
anchor
);
const instance = _mount(component2, { ...options, anchor });
set_hydrating(false);
return (
/** @type {Exports} */
instance
);
} catch (error) {
if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) {
throw error;
}
if (error !== HYDRATION_ERROR) {
console.warn("Failed to hydrate: ", error);
}
if (options.recover === false) {
hydration_failed();
}
init_operations();
clear_text_content(target);
set_hydrating(false);
return mount(component2, options);
} finally {
set_hydrating(was_hydrating);
set_hydrate_node(previous_hydrate_node);
}
}
const listeners = /* @__PURE__ */ new Map();
function _mount(Component, { target, anchor, props = {}, events, context, intro = true, transformError }) {
init_operations();
var component2 = void 0;
var unmount2 = component_root(() => {
var anchor_node = anchor ?? target.appendChild(create_text());
boundary(
/** @type {TemplateNode} */
anchor_node,
{
pending: () => {
}
},
(anchor_node2) => {
push({});
var ctx = (
/** @type {ComponentContext} */
component_context
);
if (context) ctx.c = context;
if (events) {
props.$$events = events;
}
if (hydrating) {
assign_nodes(
/** @type {TemplateNode} */
anchor_node2,
null
);
}
component2 = Component(anchor_node2, props) || {};
if (hydrating) {
active_effect.nodes.end = hydrate_node;
if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */
hydrate_node.data !== HYDRATION_END) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
}
pop();
},
transformError
);
var registered_events = /* @__PURE__ */ new Set();
var event_handle = (events2) => {
for (var i = 0; i < events2.length; i++) {
var event_name = events2[i];
if (registered_events.has(event_name)) continue;
registered_events.add(event_name);
var passive = is_passive_event(event_name);
for (const node of [target, document]) {
var counts = listeners.get(node);
if (counts === void 0) {
counts = /* @__PURE__ */ new Map();
listeners.set(node, counts);
}
var count = counts.get(event_name);
if (count === void 0) {
node.addEventListener(event_name, handle_event_propagation, { passive });
counts.set(event_name, 1);
} else {
counts.set(event_name, count + 1);
}
}
}
};
event_handle(array_from(all_registered_events));
root_event_handles.add(event_handle);
return () => {
for (var event_name of registered_events) {
for (const node of [target, document]) {
var counts = (
/** @type {Map<string, number>} */
listeners.get(node)
);
var count = (
/** @type {number} */
counts.get(event_name)
);
if (--count == 0) {
node.removeEventListener(event_name, handle_event_propagation);
counts.delete(event_name);
if (counts.size === 0) {
listeners.delete(node);
}
} else {
counts.set(event_name, count);
}
}
}
root_event_handles.delete(event_handle);
if (anchor_node !== anchor) {
anchor_node.parentNode?.removeChild(anchor_node);
}
};
});
mounted_components.set(component2, unmount2);
return component2;
}
let mounted_components = /* @__PURE__ */ new WeakMap();
function unmount(component2, options) {
const fn = mounted_components.get(component2);
if (fn) {
mounted_components.delete(component2);
return fn(options);
}
return Promise.resolve();
}
class BranchManager {
/** @type {TemplateNode} */
anchor;
/** @type {Map<Batch, Key>} */
#batches = /* @__PURE__ */ new Map();
/**
* Map of keys to effects that are currently rendered in the DOM.
* These effects are visible and actively part of the document tree.
* Example:
*
data/skin/front/moment/js/altcha/i18n.js+2656
변경 전i18n.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후i18n.js
const noop = () => {
};
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function get(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let untracking = false;
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get(scope.store), {
[name]: value
});
} else {
Object.assign(get(scope.store), name);
}
scope.store.set(get(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n$Y = {
ariaLinkLabel: "Altcha (الموقع الرسمي)",
enterCode: "أدخل الرمز",
enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",
error: "فشل التحقق. حاول مرة أخرى لاحقاً.",
expired: "انتهت صلاحية التحقق. حاول مرة أخرى.",
footer: 'محمي بواسطة <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (الموقع الرسمي)">ALTCHA</a>',
getAudioChallenge: "احصل على تحدي صوتي",
label: "أنا لست روبوتاً",
loading: "جارٍ التحميل...",
reload: "إعادة تحميل",
verify: "تحقق",
verificationRequired: "مطلوب التحقق!",
verified: "تم التحقق",
verifying: "جارٍ التحقق...",
waitAlert: "جارٍ التحقق... يرجى الانتظار.",
cancel: "إلغاء",
enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه."
};
globalThis.$altcha.i18n.set("ar", i18n$Y);
const i18n$X = {
ariaLinkLabel: "Altcha (официален уебсайт)",
enterCode: "Въведете код",
enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",
error: "Проверката неуспешна. Моля, опитайте по-късно.",
expired: "Времето за проверка изтече. Моля, опитайте отново.",
footer: 'Защитено от <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официален уебсайт)">ALTCHA</a>',
getAudioChallenge: "Аудио проверка",
label: "Аз не съм робот",
loading: "Зареждане...",
reload: "Презареди",
verify: "Провери",
verificationRequired: "Изисква се проверка!",
verified: "Проверено",
verifying: "Проверява се...",
waitAlert: "Проверката е в процес... моля изчакайте.",
cancel: "Отказ",
enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу."
};
globalThis.$altcha.i18n.set("bg", i18n$X);
const i18n$W = {
ariaLinkLabel: "Altcha (афіцыйны сайт)",
enterCode: "Увядзіце код",
enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",
error: "Праверка не прайшла. Паспрабуйце пазней.",
expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.",
footer: 'Абаронена <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (афіцыйны сайт)">ALTCHA</a>',
getAudioChallenge: "Атрымаць аўдыё выклік",
label: "Я не робат",
loading: "Загрузка...",
reload: "Перазагрузіць",
verify: "Праверыць",
verificationRequired: "Патрабуецца праверка!",
verified: "Праверана",
verifying: "Правяраем...",
waitAlert: "Праверка... калі ласка, пачакайце.",
cancel: "Скасаваць",
enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй."
};
globalThis.$altcha.i18n.set("be", i18n$W);
const i18n$V = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("bs", i18n$V);
const i18n$U = {
ariaLinkLabel: "Altcha (lloc web oficial)",
enterCode: "Introdueix el codi",
enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",
error: "Verificació fallida. Torna-ho a provar més tard.",
expired: "Verificació expirada. Torna-ho a provar.",
footer: 'Protegit per <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (lloc web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtenir un desafiament d’àudio",
label: "No sóc un robot",
loading: "Carregant...",
reload: "Torna a carregar",
verify: "Verificar",
verificationRequired: "Es requereix verificació!",
verified: "Verificat",
verifying: "Verificant...",
waitAlert: "Verificant... si us plau, espera.",
cancel: "Cancel·la",
enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent."
};
globalThis.$altcha.i18n.set("ca", i18n$U);
const i18n$T = {
ariaLinkLabel: "Altcha (oficiální web)",
enterCode: "Zadejte kód",
enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",
error: "Ověření selhalo. Zkuste to prosím později.",
expired: "Ověření vypršelo. Zkuste to prosím znovu.",
footer: 'Chráněno pomocí <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiální web)">ALTCHA</a>',
getAudioChallenge: "Získat audio výzvu",
label: "Nejsem robot",
loading: "Načítání...",
reload: "Znovu načíst",
verify: "Ověřit",
verificationRequired: "Vyžaduje se ověření!",
verified: "Ověřeno",
verifying: "Ověřování...",
waitAlert: "Probíhá ověření... prosím počkejte.",
cancel: "Zrušit",
enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže."
};
globalThis.$altcha.i18n.set("cs", i18n$T);
const i18n$S = {
ariaLinkLabel: "Altcha (officiel hjemmeside)",
enterCode: "Indtast kode",
enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",
error: "Verificering mislykkedes. Prøv venligst igen senere.",
expired: "Verificering udløbet. Prøv venligst igen.",
footer: 'Beskyttet af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiel hjemmeside)">ALTCHA</a>',
getAudioChallenge: "Hent lydudfordring",
label: "Jeg er ikke en robot",
loading: "Indlæser...",
reload: "Genindlæs",
verify: "Verificer",
verificationRequired: "Verificering kræves!",
verified: "Verificeret",
verifying: "Verificerer...",
waitAlert: "Verificerer... vent venligst.",
cancel: "Annuller",
enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder."
};
globalThis.$altcha.i18n.set("da", i18n$S);
const i18n$R = {
ariaLinkLabel: "Altcha (offizielle Website)",
enterCode: "Code eingeben",
enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",
error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",
footer: 'Geschützt durch <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offizielle Website)">ALTCHA</a>',
getAudioChallenge: "Audio-Herausforderung anfordern",
label: "Ich bin kein Roboter",
loading: "Lade...",
reload: "Neu laden",
verify: "Überprüfen",
verificationRequired: "Überprüfung erforderlich!",
verified: "Überprüft",
verifying: "Wird überprüft...",
waitAlert: "Überprüfung läuft... bitte warten.",
cancel: "Abbrechen",
enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."
};
globalThis.$altcha.i18n.set("de", i18n$R);
const i18n$Q = {
ariaLinkLabel: "Altcha (επίσημος ιστότοπος)",
enterCode: "Εισαγάγετε κωδικό",
enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",
error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",
expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.",
footer: 'Προστατεύεται από το <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (επίσημος ιστότοπος)">ALTCHA</a>',
getAudioChallenge: "Λήψη ηχητικής δοκιμασίας",
label: "Δεν είμαι ρομπότ",
loading: "Φόρτωση...",
reload: "Επαναφόρτωση",
verify: "Επαλήθευση",
verificationRequired: "Απαιτείται έλεγχος!",
verified: "Επαληθεύτηκε",
verifying: "Γίνεται επαλήθευση...",
waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.",
cancel: "Ακύρωση",
enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."
};
globalThis.$altcha.i18n.set("el", i18n$Q);
const i18n$P = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Introduce el código",
enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor intente nuevamente más tarde.",
expired: "Verificación expirada. Por favor intente nuevamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un desafío de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Recargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espere.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo."
};
globalThis.$altcha.i18n.set("es-es", i18n$P);
const i18n$O = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Ingresa el código",
enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.",
expired: "La verificación expiró. Por favor inténtalo de nuevo.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un reto de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Volver a cargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espera.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación."
};
globalThis.$altcha.i18n.set("es-419", i18n$O);
const i18n$N = {
ariaLinkLabel: "Altcha (ametlik veebisait)",
enterCode: "Sisesta kood",
enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",
error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",
expired: "Kinnitamine aegus. Proovi uuesti.",
footer: 'Kaitstud <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ametlik veebisait)">ALTCHA</a> poolt',
getAudioChallenge: "Hangi heliülesanne",
label: "Ma ei ole robot",
loading: "Laadimine...",
reload: "Laadi uuesti",
verify: "Kinnita",
verificationRequired: "Kontroll on vajalik!",
verified: "Kinnitatud",
verifying: "Kinnitamine...",
waitAlert: "Kinnitamine... palun oota.",
cancel: "Tühista",
enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood."
};
globalThis.$altcha.i18n.set("et", i18n$N);
const i18n$M = {
ariaLinkLabel: "Altcha (webgune ofiziala)",
enterCode: "Sartu kodea",
enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",
error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.",
expired: "Egiaztatzea iraungi da. Saiatu berriro.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (webgune ofiziala)">ALTCHA</a>k babestuta',
getAudioChallenge: "Jaso audio-erronka bat",
label: "Ez naiz robot bat",
loading: "Kargatzen...",
reload: "Birkargatu",
verify: "Egiaztatu",
verificationRequired: "Egiaztatzea beharrezkoa da!",
verified: "Egiaztatuta",
verifying: "Egiaztatzen...",
waitAlert: "Egiaztatzen... itxaron mesedez.",
cancel: "Utzi",
enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea."
};
globalThis.$altcha.i18n.set("eu", i18n$M);
const i18n$L = {
ariaLinkLabel: "Altcha (وب‌سایت رسمی)",
enterCode: "کد را وارد کنید",
enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",
error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",
expired: "احراز هویت منقضی شد. دوباره تلاش کنید.",
footer: 'محافظت شده توسط <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (وب‌سایت رسمی)">ALTCHA</a>',
getAudioChallenge: "دریافت چالش صوتی",
label: "من ربات نیستم",
loading: "در حال بارگذاری...",
reload: "بارگذاری مجدد",
verify: "تایید",
verificationRequired: "احراز هویت لازم است!",
verified: "تایید شد",
verifying: "در حال تایید...",
waitAlert: "در حال تایید... لطفا منتظر بمانید.",
cancel: "لغو کردن",
enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید."
};
globalThis.$altcha.i18n.set("fa", i18n$L);
const i18n$K = {
ariaLinkLabel: "Altcha (offiziell Websäit)",
enterCode: "Code aginn",
enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",
error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",
expired: "Verifikatioun ofgelaf. Probéiert nach emol.",
footer: 'Geschützt vun <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offiziell Websäit)">ALTCHA</a>',
getAudioChallenge: "Kritt eng Audio-Herausfuerderung",
label: "Ech sinn keen Robot",
loading: "Lueden...",
reload: "Nei lueden",
verify: "Verifizéieren",
verificationRequired: "Verifikatioun néideg!",
verified: "Verifizéiert",
verifying: "Verifizéieren...",
waitAlert: "Verifizéieren... waart wgl.",
cancel: "Ofbriechen",
enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."
};
globalThis.$altcha.i18n.set("lb", i18n$K);
const i18n$J = {
ariaLinkLabel: "Altcha (virallinen verkkosivusto)",
enterCode: "Syötä koodi",
enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",
error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.",
expired: "Varmennus vanhentui. Yritä uudelleen.",
footer: 'Suojattu <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (virallinen verkkosivusto)">ALTCHA</a>:lla',
getAudioChallenge: "Hae äänitehtävä",
label: "En ole robotti",
loading: "Ladataan...",
reload: "Lataa uudelleen",
verify: "Vahvista",
verificationRequired: "Vahvistus vaaditaan!",
verified: "Vahvistettu",
verifying: "Vahvistetaan...",
waitAlert: "Vahvistetaan... odota hetki.",
cancel: "Peruuta",
enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi."
};
globalThis.$altcha.i18n.set("fi", i18n$J);
const i18n$I = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",
error: "Échec de la vérification. Réessayez plus tard.",
expired: "La vérification a expiré. Réessayez.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-ca", i18n$I);
const i18n$H = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",
error: "Échec de la vérification. Essayez à nouveau plus tard.",
expired: "La vérification a expiré. Essayez à nouveau.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-fr", i18n$H);
const i18n$G = {
ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)",
enterCode: "Iontráil cód",
enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",
error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.",
expired: "Tá an fíorú as feidhm. Bain triail eile as.",
footer: 'Cosanta ag <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (láithreán gréasáin oifigiúil)">ALTCHA</a>',
getAudioChallenge: "Faigh dúshlán fuaime",
label: "Níl mé i mo róbat",
loading: "Á luchtú...",
reload: "Athluchtaigh",
verify: "Fíoraigh",
verificationRequired: "Fíorú riachtanach!",
verified: "Fíoraithe",
verifying: "Fíorú ar siúl...",
waitAlert: "Fíorú ar siúl... fan go fóill.",
cancel: "Cealaigh",
enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."
};
globalThis.$altcha.i18n.set("ga", i18n$G);
const i18n$F = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",
error: "Provjera nije uspjela. Molimo pokušajte kasnije.",
expired: "Provjera je istekla. Molimo pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Audio provjera",
label: "Ja nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Provjeri",
verificationRequired: "Potrebna je provjera!",
verified: "Provjereno",
verifying: "Provjeravanje...",
waitAlert: "Provjera je u tijeku... molimo pričekajte.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("hr", i18n$F);
const i18n$E = {
ariaLinkLabel: "Altcha (hivatalos weboldal)",
enterCode: "Írja be a kódot",
enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",
error: "A hitelesítés nem sikerült. Próbáld meg később újra.",
expired: "A hitelesítés lejárt. Próbáld újra.",
footer: 'Védve a következő által: <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (hivatalos weboldal)">ALTCHA</a>',
getAudioChallenge: "Hangalapú kihívás kérése",
label: "Nem vagyok robot",
loading: "Betöltés...",
reload: "Újratöltés",
verify: "Ellenőrzés",
verificationRequired: "Ellenőrzés szükséges!",
verified: "Ellenőrizve",
verifying: "Ellenőrzés folyamatban...",
waitAlert: "Ellenőrzés folyamatban... kérlek várj.",
cancel: "Mégse",
enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját."
};
globalThis.$altcha.i18n.set("hu", i18n$E);
const i18n$D = {
ariaLinkLabel: "Altcha (opinber vefsíða)",
enterCode: "Sláðu inn kóða",
enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",
error: "Staðfesting mistókst. Reyndu aftur síðar.",
expired: "Staðfesting er útrunnin. Reyndu aftur.",
footer: 'Verndað af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (opinber vefsíða)">ALTCHA</a>',
getAudioChallenge: "Fá hljóðáskorun",
label: "Ég er ekki robot",
loading: "Hleður...",
reload: "Hleð aftur",
verify: "Staðfesta",
verificationRequired: "Staðfesting er nauðsynleg!",
verified: "Staðfest",
verifying: "Að staðfesta...",
waitAlert: "Að staðfesta... vinsamlegast bíða.",
cancel: "Hætta við",
enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."
};
globalThis.$altcha.i18n.set("is", i18n$D);
const i18n$C = {
ariaLinkLabel: "Altcha (sito ufficiale)",
enterCode: "Inserisci il codice",
enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",
error: "Verifica fallita. Riprova più tardi.",
expired: "Verifica scaduta. Riprova.",
footer: 'Protetto da <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sito ufficiale)">ALTCHA</a>',
getAudioChallenge: "Ottieni una sfida audio",
label: "Non sono un robot",
loading: "Caricamento...",
reload: "Ricarica",
verify: "Verifica",
verificationRequired: "Verifica richiesta!",
verified: "Verificato",
verifying: "Verifica in corso...",
waitAlert: "Verifica in corso... attendere.",
cancel: "Annulla",
enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante."
};
globalThis.$altcha.i18n.set("it", i18n$C);
const i18n$B = {
ariaLinkLabel: "Altcha (oficiali svetainė)",
enterCode: "Įveskite kodą",
enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",
error: "Patvirtinimas nepavyko. Bandykite vėliau.",
expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.",
footer: 'Apsaugota <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiali svetainė)">ALTCHA</a>',
getAudioChallenge: "Gauti garso užduotį",
label: "Aš nesu robotas",
loading: "Įkeliama...",
reload: "Įkelti iš naujo",
verify: "Patvirtinti",
verificationRequired: "Reikalingas patvirtinimas!",
verified: "Patvirtinta",
verifying: "Tikrinama...",
waitAlert: "Tikrinama... prašome palaukti.",
cancel: "Atšaukti",
enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."
};
globalThis.$altcha.i18n.set("lt", i18n$B);
const i18n$A = {
ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)",
enterCode: "Ievadiet kodu",
enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",
error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",
expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",
footer: 'Aizsargāts ar <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiālā tīmekļa vietne)">ALTCHA</a>',
getAudioChallenge: "Saņemt audio izaicinājumu",
label: "Es neesmu robots",
loading: "Notiek ielāde...",
reload: "Pārlādēt",
verify: "Verificēt",
verificationRequired: "Nepieciešama verifikācija!",
verified: "Verificēts",
verifying: "Notiek verifikācija...",
waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.",
cancel: "Atcelt",
enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."
};
globalThis.$altcha.i18n.set("lv", i18n$A);
const i18n$z = {
ariaLinkLabel: "Altcha (sit uffiċjali)",
enterCode: "Idħol il-kodiċi",
enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",
error: "Il-verifika falliet. Erġa’ pprova aktar tard.",
expired: "Il-verifika skadiet. Erġa’ pprova.",
footer: 'Protett minn <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sit uffiċjali)">ALTCHA</a>',
getAudioChallenge: "Ikseb sfida bl-awdjo",
label: "M’inix robot",
loading: "Qed jitgħabba...",
reload: "Ittella’ mill-ġdid",
verify: "Ivverifika",
verificationRequired: "Verifika meħtieġa!",
verified: "Ivverifikat",
verifying: "Verifika għaddejja...",
waitAlert: "Verifika għaddejja... stenna ftit.",
cancel: "Ikkanċella",
enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."
};
globalThis.$altcha.i18n.set("mt", i18n$z);
const i18n$y = {
ariaLinkLabel: "Altcha (offisiell nettside)",
enterCode: "Skriv inn kode",
enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.",
error: "Verifisering mislyktes. Prøv igjen senere.",
expired: "Verifiseringen utløp. Prøv igjen.",
footer: 'Beskyttet av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offisiell nettside)">ALTCHA</a>',
getAudioChallenge: "Få en lydutfordring",
label: "Jeg er ikke en robot",
loading: "Laster...",
reload: "Last på nytt",
verify: "Verifiser",
verificationRequired: "Verifisering kreves!",
verified: "Verifisert",
verifying: "Verifiserer...",
waitAlert: "Verifiserer... vennligst vent.",
cancel: "Avbryt",
enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor."
};
globalThis.$altcha.i18n.set("nb", i18n$y);
const i18n$x = {
ariaLinkLabel: "Altcha (officiële website)",
enterCode: "Voer code in",
enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",
error: "Verificatie mislukt. Probeer het later opnieuw.",
expired: "Verificatie verlopen. Probeer het opnieuw.",
footer: 'Beschermd door <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiële website)">ALTCHA</a>',
getAudioChallenge: "Audio-uitdaging ontvangen",
label: "Ik ben geen robot",
loading: "Laden...",
reload: "Herladen",
verify: "Verifiëren",
verificationRequired: "Verificatie vereist!",
verified: "Geverifieerd",
verifying: "Bezig met verifiëren...",
waitAlert: "Bezig met verifiëren... even geduld a.u.b.",
cancel: "Annuleren",
enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in."
};
globalThis.$altcha.i18n.set("nl", i18n$x);
const i18n$w = {
ariaLinkLabel: "Altcha (oficjalna strona internetowa)",
enterCode: "Wprowadź kod",
enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",
error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.",
expired: "Weryfikacja wygasła. Spróbuj ponownie.",
footer: 'Chronione przez <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficjalna strona internetowa)">ALTCHA</a>',
getAudioChallenge: "Pobierz zadanie dźwiękowe",
label: "Nie jestem robotem",
loading: "Ładowanie...",
reload: "Odśwież",
verify: "Zweryfikuj",
verificationRequired: "Wymagana weryfikacja!",
verified: "Zweryfikowano",
verifying: "Weryfikacja...",
waitAlert: "Trwa weryfikacja... proszę czekać.",
cancel: "Anuluj",
enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka."
};
globalThis.$altcha.i18n.set("pl", i18n$w);
const i18n$v = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduza o código",
enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",
error: "A verificação falhou. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Não sou um robô",
loading: "A carregar...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "A verificar...",
waitAlert: "A verificar... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-pt", i18n$v);
const i18n$u = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Digite o código",
enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",
error: "Falha na verificação. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Eu não sou um robô",
loading: "Carregando...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-br", i18n$u);
const i18n$t = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduceți codul",
enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",
error: "Verificarea a eșuat. Încearcă din nou mai târziu.",
expired: "Verificarea a expirat. Încearcă din nou.",
footer: 'Protejat de <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obține o provocare audio",
label: "Nu sunt un robot",
loading: "Se încarcă...",
reload: "Reîncarcă",
verify: "Verifică",
verificationRequired: "Verificare necesară!",
verified: "Verificat",
verifying: "Se verifică...",
waitAlert: "Se verifică... te rugăm să aștepți.",
cancel: "Anulare",
enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."
};
globalThis.$altcha.i18n.set("ro", i18n$t);
const i18n$s = {
ariaLinkLabel: "Altcha (официальный сайт)",
enterCode: "Введите код",
enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",
error: "Ошибка верификации. Попробуйте позже.",
expired: "Срок действия верификации истек. Попробуйте снова.",
footer: 'Защищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официальный сайт)">ALTCHA</a>',
getAudioChallenge: "Получить аудио задачу",
label: "Я не робот",
loading: "Загрузка...",
reload: "Перезагрузить",
verify: "Проверить",
verificationRequired: "Требуется проверка!",
verified: "Проверено",
verifying: "Идет проверка...",
waitAlert: "Идет проверка... Пожалуйста, подождите.",
cancel: "Отмена",
enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже."
};
globalThis.$altcha.i18n.set("ru", i18n$s);
const i18n$r = {
ariaLinkLabel: "Altcha (oficiálna webová stránka)",
enterCode: "Zadajte kód",
enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",
error: "Verifikácia zlyhala. Skúste to znova neskôr.",
expired: "Verifikácia vypršala. Skúste to znova.",
footer: 'Chránené <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiálna webová stránka)">ALTCHA</a>',
getAudioChallenge: "Získať audio výzvu",
label: "Nie som robot",
loading: "Načítava sa...",
reload: "Obnoviť",
verify: "Verifikovať",
verificationRequired: "Vyžaduje sa overenie!",
verified: "Verifikované",
verifying: "Prebieha verifikácia...",
waitAlert: "Prebieha verifikácia... prosím čakajte.",
cancel: "Zrušiť",
enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie."
};
globalThis.$altcha.i18n.set("sk", i18n$r);
const i18n$q = {
ariaLinkLabel: "Altcha (uradna spletna stran)",
enterCode: "Vnesite kodo",
enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",
error: "Preverjanje ni uspelo. Poskusite znova kasneje.",
expired: "Preverjanje je poteklo. Poskusite znova.",
footer: 'Zaščiteno z <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (uradna spletna stran)">ALTCHA</a>',
getAudioChallenge: "Pridobite zvočni izziv",
label: "Nisem robot",
loading: "Nalagam...",
reload: "Ponovno naloži",
verify: "Preveri",
verificationRequired: "Potrebna je preveritev!",
verified: "Preverjeno",
verifying: "Preverjanje...",
waitAlert: "Preverjanje... prosim počakajte.",
cancel: "Preklic",
enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."
};
globalThis.$altcha.i18n.set("sl", i18n$q);
const i18n$p = {
ariaLinkLabel: "Altcha (faqja zyrtare)",
enterCode: "Fut kodin",
enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",
error: "Verifikimi dështoi. Provoni përsëri më vonë.",
expired: "Verifikimi ka skaduar. Provoni përsëri.",
footer: 'I mbrojtur nga <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (faqja zyrtare)">ALTCHA</a>',
getAudioChallenge: "Merr një sfidë audio",
label: "Unë nuk jam një robot",
loading: "Duke u ngarkuar...",
reload: "Ringarko",
verify: "Verifiko",
verificationRequired: "Kërkohet verifikimi!",
verified: "I verifikuar",
verifying: "Duke verifikuar...",
waitAlert: "Duke verifikuar... ju lutem prisni.",
cancel: "Anuloje",
enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."
};
globalThis.$altcha.i18n.set("sq", i18n$p);
const i18n$o = {
ariaLinkLabel: "Altcha (zvanična web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (zvanična web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovo učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Откажи",
enterCodeFromImage: "Да бисте наставили, унесите код са слике испод."
};
globalThis.$altcha.i18n.set("sr", i18n$o);
const i18n$n = {
ariaLinkLabel: "Altcha (officiell webbplats)",
enterCode: "Ange kod",
enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
error: "Verifiering misslyckades. Försök igen senare.",
expired: "Verifieringen har gått ut. Försök igen.",
footer: 'Skyddad av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiell webbplats)">ALTCHA</a>',
getAudioChallenge: "Få ljudutmaning",
label: "Jag är inte en robot",
loading: "Laddar...",
reload: "Ladda om",
verify: "Verifiera",
verificationRequired: "Verifiering krävs!",
verified: "Verifierad",
verifying: "Verifierar...",
waitAlert: "Verifierar... vänligen vänta.",
cancel: "Avbryt",
enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan."
};
globalThis.$altcha.i18n.set("sv", i18n$n);
const i18n$m = {
ariaLinkLabel: "Altcha (resmi web sitesi)",
enterCode: "Kodu girin",
enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
footer: 'ALTCHA tarafından korunuyor <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (resmi web sitesi)">ALTCHA</a>',
getAudioChallenge: "Sesli doğrulama al",
label: "Ben robot değilim",
loading: "Yükleniyor...",
reload: "Yeniden yükle",
verify: "Doğrula",
verificationRequired: "Doğrulama gerekli!",
verified: "Doğrulandı",
verifying: "Doğrulama yapılıyor...",
waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.",
cancel: "İptal",
enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin."
};
globalThis.$altcha.i18n.set("tr", i18n$m);
const i18n$l = {
ariaLinkLabel: "Altcha (офіційний сайт)",
enterCode: "Введіть код",
enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
error: "Перевірка не вдалася. Спробуйте пізніше.",
expired: "Перевірка прострочена. Спробуйте знову.",
footer: 'Захищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (офіційний сайт)">ALTCHA</a>',
getAudioChallenge: "Отримати аудіо-челлендж",
label: "Я не робот",
loading: "Завантаження...",
reload: "Перезавантажити",
verify: "Перевірити",
verificationRequired: "Потрібна перевірка!",
verified: "Перевірено",
verifying: "Перевіряється...",
waitAlert: "Перевірка... будь ласка, зачекайте.",
cancel: "Скасувати",
enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче."
};
globalThis.$altcha.i18n.set("uk", i18n$l);
const i18n$k = {
ariaLinkLabel: "Altcha (amptelike webwerf)",
enterCode: "Voer kode in",
enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",
error: "Verifikasie het misluk. Probeer later weer.",
expired: "Verifikasie het verval. Probeer weer.",
footer: 'Beskerm deur <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (amptelike webwerf)">ALTCHA</a>',
getAudioChallenge: "Kry 'n klankuitdaging",
label: "Ek is nie 'n robot nie",
loading: "Laai...",
reload: "Laai weer",
verify: "Verifieer",
verificationRequired: "Verifikasie is vereis!",
verified: "Geverifieer",
verifying: "Verifieer...",
waitAlert: "Verifieer... wag asseblief.",
cancel: "Kanselleer",
enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."
};
globalThis.$altcha.i18n.set("af", i18n$k);
const i18n$j = {
ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)",
enterCode: "ኮድ አስገባ",
enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",
error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",
expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",
footer: 'በ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ዋናው ድህረ ገጽ)">ALTCHA</a> የተጠበቀ',
getAudioChallenge: "የድምጽ ፈተና ያግኙ",
label: "እኔ ሮቦት አይደለሁም",
loading: "በመጫን ላይ...",
reload: "እንደገና ጫን",
verify: "አረጋግጥ",
verificationRequired: "ማረጋገጫ ያስፈልጋል!",
verified: "ተረጋግጧል",
verifying: "በማረጋገጥ ላይ...",
waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",
cancel: "ይቅር",
enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"
};
globalThis.$altcha.i18n.set("am", i18n$j);
const i18n$i = {
ariaLinkLabel: "Altcha (tovuti rasmi)",
enterCode: "Weka nambari",
enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.",
error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.",
expired: "Uthibitishaji umeisha. Jaribu tena.",
footer: 'Imealindwa na <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (tovuti rasmi)">ALTCHA</a>',
getAudioChallenge: "Pata changamoto ya sauti",
label: "Mimi sio roboti",
loading: "Inapakia...",
reload: "Pakia tena",
verify: "Thibitisha",
verificationRequired: "Uthibitishaji unahitajika!",
verified: "Imethibitishwa",
verifying: "Inathibitisha...",
waitAlert: "Inathibitisha... tafadhali subiri.",
cancel: "Ghairi",
enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."
};
globalThis.$altcha.i18n.set("sw", i18n$i);
const i18n$h = {
ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)",
enterCode: "Tẹ koodu sii",
enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",
error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",
expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",
footer: 'Ti wa ni ààbò nipasẹ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oju opo wẹẹbu osise)">ALTCHA</a>',
getAudioChallenge: "Gba ìjàdú ohùn",
label: "Emi kii ṣe ẹrọ",
loading: "Ó ń gbé sílẹ̀...",
reload: "Tún gbé wọlé",
verify: "Ṣàdájọ́",
verificationRequired: "Ìdájọ́kòwò ni a nílò!",
verified: "A ti dájọ́",
verifying: "Ó ń ṣàdájọ́...",
waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",
cancel: "Fagbọsẹ",
enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."
};
globalThis.$altcha.i18n.set("yo", i18n$h);
const i18n$g = {
ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)",
enterCode: "কোড লিখুন",
enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",
error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",
expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",
footer: 'দ্বারা সুরক্ষিত <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (অফিসিয়াল ওয়েবসাইট)">ALTCHA</a>',
getAudioChallenge: "অডিও চ্যালেঞ্জ নিন",
label: "আমি রোবট নই",
loading: "লোড হচ্ছে...",
reload: "পুনরায় লোড করুন",
verify: "যাচাই করুন",
verificationRequired: "যাচাই প্রয়োজন!",
verified: "যাচাই করা হয়েছে",
verifying: "যাচাই করা হচ্ছে...",
waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",
cancel: "বাতিল করুন",
enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"
};
globalThis.$altcha.i18n.set("bn", i18n$g);
const i18n$f = {
ariaLinkLabel: "Altcha (אתר רשמי)",
enterCode: "הזן קוד",
enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",
error: "האימות נכשל. נסה שוב מאוחר יותר.",
expired: "תוקף האימות פג. נסה שוב.",
footer: 'מוגן על ידי <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (אתר רשמי)">ALTCHA</a>',
getAudioChallenge: "קבל אתגר שמע",
label: "אני לא רובוט",
loading: "טוען...",
reload: "טען מחדש",
verify: "אמת",
verificationRequired: "נדרש אימות!",
verified: "אומת",
verifying: "מאמת...",
waitAlert: "מבצע אימות... אנא המתן.",
cancel: "ביטול",
enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."
};
globalThis.$altcha.i18n.set("he", i18n$f);
const i18n$e = {
ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)",
enterCode: "कोड दर्ज करेंं",
enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",
error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",
expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",
footer: 'द्वारा संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (आधिकारिक वेबसाइट)">ALTCHA</a>',
getAudioChallenge: "ऑडियो चुनौती प्राप्त करें",
label: "मैं रोबोट नहीं हूँ",
loading: "लोड हो रहा है...",
reload: "पुनः लोड करें",
verify: "सत्यापित करें",
verificationRequired: "सत्यापन आवश्यक है!",
verified: "सत्यापित",
verifying: "सत्यापित कर रहे हैं...",
waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",
cancel: "रद्द करें",
enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"
};
globalThis.$altcha.i18n.set("hi", i18n$e);
const i18n$d = {
ariaLinkLabel: "Altcha (situs web resmi)",
enterCode: "Masukkan kode",
enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",
error: "Verifikasi gagal. Coba lagi nanti.",
expired: "Verifikasi telah kedaluwarsa. Coba lagi.",
footer: 'Dilindungi oleh <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (situs web resmi)">ALTCHA</a>',
getAudioChallenge: "Dapatkan tantangan audio",
label: "Saya bukan robot",
loading: "Memuat...",
reload: "Muat ulang",
verify: "Verifikasi",
verificationRequired: "Verifikasi diperlukan!",
verified: "Terverifikasi",
verifying: "Memverifikasi...",
waitAlert: "Memverifikasi... harap tunggu.",
cancel: "Batal",
enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."
};
globalThis.$altcha.i18n.set("id", i18n$d);
const i18n$c = {
ariaLinkLabel: "Altcha (公式ウェブサイト)",
enterCode: "コードを入力",
enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。",
error: "認証に失敗しました。後でもう一度試してください。",
expired: "認証が期限切れです。再試行してください。",
footer: '保護されています <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (公式ウェブサイト)">ALTCHA</a>',
getAudioChallenge: "音声チャレンジを取得",
label: "私はロボットではありません",
loading: "読み込み中...",
reload: "再読み込み",
verify: "確認",
verificationRequired: "認証が必要です!",
verified: "確認済み",
verifying: "確認中...",
waitAlert: "確認中...少々お待ちください。",
cancel: "キャンセル",
enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。"
};
globalThis.$altcha.i18n.set("ja", i18n$c);
const i18n$b = {
ariaLinkLabel: "Altcha (공식 웹사이트)",
enterCode: "코드 입력",
enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",
error: "인증 실패. 나중에 다시 시도해주세요.",
expired: "인증이 만료되었습니다. 다시 시도해주세요.",
footer: 'ALTCHA에서 보호됨 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (공식 웹사이트)">ALTCHA</a>',
getAudioChallenge: "오디오 챌린지 받기",
label: "저는 로봇이 아닙니다",
loading: "로딩 중...",
reload: "새로 고침",
verify: "확인",
verificationRequired: "인증이 필요합니다!",
verified: "확인됨",
verifying: "확인 중...",
waitAlert: "확인 중... 잠시만 기다려주세요.",
cancel: "취소",
enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요."
};
globalThis.$altcha.i18n.set("ko", i18n$b);
const i18n$a = {
ariaLinkLabel: "Altcha (ресми веб-сайт)",
enterCode: "Кодты енгізіңіз",
enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",
error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",
expired: "Тексеру мерзімі аяқталды. Қайталаңыз.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ресми веб-сайт)">ALTCHA</a> қорғайды',
getAudioChallenge: "Аудио сынақ алу",
label: "Мен робот емеспін",
loading: "Жүктелуде...",
reload: "Қайта жүктеу",
verify: "Тексеру",
verificationRequired: "Тексеру талап етіледі!",
verified: "Тексерілді",
verifying: "Тексеруде...",
waitAlert: "Тексерілуде... күте тұрыңыз.",
cancel: "Болдыру",
enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."
};
globalThis.$altcha.i18n.set("kk", i18n$a);
const i18n$9 = {
ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)",
enterCode: "कोड टाकाा",
enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",
error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",
expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",
footer: 'द्वारे संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (अधिकृत संकेतस्थळ)">ALTCHA</a>',
getAudioChallenge: "ऑडिओ चॅलेंज मिळवा",
label: "मी रोबोट नाही",
loading: "लोड होत आहे...",
reload: "पुन्हा लोड करा",
verify: "पुष्टीकरण करा",
verificationRequired: "पडताळणी आवश्यक आहे!",
verified: "पुष्टीकरण झाले",
verifying: "पुष्टीकरण करत आहे...",
waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",
cancel: "रद्द करा",
enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."
};
globalThis.$altcha.i18n.set("mr", i18n$9);
const i18n$8 = {
ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",
enterCode: "குறியீட்டை உள்ளிடவும்",
enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (அதிகாரப்பூர்வ வலைத்தளம்)">ALTCHA</a>',
getAudioChallenge: "ஒலி சவாலை பெறவும்",
label: "நான் ரோபோடான அல்ல",
loading: "செயலாக்கம்...",
reload: "மீண்டும் புதுப்பிக்கவும்",
verify: "சரிபார்க்கவும்",
verificationRequired: "சரிபார்ப்பு தேவை!",
verified: "சரிபார்க்கப்பட்டது",
verifying: "சரிபார்க்கப்படுகிறது...",
waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",
cancel: "ரத்துசெய்",
enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."
};
globalThis.$altcha.i18n.set("ta", i18n$8);
const i18n$7 = {
ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)",
enterCode: "కోడ్‌ని నమోదు చేయండి",
enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (అధికారిక వెబ్‌సైట్)">ALTCHA</a>',
getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
label: "నేను రోబోట్ కాదు",
loading: "లోడ్ అవుతోంది...",
reload: "మళ్ళీ లోడ్ చేయండి",
verify: "ధ్రువీకరించు",
verificationRequired: "ధృవీకరణ అవసరం!",
verified: "ధ్రువీకరించబడింది",
verifying: "ధ్రువీకరణ జరుగుతుంది...",
waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",
cancel: "రద్దు చేయండి",
enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."
};
globalThis.$altcha.i18n.set("te", i18n$7);
const i18n$6 = {
ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)",
enterCode: "ป้อนรหัส",
enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
footer: 'ป้องกันโดย <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (เว็บไซต์ทางการ)">ALTCHA</a>',
getAudioChallenge: "รับการท้าทายเสียง",
label: "ฉันไม่ใช่บอท",
loading: "กำลังโหลด...",
reload: "โหลดใหม่",
verify: "ตรวจสอบ",
verificationRequired: "จำเป็นต้องตรวจสอบ!",
verified: "ตรวจสอบแล้ว",
verifying: "กำลังตรวจสอบ...",
waitAlert: "กำลังตรวจสอบ... กรุณารอ",
cancel: "ยกเลิก",
enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"
};
globalThis.$altcha.i18n.set("th", i18n$6);
const i18n$5 = {
ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)",
enterCode: "کوڈ درج کریں",
enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (سرکاری ویب سائٹ)">ALTCHA</a>',
getAudioChallenge: "آڈیو چیلنج حاصل کریں",
label: "میں روبوٹ نہیں ہوں",
loading: "لوڈ ہو رہا ہے...",
reload: "دوبارہ لوڈ کریں",
verify: "توثیق کریں",
verificationRequired: "تصدیق ضروری ہے!",
verified: "توثیق شدہ",
verifying: "توثیق ہو رہی ہے...",
waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",
cancel: "منسوخ کریں",
enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"
};
globalThis.$altcha.i18n.set("ur", i18n$5);
const i18n$4 = {
ariaLinkLabel: "Altcha (rasmiy veb-sayt)",
enterCode: "Kodni kiriting",
enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",
error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",
expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (rasmiy veb-sayt)">ALTCHA</a> tomonidan himoyalangan',
getAudioChallenge: "Audio sinovni olish",
label: "Men robot emasman",
loading: "Yuklanmoqda...",
reload: "Qayta yuklash",
verify: "Tekshirish",
verificationRequired: "Tekshiruv talab qilinadi!",
verified: "Tekshirildi",
verifying: "Tekshirilmoqda...",
waitAlert: "Tekshirilmoqda... iltimos kuting.",
cancel: "Bekor qilish",
enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."
};
globalThis.$altcha.i18n.set("uz", i18n$4);
const i18n$3 = {
ariaLinkLabel: "Altcha (trang web chính thức)",
enterCode: "Nhập mã",
enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
error: "Xác minh thất bại. Vui lòng thử lại sau.",
expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
footer: 'Được bảo vệ bởi <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (trang web chính thức)">ALTCHA</a>',
getAudioChallenge: "Nhận thử thách âm thanh",
label: "Tôi không phải là robot",
loading: "Đang tải...",
reload: "Tải lại",
verify: "Xác minh",
verificationRequired: "Yêu cầu xác minh!",
verified: "Đã xác minh",
verifying: "Đang xác minh...",
waitAlert: "Đang xác minh... vui lòng chờ.",
cancel: "Hủy bỏ",
enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."
};
globalThis.$altcha.i18n.set("vi", i18n$3);
const i18n$2 = {
ariaLinkLabel: "Altcha (官方网站)",
enterCode: "输入代码",
enterCodeAria: "输入您听到的代码。按空格键播放音频。",
error: "验证失败。稍后再试。",
expired: "验证已过期。请重试。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方网站)">ALTCHA</a> 保护',
getAudioChallenge: "获取音频挑战",
label: "我不是机器人",
loading: "加载中...",
reload: "重新加载",
verify: "验证",
verificationRequired: "需要验证!",
verified: "已验证",
verifying: "正在验证...",
waitAlert: "正在验证... 请稍等。",
cancel: "取消",
enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。"
};
globalThis.$altcha.i18n.set("zh-cn", i18n$2);
const i18n$1 = {
ariaLinkLabel: "Altcha (官方網站)",
cancel: "取消",
enterCode: "輸入代碼",
enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。",
enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。",
error: "驗證失敗。請稍後再試。",
expired: "驗證已過期。請再試一次。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 提供保護',
getAudioChallenge: "取得音訊驗證",
label: "我唔係機械人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "驗證中...",
waitAlert: "驗證中... 請稍候。"
};
globalThis.$altcha.i18n.set("zh-hk", i18n$1);
const i18n = {
ariaLinkLabel: "Altcha (官方網站)",
enterCode: "輸入代碼",
enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
error: "驗證失敗。稍後再試。",
expired: "驗證已過期。請重試。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 保護',
getAudioChallenge: "獲取音頻挑戰",
label: "我不是機器人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "正在驗證...",
waitAlert: "正在驗證... 請稍等。",
cancel: "取消",
enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。"
};
globalThis.$altcha.i18n.set("zh-tw", i18n);
const noop = () => {
};
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function get(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let untracking = false;
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get(scope.store), {
[name]: value
});
} else {
Object.assign(get(scope.store), name);
}
scope.store.set(get(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n$Y = {
ariaLinkLabel: "Altcha (الموقع الرسمي)",
enterCode: "أدخل الرمز",
enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",
error: "فشل التحقق. حاول مرة أخرى لاحقاً.",
expired: "انتهت صلاحية التحقق. حاول مرة أخرى.",
footer: 'محمي بواسطة <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (الموقع الرسمي)">ALTCHA</a>',
getAudioChallenge: "احصل على تحدي صوتي",
label: "أنا لست روبوتاً",
loading: "جارٍ التحميل...",
reload: "إعادة تحميل",
verify: "تحقق",
verificationRequired: "مطلوب التحقق!",
verified: "تم التحقق",
verifying: "جارٍ التحقق...",
waitAlert: "جارٍ التحقق... يرجى الانتظار.",
cancel: "إلغاء",
enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه."
};
globalThis.$altcha.i18n.set("ar", i18n$Y);
const i18n$X = {
ariaLinkLabel: "Altcha (официален уебсайт)",
enterCode: "Въведете код",
enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",
error: "Проверката неуспешна. Моля, опитайте по-късно.",
expired: "Времето за проверка изтече. Моля, опитайте отново.",
footer: 'Защитено от <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официален уебсайт)">ALTCHA</a>',
getAudioChallenge: "Аудио проверка",
label: "Аз не съм робот",
loading: "Зареждане...",
reload: "Презареди",
verify: "Провери",
verificationRequired: "Изисква се проверка!",
verified: "Проверено",
verifying: "Проверява се...",
waitAlert: "Проверката е в процес... моля изчакайте.",
cancel: "Отказ",
enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу."
};
globalThis.$altcha.i18n.set("bg", i18n$X);
const i18n$W = {
ariaLinkLabel: "Altcha (афіцыйны сайт)",
enterCode: "Увядзіце код",
enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",
error: "Праверка не прайшла. Паспрабуйце пазней.",
expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.",
footer: 'Абаронена <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (афіцыйны сайт)">ALTCHA</a>',
getAudioChallenge: "Атрымаць аўдыё выклік",
label: "Я не робат",
loading: "Загрузка...",
reload: "Перазагрузіць",
verify: "Праверыць",
verificationRequired: "Патрабуецца праверка!",
verified: "Праверана",
verifying: "Правяраем...",
waitAlert: "Праверка... калі ласка, пачакайце.",
cancel: "Скасаваць",
enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй."
};
globalThis.$altcha.i18n.set("be", i18n$W);
const i18n$V = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("bs", i18n$V);
const i18n$U = {
ariaLinkLabel: "Altcha (lloc web oficial)",
enterCode: "Introdueix el codi",
enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",
error: "Verificació fallida. Torna-ho a provar més tard.",
expired: "Verificació expirada. Torna-ho a provar.",
footer: 'Protegit per <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (lloc web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtenir un desafiament d’àudio",
label: "No sóc un robot",
loading: "Carregant...",
reload: "Torna a carregar",
verify: "Verificar",
verificationRequired: "Es requereix verificació!",
verified: "Verificat",
verifying: "Verificant...",
waitAlert: "Verificant... si us plau, espera.",
cancel: "Cancel·la",
enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent."
};
globalThis.$altcha.i18n.set("ca", i18n$U);
const i18n$T = {
ariaLinkLabel: "Altcha (oficiální web)",
enterCode: "Zadejte kód",
enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",
error: "Ověření selhalo. Zkuste to prosím později.",
expired: "Ověření vypršelo. Zkuste to prosím znovu.",
footer: 'Chráněno pomocí <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiální web)">ALTCHA</a>',
getAudioChallenge: "Získat audio výzvu",
label: "Nejsem robot",
loading: "Načítání...",
reload: "Znovu načíst",
verify: "Ověřit",
verificationRequired: "Vyžaduje se ověření!",
verified: "Ověřeno",
verifying: "Ověřování...",
waitAlert: "Probíhá ověření... prosím počkejte.",
cancel: "Zrušit",
enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže."
};
globalThis.$altcha.i18n.set("cs", i18n$T);
const i18n$S = {
ariaLinkLabel: "Altcha (officiel hjemmeside)",
enterCode: "Indtast kode",
enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",
error: "Verificering mislykkedes. Prøv venligst igen senere.",
expired: "Verificering udløbet. Prøv venligst igen.",
footer: 'Beskyttet af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiel hjemmeside)">ALTCHA</a>',
getAudioChallenge: "Hent lydudfordring",
label: "Jeg er ikke en robot",
loading: "Indlæser...",
reload: "Genindlæs",
verify: "Verificer",
verificationRequired: "Verificering kræves!",
verified: "Verificeret",
verifying: "Verificerer...",
waitAlert: "Verificerer... vent venligst.",
cancel: "Annuller",
enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder."
};
globalThis.$altcha.i18n.set("da", i18n$S);
const i18n$R = {
ariaLinkLabel: "Altcha (offizielle Website)",
enterCode: "Code eingeben",
enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",
error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",
footer: 'Geschützt durch <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offizielle Website)">ALTCHA</a>',
getAudioChallenge: "Audio-Herausforderung anfordern",
label: "Ich bin kein Roboter",
loading: "Lade...",
reload: "Neu laden",
verify: "Überprüfen",
verificationRequired: "Überprüfung erforderlich!",
verified: "Überprüft",
verifying: "Wird überprüft...",
waitAlert: "Überprüfung läuft... bitte warten.",
cancel: "Abbrechen",
enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."
};
globalThis.$altcha.i18n.set("de", i18n$R);
const i18n$Q = {
ariaLinkLabel: "Altcha (επίσημος ιστότοπος)",
enterCode: "Εισαγάγετε κωδικό",
enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",
error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",
expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.",
footer: 'Προστατεύεται από το <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (επίσημος ιστότοπος)">ALTCHA</a>',
getAudioChallenge: "Λήψη ηχητικής δοκιμασίας",
label: "Δεν είμαι ρομπότ",
loading: "Φόρτωση...",
reload: "Επαναφόρτωση",
verify: "Επαλήθευση",
verificationRequired: "Απαιτείται έλεγχος!",
verified: "Επαληθεύτηκε",
verifying: "Γίνεται επαλήθευση...",
waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.",
cancel: "Ακύρωση",
enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."
};
globalThis.$altcha.i18n.set("el", i18n$Q);
const i18n$P = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Introduce el código",
enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor intente nuevamente más tarde.",
expired: "Verificación expirada. Por favor intente nuevamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un desafío de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Recargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espere.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo."
};
globalThis.$altcha.i18n.set("es-es", i18n$P);
const i18n$O = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Ingresa el código",
enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.",
expired: "La verificación expiró. Por favor inténtalo de nuevo.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un reto de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Volver a cargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espera.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación."
};
globalThis.$altcha.i18n.set("es-419", i18n$O);
const i18n$N = {
ariaLinkLabel: "Altcha (ametlik veebisait)",
enterCode: "Sisesta kood",
enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",
error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",
expired: "Kinnitamine aegus. Proovi uuesti.",
footer: 'Kaitstud <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ametlik veebisait)">ALTCHA</a> poolt',
getAudioChallenge: "Hangi heliülesanne",
label: "Ma ei ole robot",
loading: "Laadimine...",
reload: "Laadi uuesti",
verify: "Kinnita",
verificationRequired: "Kontroll on vajalik!",
verified: "Kinnitatud",
verifying: "Kinnitamine...",
waitAlert: "Kinnitamine... palun oota.",
cancel: "Tühista",
enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood."
};
globalThis.$altcha.i18n.set("et", i18n$N);
const i18n$M = {
ariaLinkLabel: "Altcha (webgune ofiziala)",
enterCode: "Sartu kodea",
enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",
error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.",
expired: "Egiaztatzea iraungi da. Saiatu berriro.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (webgune ofiziala)">ALTCHA</a>k babestuta',
getAudioChallenge: "Jaso audio-erronka bat",
label: "Ez naiz robot bat",
loading: "Kargatzen...",
reload: "Birkargatu",
verify: "Egiaztatu",
verificationRequired: "Egiaztatzea beharrezkoa da!",
verified: "Egiaztatuta",
verifying: "Egiaztatzen...",
waitAlert: "Egiaztatzen... itxaron mesedez.",
cancel: "Utzi",
enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea."
};
globalThis.$altcha.i18n.set("eu", i18n$M);
const i18n$L = {
ariaLinkLabel: "Altcha (وب‌سایت رسمی)",
enterCode: "کد را وارد کنید",
enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",
error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",
expired: "احراز هویت منقضی شد. دوباره تلاش کنید.",
footer: 'محافظت شده توسط <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (وب‌سایت رسمی)">ALTCHA</a>',
getAudioChallenge: "دریافت چالش صوتی",
label: "من ربات نیستم",
loading: "در حال بارگذاری...",
reload: "بارگذاری مجدد",
verify: "تایید",
verificationRequired: "احراز هویت لازم است!",
verified: "تایید شد",
verifying: "در حال تایید...",
waitAlert: "در حال تایید... لطفا منتظر بمانید.",
cancel: "لغو کردن",
enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید."
};
globalThis.$altcha.i18n.set("fa", i18n$L);
const i18n$K = {
ariaLinkLabel: "Altcha (offiziell Websäit)",
enterCode: "Code aginn",
enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",
error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",
expired: "Verifikatioun ofgelaf. Probéiert nach emol.",
footer: 'Geschützt vun <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offiziell Websäit)">ALTCHA</a>',
getAudioChallenge: "Kritt eng Audio-Herausfuerderung",
label: "Ech sinn keen Robot",
loading: "Lueden...",
reload: "Nei lueden",
verify: "Verifizéieren",
verificationRequired: "Verifikatioun néideg!",
verified: "Verifizéiert",
verifying: "Verifizéieren...",
waitAlert: "Verifizéieren... waart wgl.",
cancel: "Ofbriechen",
enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."
};
globalThis.$altcha.i18n.set("lb", i18n$K);
const i18n$J = {
ariaLinkLabel: "Altcha (virallinen verkkosivusto)",
enterCode: "Syötä koodi",
enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",
error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.",
expired: "Varmennus vanhentui. Yritä uudelleen.",
footer: 'Suojattu <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (virallinen verkkosivusto)">ALTCHA</a>:lla',
getAudioChallenge: "Hae äänitehtävä",
label: "En ole robotti",
loading: "Ladataan...",
reload: "Lataa uudelleen",
verify: "Vahvista",
verificationRequired: "Vahvistus vaaditaan!",
verified: "Vahvistettu",
verifying: "Vahvistetaan...",
waitAlert: "Vahvistetaan... odota hetki.",
cancel: "Peruuta",
enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi."
};
globalThis.$altcha.i18n.set("fi", i18n$J);
const i18n$I = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",
error: "Échec de la vérification. Réessayez plus tard.",
expired: "La vérification a expiré. Réessayez.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-ca", i18n$I);
const i18n$H = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",
error: "Échec de la vérification. Essayez à nouveau plus tard.",
expired: "La vérification a expiré. Essayez à nouveau.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-fr", i18n$H);
const i18n$G = {
ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)",
enterCode: "Iontráil cód",
enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",
error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.",
expired: "Tá an fíorú as feidhm. Bain triail eile as.",
footer: 'Cosanta ag <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (láithreán gréasáin oifigiúil)">ALTCHA</a>',
getAudioChallenge: "Faigh dúshlán fuaime",
label: "Níl mé i mo róbat",
loading: "Á luchtú...",
reload: "Athluchtaigh",
verify: "Fíoraigh",
verificationRequired: "Fíorú riachtanach!",
verified: "Fíoraithe",
verifying: "Fíorú ar siúl...",
waitAlert: "Fíorú ar siúl... fan go fóill.",
cancel: "Cealaigh",
enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."
};
globalThis.$altcha.i18n.set("ga", i18n$G);
const i18n$F = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",
error: "Provjera nije uspjela. Molimo pokušajte kasnije.",
expired: "Provjera je istekla. Molimo pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Audio provjera",
label: "Ja nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Provjeri",
verificationRequired: "Potrebna je provjera!",
verified: "Provjereno",
verifying: "Provjeravanje...",
waitAlert: "Provjera je u tijeku... molimo pričekajte.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("hr", i18n$F);
const i18n$E = {
ariaLinkLabel: "Altcha (hivatalos weboldal)",
enterCode: "Írja be a kódot",
enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",
error: "A hitelesítés nem sikerült. Próbáld meg később újra.",
expired: "A hitelesítés lejárt. Próbáld újra.",
footer: 'Védve a következő által: <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (hivatalos weboldal)">ALTCHA</a>',
getAudioChallenge: "Hangalapú kihívás kérése",
label: "Nem vagyok robot",
loading: "Betöltés...",
reload: "Újratöltés",
verify: "Ellenőrzés",
verificationRequired: "Ellenőrzés szükséges!",
verified: "Ellenőrizve",
verifying: "Ellenőrzés folyamatban...",
waitAlert: "Ellenőrzés folyamatban... kérlek várj.",
cancel: "Mégse",
enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját."
};
globalThis.$altcha.i18n.set("hu", i18n$E);
const i18n$D = {
ariaLinkLabel: "Altcha (opinber vefsíða)",
enterCode: "Sláðu inn kóða",
enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",
error: "Staðfesting mistókst. Reyndu aftur síðar.",
expired: "Staðfesting er útrunnin. Reyndu aftur.",
footer: 'Verndað af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (opinber vefsíða)">ALTCHA</a>',
getAudioChallenge: "Fá hljóðáskorun",
label: "Ég er ekki robot",
loading: "Hleður...",
reload: "Hleð aftur",
verify: "Staðfesta",
verificationRequired: "Staðfesting er nauðsynleg!",
verified: "Staðfest",
verifying: "Að staðfesta...",
waitAlert: "Að staðfesta... vinsamlegast bíða.",
cancel: "Hætta við",
enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."
};
globalThis.$altcha.i18n.set("is", i18n$D);
const i18n$C = {
ariaLinkLabel: "Altcha (sito ufficiale)",
enterCode: "Inserisci il codice",
enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",
error: "Verifica fallita. Riprova più tardi.",
expired: "Verifica scaduta. Riprova.",
footer: 'Protetto da <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sito ufficiale)">ALTCHA</a>',
getAudioChallenge: "Ottieni una sfida audio",
label: "Non sono un robot",
loading: "Caricamento...",
reload: "Ricarica",
verify: "Verifica",
verificationRequired: "Verifica richiesta!",
verified: "Verificato",
verifying: "Verifica in corso...",
waitAlert: "Verifica in corso... attendere.",
cancel: "Annulla",
enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante."
};
globalThis.$altcha.i18n.set("it", i18n$C);
const i18n$B = {
ariaLinkLabel: "Altcha (oficiali svetainė)",
enterCode: "Įveskite kodą",
enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",
error: "Patvirtinimas nepavyko. Bandykite vėliau.",
expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.",
footer: 'Apsaugota <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiali svetainė)">ALTCHA</a>',
getAudioChallenge: "Gauti garso užduotį",
label: "Aš nesu robotas",
loading: "Įkeliama...",
reload: "Įkelti iš naujo",
verify: "Patvirtinti",
verificationRequired: "Reikalingas patvirtinimas!",
verified: "Patvirtinta",
verifying: "Tikrinama...",
waitAlert: "Tikrinama... prašome palaukti.",
cancel: "Atšaukti",
enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."
};
globalThis.$altcha.i18n.set("lt", i18n$B);
const i18n$A = {
ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)",
enterCode: "Ievadiet kodu",
enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",
error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",
expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",
footer: 'Aizsargāts ar <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiālā tīmekļa vietne)">ALTCHA</a>',
getAudioChallenge: "Saņemt audio izaicinājumu",
label: "Es neesmu robots",
loading: "Notiek ielāde...",
reload: "Pārlādēt",
verify: "Verificēt",
verificationRequired: "Nepieciešama verifikācija!",
verified: "Verificēts",
verifying: "Notiek verifikācija...",
waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.",
cancel: "Atcelt",
enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."
};
globalThis.$altcha.i18n.set("lv", i18n$A);
const i18n$z = {
ariaLinkLabel: "Altcha (sit uffiċjali)",
enterCode: "Idħol il-kodiċi",
enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",
error: "Il-verifika falliet. Erġa’ pprova aktar tard.",
expired: "Il-verifika skadiet. Erġa’ pprova.",
footer: 'Protett minn <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sit uffiċjali)">ALTCHA</a>',
getAudioChallenge: "Ikseb sfida bl-awdjo",
label: "M’inix robot",
loading: "Qed jitgħabba...",
reload: "Ittella’ mill-ġdid",
verify: "Ivverifika",
verificationRequired: "Verifika meħtieġa!",
verified: "Ivverifikat",
verifying: "Verifika għaddejja...",
waitAlert: "Verifika għaddejja... stenna ftit.",
cancel: "Ikkanċella",
enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."
};
globalThis.$altcha.i18n.set("mt", i18n$z);
const i18n$y = {
ariaLinkLabel: "Altcha (offisiell nettside)",
enterCode: "Skriv inn kode",
enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.",
error: "Verifisering mislyktes. Prøv igjen senere.",
expired: "Verifiseringen utløp. Prøv igjen.",
footer: 'Beskyttet av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offisiell nettside)">ALTCHA</a>',
getAudioChallenge: "Få en lydutfordring",
label: "Jeg er ikke en robot",
loading: "Laster...",
reload: "Last på nytt",
verify: "Verifiser",
verificationRequired: "Verifisering kreves!",
verified: "Verifisert",
verifying: "Verifiserer...",
waitAlert: "Verifiserer... vennligst vent.",
cancel: "Avbryt",
enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor."
};
globalThis.$altcha.i18n.set("nb", i18n$y);
const i18n$x = {
ariaLinkLabel: "Altcha (officiële website)",
enterCode: "Voer code in",
enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",
error: "Verificatie mislukt. Probeer het later opnieuw.",
expired: "Verificatie verlopen. Probeer het opnieuw.",
footer: 'Beschermd door <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiële website)">ALTCHA</a>',
getAudioChallenge: "Audio-uitdaging ontvangen",
label: "Ik ben geen robot",
loading: "Laden...",
reload: "Herladen",
verify: "Verifiëren",
verificationRequired: "Verificatie vereist!",
verified: "Geverifieerd",
verifying: "Bezig met verifiëren...",
waitAlert: "Bezig met verifiëren... even geduld a.u.b.",
cancel: "Annuleren",
enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in."
};
globalThis.$altcha.i18n.set("nl", i18n$x);
const i18n$w = {
ariaLinkLabel: "Altcha (oficjalna strona internetowa)",
enterCode: "Wprowadź kod",
enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",
error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.",
expired: "Weryfikacja wygasła. Spróbuj ponownie.",
footer: 'Chronione przez <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficjalna strona internetowa)">ALTCHA</a>',
getAudioChallenge: "Pobierz zadanie dźwiękowe",
label: "Nie jestem robotem",
loading: "Ładowanie...",
reload: "Odśwież",
verify: "Zweryfikuj",
verificationRequired: "Wymagana weryfikacja!",
verified: "Zweryfikowano",
verifying: "Weryfikacja...",
waitAlert: "Trwa weryfikacja... proszę czekać.",
cancel: "Anuluj",
enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka."
};
globalThis.$altcha.i18n.set("pl", i18n$w);
const i18n$v = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduza o código",
enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",
error: "A verificação falhou. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Não sou um robô",
loading: "A carregar...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "A verificar...",
waitAlert: "A verificar... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-pt", i18n$v);
const i18n$u = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Digite o código",
enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",
error: "Falha na verificação. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Eu não sou um robô",
loading: "Carregando...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-br", i18n$u);
const i18n$t = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduceți codul",
enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",
error: "Verificarea a eșuat. Încearcă din nou mai târziu.",
expired: "Verificarea a expirat. Încearcă din nou.",
footer: 'Protejat de <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obține o provocare audio",
label: "Nu sunt un robot",
loading: "Se încarcă...",
reload: "Reîncarcă",
verify: "Verifică",
verificationRequired: "Verificare necesară!",
verified: "Verificat",
verifying: "Se verifică...",
waitAlert: "Se verifică... te rugăm să aștepți.",
cancel: "Anulare",
enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."
};
globalThis.$altcha.i18n.set("ro", i18n$t);
const i18n$s = {
ariaLinkLabel: "Altcha (официальный сайт)",
enterCode: "Введите код",
enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",
error: "Ошибка верификации. Попробуйте позже.",
expired: "Срок действия верификации истек. Попробуйте снова.",
footer: 'Защищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официальный сайт)">ALTCHA</a>',
getAudioChallenge: "Получить аудио задачу",
label: "Я не робот",
loading: "Загрузка...",
reload: "Перезагрузить",
verify: "Проверить",
verificationRequired: "Требуется проверка!",
verified: "Проверено",
verifying: "Идет проверка...",
waitAlert: "Идет проверка... Пожалуйста, подождите.",
cancel: "Отмена",
enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже."
};
globalThis.$altcha.i18n.set("ru", i18n$s);
const i18n$r = {
ariaLinkLabel: "Altcha (oficiálna webová stránka)",
enterCode: "Zadajte kód",
enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",
error: "Verifikácia zlyhala. Skúste to znova neskôr.",
expired: "Verifikácia vypršala. Skúste to znova.",
footer: 'Chránené <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiálna webová stránka)">ALTCHA</a>',
getAudioChallenge: "Získať audio výzvu",
label: "Nie som robot",
loading: "Načítava sa...",
reload: "Obnoviť",
verify: "Verifikovať",
verificationRequired: "Vyžaduje sa overenie!",
verified: "Verifikované",
verifying: "Prebieha verifikácia...",
waitAlert: "Prebieha verifikácia... prosím čakajte.",
cancel: "Zrušiť",
enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie."
};
globalThis.$altcha.i18n.set("sk", i18n$r);
const i18n$q = {
ariaLinkLabel: "Altcha (uradna spletna stran)",
enterCode: "Vnesite kodo",
enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",
error: "Preverjanje ni uspelo. Poskusite znova kasneje.",
expired: "Preverjanje je poteklo. Poskusite znova.",
footer: 'Zaščiteno z <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (uradna spletna stran)">ALTCHA</a>',
getAudioChallenge: "Pridobite zvočni izziv",
label: "Nisem robot",
loading: "Nalagam...",
reload: "Ponovno naloži",
verify: "Preveri",
verificationRequired: "Potrebna je preveritev!",
verified: "Preverjeno",
verifying: "Preverjanje...",
waitAlert: "Preverjanje... prosim počakajte.",
cancel: "Preklic",
enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."
};
globalThis.$altcha.i18n.set("sl", i18n$q);
const i18n$p = {
ariaLinkLabel: "Altcha (faqja zyrtare)",
enterCode: "Fut kodin",
enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",
error: "Verifikimi dështoi. Provoni përsëri më vonë.",
expired: "Verifikimi ka skaduar. Provoni përsëri.",
footer: 'I mbrojtur nga <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (faqja zyrtare)">ALTCHA</a>',
getAudioChallenge: "Merr një sfidë audio",
label: "Unë nuk jam një robot",
loading: "Duke u ngarkuar...",
reload: "Ringarko",
verify: "Verifiko",
verificationRequired: "Kërkohet verifikimi!",
verified: "I verifikuar",
verifying: "Duke verifikuar...",
waitAlert: "Duke verifikuar... ju lutem prisni.",
cancel: "Anuloje",
enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."
};
globalThis.$altcha.i18n.set("sq", i18n$p);
const i18n$o = {
ariaLinkLabel: "Altcha (zvanična web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (zvanična web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovo učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Откажи",
enterCodeFromImage: "Да бисте наставили, унесите код са слике испод."
};
globalThis.$altcha.i18n.set("sr", i18n$o);
const i18n$n = {
ariaLinkLabel: "Altcha (officiell webbplats)",
enterCode: "Ange kod",
enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
error: "Verifiering misslyckades. Försök igen senare.",
expired: "Verifieringen har gått ut. Försök igen.",
footer: 'Skyddad av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiell webbplats)">ALTCHA</a>',
getAudioChallenge: "Få ljudutmaning",
label: "Jag är inte en robot",
loading: "Laddar...",
reload: "Ladda om",
verify: "Verifiera",
verificationRequired: "Verifiering krävs!",
verified: "Verifierad",
verifying: "Verifierar...",
waitAlert: "Verifierar... vänligen vänta.",
cancel: "Avbryt",
enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan."
};
globalThis.$altcha.i18n.set("sv", i18n$n);
const i18n$m = {
ariaLinkLabel: "Altcha (resmi web sitesi)",
enterCode: "Kodu girin",
enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
footer: 'ALTCHA tarafından korunuyor <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (resmi web sitesi)">ALTCHA</a>',
getAudioChallenge: "Sesli doğrulama al",
label: "Ben robot değilim",
loading: "Yükleniyor...",
reload: "Yeniden yükle",
verify: "Doğrula",
verificationRequired: "Doğrulama gerekli!",
verified: "Doğrulandı",
verifying: "Doğrulama yapılıyor...",
waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.",
cancel: "İptal",
enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin."
};
globalThis.$altcha.i18n.set("tr", i18n$m);
const i18n$l = {
ariaLinkLabel: "Altcha (офіційний сайт)",
enterCode: "Введіть код",
enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
error: "Перевірка не вдалася. Спробуйте пізніше.",
expired: "Перевірка прострочена. Спробуйте знову.",
footer: 'Захищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (офіційний сайт)">ALTCHA</a>',
getAudioChallenge: "Отримати аудіо-челлендж",
label: "Я не робот",
loading: "Завантаження...",
reload: "Перезавантажити",
verify: "Перевірити",
verificationRequired: "Потрібна перевірка!",
verified: "Перевірено",
verifying: "Перевіряється...",
waitAlert: "Перевірка... будь ласка, зачекайте.",
cancel: "Скасувати",
enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче."
};
globalThis.$altcha.i18n.set("uk", i18n$l);
const i18n$k = {
ariaLinkLabel: "Altcha (amptelike webwerf)",
enterCode: "Voer kode in",
enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",
error: "Verifikasie het misluk. Probeer later weer.",
expired: "Verifikasie het verval. Probeer weer.",
footer: 'Beskerm deur <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (amptelike webwerf)">ALTCHA</a>',
getAudioChallenge: "Kry 'n klankuitdaging",
label: "Ek is nie 'n robot nie",
loading: "Laai...",
reload: "Laai weer",
verify: "Verifieer",
verificationRequired: "Verifikasie is vereis!",
verified: "Geverifieer",
verifying: "Verifieer...",
waitAlert: "Verifieer... wag asseblief.",
cancel: "Kanselleer",
enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."
};
globalThis.$altcha.i18n.set("af", i18n$k);
const i18n$j = {
ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)",
enterCode: "ኮድ አስገባ",
enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",
error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",
expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",
footer: 'በ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ዋናው ድህረ ገጽ)">ALTCHA</a> የተጠበቀ',
getAudioChallenge: "የድምጽ ፈተና ያግኙ",
label: "እኔ ሮቦት አይደለሁም",
loading: "በመጫን ላይ...",
reload: "እንደገና ጫን",
verify: "አረጋግጥ",
verificationRequired: "ማረጋገጫ ያስፈልጋል!",
verified: "ተረጋግጧል",
verifying: "በማረጋገጥ ላይ...",
waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",
cancel: "ይቅር",
enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"
};
globalThis.$altcha.i18n.set("am", i18n$j);
const i18n$i = {
ariaLinkLabel: "Altcha (tovuti rasmi)",
enterCode: "Weka nambari",
enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.",
error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.",
expired: "Uthibitishaji umeisha. Jaribu tena.",
footer: 'Imealindwa na <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (tovuti rasmi)">ALTCHA</a>',
getAudioChallenge: "Pata changamoto ya sauti",
label: "Mimi sio roboti",
loading: "Inapakia...",
reload: "Pakia tena",
verify: "Thibitisha",
verificationRequired: "Uthibitishaji unahitajika!",
verified: "Imethibitishwa",
verifying: "Inathibitisha...",
waitAlert: "Inathibitisha... tafadhali subiri.",
cancel: "Ghairi",
enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."
};
globalThis.$altcha.i18n.set("sw", i18n$i);
const i18n$h = {
ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)",
enterCode: "Tẹ koodu sii",
enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",
error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",
expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",
footer: 'Ti wa ni ààbò nipasẹ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oju opo wẹẹbu osise)">ALTCHA</a>',
getAudioChallenge: "Gba ìjàdú ohùn",
label: "Emi kii ṣe ẹrọ",
loading: "Ó ń gbé sílẹ̀...",
reload: "Tún gbé wọlé",
verify: "Ṣàdájọ́",
verificationRequired: "Ìdájọ́kòwò ni a nílò!",
verified: "A ti dájọ́",
verifying: "Ó ń ṣàdájọ́...",
waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",
cancel: "Fagbọsẹ",
enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."
};
globalThis.$altcha.i18n.set("yo", i18n$h);
const i18n$g = {
ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)",
enterCode: "কোড লিখুন",
enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",
error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",
expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",
footer: 'দ্বারা সুরক্ষিত <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (অফিসিয়াল ওয়েবসাইট)">ALTCHA</a>',
getAudioChallenge: "অডিও চ্যালেঞ্জ নিন",
label: "আমি রোবট নই",
loading: "লোড হচ্ছে...",
reload: "পুনরায় লোড করুন",
verify: "যাচাই করুন",
verificationRequired: "যাচাই প্রয়োজন!",
verified: "যাচাই করা হয়েছে",
verifying: "যাচাই করা হচ্ছে...",
waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",
cancel: "বাতিল করুন",
enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"
};
globalThis.$altcha.i18n.set("bn", i18n$g);
const i18n$f = {
ariaLinkLabel: "Altcha (אתר רשמי)",
enterCode: "הזן קוד",
enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",
error: "האימות נכשל. נסה שוב מאוחר יותר.",
expired: "תוקף האימות פג. נסה שוב.",
footer: 'מוגן על ידי <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (אתר רשמי)">ALTCHA</a>',
getAudioChallenge: "קבל אתגר שמע",
label: "אני לא רובוט",
loading: "טוען...",
reload: "טען מחדש",
verify: "אמת",
verificationRequired: "נדרש אימות!",
verified: "אומת",
verifying: "מאמת...",
waitAlert: "מבצע אימות... אנא המתן.",
cancel: "ביטול",
enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."
};
globalThis.$altcha.i18n.set("he", i18n$f);
const i18n$e = {
ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)",
enterCode: "कोड दर्ज करेंं",
enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",
error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",
expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",
footer: 'द्वारा संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (आधिकारिक वेबसाइट)">ALTCHA</a>',
getAudioChallenge: "ऑडियो चुनौती प्राप्त करें",
label: "मैं रोबोट नहीं हूँ",
loading: "लोड हो रहा है...",
reload: "पुनः लोड करें",
verify: "सत्यापित करें",
verificationRequired: "सत्यापन आवश्यक है!",
verified: "सत्यापित",
verifying: "सत्यापित कर रहे हैं...",
waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",
cancel: "रद्द करें",
enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"
};
globalThis.$altcha.i18n.set("hi", i18n$e);
const i18n$d = {
ariaLinkLabel: "Altcha (situs web resmi)",
enterCode: "Masukkan kode",
enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",
error: "Verifikasi gagal. Coba lagi nanti.",
expired: "Verifikasi telah kedaluwarsa. Coba lagi.",
footer: 'Dilindungi oleh <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (situs web resmi)">ALTCHA</a>',
getAudioChallenge: "Dapatkan tantangan audio",
label: "Saya bukan robot",
loading: "Memuat...",
reload: "Muat ulang",
verify: "Verifikasi",
verificationRequired: "Verifikasi diperlukan!",
verified: "Terverifikasi",
verifying: "Memverifikasi...",
waitAlert: "Memverifikasi... harap tunggu.",
cancel: "Batal",
enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."
};
globalThis.$altcha.i18n.set("id", i18n$d);
const i18n$c = {
ariaLinkLabel: "Altcha (公式ウェブサイト)",
enterCode: "コードを入力",
enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。",
error: "認証に失敗しました。後でもう一度試してください。",
expired: "認証が期限切れです。再試行してください。",
footer: '保護されています <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (公式ウェブサイト)">ALTCHA</a>',
getAudioChallenge: "音声チャレンジを取得",
label: "私はロボットではありません",
loading: "読み込み中...",
reload: "再読み込み",
verify: "確認",
verificationRequired: "認証が必要です!",
verified: "確認済み",
verifying: "確認中...",
waitAlert: "確認中...少々お待ちください。",
cancel: "キャンセル",
enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。"
};
globalThis.$altcha.i18n.set("ja", i18n$c);
const i18n$b = {
ariaLinkLabel: "Altcha (공식 웹사이트)",
enterCode: "코드 입력",
enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",
error: "인증 실패. 나중에 다시 시도해주세요.",
expired: "인증이 만료되었습니다. 다시 시도해주세요.",
footer: 'ALTCHA에서 보호됨 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (공식 웹사이트)">ALTCHA</a>',
getAudioChallenge: "오디오 챌린지 받기",
label: "저는 로봇이 아닙니다",
loading: "로딩 중...",
reload: "새로 고침",
verify: "확인",
verificationRequired: "인증이 필요합니다!",
verified: "확인됨",
verifying: "확인 중...",
waitAlert: "확인 중... 잠시만 기다려주세요.",
cancel: "취소",
enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요."
};
globalThis.$altcha.i18n.set("ko", i18n$b);
const i18n$a = {
ariaLinkLabel: "Altcha (ресми веб-сайт)",
enterCode: "Кодты енгізіңіз",
enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",
error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",
expired: "Тексеру мерзімі аяқталды. Қайталаңыз.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ресми веб-сайт)">ALTCHA</a> қорғайды',
getAudioChallenge: "Аудио сынақ алу",
label: "Мен робот емеспін",
loading: "Жүктелуде...",
reload: "Қайта жүктеу",
verify: "Тексеру",
verificationRequired: "Тексеру талап етіледі!",
verified: "Тексерілді",
verifying: "Тексеруде...",
waitAlert: "Тексерілуде... күте тұрыңыз.",
cancel: "Болдыру",
enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."
};
globalThis.$altcha.i18n.set("kk", i18n$a);
const i18n$9 = {
ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)",
enterCode: "कोड टाकाा",
enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",
error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",
expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",
footer: 'द्वारे संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (अधिकृत संकेतस्थळ)">ALTCHA</a>',
getAudioChallenge: "ऑडिओ चॅलेंज मिळवा",
label: "मी रोबोट नाही",
loading: "लोड होत आहे...",
reload: "पुन्हा लोड करा",
verify: "पुष्टीकरण करा",
verificationRequired: "पडताळणी आवश्यक आहे!",
verified: "पुष्टीकरण झाले",
verifying: "पुष्टीकरण करत आहे...",
waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",
cancel: "रद्द करा",
enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."
};
globalThis.$altcha.i18n.set("mr", i18n$9);
const i18n$8 = {
ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",
enterCode: "குறியீட்டை உள்ளிடவும்",
enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (அதிகாரப்பூர்வ வலைத்தளம்)">ALTCHA</a>',
getAudioChallenge: "ஒலி சவாலை பெறவும்",
label: "நான் ரோபோடான அல்ல",
loading: "செயலாக்கம்...",
reload: "மீண்டும் புதுப்பிக்கவும்",
verify: "சரிபார்க்கவும்",
verificationRequired: "சரிபார்ப்பு தேவை!",
verified: "சரிபார்க்கப்பட்டது",
verifying: "சரிபார்க்கப்படுகிறது...",
waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",
cancel: "ரத்துசெய்",
enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."
};
globalThis.$altcha.i18n.set("ta", i18n$8);
const i18n$7 = {
ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)",
enterCode: "కోడ్‌ని నమోదు చేయండి",
enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (అధికారిక వెబ్‌సైట్)">ALTCHA</a>',
getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
label: "నేను రోబోట్ కాదు",
loading: "లోడ్ అవుతోంది...",
reload: "మళ్ళీ లోడ్ చేయండి",
verify: "ధ్రువీకరించు",
verificationRequired: "ధృవీకరణ అవసరం!",
verified: "ధ్రువీకరించబడింది",
verifying: "ధ్రువీకరణ జరుగుతుంది...",
waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",
cancel: "రద్దు చేయండి",
enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."
};
globalThis.$altcha.i18n.set("te", i18n$7);
const i18n$6 = {
ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)",
enterCode: "ป้อนรหัส",
enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
footer: 'ป้องกันโดย <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (เว็บไซต์ทางการ)">ALTCHA</a>',
getAudioChallenge: "รับการท้าทายเสียง",
label: "ฉันไม่ใช่บอท",
loading: "กำลังโหลด...",
reload: "โหลดใหม่",
verify: "ตรวจสอบ",
verificationRequired: "จำเป็นต้องตรวจสอบ!",
verified: "ตรวจสอบแล้ว",
verifying: "กำลังตรวจสอบ...",
waitAlert: "กำลังตรวจสอบ... กรุณารอ",
cancel: "ยกเลิก",
enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"
};
globalThis.$altcha.i18n.set("th", i18n$6);
const i18n$5 = {
ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)",
enterCode: "کوڈ درج کریں",
enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (سرکاری ویب سائٹ)">ALTCHA</a>',
getAudioChallenge: "آڈیو چیلنج حاصل کریں",
label: "میں روبوٹ نہیں ہوں",
loading: "لوڈ ہو رہا ہے...",
reload: "دوبارہ لوڈ کریں",
verify: "توثیق کریں",
verificationRequired: "تصدیق ضروری ہے!",
verified: "توثیق شدہ",
verifying: "توثیق ہو رہی ہے...",
waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",
cancel: "منسوخ کریں",
enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"
};
globalThis.$altcha.i18n.set("ur", i18n$5);
const i18n$4 = {
ariaLinkLabel: "Altcha (rasmiy veb-sayt)",
enterCode: "Kodni kiriting",
enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",
error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",
expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (rasmiy veb-sayt)">ALTCHA</a> tomonidan himoyalangan',
getAudioChallenge: "Audio sinovni olish",
label: "Men robot emasman",
loading: "Yuklanmoqda...",
reload: "Qayta yuklash",
verify: "Tekshirish",
verificationRequired: "Tekshiruv talab qilinadi!",
verified: "Tekshirildi",
verifying: "Tekshirilmoqda...",
waitAlert: "Tekshirilmoqda... iltimos kuting.",
cancel: "Bekor qilish",
enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."
};
globalThis.$altcha.i18n.set("uz", i18n$4);
const i18n$3 = {
ariaLinkLabel: "Altcha (trang web chính thức)",
enterCode: "Nhập mã",
enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
error: "Xác minh thất bại. Vui lòng thử lại sau.",
expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
footer: 'Được bảo vệ bởi <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (trang web chính thức)">ALTCHA</a>',
getAudioChallenge: "Nhận thử thách âm thanh",
label: "Tôi không phải là robot",
loading: "Đang tải...",
reload: "Tải lại",
verify: "Xác minh",
verificationRequired: "Yêu cầu xác minh!",
verified: "Đã xác minh",
verifying: "Đang xác minh...",
waitAlert: "Đang xác minh... vui lòng chờ.",
cancel: "Hủy bỏ",
enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."
};
globalThis.$altcha.i18n.set("vi", i18n$3);
const i18n$2 = {
ariaLinkLabel: "Altcha (官方网站)",
enterCode: "输入代码",
enterCodeAria: "输入您听到的代码。按空格键播放音频。",
error: "验证失败。稍后再试。",
expired: "验证已过期。请重试。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方网站)">ALTCHA</a> 保护',
getAudioChallenge: "获取音频挑战",
label: "我不是机器人",
loading: "加载中...",
reload: "重新加载",
verify: "验证",
verificationRequired: "需要验证!",
verified: "已验证",
verifying: "正在验证...",
waitAlert: "正在验证... 请稍等。",
cancel: "取消",
enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。"
};
globalThis.$altcha.i18n.set("zh-cn", i18n$2);
const i18n$1 = {
ariaLinkLabel: "Altcha (官方網站)",
cancel: "取消",
enterCode: "輸入代碼",
enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。",
enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。",
error: "驗證失敗。請稍後再試。",
expired: "驗證已過期。請再試一次。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 提供保護',
getAudioChallenge: "取得音訊驗證",
label: "我唔係機械人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "驗證中...",
waitAlert: "驗證中... 請稍候。"
};
globalThis.$altcha.i18n.set("zh-hk", i18n$1);
const i18n = {
ariaLinkLabel: "Altcha (官方網站)",
enterCode: "輸入代碼",
enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
error: "驗證失敗。稍後再試。",
expired: "驗證已過期。請重試。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 保護',
getAudioChallenge: "獲取音頻挑戰",
label: "我不是機器人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "正在驗證...",
waitAlert: "正在驗證... 請稍等。",
cancel: "取消",
enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。"
};
globalThis.$altcha.i18n.set("zh-tw", i18n);
 
data/skin/front/moment/js/gd_board_goods.js+110
변경 전gd_board_goods.js
}
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/**
* 댓글작성
*/
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
$.ajax({
method: "POST",
url: "../board/memo_ps.php",
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return true;
};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function gd_open_write_layer(bdId, goodsNo, sno) {
$.ajax({
method: "GET",
}).success(function (data) {
writerLayer.show(data);
gd_center_layer();
 
}).error(function (e) {
alert(e.responseText);
});
}
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/**
* 댓글작성
*/
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
$.ajax({
method: "POST",
url: "../board/memo_ps.php",
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return true;
};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function gd_open_write_layer(bdId, goodsNo, sno) {
$.ajax({
method: "GET",
}).success(function (data) {
writerLayer.show(data);
gd_center_layer();
 
}).error(function (e) {
alert(e.responseText);
});
 
변경 후gd_board_goods.js
}
}
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
 
/**
* 댓글작성
*/
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
$.ajax({
method: "POST",
url: "../board/memo_ps.php",
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return true;
};
 
function loadAltchaModule() {
if (window.gdAltchaModuleLoaded) {
return;
}
const wrap = document.querySelector('.capcha_altcha[data-altcha-src]');
if (!wrap) {
return;
}
window.gdAltchaModuleLoaded = true;
const src = wrap.getAttribute('data-altcha-src');
[src, src.replace('altcha.js', 'i18n.js')].forEach(function (url) {
const script = document.createElement('script');
script.type = 'module';
script.src = url;
document.head.appendChild(script);
});
}
 
function gd_open_write_layer(bdId, goodsNo, sno) {
$.ajax({
method: "GET",
}).success(function (data) {
writerLayer.show(data);
gd_center_layer();
loadAltchaModule();
}).error(function (e) {
alert(e.responseText);
});
}
}
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
 
/**
* 댓글작성
*/
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
$.ajax({
method: "POST",
url: "../board/memo_ps.php",
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return true;
};
 
function loadAltchaModule() {
if (window.gdAltchaModuleLoaded) {
return;
}
const wrap = document.querySelector('.capcha_altcha[data-altcha-src]');
if (!wrap) {
return;
}
window.gdAltchaModuleLoaded = true;
const src = wrap.getAttribute('data-altcha-src');
[src, src.replace('altcha.js', 'i18n.js')].forEach(function (url) {
const script = document.createElement('script');
script.type = 'module';
script.src = url;
document.head.appendChild(script);
});
}
 
function gd_open_write_layer(bdId, goodsNo, sno) {
$.ajax({
method: "GET",
}).success(function (data) {
writerLayer.show(data);
gd_center_layer();
loadAltchaModule();
}).error(function (e) {
alert(e.responseText);
});
 
data/skin/front/moment/js/gd_board_view.js+72
변경 전gd_board_view.js
return true;
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/**
* 댓글작성
*/
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return true;
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/**
* 댓글작성
*/
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
 
변경 후gd_board_view.js
return true;
}
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
 
/**
* 댓글작성
*/
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return true;
}
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
 
/**
* 댓글작성
*/
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
 
data/skin/front/moment/js/gd_board_write.js+12-52
변경 전gd_board_write.js
if ($('.file_upload_sec').length > 10) {
$('.file_upload_sec:last').remove();
}
$.validator.addMethod("checkCaptcha", function (value, element, fl) {
var success = false;
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'captcha', 'captchaKey': value },
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
if (result == 'true') {
success = true;
}
}).error(function (e) {
alert(e.responseText);
});
return success;
}, __("자동등록방지 문자가 틀렸습니다."));
$("#frmWrite").validate({
 
submitHandler: function (form) {
if (boardSuubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
 
 
 
 
 
if($(form).find('[name="uploadType"]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
writerNm: 'required',
writerPw: 'required',
subject: 'required',
captchaKey: {
required: true,
checkCaptcha : true,
},
goodsPt: 'required',
writerEmail: {
required: true,
private: {
required: __('개인정보 수집 및 이용동의를 체크해주세요.')
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.'),
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
if ($('.file_upload_sec').length > 10) {
$('.file_upload_sec:last').remove();
}
$.validator.addMethod("checkCaptcha", function (value, element, fl) {
var success = false;
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'captcha', 'captchaKey': value },
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
if (result == 'true') {
success = true;
}
}).error(function (e) {
alert(e.responseText);
});
return success;
}, __("자동등록방지 문자가 틀렸습니다."));
$("#frmWrite").validate({
 
submitHandler: function (form) {
if (boardSuubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
 
 
 
 
 
if($(form).find('[name="uploadType"]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
writerNm: 'required',
writerPw: 'required',
subject: 'required',
captchaKey: {
required: true,
checkCaptcha : true,
},
goodsPt: 'required',
writerEmail: {
required: true,
private: {
required: __('개인정보 수집 및 이용동의를 체크해주세요.')
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.'),
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
 
변경 후gd_board_write.js
if ($('.file_upload_sec').length > 10) {
$('.file_upload_sec:last').remove();
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$("#frmWrite").validate({
ignore: 'altcha-widget *',
submitHandler: function (form) {
if (boardSuubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
if($(form).find('[name="uploadType"]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
writerNm: 'required',
writerPw: 'required',
subject: 'required',
 
 
 
 
goodsPt: 'required',
writerEmail: {
required: true,
private: {
required: __('개인정보 수집 및 이용동의를 체크해주세요.')
},
 
 
 
goodsPt: {
required: __('평가를 체크해주세요.')
},
if ($('.file_upload_sec').length > 10) {
$('.file_upload_sec:last').remove();
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$("#frmWrite").validate({
ignore: 'altcha-widget *',
submitHandler: function (form) {
if (boardSuubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
if($(form).find('[name="uploadType"]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
writerNm: 'required',
writerPw: 'required',
subject: 'required',
 
 
 
 
goodsPt: 'required',
writerEmail: {
required: true,
private: {
required: __('개인정보 수집 및 이용동의를 체크해주세요.')
},
 
 
 
goodsPt: {
required: __('평가를 체크해주세요.')
},
 
data/skin/front/moment/js/gd_common.js+46
변경 전gd_common.js
/**
* 프레임 리사이즈
*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function gd_resize_frame(obj) {
var iframeHeight = (obj).contentWindow.document.body.clientHeight;
(obj).height = iframeHeight + 80;
 
변경 후gd_common.js
/**
* 프레임 리사이즈
*/
/* iframe(mypage 등)으로 board 목록이 실릴 때, onload 1회 측정(resize_frame/gd_resize_frame) 이후에도
댓글/답글 폼 토글, ALTCHA 위젯 지연 렌더, 댓글 등록/삭제 등으로 내용 높이가 바뀌면
부모 iframe 높이를 다시 맞춘다. body 높이가 실제로 변했을 때만 호출해 재측정 루프를 방지. */
(function () {
let parentResize;
try {
if (window.parent === window) {
return; // 최상위 문서 → 대상 아님
}
parentResize = window.parent.gd_resize_frame || window.parent.resize_frame;
} catch (e) {
return; // cross-origin 부모 → 접근 불가, 대상 아님
}
if (typeof parentResize !== 'function' || typeof window.ResizeObserver === 'undefined') {
return;
}
const startObserve = function () {
const frameEl = window.frameElement
|| (window.name ? window.parent.document.getElementsByName(window.name)[0] : null);
if (!frameEl || !document.body) {
return;
}
let timer = null;
let lastHeight = -1;
const observer = new ResizeObserver(function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function () {
const height = document.body.clientHeight;
if (height === lastHeight) {
return; // 실제 콘텐츠 높이 변화 없음 → 재측정 루프 방지
}
lastHeight = height;
parentResize.call(window.parent, frameEl);
}, 100);
});
observer.observe(document.body);
};
if (document.body) {
startObserve();
} else {
document.addEventListener('DOMContentLoaded', startObserve);
}
})();
 
function gd_resize_frame(obj) {
var iframeHeight = (obj).contentWindow.document.body.clientHeight;
(obj).height = iframeHeight + 80;
 
data/skin/front/moment/js/gd_member2.js+12-14
변경 전gd_member2.js
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore",
focusCleanup: true,
rules: {
email: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
},
captchaKey: {
required: true
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.'),
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
if (validate.form()) {
 
 
 
 
 
$('.js_btn_join').attr("disabled", true);
form.submit();
} else {
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore",
focusCleanup: true,
rules: {
email: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
},
captchaKey: {
required: true
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.'),
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
if (validate.form()) {
 
 
 
 
 
$('.js_btn_join').attr("disabled", true);
form.submit();
} else {
 
변경 후gd_member2.js
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore, altcha-widget *",
focusCleanup: true,
rules: {
email: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
 
 
 
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
 
 
 
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
if (validate.form()) {
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return;
}
$('.js_btn_join').attr("disabled", true);
form.submit();
} else {
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore, altcha-widget *",
focusCleanup: true,
rules: {
email: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
 
 
 
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
 
 
 
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
if (validate.form()) {
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return;
}
$('.js_btn_join').attr("disabled", true);
form.submit();
} else {
 
data/skin/front/moment/member/join.html+4-22
변경 전join.html
<!-- //join_base_wrap -->
</div>
<!-- //content_box -->
 
 
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
<!--{? joinField.captcha.use == 'y'}-->
$('#reload_captcha').click(function (e) {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../member/captcha.php?ch=' + someDate);
}, 1);
}).trigger('click');
<!--{/}-->
 
gd_select_email_domain('email');
 
gd_member2.init($formJoin);
<!-- //join_base_wrap -->
</div>
<!-- //content_box -->
 
 
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
<!--{? joinField.captcha.use == 'y'}-->
$('#reload_captcha').click(function (e) {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../member/captcha.php?ch=' + someDate);
}, 1);
}).trigger('click');
<!--{/}-->
 
gd_select_email_domain('email');
 
gd_member2.init($formJoin);
 
변경 후join.html
<!-- //join_base_wrap -->
</div>
<!-- //content_box -->
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
 
 
 
 
 
 
 
 
 
 
 
gd_select_email_domain('email');
 
gd_member2.init($formJoin);
<!-- //join_base_wrap -->
</div>
<!-- //content_box -->
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
 
 
 
 
 
 
 
 
 
 
 
gd_select_email_domain('email');
 
gd_member2.init($formJoin);
 
data/skin/front/moment/member/_join_view_captcha.html+2-28
변경 전_join_view_captcha.html
<th><span>{=__('자동등록방지')}</span></th>
<td>
<div class="member_warning">
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" id="reload_captcha">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
</td>
</tr>
<th><span>{=__('자동등록방지')}</span></th>
<td>
<div class="member_warning">
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" id="reload_captcha">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
</td>
</tr>
 
변경 후_join_view_captcha.html
<th><span>{=__('자동등록방지')}</span></th>
<td>
<div class="member_warning">
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
</td>
</tr>
<th><span>{=__('자동등록방지')}</span></th>
<td>
<div class="member_warning">
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
</td>
</tr>
 
data/skin/front/moment/share/_altcha.html+28
변경 전_altcha.html
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후_altcha.html
{*** [공통 위젯] 자동등록방지 ALTCHA | share/_altcha.html (Widget\Front\Share\AltchaWidget) ***}
{*** altchaChallenge : (필수) challenge 발급 스크립트 경로. 폼 위치에 따라 상대/절대 경로가 다르므로 호출부에서 지정 (mode 쿼리스트링은 위젯이 서버 사이드에서 부착) ***}
{*** altchaSrc : (옵션) 'y' 이면 data-altcha-src 부여 → AJAX 인라인 주입 폼(goods_board_write)에서 altcha.js 동적 로드 ***}
{*** altchaConfig : (옵션) altcha-widget configuration JSON 을 덮어씀. 미지정 시 {"hideLogo":true,"hideFooter":true} ***}
<div class="capcha capcha_altcha"<!--{? altchaSrc == 'y'}--> data-altcha-src="\{=c.PATH_SKIN}js/altcha/altcha.js"<!--{/}-->>
<altcha-widget
challenge="{=altchaChallenge}?mode={=altchaMode}"
name="altcha"
auto="off"
language="{=gGlobal.locale}"
configuration='<!--{? altchaConfig}-->{=altchaConfig}<!--{:}-->{"hideLogo":true,"hideFooter":true}<!--{/}-->'
type="native"
></altcha-widget>
</div>
{*** [공통 위젯] 자동등록방지 ALTCHA | share/_altcha.html (Widget\Front\Share\AltchaWidget) ***}
{*** altchaChallenge : (필수) challenge 발급 스크립트 경로. 폼 위치에 따라 상대/절대 경로가 다르므로 호출부에서 지정 (mode 쿼리스트링은 위젯이 서버 사이드에서 부착) ***}
{*** altchaSrc : (옵션) 'y' 이면 data-altcha-src 부여 → AJAX 인라인 주입 폼(goods_board_write)에서 altcha.js 동적 로드 ***}
{*** altchaConfig : (옵션) altcha-widget configuration JSON 을 덮어씀. 미지정 시 {"hideLogo":true,"hideFooter":true} ***}
<div class="capcha capcha_altcha"<!--{? altchaSrc == 'y'}--> data-altcha-src="\{=c.PATH_SKIN}js/altcha/altcha.js"<!--{/}-->>
<altcha-widget
challenge="{=altchaChallenge}?mode={=altchaMode}"
name="altcha"
auto="off"
language="{=gGlobal.locale}"
configuration='<!--{? altchaConfig}-->{=altchaConfig}<!--{:}-->{"hideLogo":true,"hideFooter":true}<!--{/}-->'
type="native"
></altcha-widget>
</div>
 
data/skin/front/mygreek/board/popup_goods_board_write.html+6-28
변경 전popup_goods_board_write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="../board/captcha.php?ch={=time()}" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}" class="va-m"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{ / }-->
}
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<!--{ ? bdWrite.cfg.bdEditorFl == 'y' }-->
<script type="text/javascript">
var editorPath = '{=c.PATH_SKIN}js/smart';
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="../board/captcha.php?ch={=time()}" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}" class="va-m"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{ / }-->
}
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<!--{ ? bdWrite.cfg.bdEditorFl == 'y' }-->
<script type="text/javascript">
var editorPath = '{=c.PATH_SKIN}js/smart';
 
변경 후popup_goods_board_write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
}
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!--{ ? bdWrite.cfg.bdEditorFl == 'y' }-->
<script type="text/javascript">
var editorPath = '{=c.PATH_SKIN}js/smart';
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
}
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!--{ ? bdWrite.cfg.bdEditorFl == 'y' }-->
<script type="text/javascript">
var editorPath = '{=c.PATH_SKIN}js/smart';
 
data/skin/front/mygreek/board/skin/default/view.html+8-60
변경 전view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
data/skin/front/mygreek/board/skin/default/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/mygreek/board/skin/event/view.html+8-60
변경 전view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
data/skin/front/mygreek/board/skin/event/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/mygreek/board/skin/gallery/view.html+8-60
변경 전view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
<!-- //layer_wrap -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
data/skin/front/mygreek/board/skin/gallery/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/mygreek/board/skin/qa/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/mygreek/board/template/default/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/mygreek/board/template/event/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/mygreek/board/template/gallery/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/mygreek/board/template/qa/write.html+6-30
변경 전write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="img/icon/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
변경 후write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
gd_select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file_upload_sec">
<label for="attach<%=idx%>">
 
data/skin/front/mygreek/goods/goods_board_review_view.html+4-60
변경 전goods_board_review_view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha" style="margin-top: 10px;">
<div class="capcha_img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha" style="margin-top: 10px;">
<div class="capcha_img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha" style="margin-top: 10px;">
<div class="capcha_img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
<div class="capcha" style="margin-top: 10px;">
<div class="capcha_img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_reply_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
 
변경 후goods_board_review_view.html
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!-- //board_comment_write -->
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
 
data/skin/front/mygreek/goods/goods_board_write.html+2-28
변경 전goods_board_write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="../board/captcha.php?ch={=time()}" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}" class="va-m"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{ / }-->
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha_img">
<img src="../board/captcha.php?ch={=time()}" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" onclick="gd_reload_captcha()">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}" class="va-m"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</td>
</tr>
<!--{ / }-->
 
변경 후goods_board_write.html
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php', 'altchaSrc', 'y')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
<tr>
<th scope="row">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php', 'altchaSrc', 'y')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
 
data/skin/front/mygreek/goods/goods_view.html+4
변경 전goods_view.html
<!--//플러스리뷰 레이어 --><div id="writePop" class="layer_wrap plus_review_edit_layer dn"></div>
 
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_goods.js" charset="utf-8"></script>
 
 
 
{=fbGoodsViewScript}
{ # footer }
<!--//플러스리뷰 레이어 --><div id="writePop" class="layer_wrap plus_review_edit_layer dn"></div>
 
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_goods.js" charset="utf-8"></script>
 
 
 
{=fbGoodsViewScript}
{ # footer }
 
변경 후goods_view.html
<!--//플러스리뷰 레이어 --><div id="writePop" class="layer_wrap plus_review_edit_layer dn"></div>
 
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_goods.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
{=fbGoodsViewScript}
{ # footer }
<!--//플러스리뷰 레이어 --><div id="writePop" class="layer_wrap plus_review_edit_layer dn"></div>
 
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_goods.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
{=fbGoodsViewScript}
{ # footer }
 
data/skin/front/mygreek/js/altcha/altcha.js+3780
변경 전altcha.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후altcha.js
const DEV = false;
var is_array = Array.isArray;
var index_of = Array.prototype.indexOf;
var includes = Array.prototype.includes;
var array_from = Array.from;
var object_keys = Object.keys;
var define_property = Object.defineProperty;
var get_descriptor = Object.getOwnPropertyDescriptor;
var get_descriptors = Object.getOwnPropertyDescriptors;
var object_prototype = Object.prototype;
var array_prototype = Array.prototype;
var get_prototype_of = Object.getPrototypeOf;
var is_extensible = Object.isExtensible;
const noop = () => {
};
function run_all(arr) {
for (var i = 0; i < arr.length; i++) {
arr[i]();
}
}
function deferred() {
var resolve;
var reject;
var promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
return { promise, resolve, reject };
}
const DERIVED = 1 << 1;
const EFFECT = 1 << 2;
const RENDER_EFFECT = 1 << 3;
const MANAGED_EFFECT = 1 << 24;
const BLOCK_EFFECT = 1 << 4;
const BRANCH_EFFECT = 1 << 5;
const ROOT_EFFECT = 1 << 6;
const BOUNDARY_EFFECT = 1 << 7;
const CONNECTED = 1 << 9;
const CLEAN = 1 << 10;
const DIRTY = 1 << 11;
const MAYBE_DIRTY = 1 << 12;
const INERT = 1 << 13;
const DESTROYED = 1 << 14;
const REACTION_RAN = 1 << 15;
const DESTROYING = 1 << 25;
const EFFECT_TRANSPARENT = 1 << 16;
const EAGER_EFFECT = 1 << 17;
const HEAD_EFFECT = 1 << 18;
const EFFECT_PRESERVED = 1 << 19;
const USER_EFFECT = 1 << 20;
const WAS_MARKED = 1 << 16;
const REACTION_IS_UPDATING = 1 << 21;
const ASYNC = 1 << 22;
const ERROR_VALUE = 1 << 23;
const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state");
const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props");
const LOADING_ATTR_SYMBOL = /* @__PURE__ */ Symbol("");
const ATTRIBUTES_CACHE = /* @__PURE__ */ Symbol("attributes");
const CLASS_CACHE = /* @__PURE__ */ Symbol("class");
const STYLE_CACHE = /* @__PURE__ */ Symbol("style");
const TEXT_CACHE = /* @__PURE__ */ Symbol("text");
const FORM_RESET_HANDLER = /* @__PURE__ */ Symbol("form reset");
const STALE_REACTION = new class StaleReactionError extends Error {
name = "StaleReactionError";
message = "The reaction that called `getAbortSignal()` was re-run or destroyed";
}();
const IS_XHTML = (
// We gotta write it like this because after downleveling the pure comment may end up in the wrong location
!!globalThis.document?.contentType && /* @__PURE__ */ globalThis.document.contentType.includes("xml")
);
const TEXT_NODE = 3;
const COMMENT_NODE = 8;
function equals(value) {
return value === this.v;
}
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function safe_equals(value) {
return !safe_not_equal(value, this.v);
}
function lifecycle_outside_component(name) {
{
throw new Error(`https://svelte.dev/e/lifecycle_outside_component`);
}
}
function async_derived_orphan() {
{
throw new Error(`https://svelte.dev/e/async_derived_orphan`);
}
}
function effect_in_teardown(rune) {
{
throw new Error(`https://svelte.dev/e/effect_in_teardown`);
}
}
function effect_in_unowned_derived() {
{
throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`);
}
}
function effect_orphan(rune) {
{
throw new Error(`https://svelte.dev/e/effect_orphan`);
}
}
function effect_update_depth_exceeded() {
{
throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);
}
}
function hydration_failed() {
{
throw new Error(`https://svelte.dev/e/hydration_failed`);
}
}
function state_descriptors_fixed() {
{
throw new Error(`https://svelte.dev/e/state_descriptors_fixed`);
}
}
function state_prototype_fixed() {
{
throw new Error(`https://svelte.dev/e/state_prototype_fixed`);
}
}
function state_unsafe_mutation() {
{
throw new Error(`https://svelte.dev/e/state_unsafe_mutation`);
}
}
function svelte_boundary_reset_onerror() {
{
throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);
}
}
let tracing_mode_flag = false;
const TEMPLATE_FRAGMENT = 1;
const TEMPLATE_USE_IMPORT_NODE = 1 << 1;
const HYDRATION_START = "[";
const HYDRATION_START_ELSE = "[!";
const HYDRATION_START_FAILED = "[?";
const HYDRATION_END = "]";
const HYDRATION_ERROR = {};
const UNINITIALIZED = /* @__PURE__ */ Symbol("uninitialized");
const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml";
const NAMESPACE_SVG = "http://www.w3.org/2000/svg";
const NAMESPACE_MATHML = "http://www.w3.org/1998/Math/MathML";
const ATTACHMENT_KEY = "@attach";
let component_context = null;
function set_component_context(context) {
component_context = context;
}
function push(props, runes = false, fn) {
component_context = {
p: component_context,
i: false,
c: null,
e: null,
s: props,
x: null,
r: (
/** @type {Effect} */
active_effect
),
l: null
};
}
function pop(component2) {
var context = (
/** @type {ComponentContext} */
component_context
);
var effects = context.e;
if (effects !== null) {
context.e = null;
for (var fn of effects) {
create_user_effect(fn);
}
}
if (component2 !== void 0) {
context.x = component2;
}
context.i = true;
component_context = context.p;
return component2 ?? /** @type {T} */
{};
}
function is_runes() {
return true;
}
let micro_tasks = [];
function run_micro_tasks() {
var tasks = micro_tasks;
micro_tasks = [];
run_all(tasks);
}
function queue_micro_task(fn) {
if (micro_tasks.length === 0 && !is_flushing_sync) {
var tasks = micro_tasks;
queueMicrotask(() => {
if (tasks === micro_tasks) run_micro_tasks();
});
}
micro_tasks.push(fn);
}
function flush_tasks() {
while (micro_tasks.length > 0) {
run_micro_tasks();
}
}
function derived_inert() {
{
console.warn(`https://svelte.dev/e/derived_inert`);
}
}
function hydration_mismatch(location2) {
{
console.warn(`https://svelte.dev/e/hydration_mismatch`);
}
}
function select_multiple_invalid_value() {
{
console.warn(`https://svelte.dev/e/select_multiple_invalid_value`);
}
}
function svelte_boundary_reset_noop() {
{
console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);
}
}
let hydrating = false;
function set_hydrating(value) {
hydrating = value;
}
let hydrate_node;
function set_hydrate_node(node) {
if (node === null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return hydrate_node = node;
}
function hydrate_next() {
return set_hydrate_node(/* @__PURE__ */ get_next_sibling(hydrate_node));
}
function reset(node) {
if (!hydrating) return;
if (/* @__PURE__ */ get_next_sibling(hydrate_node) !== null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
hydrate_node = node;
}
function next(count = 1) {
if (hydrating) {
var i = count;
var node = hydrate_node;
while (i--) {
node = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(node);
}
hydrate_node = node;
}
}
function skip_nodes(remove = true) {
var depth = 0;
var node = hydrate_node;
while (true) {
if (node.nodeType === COMMENT_NODE) {
var data = (
/** @type {Comment} */
node.data
);
if (data === HYDRATION_END) {
if (depth === 0) return node;
depth -= 1;
} else if (data === HYDRATION_START || data === HYDRATION_START_ELSE || // "[1", "[2", etc. for if blocks
data[0] === "[" && !isNaN(Number(data.slice(1)))) {
depth += 1;
}
}
var next2 = (
/** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(node)
);
if (remove) node.remove();
node = next2;
}
}
function read_hydration_instruction(node) {
if (!node || node.nodeType !== COMMENT_NODE) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return (
/** @type {Comment} */
node.data
);
}
function proxy(value) {
if (typeof value !== "object" || value === null || STATE_SYMBOL in value) {
return value;
}
const prototype = get_prototype_of(value);
if (prototype !== object_prototype && prototype !== array_prototype) {
return value;
}
var sources = /* @__PURE__ */ new Map();
var is_proxied_array = is_array(value);
var version = /* @__PURE__ */ state(0);
var parent_version = update_version;
var with_parent = (fn) => {
if (update_version === parent_version) {
return fn();
}
var reaction = active_reaction;
var version2 = update_version;
set_active_reaction(null);
set_update_version(parent_version);
var result = fn();
set_active_reaction(reaction);
set_update_version(version2);
return result;
};
if (is_proxied_array) {
sources.set("length", /* @__PURE__ */ state(
/** @type {any[]} */
value.length
));
}
return new Proxy(
/** @type {any} */
value,
{
defineProperty(_, prop2, descriptor) {
if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) {
state_descriptors_fixed();
}
var s = sources.get(prop2);
if (s === void 0) {
with_parent(() => {
var s2 = /* @__PURE__ */ state(descriptor.value);
sources.set(prop2, s2);
return s2;
});
} else {
set(s, descriptor.value, true);
}
return true;
},
deleteProperty(target, prop2) {
var s = sources.get(prop2);
if (s === void 0) {
if (prop2 in target) {
const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
sources.set(prop2, s2);
increment(version);
}
} else {
set(s, UNINITIALIZED);
increment(version);
}
return true;
},
get(target, prop2, receiver) {
if (prop2 === STATE_SYMBOL) {
return value;
}
var s = sources.get(prop2);
var exists = prop2 in target;
if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) {
s = with_parent(() => {
var p = proxy(exists ? target[prop2] : UNINITIALIZED);
var s2 = /* @__PURE__ */ state(p);
return s2;
});
sources.set(prop2, s);
}
if (s !== void 0) {
var v = get(s);
return v === UNINITIALIZED ? void 0 : v;
}
return Reflect.get(target, prop2, receiver);
},
getOwnPropertyDescriptor(target, prop2) {
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor && "value" in descriptor) {
var s = sources.get(prop2);
if (s) descriptor.value = get(s);
} else if (descriptor === void 0) {
var source2 = sources.get(prop2);
var value2 = source2?.v;
if (source2 !== void 0 && value2 !== UNINITIALIZED) {
return {
enumerable: true,
configurable: true,
value: value2,
writable: true
};
}
}
return descriptor;
},
has(target, prop2) {
if (prop2 === STATE_SYMBOL) {
return true;
}
var s = sources.get(prop2);
var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2);
if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) {
if (s === void 0) {
s = with_parent(() => {
var p = has ? proxy(target[prop2]) : UNINITIALIZED;
var s2 = /* @__PURE__ */ state(p);
return s2;
});
sources.set(prop2, s);
}
var value2 = get(s);
if (value2 === UNINITIALIZED) {
return false;
}
}
return has;
},
set(target, prop2, value2, receiver) {
var s = sources.get(prop2);
var has = prop2 in target;
if (is_proxied_array && prop2 === "length") {
for (var i = value2; i < /** @type {Source<number>} */
s.v; i += 1) {
var other_s = sources.get(i + "");
if (other_s !== void 0) {
set(other_s, UNINITIALIZED);
} else if (i in target) {
other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
sources.set(i + "", other_s);
}
}
}
if (s === void 0) {
if (!has || get_descriptor(target, prop2)?.writable) {
s = with_parent(() => /* @__PURE__ */ state(void 0));
set(s, proxy(value2));
sources.set(prop2, s);
}
} else {
has = s.v !== UNINITIALIZED;
var p = with_parent(() => proxy(value2));
set(s, p);
}
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor?.set) {
descriptor.set.call(receiver, value2);
}
if (!has) {
if (is_proxied_array && typeof prop2 === "string") {
var ls = (
/** @type {Source<number>} */
sources.get("length")
);
var n = Number(prop2);
if (Number.isInteger(n) && n >= ls.v) {
set(ls, n + 1);
}
}
increment(version);
}
return true;
},
ownKeys(target) {
get(version);
var own_keys = Reflect.ownKeys(target).filter((key3) => {
var source3 = sources.get(key3);
return source3 === void 0 || source3.v !== UNINITIALIZED;
});
for (var [key2, source2] of sources) {
if (source2.v !== UNINITIALIZED && !(key2 in target)) {
own_keys.push(key2);
}
}
return own_keys;
},
setPrototypeOf() {
state_prototype_fixed();
}
}
);
}
function get_proxied_value(value) {
try {
if (value !== null && typeof value === "object" && STATE_SYMBOL in value) {
return value[STATE_SYMBOL];
}
} catch {
}
return value;
}
function is(a, b) {
return Object.is(get_proxied_value(a), get_proxied_value(b));
}
var $window;
var $document;
var is_firefox;
var first_child_getter;
var next_sibling_getter;
function init_operations() {
if ($window !== void 0) {
return;
}
$window = window;
$document = document;
is_firefox = /Firefox/.test(navigator.userAgent);
var element_prototype = Element.prototype;
var node_prototype = Node.prototype;
var text_prototype = Text.prototype;
first_child_getter = get_descriptor(node_prototype, "firstChild").get;
next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get;
if (is_extensible(element_prototype)) {
element_prototype[CLASS_CACHE] = void 0;
element_prototype[ATTRIBUTES_CACHE] = null;
element_prototype[STYLE_CACHE] = void 0;
element_prototype.__e = void 0;
}
if (is_extensible(text_prototype)) {
text_prototype[TEXT_CACHE] = void 0;
}
}
function create_text(value = "") {
return document.createTextNode(value);
}
// @__NO_SIDE_EFFECTS__
function get_first_child(node) {
return (
/** @type {TemplateNode | null} */
first_child_getter.call(node)
);
}
// @__NO_SIDE_EFFECTS__
function get_next_sibling(node) {
return (
/** @type {TemplateNode | null} */
next_sibling_getter.call(node)
);
}
function child(node, is_text) {
if (!hydrating) {
return /* @__PURE__ */ get_first_child(node);
}
var child2 = /* @__PURE__ */ get_first_child(hydrate_node);
if (child2 === null) {
child2 = hydrate_node.appendChild(create_text());
} else if (is_text && child2.nodeType !== TEXT_NODE) {
var text2 = create_text();
child2?.before(text2);
set_hydrate_node(text2);
return text2;
}
if (is_text) {
merge_text_nodes(
/** @type {Text} */
child2
);
}
set_hydrate_node(child2);
return child2;
}
function first_child(node, is_text = false) {
if (!hydrating) {
var first = /* @__PURE__ */ get_first_child(node);
if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first);
return first;
}
if (is_text) {
if (hydrate_node?.nodeType !== TEXT_NODE) {
var text2 = create_text();
hydrate_node?.before(text2);
set_hydrate_node(text2);
return text2;
}
merge_text_nodes(
/** @type {Text} */
hydrate_node
);
}
return hydrate_node;
}
function sibling(node, count = 1, is_text = false) {
let next_sibling = hydrating ? hydrate_node : node;
var last_sibling;
while (count--) {
last_sibling = next_sibling;
next_sibling = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(next_sibling);
}
if (!hydrating) {
return next_sibling;
}
if (is_text) {
if (next_sibling?.nodeType !== TEXT_NODE) {
var text2 = create_text();
if (next_sibling === null) {
last_sibling?.after(text2);
} else {
next_sibling.before(text2);
}
set_hydrate_node(text2);
return text2;
}
merge_text_nodes(
/** @type {Text} */
next_sibling
);
}
set_hydrate_node(next_sibling);
return next_sibling;
}
function clear_text_content(node) {
node.textContent = "";
}
function should_defer_append() {
return false;
}
function create_element(tag, namespace, is2) {
let options = void 0;
return (
/** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */
document.createElementNS(namespace ?? NAMESPACE_HTML, tag, options)
);
}
function merge_text_nodes(text2) {
if (
/** @type {string} */
text2.nodeValue.length < 65536
) {
return;
}
let next2 = text2.nextSibling;
while (next2 !== null && next2.nodeType === TEXT_NODE) {
next2.remove();
text2.nodeValue += /** @type {string} */
next2.nodeValue;
next2 = text2.nextSibling;
}
}
function handle_error(error) {
var effect2 = active_effect;
if (effect2 === null) {
active_reaction.f |= ERROR_VALUE;
return error;
}
if ((effect2.f & REACTION_RAN) === 0 && (effect2.f & EFFECT) === 0) {
throw error;
}
invoke_error_boundary(error, effect2);
}
function invoke_error_boundary(error, effect2) {
while (effect2 !== null) {
if ((effect2.f & BOUNDARY_EFFECT) !== 0) {
if ((effect2.f & REACTION_RAN) === 0) {
throw error;
}
try {
effect2.b.error(error);
return;
} catch (e) {
error = e;
}
}
effect2 = effect2.parent;
}
throw error;
}
const STATUS_MASK = -7169;
function set_signal_status(signal, status) {
signal.f = signal.f & STATUS_MASK | status;
}
function update_derived_status(derived2) {
if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) {
set_signal_status(derived2, CLEAN);
} else {
set_signal_status(derived2, MAYBE_DIRTY);
}
}
function clear_marked(deps) {
if (deps === null) return;
for (const dep of deps) {
if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {
continue;
}
dep.f ^= WAS_MARKED;
clear_marked(
/** @type {Derived} */
dep.deps
);
}
}
function defer_effect(effect2, dirty_effects, maybe_dirty_effects) {
if ((effect2.f & DIRTY) !== 0) {
dirty_effects.add(effect2);
} else if ((effect2.f & MAYBE_DIRTY) !== 0) {
maybe_dirty_effects.add(effect2);
}
clear_marked(effect2.deps);
set_signal_status(effect2, CLEAN);
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set2(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set2(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set2, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set: set2, update, subscribe };
}
function get$1(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let IS_UNMOUNTED = /* @__PURE__ */ Symbol("unmounted");
function store_get(store2, store_name, stores) {
const entry = stores[store_name] ??= {
store: null,
source: /* @__PURE__ */ mutable_source(void 0),
unsubscribe: noop
};
if (entry.store !== store2 && !(IS_UNMOUNTED in stores)) {
entry.unsubscribe();
entry.store = store2 ?? null;
if (store2 == null) {
entry.source.v = void 0;
entry.unsubscribe = noop;
} else {
var is_synchronous_callback = true;
entry.unsubscribe = subscribe_to_store(store2, (v) => {
if (is_synchronous_callback) {
entry.source.v = v;
} else {
set(entry.source, v);
}
});
is_synchronous_callback = false;
}
}
if (store2 && IS_UNMOUNTED in stores) {
return get$1(store2);
}
return get(entry.source);
}
function setup_stores() {
const stores = {};
function cleanup() {
teardown(() => {
for (var store_name in stores) {
const ref = stores[store_name];
ref.unsubscribe();
}
define_property(stores, IS_UNMOUNTED, {
enumerable: false,
value: true
});
});
}
return [stores, cleanup];
}
let first_batch = null;
let last_batch = null;
let current_batch = null;
let previous_batch = null;
let batch_values = null;
let last_scheduled_effect = null;
let is_flushing_sync = false;
let is_processing = false;
let collected_effects = null;
let legacy_updates = null;
var flush_count = 0;
var source_stacks = /* @__PURE__ */ new Set();
let uid = 1;
class Batch {
id = uid++;
/** True as soon as `#process` was called */
#started = false;
linked = true;
/** @type {Batch | null} */
#prev = null;
/** @type {Batch | null} */
#next = null;
/** @type {Map<Effect, ReturnType<typeof deferred<any>>>} */
async_deriveds = /* @__PURE__ */ new Map();
/**
* The current values of any signals that are updated in this batch.
* Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)
* They keys of this map are identical to `this.#previous`
* @type {Map<Value, [any, boolean]>}
*/
current = /* @__PURE__ */ new Map();
/**
* The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place.
* They keys of this map are identical to `this.#current`
* @type {Map<Value, any>}
*/
previous = /* @__PURE__ */ new Map();
/**
* Async effects which this batch doesn't take into account anymore when calculating blockers,
* as it has a value for it already.
* @type {Set<Effect>}
*/
unblocked = /* @__PURE__ */ new Set();
/**
* When the batch is committed (and the DOM is updated), we need to remove old branches
* and append new ones by calling the functions added inside (if/each/key/etc) blocks
* @type {Set<(batch: Batch) => void>}
*/
#commit_callbacks = /* @__PURE__ */ new Set();
/**
* If a fork is discarded, we need to destroy any effects that are no longer needed
* @type {Set<(batch: Batch) => void>}
*/
#discard_callbacks = /* @__PURE__ */ new Set();
/**
* Callbacks that should run only when a fork is committed.
* @type {Set<(batch: Batch) => void>}
*/
#fork_commit_callbacks = /* @__PURE__ */ new Set();
/**
* The number of async effects that are currently in flight
*/
#pending = 0;
/**
* Async effects that are currently in flight, _not_ inside a pending boundary
* @type {Map<Effect, number>}
*/
#blocking_pending = /* @__PURE__ */ new Map();
/**
* A deferred that resolves when the batch is committed, used with `settled()`
* TODO replace with Promise.withResolvers once supported widely enough
* @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}
*/
#deferred = null;
/**
* The root effects that need to be flushed
* @type {Effect[]}
*/
#roots = [];
/**
* Effects created while this batch was active.
* @type {Effect[]}
*/
#new_effects = [];
/**
* Deferred effects (which run after async work has completed) that are DIRTY
* @type {Set<Effect>}
*/
#dirty_effects = /* @__PURE__ */ new Set();
/**
* Deferred effects that are MAYBE_DIRTY
* @type {Set<Effect>}
*/
#maybe_dirty_effects = /* @__PURE__ */ new Set();
/**
* A map of branches that still exist, but will be destroyed when this batch
* is committed — we skip over these during `process`.
* The value contains child effects that were dirty/maybe_dirty before being reset,
* so they can be rescheduled if the branch survives.
* @type {Map<Effect, { d: Effect[], m: Effect[] }>}
*/
#skipped_branches = /* @__PURE__ */ new Map();
/**
* Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing
* @type {Set<Effect>}
*/
#unskipped_branches = /* @__PURE__ */ new Set();
is_fork = false;
#decrement_queued = false;
#is_deferred() {
if (this.is_fork) return true;
for (const effect2 of this.#blocking_pending.keys()) {
var e = effect2;
var skipped = false;
while (e.parent !== null) {
if (this.#skipped_branches.has(e)) {
skipped = true;
break;
}
e = e.parent;
}
if (!skipped) {
return true;
}
}
return false;
}
/**
* Add an effect to the #skipped_branches map and reset its children
* @param {Effect} effect
*/
skip_effect(effect2) {
if (!this.#skipped_branches.has(effect2)) {
this.#skipped_branches.set(effect2, { d: [], m: [] });
}
this.#unskipped_branches.delete(effect2);
}
/**
* Remove an effect from the #skipped_branches map and reschedule
* any tracked dirty/maybe_dirty child effects
* @param {Effect} effect
* @param {(e: Effect) => void} callback
*/
unskip_effect(effect2, callback = (e) => this.schedule(e)) {
var tracked = this.#skipped_branches.get(effect2);
if (tracked) {
this.#skipped_branches.delete(effect2);
for (var e of tracked.d) {
set_signal_status(e, DIRTY);
callback(e);
}
for (e of tracked.m) {
set_signal_status(e, MAYBE_DIRTY);
callback(e);
}
}
this.#unskipped_branches.add(effect2);
}
#process() {
this.#started = true;
if (flush_count++ > 1e3) {
this.#unlink();
infinite_loop_guard();
}
if (!this.#is_deferred()) {
for (const e of this.#dirty_effects) {
this.#maybe_dirty_effects.delete(e);
set_signal_status(e, DIRTY);
this.schedule(e);
}
for (const e of this.#maybe_dirty_effects) {
set_signal_status(e, MAYBE_DIRTY);
this.schedule(e);
}
}
const roots = this.#roots;
this.#roots = [];
this.apply();
var effects = collected_effects = [];
var render_effects = [];
var updates = legacy_updates = [];
for (const root2 of roots) {
try {
this.#traverse(root2, effects, render_effects);
} catch (e) {
reset_all(root2);
throw e;
}
}
current_batch = null;
if (updates.length > 0) {
var batch = Batch.ensure();
for (const e of updates) {
batch.schedule(e);
}
}
collected_effects = null;
legacy_updates = null;
if (this.#is_deferred()) {
this.#defer_effects(render_effects);
this.#defer_effects(effects);
for (const [e, t] of this.#skipped_branches) {
reset_branch(e, t);
}
if (updates.length > 0) {
/** @type {unknown} */
current_batch.#process();
}
return;
}
const earlier_batch = this.#find_earlier_batch();
if (earlier_batch) {
earlier_batch.#merge(this);
return;
}
this.#dirty_effects.clear();
this.#maybe_dirty_effects.clear();
for (const fn of this.#commit_callbacks) fn(this);
this.#commit_callbacks.clear();
previous_batch = this;
flush_queued_effects(render_effects);
flush_queued_effects(effects);
previous_batch = null;
this.#deferred?.resolve();
var next_batch = (
/** @type {Batch | null} */
/** @type {unknown} */
current_batch
);
if (this.linked && this.#pending === 0) {
this.#unlink();
}
if (this.#roots.length > 0) {
if (next_batch === null) {
next_batch = this;
this.#link();
}
const batch2 = next_batch;
batch2.#roots.push(...this.#roots.filter((r2) => !batch2.#roots.includes(r2)));
}
if (next_batch !== null) {
next_batch.#process();
}
}
/**
* Traverse the effect tree, executing effects or stashing
* them for later execution as appropriate
* @param {Effect} root
* @param {Effect[]} effects
* @param {Effect[]} render_effects
*/
#traverse(root2, effects, render_effects) {
root2.f ^= CLEAN;
var effect2 = root2.first;
while (effect2 !== null) {
var flags2 = effect2.f;
var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;
var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0;
var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.#skipped_branches.has(effect2);
if (!skip && effect2.fn !== null) {
if (is_branch) {
effect2.f ^= CLEAN;
} else if ((flags2 & EFFECT) !== 0) {
effects.push(effect2);
} else if (is_dirty(effect2)) {
if ((flags2 & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect2);
update_effect(effect2);
}
var child2 = effect2.first;
if (child2 !== null) {
effect2 = child2;
continue;
}
}
while (effect2 !== null) {
var next2 = effect2.next;
if (next2 !== null) {
effect2 = next2;
break;
}
effect2 = effect2.parent;
}
}
}
#find_earlier_batch() {
var batch = this.#prev;
while (batch !== null) {
if (!batch.is_fork) {
for (const [value, [, is_derived]] of this.current) {
if (batch.current.has(value) && !is_derived) {
return batch;
}
}
}
batch = batch.#prev;
}
return null;
}
/**
* @param {Batch} batch
*/
#merge(batch) {
for (const [source2, value] of batch.current) {
if (!this.previous.has(source2) && batch.previous.has(source2)) {
this.previous.set(source2, batch.previous.get(source2));
}
this.current.set(source2, value);
}
for (const [effect2, deferred2] of batch.async_deriveds) {
const d = this.async_deriveds.get(effect2);
if (d) deferred2.promise.then(d.resolve);
}
const mark = (value) => {
var reactions = value.reactions;
if (reactions === null) return;
for (const reaction of reactions) {
var flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark(
/** @type {Derived} */
reaction
);
} else {
var effect2 = (
/** @type {Effect} */
reaction
);
if (flags2 & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect2)) {
this.#maybe_dirty_effects.delete(effect2);
set_signal_status(effect2, DIRTY);
this.schedule(effect2);
}
}
}
};
for (const source2 of this.current.keys()) {
mark(source2);
}
this.oncommit(() => batch.discard());
batch.#unlink();
current_batch = this;
this.#process();
}
/**
* @param {Effect[]} effects
*/
#defer_effects(effects) {
for (var i = 0; i < effects.length; i += 1) {
defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);
}
}
/**
* Associate a change to a given source with the current
* batch, noting its previous and current values
* @param {Value} source
* @param {any} value
* @param {boolean} [is_derived]
*/
capture(source2, value, is_derived = false) {
if (source2.v !== UNINITIALIZED && !this.previous.has(source2)) {
this.previous.set(source2, source2.v);
}
if ((source2.f & ERROR_VALUE) === 0) {
this.current.set(source2, [value, is_derived]);
batch_values?.set(source2, value);
}
if (!this.is_fork) {
source2.v = value;
}
}
activate() {
current_batch = this;
}
deactivate() {
current_batch = null;
batch_values = null;
}
flush() {
try {
if (DEV) ;
is_processing = true;
current_batch = this;
this.#process();
} finally {
flush_count = 0;
last_scheduled_effect = null;
collected_effects = null;
legacy_updates = null;
is_processing = false;
current_batch = null;
batch_values = null;
old_values.clear();
}
}
discard() {
for (const fn of this.#discard_callbacks) fn(this);
this.#discard_callbacks.clear();
this.#fork_commit_callbacks.clear();
this.#unlink();
}
/**
* @param {Effect} effect
*/
register_created_effect(effect2) {
this.#new_effects.push(effect2);
}
#commit() {
this.#unlink();
for (let batch = first_batch; batch !== null; batch = batch.#next) {
var is_earlier = batch.id < this.id;
var sources = [];
for (const [source3, [value, is_derived]] of this.current) {
if (batch.current.has(source3)) {
var batch_value = (
/** @type {[any, boolean]} */
batch.current.get(source3)[0]
);
if (is_earlier && value !== batch_value) {
batch.current.set(source3, [value, is_derived]);
} else {
continue;
}
}
sources.push(source3);
}
if (is_earlier) {
for (const [effect2, deferred2] of this.async_deriveds) {
const d = batch.async_deriveds.get(effect2);
if (d) deferred2.promise.then(d.resolve);
}
}
if (!batch.#started) continue;
var others = [...batch.current.keys()].filter((s) => !this.current.has(s));
if (others.length === 0) {
if (is_earlier) {
batch.discard();
}
} else if (sources.length > 0) {
if (is_earlier) {
for (const unskipped of this.#unskipped_branches) {
batch.unskip_effect(unskipped, (e) => {
if ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) {
batch.schedule(e);
} else {
batch.#defer_effects([e]);
}
});
}
}
batch.activate();
var marked = /* @__PURE__ */ new Set();
var checked = /* @__PURE__ */ new Map();
for (var source2 of sources) {
mark_effects(source2, others, marked, checked);
}
checked = /* @__PURE__ */ new Map();
var current_unequal = [...batch.current.keys()].filter(
(c) => this.current.has(c) ? (
/** @type {[any, boolean]} */
this.current.get(c)[0] !== c.v
) : true
);
if (current_unequal.length > 0) {
for (const effect2 of this.#new_effects) {
if ((effect2.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 && depends_on(effect2, current_unequal, checked)) {
if ((effect2.f & (ASYNC | BLOCK_EFFECT)) !== 0) {
set_signal_status(effect2, DIRTY);
batch.schedule(effect2);
} else {
batch.#dirty_effects.add(effect2);
}
}
}
}
if (batch.#roots.length > 0) {
batch.apply();
for (var root2 of batch.#roots) {
batch.#traverse(root2, [], []);
}
batch.#roots = [];
}
batch.deactivate();
}
}
}
/**
* @param {boolean} blocking
* @param {Effect} effect
*/
increment(blocking, effect2) {
this.#pending += 1;
if (blocking) {
let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0;
this.#blocking_pending.set(effect2, blocking_pending_count + 1);
}
}
/**
* @param {boolean} blocking
* @param {Effect} effect
*/
decrement(blocking, effect2) {
this.#pending -= 1;
if (blocking) {
let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0;
if (blocking_pending_count === 1) {
this.#blocking_pending.delete(effect2);
} else {
this.#blocking_pending.set(effect2, blocking_pending_count - 1);
}
}
if (this.#decrement_queued) return;
this.#decrement_queued = true;
queue_micro_task(() => {
this.#decrement_queued = false;
if (this.linked) {
this.flush();
}
});
}
/**
* @param {Set<Effect>} dirty_effects
* @param {Set<Effect>} maybe_dirty_effects
*/
transfer_effects(dirty_effects, maybe_dirty_effects) {
for (const e of dirty_effects) {
this.#dirty_effects.add(e);
}
for (const e of maybe_dirty_effects) {
this.#maybe_dirty_effects.add(e);
}
dirty_effects.clear();
maybe_dirty_effects.clear();
}
/** @param {(batch: Batch) => void} fn */
oncommit(fn) {
this.#commit_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
ondiscard(fn) {
this.#discard_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
on_fork_commit(fn) {
this.#fork_commit_callbacks.add(fn);
}
run_fork_commit_callbacks() {
for (const fn of this.#fork_commit_callbacks) fn(this);
this.#fork_commit_callbacks.clear();
}
settled() {
return (this.#deferred ??= deferred()).promise;
}
static ensure() {
if (current_batch === null) {
const batch = current_batch = new Batch();
batch.#link();
if (!is_processing && !is_flushing_sync) {
queue_micro_task(() => {
if (!batch.#started) {
batch.flush();
}
});
}
}
return current_batch;
}
apply() {
{
batch_values = null;
return;
}
}
/**
*
* @param {Effect} effect
*/
schedule(effect2) {
last_scheduled_effect = effect2;
if (effect2.b?.is_pending && (effect2.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect2.f & REACTION_RAN) === 0) {
effect2.b.defer_effect(effect2);
return;
}
var e = effect2;
while (e.parent !== null) {
e = e.parent;
var flags2 = e.f;
if (collected_effects !== null && e === active_effect) {
if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) {
return;
}
}
if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {
if ((flags2 & CLEAN) === 0) {
return;
}
e.f ^= CLEAN;
}
}
this.#roots.push(e);
}
#link() {
if (last_batch === null) {
first_batch = last_batch = this;
} else {
last_batch.#next = this;
this.#prev = last_batch;
}
last_batch = this;
}
#unlink() {
var prev = this.#prev;
var next2 = this.#next;
if (prev === null) {
first_batch = next2;
} else {
prev.#next = next2;
}
if (next2 === null) {
last_batch = prev;
} else {
next2.#prev = prev;
}
this.linked = false;
}
}
function flushSync(fn) {
var was_flushing_sync = is_flushing_sync;
is_flushing_sync = true;
try {
var result;
if (fn) ;
while (true) {
flush_tasks();
if (current_batch === null) {
return (
/** @type {T} */
result
);
}
current_batch.flush();
}
} finally {
is_flushing_sync = was_flushing_sync;
}
}
function infinite_loop_guard() {
try {
effect_update_depth_exceeded();
} catch (error) {
invoke_error_boundary(error, last_scheduled_effect);
}
}
let eager_block_effects = null;
function flush_queued_effects(effects) {
var length = effects.length;
if (length === 0) return;
var i = 0;
while (i < length) {
var effect2 = effects[i++];
if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) {
eager_block_effects = /* @__PURE__ */ new Set();
update_effect(effect2);
if (effect2.deps === null && effect2.first === null && effect2.nodes === null && effect2.teardown === null && effect2.ac === null) {
unlink_effect(effect2);
}
if (eager_block_effects?.size > 0) {
old_values.clear();
for (const e of eager_block_effects) {
if ((e.f & (DESTROYED | INERT)) !== 0) continue;
const ordered_effects = [e];
let ancestor = e.parent;
while (ancestor !== null) {
if (eager_block_effects.has(ancestor)) {
eager_block_effects.delete(ancestor);
ordered_effects.push(ancestor);
}
ancestor = ancestor.parent;
}
for (let j = ordered_effects.length - 1; j >= 0; j--) {
const e2 = ordered_effects[j];
if ((e2.f & (DESTROYED | INERT)) !== 0) continue;
update_effect(e2);
}
}
eager_block_effects.clear();
}
}
}
eager_block_effects = null;
}
function mark_effects(value, sources, marked, checked) {
if (marked.has(value)) return;
marked.add(value);
if (value.reactions !== null) {
for (const reaction of value.reactions) {
const flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark_effects(
/** @type {Derived} */
reaction,
sources,
marked,
checked
);
} else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) {
set_signal_status(reaction, DIRTY);
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
}
function depends_on(reaction, sources, checked) {
const depends = checked.get(reaction);
if (depends !== void 0) return depends;
if (reaction.deps !== null) {
for (const dep of reaction.deps) {
if (includes.call(sources, dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on(
/** @type {Derived} */
dep,
sources,
checked
)) {
checked.set(
/** @type {Derived} */
dep,
true
);
return true;
}
}
}
checked.set(reaction, false);
return false;
}
function schedule_effect(effect2) {
current_batch.schedule(effect2);
}
function reset_branch(effect2, tracked) {
if ((effect2.f & BRANCH_EFFECT) !== 0 && (effect2.f & CLEAN) !== 0) {
return;
}
if ((effect2.f & DIRTY) !== 0) {
tracked.d.push(effect2);
} else if ((effect2.f & MAYBE_DIRTY) !== 0) {
tracked.m.push(effect2);
}
set_signal_status(effect2, CLEAN);
var e = effect2.first;
while (e !== null) {
reset_branch(e, tracked);
e = e.next;
}
}
function reset_all(effect2) {
set_signal_status(effect2, CLEAN);
var e = effect2.first;
while (e !== null) {
reset_all(e);
e = e.next;
}
}
function createSubscriber(start) {
let subscribers = 0;
let version = source(0);
let stop;
return () => {
if (effect_tracking()) {
get(version);
render_effect(() => {
if (subscribers === 0) {
stop = untrack(() => start(() => increment(version)));
}
subscribers += 1;
return () => {
queue_micro_task(() => {
subscribers -= 1;
if (subscribers === 0) {
stop?.();
stop = void 0;
increment(version);
}
});
};
});
}
};
}
var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;
function boundary(node, props, children, transform_error) {
new Boundary(node, props, children, transform_error);
}
class Boundary {
/** @type {Boundary | null} */
parent;
is_pending = false;
/**
* API-level transformError transform function. Transforms errors before they reach the `failed` snippet.
* Inherited from parent boundary, or defaults to identity.
* @type {(error: unknown) => unknown}
*/
transform_error;
/** @type {TemplateNode} */
#anchor;
/** @type {TemplateNode | null} */
#hydrate_open = hydrating ? hydrate_node : null;
/** @type {BoundaryProps} */
#props;
/** @type {((anchor: Node) => void)} */
#children;
/** @type {Effect} */
#effect;
/** @type {Effect | null} */
#main_effect = null;
/** @type {Effect | null} */
#pending_effect = null;
/** @type {Effect | null} */
#failed_effect = null;
/** @type {DocumentFragment | null} */
#offscreen_fragment = null;
#local_pending_count = 0;
#pending_count = 0;
#pending_count_update_queued = false;
/** @type {Set<Effect>} */
#dirty_effects = /* @__PURE__ */ new Set();
/** @type {Set<Effect>} */
#maybe_dirty_effects = /* @__PURE__ */ new Set();
/**
* A source containing the number of pending async deriveds/expressions.
* Only created if `$effect.pending()` is used inside the boundary,
* otherwise updating the source results in needless `Batch.ensure()`
* calls followed by no-op flushes
* @type {Source<number> | null}
*/
#effect_pending = null;
#effect_pending_subscriber = createSubscriber(() => {
this.#effect_pending = source(this.#local_pending_count);
return () => {
this.#effect_pending = null;
};
});
/**
* @param {TemplateNode} node
* @param {BoundaryProps} props
* @param {((anchor: Node) => void)} children
* @param {((error: unknown) => unknown) | undefined} [transform_error]
*/
constructor(node, props, children, transform_error) {
this.#anchor = node;
this.#props = props;
this.#children = (anchor) => {
var effect2 = (
/** @type {Effect} */
active_effect
);
effect2.b = this;
effect2.f |= BOUNDARY_EFFECT;
children(anchor);
};
this.parent = /** @type {Effect} */
active_effect.b;
this.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e);
this.#effect = block(() => {
if (hydrating) {
const comment2 = (
/** @type {Comment} */
this.#hydrate_open
);
hydrate_next();
const server_rendered_pending = comment2.data === HYDRATION_START_ELSE;
const server_rendered_failed = comment2.data.startsWith(HYDRATION_START_FAILED);
if (server_rendered_failed) {
const serialized_error = JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length));
this.#hydrate_failed_content(serialized_error);
} else if (server_rendered_pending) {
this.#hydrate_pending_content();
} else {
this.#hydrate_resolved_content();
}
} else {
this.#render();
}
}, flags);
if (hydrating) {
this.#anchor = hydrate_node;
}
}
#hydrate_resolved_content() {
try {
this.#main_effect = branch(() => this.#children(this.#anchor));
} catch (error) {
this.error(error);
}
}
/**
* @param {unknown} error The deserialized error from the server's hydration comment
*/
#hydrate_failed_content(error) {
const failed = this.#props.failed;
if (!failed) return;
this.#failed_effect = branch(() => {
failed(
this.#anchor,
() => error,
() => () => {
}
);
});
}
#hydrate_pending_content() {
const pending = this.#props.pending;
if (!pending) return;
this.is_pending = true;
this.#pending_effect = branch(() => pending(this.#anchor));
queue_micro_task(() => {
var fragment = this.#offscreen_fragment = document.createDocumentFragment();
var anchor = create_text();
fragment.append(anchor);
this.#main_effect = this.#run(() => {
return branch(() => this.#children(anchor));
});
if (this.#pending_count === 0) {
this.#anchor.before(fragment);
this.#offscreen_fragment = null;
pause_effect(
/** @type {Effect} */
this.#pending_effect,
() => {
this.#pending_effect = null;
}
);
this.#resolve(
/** @type {Batch} */
current_batch
);
}
});
}
#render() {
try {
this.is_pending = this.has_pending_snippet();
this.#pending_count = 0;
this.#local_pending_count = 0;
this.#main_effect = branch(() => {
this.#children(this.#anchor);
});
if (this.#pending_count > 0) {
var fragment = this.#offscreen_fragment = document.createDocumentFragment();
move_effect(this.#main_effect, fragment);
const pending = (
/** @type {(anchor: Node) => void} */
this.#props.pending
);
this.#pending_effect = branch(() => pending(this.#anchor));
} else {
this.#resolve(
/** @type {Batch} */
current_batch
);
}
} catch (error) {
this.error(error);
}
}
/**
* @param {Batch} batch
*/
#resolve(batch) {
this.is_pending = false;
batch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects);
}
/**
* Defer an effect inside a pending boundary until the boundary resolves
* @param {Effect} effect
*/
defer_effect(effect2) {
defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects);
}
/**
* Returns `false` if the effect exists inside a boundary whose pending snippet is shown
* @returns {boolean}
*/
is_rendered() {
return !this.is_pending && (!this.parent || this.parent.is_rendered());
}
has_pending_snippet() {
return !!this.#props.pending;
}
/**
* @template T
* @param {() => T} fn
*/
#run(fn) {
var previous_effect = active_effect;
var previous_reaction = active_reaction;
var previous_ctx = component_context;
set_active_effect(this.#effect);
set_active_reaction(this.#effect);
set_component_context(this.#effect.ctx);
try {
Batch.ensure();
return fn();
} catch (e) {
handle_error(e);
return null;
} finally {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_ctx);
}
}
/**
* Updates the pending count associated with the currently visible pending snippet,
* if any, such that we can replace the snippet with content once work is done
* @param {1 | -1} d
* @param {Batch} batch
*/
#update_pending_count(d, batch) {
if (!this.has_pending_snippet()) {
if (this.parent) {
this.parent.#update_pending_count(d, batch);
}
return;
}
this.#pending_count += d;
if (this.#pending_count === 0) {
this.#resolve(batch);
if (this.#pending_effect) {
pause_effect(this.#pending_effect, () => {
this.#pending_effect = null;
});
}
if (this.#offscreen_fragment) {
this.#anchor.before(this.#offscreen_fragment);
this.#offscreen_fragment = null;
}
}
}
/**
* Update the source that powers `$effect.pending()` inside this boundary,
* and controls when the current `pending` snippet (if any) is removed.
* Do not call from inside the class
* @param {1 | -1} d
* @param {Batch} batch
*/
update_pending_count(d, batch) {
this.#update_pending_count(d, batch);
this.#local_pending_count += d;
if (!this.#effect_pending || this.#pending_count_update_queued) return;
this.#pending_count_update_queued = true;
queue_micro_task(() => {
this.#pending_count_update_queued = false;
if (this.#effect_pending) {
internal_set(this.#effect_pending, this.#local_pending_count);
}
});
}
get_effect_pending() {
this.#effect_pending_subscriber();
return get(
/** @type {Source<number>} */
this.#effect_pending
);
}
/** @param {unknown} error */
error(error) {
if (!this.#props.onerror && !this.#props.failed) {
throw error;
}
if (current_batch?.is_fork) {
if (this.#main_effect) current_batch.skip_effect(this.#main_effect);
if (this.#pending_effect) current_batch.skip_effect(this.#pending_effect);
if (this.#failed_effect) current_batch.skip_effect(this.#failed_effect);
current_batch.on_fork_commit(() => {
this.#handle_error(error);
});
} else {
this.#handle_error(error);
}
}
/**
* @param {unknown} error
*/
#handle_error(error) {
if (this.#main_effect) {
destroy_effect(this.#main_effect);
this.#main_effect = null;
}
if (this.#pending_effect) {
destroy_effect(this.#pending_effect);
this.#pending_effect = null;
}
if (this.#failed_effect) {
destroy_effect(this.#failed_effect);
this.#failed_effect = null;
}
if (hydrating) {
set_hydrate_node(
/** @type {TemplateNode} */
this.#hydrate_open
);
next();
set_hydrate_node(skip_nodes());
}
var onerror = this.#props.onerror;
let failed = this.#props.failed;
var did_reset = false;
var calling_on_error = false;
const reset2 = () => {
if (did_reset) {
svelte_boundary_reset_noop();
return;
}
did_reset = true;
if (calling_on_error) {
svelte_boundary_reset_onerror();
}
if (this.#failed_effect !== null) {
pause_effect(this.#failed_effect, () => {
this.#failed_effect = null;
});
}
this.#run(() => {
this.#render();
});
};
const handle_error_result = (transformed_error) => {
try {
calling_on_error = true;
onerror?.(transformed_error, reset2);
calling_on_error = false;
} catch (error2) {
invoke_error_boundary(error2, this.#effect && this.#effect.parent);
}
if (failed) {
this.#failed_effect = this.#run(() => {
try {
return branch(() => {
var effect2 = (
/** @type {Effect} */
active_effect
);
effect2.b = this;
effect2.f |= BOUNDARY_EFFECT;
failed(
this.#anchor,
() => transformed_error,
() => reset2
);
});
} catch (error2) {
invoke_error_boundary(
error2,
/** @type {Effect} */
this.#effect.parent
);
return null;
}
});
}
};
queue_micro_task(() => {
var result;
try {
result = this.transform_error(error);
} catch (e) {
invoke_error_boundary(e, this.#effect && this.#effect.parent);
return;
}
if (result !== null && typeof result === "object" && typeof /** @type {any} */
result.then === "function") {
result.then(
handle_error_result,
/** @param {unknown} e */
(e) => invoke_error_boundary(e, this.#effect && this.#effect.parent)
);
} else {
handle_error_result(result);
}
});
}
}
function flatten(blockers, sync, async, fn) {
const d = derived;
var pending = blockers.filter((b) => !b.settled);
if (async.length === 0 && pending.length === 0) {
fn(sync.map(d));
return;
}
var parent = (
/** @type {Effect} */
active_effect
);
var restore = capture();
var blocker_promise = pending.length === 1 ? pending[0].promise : pending.length > 1 ? Promise.all(pending.map((b) => b.promise)) : null;
function finish(values) {
if ((parent.f & DESTROYED) !== 0) {
return;
}
restore();
try {
fn(values);
} catch (error) {
invoke_error_boundary(error, parent);
}
unset_context();
}
var decrement_pending = increment_pending();
if (async.length === 0) {
blocker_promise.then(() => finish(sync.map(d))).finally(decrement_pending);
return;
}
function run() {
Promise.all(async.map((expression) => /* @__PURE__ */ async_derived(expression))).then((result) => finish([...sync.map(d), ...result])).catch((error) => invoke_error_boundary(error, parent)).finally(decrement_pending);
}
if (blocker_promise) {
blocker_promise.then(() => {
restore();
run();
unset_context();
});
} else {
run();
}
}
function capture() {
var previous_effect = (
/** @type {Effect} */
active_effect
);
var previous_reaction = active_reaction;
var previous_component_context = component_context;
var previous_batch2 = (
/** @type {Batch} */
current_batch
);
return function restore(activate_batch = true) {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_component_context);
if (activate_batch && (previous_effect.f & DESTROYED) === 0) {
previous_batch2?.activate();
previous_batch2?.apply();
}
};
}
function unset_context(deactivate_batch = true) {
set_active_effect(null);
set_active_reaction(null);
set_component_context(null);
if (deactivate_batch) current_batch?.deactivate();
}
function increment_pending() {
var effect2 = (
/** @type {Effect} */
active_effect
);
var boundary2 = (
/** @type {Boundary} */
effect2.b
);
var batch = (
/** @type {Batch} */
current_batch
);
var blocking = boundary2.is_rendered();
boundary2.update_pending_count(1, batch);
batch.increment(blocking, effect2);
return () => {
boundary2.update_pending_count(-1, batch);
batch.decrement(blocking, effect2);
};
}
// @__NO_SIDE_EFFECTS__
function derived(fn) {
var flags2 = DERIVED | DIRTY;
if (active_effect !== null) {
active_effect.f |= EFFECT_PRESERVED;
}
const signal = {
ctx: component_context,
deps: null,
effects: null,
equals,
f: flags2,
fn,
reactions: null,
rv: 0,
v: (
/** @type {V} */
UNINITIALIZED
),
wv: 0,
parent: active_effect,
ac: null
};
return signal;
}
const OBSOLETE = /* @__PURE__ */ Symbol("obsolete");
// @__NO_SIDE_EFFECTS__
function async_derived(fn, label, location2) {
let parent = (
/** @type {Effect | null} */
active_effect
);
if (parent === null) {
async_derived_orphan();
}
var promise = (
/** @type {Promise<V>} */
/** @type {unknown} */
void 0
);
var signal = source(
/** @type {V} */
UNINITIALIZED
);
var should_suspend = !active_reaction;
var deferreds = /* @__PURE__ */ new Set();
async_effect(() => {
var effect2 = (
/** @type {Effect} */
active_effect
);
var d = deferred();
promise = d.promise;
try {
Promise.resolve(fn()).then(d.resolve, (e) => {
if (e !== STALE_REACTION) d.reject(e);
}).finally(unset_context);
} catch (error) {
d.reject(error);
unset_context();
}
var batch = (
/** @type {Batch} */
current_batch
);
if (should_suspend) {
if ((effect2.f & REACTION_RAN) !== 0) {
var decrement_pending = increment_pending();
}
if (
/** @type {Boundary} */
parent.b.is_rendered()
) {
batch.async_deriveds.get(effect2)?.reject(OBSOLETE);
} else {
for (const d2 of deferreds.values()) {
d2.reject(OBSOLETE);
}
}
deferreds.add(d);
batch.async_deriveds.set(effect2, d);
}
const handler = (value, error = void 0) => {
decrement_pending?.();
deferreds.delete(d);
if (error === OBSOLETE) return;
batch.activate();
if (error) {
signal.f |= ERROR_VALUE;
internal_set(signal, error);
} else {
if ((signal.f & ERROR_VALUE) !== 0) {
signal.f ^= ERROR_VALUE;
}
internal_set(signal, value);
}
batch.deactivate();
};
d.promise.then(handler, (e) => handler(null, e || "unknown"));
});
teardown(() => {
for (const d of deferreds) {
d.reject(OBSOLETE);
}
});
return new Promise((fulfil) => {
function next2(p) {
function go() {
if (p === promise) {
fulfil(signal);
} else {
next2(promise);
}
}
p.then(go, go);
}
next2(promise);
});
}
// @__NO_SIDE_EFFECTS__
function user_derived(fn) {
const d = /* @__PURE__ */ derived(fn);
push_reaction_value(d);
return d;
}
function destroy_derived_effects(derived2) {
var effects = derived2.effects;
if (effects !== null) {
derived2.effects = null;
for (var i = 0; i < effects.length; i += 1) {
destroy_effect(
/** @type {Effect} */
effects[i]
);
}
}
}
function execute_derived(derived2) {
var value;
var prev_active_effect = active_effect;
var parent = derived2.parent;
if (!is_destroying_effect && parent !== null && derived2.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead
(parent.f & (DESTROYED | INERT)) !== 0) {
derived_inert();
return derived2.v;
}
set_active_effect(parent);
{
try {
derived2.f &= ~WAS_MARKED;
destroy_derived_effects(derived2);
value = update_reaction(derived2);
} finally {
set_active_effect(prev_active_effect);
}
}
return value;
}
function update_derived(derived2) {
var value = execute_derived(derived2);
if (!derived2.equals(value)) {
derived2.wv = increment_write_version();
if (!current_batch?.is_fork || derived2.deps === null) {
if (current_batch !== null) {
current_batch.capture(derived2, value, true);
previous_batch?.capture(derived2, value, true);
} else {
derived2.v = value;
}
if (derived2.deps === null) {
set_signal_status(derived2, CLEAN);
return;
}
}
}
if (is_destroying_effect) {
return;
}
if (batch_values !== null) {
if (effect_tracking() || current_batch?.is_fork) {
batch_values.set(derived2, value);
}
} else {
update_derived_status(derived2);
}
}
function freeze_derived_effects(derived2) {
if (derived2.effects === null) return;
for (const e of derived2.effects) {
if (e.teardown || e.ac) {
e.teardown?.();
e.ac?.abort(STALE_REACTION);
if (e.fn !== null) e.teardown = noop;
e.ac = null;
remove_reactions(e, 0);
destroy_effect_children(e);
}
}
}
function unfreeze_derived_effects(derived2) {
if (derived2.effects === null) return;
for (const e of derived2.effects) {
if (e.teardown && e.fn !== null) {
update_effect(e);
}
}
}
let eager_effects = /* @__PURE__ */ new Set();
const old_values = /* @__PURE__ */ new Map();
let eager_effects_deferred = false;
function source(v, stack) {
var signal = {
f: 0,
// TODO ideally we could skip this altogether, but it causes type errors
v,
reactions: null,
equals,
rv: 0,
wv: 0
};
return signal;
}
// @__NO_SIDE_EFFECTS__
function state(v, stack) {
const s = source(v);
push_reaction_value(s);
return s;
}
// @__NO_SIDE_EFFECTS__
function mutable_source(initial_value, immutable = false, trackable = true) {
const s = source(initial_value);
if (!immutable) {
s.equals = safe_equals;
}
return s;
}
function set(source2, value, should_proxy = false) {
if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check
// to ensure we error if state is set inside an inspect effect
(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) {
state_unsafe_mutation();
}
let new_value = should_proxy ? proxy(value) : value;
return internal_set(source2, new_value, legacy_updates);
}
function internal_set(source2, value, updated_during_traversal = null) {
if (!source2.equals(value)) {
old_values.set(source2, is_destroying_effect ? value : source2.v);
var batch = Batch.ensure();
batch.capture(source2, value);
if ((source2.f & DERIVED) !== 0) {
const derived2 = (
/** @type {Derived} */
source2
);
if ((source2.f & DIRTY) !== 0) {
execute_derived(derived2);
}
if (batch_values === null) {
update_derived_status(derived2);
}
}
source2.wv = increment_write_version();
mark_reactions(source2, DIRTY, updated_during_traversal);
if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) {
if (untracked_writes === null) {
set_untracked_writes([source2]);
} else {
untracked_writes.push(source2);
}
}
if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {
flush_eager_effects();
}
}
return value;
}
function flush_eager_effects() {
eager_effects_deferred = false;
for (const effect2 of eager_effects) {
if ((effect2.f & CLEAN) !== 0) {
set_signal_status(effect2, MAYBE_DIRTY);
}
let dirty;
try {
dirty = is_dirty(effect2);
} catch {
dirty = true;
}
if (dirty) {
update_effect(effect2);
}
}
eager_effects.clear();
}
function increment(source2) {
set(source2, source2.v + 1);
}
function mark_reactions(signal, status, updated_during_traversal) {
var reactions = signal.reactions;
if (reactions === null) return;
var length = reactions.length;
for (var i = 0; i < length; i++) {
var reaction = reactions[i];
var flags2 = reaction.f;
var not_dirty = (flags2 & DIRTY) === 0;
if (not_dirty) {
set_signal_status(reaction, status);
}
if ((flags2 & EAGER_EFFECT) !== 0) {
eager_effects.add(
/** @type {Effect} */
reaction
);
} else if ((flags2 & DERIVED) !== 0) {
var derived2 = (
/** @type {Derived} */
reaction
);
batch_values?.delete(derived2);
if ((flags2 & WAS_MARKED) === 0) {
if (flags2 & CONNECTED && (active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)) {
reaction.f |= WAS_MARKED;
}
mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal);
}
} else if (not_dirty) {
var effect2 = (
/** @type {Effect} */
reaction
);
if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {
eager_block_effects.add(effect2);
}
if (updated_during_traversal !== null) {
updated_during_traversal.push(effect2);
} else {
schedule_effect(effect2);
}
}
}
}
function autofocus(dom, value) {
if (value) {
const body = document.body;
dom.autofocus = true;
queue_micro_task(() => {
if (document.activeElement === body) {
dom.focus();
}
});
}
}
let listening_to_form_reset = false;
function add_form_reset_listener() {
if (!listening_to_form_reset) {
listening_to_form_reset = true;
document.addEventListener(
"reset",
(evt) => {
Promise.resolve().then(() => {
if (!evt.defaultPrevented) {
for (
const e of
/**@type {HTMLFormElement} */
evt.target.elements
) {
e[FORM_RESET_HANDLER]?.();
}
}
});
},
// In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation)
{ capture: true }
);
}
}
function without_reactive_context(fn) {
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
return fn();
} finally {
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) {
element.addEventListener(event2, () => without_reactive_context(handler));
const prev = (
/** @type {any} */
element[FORM_RESET_HANDLER]
);
if (prev) {
element[FORM_RESET_HANDLER] = () => {
prev();
on_reset(true);
};
} else {
element[FORM_RESET_HANDLER] = () => on_reset(true);
}
add_form_reset_listener();
}
let is_updating_effect = false;
let is_destroying_effect = false;
function set_is_destroying_effect(value) {
is_destroying_effect = value;
}
let active_reaction = null;
let untracking = false;
function set_active_reaction(reaction) {
active_reaction = reaction;
}
let active_effect = null;
function set_active_effect(effect2) {
active_effect = effect2;
}
let current_sources = null;
function push_reaction_value(value) {
if (active_reaction !== null && true) {
if (current_sources === null) {
current_sources = [value];
} else {
current_sources.push(value);
}
}
}
let new_deps = null;
let skipped_deps = 0;
let untracked_writes = null;
function set_untracked_writes(value) {
untracked_writes = value;
}
let write_version = 1;
let read_version = 0;
let update_version = read_version;
function set_update_version(value) {
update_version = value;
}
function increment_write_version() {
return ++write_version;
}
function is_dirty(reaction) {
var flags2 = reaction.f;
if ((flags2 & DIRTY) !== 0) {
return true;
}
if (flags2 & DERIVED) {
reaction.f &= ~WAS_MARKED;
}
if ((flags2 & MAYBE_DIRTY) !== 0) {
var dependencies = (
/** @type {Value[]} */
reaction.deps
);
var length = dependencies.length;
for (var i = 0; i < length; i++) {
var dependency = dependencies[i];
if (is_dirty(
/** @type {Derived} */
dependency
)) {
update_derived(
/** @type {Derived} */
dependency
);
}
if (dependency.wv > reaction.wv) {
return true;
}
}
if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that
// traversal of the graph in the other batches still happens
batch_values === null) {
set_signal_status(reaction, CLEAN);
}
}
return false;
}
function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) {
var reactions = signal.reactions;
if (reactions === null) return;
if (current_sources !== null && includes.call(current_sources, signal)) {
return;
}
for (var i = 0; i < reactions.length; i++) {
var reaction = reactions[i];
if ((reaction.f & DERIVED) !== 0) {
schedule_possible_effect_self_invalidation(
/** @type {Derived} */
reaction,
effect2,
false
);
} else if (effect2 === reaction) {
if (root2) {
set_signal_status(reaction, DIRTY);
} else if ((reaction.f & CLEAN) !== 0) {
set_signal_status(reaction, MAYBE_DIRTY);
}
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
function update_reaction(reaction) {
var previous_deps = new_deps;
var previous_skipped_deps = skipped_deps;
var previous_untracked_writes = untracked_writes;
var previous_reaction = active_reaction;
var previous_sources = current_sources;
var previous_component_context = component_context;
var previous_untracking = untracking;
var previous_update_version = update_version;
var flags2 = reaction.f;
new_deps = /** @type {null | Value[]} */
null;
skipped_deps = 0;
untracked_writes = null;
active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;
current_sources = null;
set_component_context(reaction.ctx);
untracking = false;
update_version = ++read_version;
if (reaction.ac !== null) {
without_reactive_context(() => {
reaction.ac.abort(STALE_REACTION);
});
reaction.ac = null;
}
try {
reaction.f |= REACTION_IS_UPDATING;
var fn = (
/** @type {Function} */
reaction.fn
);
var result = fn();
reaction.f |= REACTION_RAN;
var deps = reaction.deps;
var is_fork = current_batch?.is_fork;
if (new_deps !== null) {
var i;
if (!is_fork) {
remove_reactions(reaction, skipped_deps);
}
if (deps !== null && skipped_deps > 0) {
deps.length = skipped_deps + new_deps.length;
for (i = 0; i < new_deps.length; i++) {
deps[skipped_deps + i] = new_deps[i];
}
} else {
reaction.deps = deps = new_deps;
}
if (effect_tracking() && (reaction.f & CONNECTED) !== 0) {
for (i = skipped_deps; i < deps.length; i++) {
(deps[i].reactions ??= []).push(reaction);
}
}
} else if (!is_fork && deps !== null && skipped_deps < deps.length) {
remove_reactions(reaction, skipped_deps);
deps.length = skipped_deps;
}
if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) {
for (i = 0; i < /** @type {Source[]} */
untracked_writes.length; i++) {
schedule_possible_effect_self_invalidation(
untracked_writes[i],
/** @type {Effect} */
reaction
);
}
}
if (previous_reaction !== null && previous_reaction !== reaction) {
read_version++;
if (previous_reaction.deps !== null) {
for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) {
previous_reaction.deps[i2].rv = read_version;
}
}
if (previous_deps !== null) {
for (const dep of previous_deps) {
dep.rv = read_version;
}
}
if (untracked_writes !== null) {
if (previous_untracked_writes === null) {
previous_untracked_writes = untracked_writes;
} else {
previous_untracked_writes.push(.../** @type {Source[]} */
untracked_writes);
}
}
}
if ((reaction.f & ERROR_VALUE) !== 0) {
reaction.f ^= ERROR_VALUE;
}
return result;
} catch (error) {
return handle_error(error);
} finally {
reaction.f ^= REACTION_IS_UPDATING;
new_deps = previous_deps;
skipped_deps = previous_skipped_deps;
untracked_writes = previous_untracked_writes;
active_reaction = previous_reaction;
current_sources = previous_sources;
set_component_context(previous_component_context);
untracking = previous_untracking;
update_version = previous_update_version;
}
}
function remove_reaction(signal, dependency) {
let reactions = dependency.reactions;
if (reactions !== null) {
var index = index_of.call(reactions, signal);
if (index !== -1) {
var new_length = reactions.length - 1;
if (new_length === 0) {
reactions = dependency.reactions = null;
} else {
reactions[index] = reactions[new_length];
reactions.pop();
}
}
}
if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear
// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`
// allows us to skip the expensive work of disconnecting and immediately reconnecting it
(new_deps === null || !includes.call(new_deps, dependency))) {
var derived2 = (
/** @type {Derived} */
dependency
);
if ((derived2.f & CONNECTED) !== 0) {
derived2.f ^= CONNECTED;
derived2.f &= ~WAS_MARKED;
}
if (derived2.v !== UNINITIALIZED) {
update_derived_status(derived2);
}
freeze_derived_effects(derived2);
remove_reactions(derived2, 0);
}
}
function remove_reactions(signal, start_index) {
var dependencies = signal.deps;
if (dependencies === null) return;
for (var i = start_index; i < dependencies.length; i++) {
remove_reaction(signal, dependencies[i]);
}
}
function update_effect(effect2) {
var flags2 = effect2.f;
if ((flags2 & DESTROYED) !== 0) {
return;
}
set_signal_status(effect2, CLEAN);
var previous_effect = active_effect;
var was_updating_effect = is_updating_effect;
active_effect = effect2;
is_updating_effect = true;
try {
if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {
destroy_block_effect_children(effect2);
} else {
destroy_effect_children(effect2);
}
execute_effect_teardown(effect2);
var teardown2 = update_reaction(effect2);
effect2.teardown = typeof teardown2 === "function" ? teardown2 : null;
effect2.wv = write_version;
var dep;
if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ;
} finally {
is_updating_effect = was_updating_effect;
active_effect = previous_effect;
}
}
async function tick() {
await Promise.resolve();
flushSync();
}
function get(signal) {
var flags2 = signal.f;
var is_derived = (flags2 & DERIVED) !== 0;
if (active_reaction !== null && !untracking) {
var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;
if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) {
var deps = active_reaction.deps;
if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {
if (signal.rv < read_version) {
signal.rv = read_version;
if (new_deps === null && deps !== null && deps[skipped_deps] === signal) {
skipped_deps++;
} else if (new_deps === null) {
new_deps = [signal];
} else {
new_deps.push(signal);
}
}
} else {
(active_reaction.deps ??= []).push(signal);
var reactions = signal.reactions;
if (reactions === null) {
signal.reactions = [active_reaction];
} else if (!includes.call(reactions, active_reaction)) {
reactions.push(active_reaction);
}
}
}
}
if (is_destroying_effect && old_values.has(signal)) {
return old_values.get(signal);
}
if (is_derived) {
var derived2 = (
/** @type {Derived} */
signal
);
if (is_destroying_effect) {
var value = derived2.v;
if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) {
value = execute_derived(derived2);
}
old_values.set(derived2, value);
return value;
}
var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0);
var is_new = (derived2.f & REACTION_RAN) === 0;
if (is_dirty(derived2)) {
if (should_connect) {
derived2.f |= CONNECTED;
}
update_derived(derived2);
}
if (should_connect && !is_new) {
unfreeze_derived_effects(derived2);
reconnect(derived2);
}
}
if (batch_values?.has(signal)) {
return batch_values.get(signal);
}
if ((signal.f & ERROR_VALUE) !== 0) {
throw signal.v;
}
return signal.v;
}
function reconnect(derived2) {
derived2.f |= CONNECTED;
if (derived2.deps === null) return;
for (const dep of derived2.deps) {
(dep.reactions ??= []).push(derived2);
if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {
unfreeze_derived_effects(
/** @type {Derived} */
dep
);
reconnect(
/** @type {Derived} */
dep
);
}
}
}
function depends_on_old_values(derived2) {
if (derived2.v === UNINITIALIZED) return true;
if (derived2.deps === null) return false;
for (const dep of derived2.deps) {
if (old_values.has(dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on_old_values(
/** @type {Derived} */
dep
)) {
return true;
}
}
return false;
}
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function validate_effect(rune) {
if (active_effect === null) {
if (active_reaction === null) {
effect_orphan();
}
effect_in_unowned_derived();
}
if (is_destroying_effect) {
effect_in_teardown();
}
}
function push_effect(effect2, parent_effect) {
var parent_last = parent_effect.last;
if (parent_last === null) {
parent_effect.last = parent_effect.first = effect2;
} else {
parent_last.next = effect2;
effect2.prev = parent_last;
parent_effect.last = effect2;
}
}
function create_effect(type, fn) {
var parent = active_effect;
if (parent !== null && (parent.f & INERT) !== 0) {
type |= INERT;
}
var effect2 = {
ctx: component_context,
deps: null,
nodes: null,
f: type | DIRTY | CONNECTED,
first: null,
fn,
last: null,
next: null,
parent,
b: parent && parent.b,
prev: null,
teardown: null,
wv: 0,
ac: null
};
current_batch?.register_created_effect(effect2);
var e = effect2;
if ((type & EFFECT) !== 0) {
if (collected_effects !== null) {
collected_effects.push(effect2);
} else {
Batch.ensure().schedule(effect2);
}
} else if (fn !== null) {
try {
update_effect(effect2);
} catch (e2) {
destroy_effect(effect2);
throw e2;
}
if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child
(e.f & EFFECT_PRESERVED) === 0) {
e = e.first;
if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {
e.f |= EFFECT_TRANSPARENT;
}
}
}
if (e !== null) {
e.parent = parent;
if (parent !== null) {
push_effect(e, parent);
}
if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) {
var derived2 = (
/** @type {Derived} */
active_reaction
);
(derived2.effects ??= []).push(e);
}
}
return effect2;
}
function effect_tracking() {
return active_reaction !== null && !untracking;
}
function teardown(fn) {
const effect2 = create_effect(RENDER_EFFECT, null);
set_signal_status(effect2, CLEAN);
effect2.teardown = fn;
return effect2;
}
function user_effect(fn) {
validate_effect();
var flags2 = (
/** @type {Effect} */
active_effect.f
);
var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & REACTION_RAN) === 0;
if (defer) {
var context = (
/** @type {ComponentContext} */
component_context
);
(context.e ??= []).push(fn);
} else {
return create_user_effect(fn);
}
}
function create_user_effect(fn) {
return create_effect(EFFECT | USER_EFFECT, fn);
}
function effect_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
return () => {
destroy_effect(effect2);
};
}
function component_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
return (options = {}) => {
return new Promise((fulfil) => {
if (options.outro) {
pause_effect(effect2, () => {
destroy_effect(effect2);
fulfil(void 0);
});
} else {
destroy_effect(effect2);
fulfil(void 0);
}
});
};
}
function effect(fn) {
return create_effect(EFFECT, fn);
}
function async_effect(fn) {
return create_effect(ASYNC | EFFECT_PRESERVED, fn);
}
function render_effect(fn, flags2 = 0) {
return create_effect(RENDER_EFFECT | flags2, fn);
}
function template_effect(fn, sync = [], async = [], blockers = []) {
flatten(blockers, sync, async, (values) => {
create_effect(RENDER_EFFECT, () => fn(...values.map(get)));
});
}
function block(fn, flags2 = 0) {
var effect2 = create_effect(BLOCK_EFFECT | flags2, fn);
return effect2;
}
function managed(fn, flags2 = 0) {
var effect2 = create_effect(MANAGED_EFFECT | flags2, fn);
return effect2;
}
function branch(fn) {
return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn);
}
function execute_effect_teardown(effect2) {
var teardown2 = effect2.teardown;
if (teardown2 !== null) {
const previously_destroying_effect = is_destroying_effect;
const previous_reaction = active_reaction;
set_is_destroying_effect(true);
set_active_reaction(null);
try {
teardown2.call(null);
} finally {
set_is_destroying_effect(previously_destroying_effect);
set_active_reaction(previous_reaction);
}
}
}
function destroy_effect_children(signal, remove_dom = false) {
var effect2 = signal.first;
signal.first = signal.last = null;
while (effect2 !== null) {
const controller = effect2.ac;
if (controller !== null) {
without_reactive_context(() => {
controller.abort(STALE_REACTION);
});
}
var next2 = effect2.next;
if ((effect2.f & ROOT_EFFECT) !== 0) {
effect2.parent = null;
} else {
destroy_effect(effect2, remove_dom);
}
effect2 = next2;
}
}
function destroy_block_effect_children(signal) {
var effect2 = signal.first;
while (effect2 !== null) {
var next2 = effect2.next;
if ((effect2.f & BRANCH_EFFECT) === 0) {
destroy_effect(effect2);
}
effect2 = next2;
}
}
function destroy_effect(effect2, remove_dom = true) {
var removed = false;
if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) {
remove_effect_dom(
effect2.nodes.start,
/** @type {TemplateNode} */
effect2.nodes.end
);
removed = true;
}
set_signal_status(effect2, DESTROYING);
destroy_effect_children(effect2, remove_dom && !removed);
remove_reactions(effect2, 0);
var transitions = effect2.nodes && effect2.nodes.t;
if (transitions !== null) {
for (const transition of transitions) {
transition.stop();
}
}
execute_effect_teardown(effect2);
effect2.f ^= DESTROYING;
effect2.f |= DESTROYED;
var parent = effect2.parent;
if (parent !== null && parent.first !== null) {
unlink_effect(effect2);
}
effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = effect2.b = null;
}
function remove_effect_dom(node, end) {
while (node !== null) {
var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
node.remove();
node = next2;
}
}
function unlink_effect(effect2) {
var parent = effect2.parent;
var prev = effect2.prev;
var next2 = effect2.next;
if (prev !== null) prev.next = next2;
if (next2 !== null) next2.prev = prev;
if (parent !== null) {
if (parent.first === effect2) parent.first = next2;
if (parent.last === effect2) parent.last = prev;
}
}
function pause_effect(effect2, callback, destroy = true) {
var transitions = [];
pause_children(effect2, transitions, true);
var fn = () => {
if (destroy) destroy_effect(effect2);
if (callback) callback();
};
var remaining = transitions.length;
if (remaining > 0) {
var check = () => --remaining || fn();
for (var transition of transitions) {
transition.out(check);
}
} else {
fn();
}
}
function pause_children(effect2, transitions, local) {
if ((effect2.f & INERT) !== 0) return;
effect2.f ^= INERT;
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition of t) {
if (transition.is_global || local) {
transitions.push(transition);
}
}
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
if ((child2.f & ROOT_EFFECT) === 0) {
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent,
// it means the parent block effect was pruned. In that case,
// transparency information was transferred to the branch effect.
(child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0;
pause_children(child2, transitions, transparent ? local : false);
}
child2 = sibling2;
}
}
function resume_effect(effect2) {
resume_children(effect2, true);
}
function resume_children(effect2, local) {
if ((effect2.f & INERT) === 0) return;
effect2.f ^= INERT;
if ((effect2.f & CLEAN) === 0) {
set_signal_status(effect2, DIRTY);
Batch.ensure().schedule(effect2);
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0;
resume_children(child2, transparent ? local : false);
child2 = sibling2;
}
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition of t) {
if (transition.is_global || local) {
transition.in();
}
}
}
}
function move_effect(effect2, fragment) {
if (!effect2.nodes) return;
var node = effect2.nodes.start;
var end = effect2.nodes.end;
while (node !== null) {
var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
fragment.append(node);
node = next2;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get$1(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get$1(scope.store), {
[name]: value
});
} else {
Object.assign(get$1(scope.store), name);
}
scope.store.set(get$1(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n = {
ariaLinkLabel: "Altcha (official website)",
cancel: "Cancel",
enterCode: "Enter code",
enterCodeAria: "Enter code you hear. Press Space to play audio.",
enterCodeFromImage: "To proceed, please enter the code from the image below.",
error: "Verification failed. Try again later.",
expired: "Verification expired. Try again.",
footer: 'Protected by <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (official website)">ALTCHA</a>',
getAudioChallenge: "Get an audio challenge",
label: "I'm not a robot",
loading: "Loading...",
reload: "Reload",
verify: "Verify",
verificationRequired: "Verification required!",
verified: "Verified",
verifying: "Verifying...",
waitAlert: "Verifying... please wait."
};
globalThis.$altcha.i18n.set("en", i18n);
const PUBLIC_VERSION = "5";
if (typeof window !== "undefined") {
((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION);
}
const event_symbol = /* @__PURE__ */ Symbol("events");
const all_registered_events = /* @__PURE__ */ new Set();
const root_event_handles = /* @__PURE__ */ new Set();
function create_event(event_name, dom, handler, options = {}) {
function target_handler(event2) {
if (!options.capture) {
handle_event_propagation.call(dom, event2);
}
if (!event2.cancelBubble) {
return without_reactive_context(() => {
return handler?.call(this, event2);
});
}
}
if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") {
queue_micro_task(() => {
dom.addEventListener(event_name, target_handler, options);
});
} else {
dom.addEventListener(event_name, target_handler, options);
}
return target_handler;
}
function event(event_name, dom, handler, capture2, passive) {
var options = { capture: capture2, passive };
var target_handler = create_event(event_name, dom, handler, options);
if (dom === document.body || // @ts-ignore
dom === window || // @ts-ignore
dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed
dom instanceof HTMLMediaElement) {
teardown(() => {
dom.removeEventListener(event_name, target_handler, options);
});
}
}
function delegated(event_name, element, handler) {
(element[event_symbol] ??= {})[event_name] = handler;
}
function delegate(events) {
for (var i = 0; i < events.length; i++) {
all_registered_events.add(events[i]);
}
for (var fn of root_event_handles) {
fn(events);
}
}
let last_propagated_event = null;
function handle_event_propagation(event2) {
var handler_element = this;
var owner_document = (
/** @type {Node} */
handler_element.ownerDocument
);
var event_name = event2.type;
var path = event2.composedPath?.() || [];
var current_target = (
/** @type {null | Element} */
path[0] || event2.target
);
last_propagated_event = event2;
var path_idx = 0;
var handled_at = last_propagated_event === event2 && event2[event_symbol];
if (handled_at) {
var at_idx = path.indexOf(handled_at);
if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */
window)) {
event2[event_symbol] = handler_element;
return;
}
var handler_idx = path.indexOf(handler_element);
if (handler_idx === -1) {
return;
}
if (at_idx <= handler_idx) {
path_idx = at_idx;
}
}
current_target = /** @type {Element} */
path[path_idx] || event2.target;
if (current_target === handler_element) return;
define_property(event2, "currentTarget", {
configurable: true,
get() {
return current_target || owner_document;
}
});
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
var throw_error;
var other_errors = [];
while (current_target !== null) {
var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */
current_target.host || null;
try {
var delegated2 = current_target[event_symbol]?.[event_name];
if (delegated2 != null && (!/** @type {any} */
current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well
// -> the target could not have been disabled because it emits the event in the first place
event2.target === current_target)) {
delegated2.call(current_target, event2);
}
} catch (error) {
if (throw_error) {
other_errors.push(error);
} else {
throw_error = error;
}
}
if (event2.cancelBubble || parent_element === handler_element || parent_element === null) {
break;
}
current_target = parent_element;
}
if (throw_error) {
for (let error of other_errors) {
queueMicrotask(() => {
throw error;
});
}
throw throw_error;
}
} finally {
event2[event_symbol] = handler_element;
delete event2.currentTarget;
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
const policy = (
// We gotta write it like this because after downleveling the pure comment may end up in the wrong location
globalThis?.window?.trustedTypes && /* @__PURE__ */ globalThis.window.trustedTypes.createPolicy("svelte-trusted-html", {
/** @param {string} html */
createHTML: (html2) => {
return html2;
}
})
);
function create_trusted_html(html2) {
return (
/** @type {string} */
policy?.createHTML(html2) ?? html2
);
}
function create_fragment_from_html(html2) {
var elem = create_element("template");
elem.innerHTML = create_trusted_html(html2.replaceAll("<!>", "<!---->"));
return elem.content;
}
function assign_nodes(start, end) {
var effect2 = (
/** @type {Effect} */
active_effect
);
if (effect2.nodes === null) {
effect2.nodes = { start, end, a: null, t: null };
}
}
// @__NO_SIDE_EFFECTS__
function from_html(content, flags2) {
var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0;
var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0;
var node;
var has_start = !content.startsWith("<!>");
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (node === void 0) {
node = create_fragment_from_html(has_start ? content : "<!>" + content);
if (!is_fragment) node = /** @type {TemplateNode} */
/* @__PURE__ */ get_first_child(node);
}
var clone = (
/** @type {TemplateNode} */
use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)
);
if (is_fragment) {
var start = (
/** @type {TemplateNode} */
/* @__PURE__ */ get_first_child(clone)
);
var end = (
/** @type {TemplateNode} */
clone.lastChild
);
assign_nodes(start, end);
} else {
assign_nodes(clone, clone);
}
return clone;
};
}
// @__NO_SIDE_EFFECTS__
function from_namespace(content, flags2, ns = "svg") {
var has_start = !content.startsWith("<!>");
var wrapped = `<${ns}>${has_start ? content : "<!>" + content}</${ns}>`;
var node;
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (!node) {
var fragment = (
/** @type {DocumentFragment} */
create_fragment_from_html(wrapped)
);
var root2 = (
/** @type {Element} */
/* @__PURE__ */ get_first_child(fragment)
);
{
node = /** @type {Element} */
/* @__PURE__ */ get_first_child(root2);
}
}
var clone = (
/** @type {TemplateNode} */
node.cloneNode(true)
);
{
assign_nodes(clone, clone);
}
return clone;
};
}
// @__NO_SIDE_EFFECTS__
function from_svg(content, flags2) {
return /* @__PURE__ */ from_namespace(content, flags2, "svg");
}
function text(value = "") {
if (!hydrating) {
var t = create_text(value + "");
assign_nodes(t, t);
return t;
}
var node = hydrate_node;
if (node.nodeType !== TEXT_NODE) {
node.before(node = create_text());
set_hydrate_node(node);
} else {
merge_text_nodes(
/** @type {Text} */
node
);
}
assign_nodes(node, node);
return node;
}
function comment() {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
var frag = document.createDocumentFragment();
var start = document.createComment("");
var anchor = create_text();
frag.append(start, anchor);
assign_nodes(start, anchor);
return frag;
}
function append(anchor, dom) {
if (hydrating) {
var effect2 = (
/** @type {Effect & { nodes: EffectNodes }} */
active_effect
);
if ((effect2.f & REACTION_RAN) === 0 || effect2.nodes.end === null) {
effect2.nodes.end = hydrate_node;
}
hydrate_next();
return;
}
if (anchor === null) {
return;
}
anchor.before(
/** @type {Node} */
dom
);
}
function is_capture_event(name) {
return name.endsWith("capture") && name !== "gotpointercapture" && name !== "lostpointercapture";
}
const DELEGATED_EVENTS = [
"beforeinput",
"click",
"change",
"dblclick",
"contextmenu",
"focusin",
"focusout",
"input",
"keydown",
"keyup",
"mousedown",
"mousemove",
"mouseout",
"mouseover",
"mouseup",
"pointerdown",
"pointermove",
"pointerout",
"pointerover",
"pointerup",
"touchend",
"touchmove",
"touchstart"
];
function can_delegate_event(event_name) {
return DELEGATED_EVENTS.includes(event_name);
}
const ATTRIBUTE_ALIASES = {
// no `class: 'className'` because we handle that separately
formnovalidate: "formNoValidate",
ismap: "isMap",
nomodule: "noModule",
playsinline: "playsInline",
readonly: "readOnly",
defaultvalue: "defaultValue",
defaultchecked: "defaultChecked",
srcobject: "srcObject",
novalidate: "noValidate",
allowfullscreen: "allowFullscreen",
disablepictureinpicture: "disablePictureInPicture",
disableremoteplayback: "disableRemotePlayback"
};
function normalize_attribute(name) {
name = name.toLowerCase();
return ATTRIBUTE_ALIASES[name] ?? name;
}
const PASSIVE_EVENTS = ["touchstart", "touchmove"];
function is_passive_event(name) {
return PASSIVE_EVENTS.includes(name);
}
function set_text(text2, value) {
var str = value == null ? "" : typeof value === "object" ? `${value}` : value;
if (str !== /** @type {any} */
(text2[TEXT_CACHE] ??= text2.nodeValue)) {
text2[TEXT_CACHE] = str;
text2.nodeValue = `${str}`;
}
}
function mount(component2, options) {
return _mount(component2, options);
}
function hydrate(component2, options) {
init_operations();
options.intro = options.intro ?? false;
const target = options.target;
const was_hydrating = hydrating;
const previous_hydrate_node = hydrate_node;
try {
var anchor = /* @__PURE__ */ get_first_child(target);
while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */
anchor.data !== HYDRATION_START)) {
anchor = /* @__PURE__ */ get_next_sibling(anchor);
}
if (!anchor) {
throw HYDRATION_ERROR;
}
set_hydrating(true);
set_hydrate_node(
/** @type {Comment} */
anchor
);
const instance = _mount(component2, { ...options, anchor });
set_hydrating(false);
return (
/** @type {Exports} */
instance
);
} catch (error) {
if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) {
throw error;
}
if (error !== HYDRATION_ERROR) {
console.warn("Failed to hydrate: ", error);
}
if (options.recover === false) {
hydration_failed();
}
init_operations();
clear_text_content(target);
set_hydrating(false);
return mount(component2, options);
} finally {
set_hydrating(was_hydrating);
set_hydrate_node(previous_hydrate_node);
}
}
const listeners = /* @__PURE__ */ new Map();
function _mount(Component, { target, anchor, props = {}, events, context, intro = true, transformError }) {
init_operations();
var component2 = void 0;
var unmount2 = component_root(() => {
var anchor_node = anchor ?? target.appendChild(create_text());
boundary(
/** @type {TemplateNode} */
anchor_node,
{
pending: () => {
}
},
(anchor_node2) => {
push({});
var ctx = (
/** @type {ComponentContext} */
component_context
);
if (context) ctx.c = context;
if (events) {
props.$$events = events;
}
if (hydrating) {
assign_nodes(
/** @type {TemplateNode} */
anchor_node2,
null
);
}
component2 = Component(anchor_node2, props) || {};
if (hydrating) {
active_effect.nodes.end = hydrate_node;
if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */
hydrate_node.data !== HYDRATION_END) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
}
pop();
},
transformError
);
var registered_events = /* @__PURE__ */ new Set();
var event_handle = (events2) => {
for (var i = 0; i < events2.length; i++) {
var event_name = events2[i];
if (registered_events.has(event_name)) continue;
registered_events.add(event_name);
var passive = is_passive_event(event_name);
for (const node of [target, document]) {
var counts = listeners.get(node);
if (counts === void 0) {
counts = /* @__PURE__ */ new Map();
listeners.set(node, counts);
}
var count = counts.get(event_name);
if (count === void 0) {
node.addEventListener(event_name, handle_event_propagation, { passive });
counts.set(event_name, 1);
} else {
counts.set(event_name, count + 1);
}
}
}
};
event_handle(array_from(all_registered_events));
root_event_handles.add(event_handle);
return () => {
for (var event_name of registered_events) {
for (const node of [target, document]) {
var counts = (
/** @type {Map<string, number>} */
listeners.get(node)
);
var count = (
/** @type {number} */
counts.get(event_name)
);
if (--count == 0) {
node.removeEventListener(event_name, handle_event_propagation);
counts.delete(event_name);
if (counts.size === 0) {
listeners.delete(node);
}
} else {
counts.set(event_name, count);
}
}
}
root_event_handles.delete(event_handle);
if (anchor_node !== anchor) {
anchor_node.parentNode?.removeChild(anchor_node);
}
};
});
mounted_components.set(component2, unmount2);
return component2;
}
let mounted_components = /* @__PURE__ */ new WeakMap();
function unmount(component2, options) {
const fn = mounted_components.get(component2);
if (fn) {
mounted_components.delete(component2);
return fn(options);
}
return Promise.resolve();
}
class BranchManager {
/** @type {TemplateNode} */
anchor;
/** @type {Map<Batch, Key>} */
#batches = /* @__PURE__ */ new Map();
/**
* Map of keys to effects that are currently rendered in the DOM.
* These effects are visible and actively part of the document tree.
* Example:
*
data/skin/front/mygreek/js/altcha/i18n.js+2656
변경 전i18n.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후i18n.js
const noop = () => {
};
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function get(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let untracking = false;
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get(scope.store), {
[name]: value
});
} else {
Object.assign(get(scope.store), name);
}
scope.store.set(get(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n$Y = {
ariaLinkLabel: "Altcha (الموقع الرسمي)",
enterCode: "أدخل الرمز",
enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",
error: "فشل التحقق. حاول مرة أخرى لاحقاً.",
expired: "انتهت صلاحية التحقق. حاول مرة أخرى.",
footer: 'محمي بواسطة <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (الموقع الرسمي)">ALTCHA</a>',
getAudioChallenge: "احصل على تحدي صوتي",
label: "أنا لست روبوتاً",
loading: "جارٍ التحميل...",
reload: "إعادة تحميل",
verify: "تحقق",
verificationRequired: "مطلوب التحقق!",
verified: "تم التحقق",
verifying: "جارٍ التحقق...",
waitAlert: "جارٍ التحقق... يرجى الانتظار.",
cancel: "إلغاء",
enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه."
};
globalThis.$altcha.i18n.set("ar", i18n$Y);
const i18n$X = {
ariaLinkLabel: "Altcha (официален уебсайт)",
enterCode: "Въведете код",
enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",
error: "Проверката неуспешна. Моля, опитайте по-късно.",
expired: "Времето за проверка изтече. Моля, опитайте отново.",
footer: 'Защитено от <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официален уебсайт)">ALTCHA</a>',
getAudioChallenge: "Аудио проверка",
label: "Аз не съм робот",
loading: "Зареждане...",
reload: "Презареди",
verify: "Провери",
verificationRequired: "Изисква се проверка!",
verified: "Проверено",
verifying: "Проверява се...",
waitAlert: "Проверката е в процес... моля изчакайте.",
cancel: "Отказ",
enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу."
};
globalThis.$altcha.i18n.set("bg", i18n$X);
const i18n$W = {
ariaLinkLabel: "Altcha (афіцыйны сайт)",
enterCode: "Увядзіце код",
enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",
error: "Праверка не прайшла. Паспрабуйце пазней.",
expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.",
footer: 'Абаронена <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (афіцыйны сайт)">ALTCHA</a>',
getAudioChallenge: "Атрымаць аўдыё выклік",
label: "Я не робат",
loading: "Загрузка...",
reload: "Перазагрузіць",
verify: "Праверыць",
verificationRequired: "Патрабуецца праверка!",
verified: "Праверана",
verifying: "Правяраем...",
waitAlert: "Праверка... калі ласка, пачакайце.",
cancel: "Скасаваць",
enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй."
};
globalThis.$altcha.i18n.set("be", i18n$W);
const i18n$V = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("bs", i18n$V);
const i18n$U = {
ariaLinkLabel: "Altcha (lloc web oficial)",
enterCode: "Introdueix el codi",
enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",
error: "Verificació fallida. Torna-ho a provar més tard.",
expired: "Verificació expirada. Torna-ho a provar.",
footer: 'Protegit per <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (lloc web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtenir un desafiament d’àudio",
label: "No sóc un robot",
loading: "Carregant...",
reload: "Torna a carregar",
verify: "Verificar",
verificationRequired: "Es requereix verificació!",
verified: "Verificat",
verifying: "Verificant...",
waitAlert: "Verificant... si us plau, espera.",
cancel: "Cancel·la",
enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent."
};
globalThis.$altcha.i18n.set("ca", i18n$U);
const i18n$T = {
ariaLinkLabel: "Altcha (oficiální web)",
enterCode: "Zadejte kód",
enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",
error: "Ověření selhalo. Zkuste to prosím později.",
expired: "Ověření vypršelo. Zkuste to prosím znovu.",
footer: 'Chráněno pomocí <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiální web)">ALTCHA</a>',
getAudioChallenge: "Získat audio výzvu",
label: "Nejsem robot",
loading: "Načítání...",
reload: "Znovu načíst",
verify: "Ověřit",
verificationRequired: "Vyžaduje se ověření!",
verified: "Ověřeno",
verifying: "Ověřování...",
waitAlert: "Probíhá ověření... prosím počkejte.",
cancel: "Zrušit",
enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže."
};
globalThis.$altcha.i18n.set("cs", i18n$T);
const i18n$S = {
ariaLinkLabel: "Altcha (officiel hjemmeside)",
enterCode: "Indtast kode",
enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",
error: "Verificering mislykkedes. Prøv venligst igen senere.",
expired: "Verificering udløbet. Prøv venligst igen.",
footer: 'Beskyttet af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiel hjemmeside)">ALTCHA</a>',
getAudioChallenge: "Hent lydudfordring",
label: "Jeg er ikke en robot",
loading: "Indlæser...",
reload: "Genindlæs",
verify: "Verificer",
verificationRequired: "Verificering kræves!",
verified: "Verificeret",
verifying: "Verificerer...",
waitAlert: "Verificerer... vent venligst.",
cancel: "Annuller",
enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder."
};
globalThis.$altcha.i18n.set("da", i18n$S);
const i18n$R = {
ariaLinkLabel: "Altcha (offizielle Website)",
enterCode: "Code eingeben",
enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",
error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",
footer: 'Geschützt durch <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offizielle Website)">ALTCHA</a>',
getAudioChallenge: "Audio-Herausforderung anfordern",
label: "Ich bin kein Roboter",
loading: "Lade...",
reload: "Neu laden",
verify: "Überprüfen",
verificationRequired: "Überprüfung erforderlich!",
verified: "Überprüft",
verifying: "Wird überprüft...",
waitAlert: "Überprüfung läuft... bitte warten.",
cancel: "Abbrechen",
enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."
};
globalThis.$altcha.i18n.set("de", i18n$R);
const i18n$Q = {
ariaLinkLabel: "Altcha (επίσημος ιστότοπος)",
enterCode: "Εισαγάγετε κωδικό",
enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",
error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",
expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.",
footer: 'Προστατεύεται από το <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (επίσημος ιστότοπος)">ALTCHA</a>',
getAudioChallenge: "Λήψη ηχητικής δοκιμασίας",
label: "Δεν είμαι ρομπότ",
loading: "Φόρτωση...",
reload: "Επαναφόρτωση",
verify: "Επαλήθευση",
verificationRequired: "Απαιτείται έλεγχος!",
verified: "Επαληθεύτηκε",
verifying: "Γίνεται επαλήθευση...",
waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.",
cancel: "Ακύρωση",
enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."
};
globalThis.$altcha.i18n.set("el", i18n$Q);
const i18n$P = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Introduce el código",
enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor intente nuevamente más tarde.",
expired: "Verificación expirada. Por favor intente nuevamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un desafío de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Recargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espere.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo."
};
globalThis.$altcha.i18n.set("es-es", i18n$P);
const i18n$O = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Ingresa el código",
enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.",
expired: "La verificación expiró. Por favor inténtalo de nuevo.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un reto de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Volver a cargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espera.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación."
};
globalThis.$altcha.i18n.set("es-419", i18n$O);
const i18n$N = {
ariaLinkLabel: "Altcha (ametlik veebisait)",
enterCode: "Sisesta kood",
enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",
error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",
expired: "Kinnitamine aegus. Proovi uuesti.",
footer: 'Kaitstud <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ametlik veebisait)">ALTCHA</a> poolt',
getAudioChallenge: "Hangi heliülesanne",
label: "Ma ei ole robot",
loading: "Laadimine...",
reload: "Laadi uuesti",
verify: "Kinnita",
verificationRequired: "Kontroll on vajalik!",
verified: "Kinnitatud",
verifying: "Kinnitamine...",
waitAlert: "Kinnitamine... palun oota.",
cancel: "Tühista",
enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood."
};
globalThis.$altcha.i18n.set("et", i18n$N);
const i18n$M = {
ariaLinkLabel: "Altcha (webgune ofiziala)",
enterCode: "Sartu kodea",
enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",
error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.",
expired: "Egiaztatzea iraungi da. Saiatu berriro.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (webgune ofiziala)">ALTCHA</a>k babestuta',
getAudioChallenge: "Jaso audio-erronka bat",
label: "Ez naiz robot bat",
loading: "Kargatzen...",
reload: "Birkargatu",
verify: "Egiaztatu",
verificationRequired: "Egiaztatzea beharrezkoa da!",
verified: "Egiaztatuta",
verifying: "Egiaztatzen...",
waitAlert: "Egiaztatzen... itxaron mesedez.",
cancel: "Utzi",
enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea."
};
globalThis.$altcha.i18n.set("eu", i18n$M);
const i18n$L = {
ariaLinkLabel: "Altcha (وب‌سایت رسمی)",
enterCode: "کد را وارد کنید",
enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",
error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",
expired: "احراز هویت منقضی شد. دوباره تلاش کنید.",
footer: 'محافظت شده توسط <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (وب‌سایت رسمی)">ALTCHA</a>',
getAudioChallenge: "دریافت چالش صوتی",
label: "من ربات نیستم",
loading: "در حال بارگذاری...",
reload: "بارگذاری مجدد",
verify: "تایید",
verificationRequired: "احراز هویت لازم است!",
verified: "تایید شد",
verifying: "در حال تایید...",
waitAlert: "در حال تایید... لطفا منتظر بمانید.",
cancel: "لغو کردن",
enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید."
};
globalThis.$altcha.i18n.set("fa", i18n$L);
const i18n$K = {
ariaLinkLabel: "Altcha (offiziell Websäit)",
enterCode: "Code aginn",
enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",
error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",
expired: "Verifikatioun ofgelaf. Probéiert nach emol.",
footer: 'Geschützt vun <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offiziell Websäit)">ALTCHA</a>',
getAudioChallenge: "Kritt eng Audio-Herausfuerderung",
label: "Ech sinn keen Robot",
loading: "Lueden...",
reload: "Nei lueden",
verify: "Verifizéieren",
verificationRequired: "Verifikatioun néideg!",
verified: "Verifizéiert",
verifying: "Verifizéieren...",
waitAlert: "Verifizéieren... waart wgl.",
cancel: "Ofbriechen",
enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."
};
globalThis.$altcha.i18n.set("lb", i18n$K);
const i18n$J = {
ariaLinkLabel: "Altcha (virallinen verkkosivusto)",
enterCode: "Syötä koodi",
enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",
error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.",
expired: "Varmennus vanhentui. Yritä uudelleen.",
footer: 'Suojattu <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (virallinen verkkosivusto)">ALTCHA</a>:lla',
getAudioChallenge: "Hae äänitehtävä",
label: "En ole robotti",
loading: "Ladataan...",
reload: "Lataa uudelleen",
verify: "Vahvista",
verificationRequired: "Vahvistus vaaditaan!",
verified: "Vahvistettu",
verifying: "Vahvistetaan...",
waitAlert: "Vahvistetaan... odota hetki.",
cancel: "Peruuta",
enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi."
};
globalThis.$altcha.i18n.set("fi", i18n$J);
const i18n$I = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",
error: "Échec de la vérification. Réessayez plus tard.",
expired: "La vérification a expiré. Réessayez.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-ca", i18n$I);
const i18n$H = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",
error: "Échec de la vérification. Essayez à nouveau plus tard.",
expired: "La vérification a expiré. Essayez à nouveau.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-fr", i18n$H);
const i18n$G = {
ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)",
enterCode: "Iontráil cód",
enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",
error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.",
expired: "Tá an fíorú as feidhm. Bain triail eile as.",
footer: 'Cosanta ag <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (láithreán gréasáin oifigiúil)">ALTCHA</a>',
getAudioChallenge: "Faigh dúshlán fuaime",
label: "Níl mé i mo róbat",
loading: "Á luchtú...",
reload: "Athluchtaigh",
verify: "Fíoraigh",
verificationRequired: "Fíorú riachtanach!",
verified: "Fíoraithe",
verifying: "Fíorú ar siúl...",
waitAlert: "Fíorú ar siúl... fan go fóill.",
cancel: "Cealaigh",
enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."
};
globalThis.$altcha.i18n.set("ga", i18n$G);
const i18n$F = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",
error: "Provjera nije uspjela. Molimo pokušajte kasnije.",
expired: "Provjera je istekla. Molimo pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Audio provjera",
label: "Ja nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Provjeri",
verificationRequired: "Potrebna je provjera!",
verified: "Provjereno",
verifying: "Provjeravanje...",
waitAlert: "Provjera je u tijeku... molimo pričekajte.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("hr", i18n$F);
const i18n$E = {
ariaLinkLabel: "Altcha (hivatalos weboldal)",
enterCode: "Írja be a kódot",
enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",
error: "A hitelesítés nem sikerült. Próbáld meg később újra.",
expired: "A hitelesítés lejárt. Próbáld újra.",
footer: 'Védve a következő által: <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (hivatalos weboldal)">ALTCHA</a>',
getAudioChallenge: "Hangalapú kihívás kérése",
label: "Nem vagyok robot",
loading: "Betöltés...",
reload: "Újratöltés",
verify: "Ellenőrzés",
verificationRequired: "Ellenőrzés szükséges!",
verified: "Ellenőrizve",
verifying: "Ellenőrzés folyamatban...",
waitAlert: "Ellenőrzés folyamatban... kérlek várj.",
cancel: "Mégse",
enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját."
};
globalThis.$altcha.i18n.set("hu", i18n$E);
const i18n$D = {
ariaLinkLabel: "Altcha (opinber vefsíða)",
enterCode: "Sláðu inn kóða",
enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",
error: "Staðfesting mistókst. Reyndu aftur síðar.",
expired: "Staðfesting er útrunnin. Reyndu aftur.",
footer: 'Verndað af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (opinber vefsíða)">ALTCHA</a>',
getAudioChallenge: "Fá hljóðáskorun",
label: "Ég er ekki robot",
loading: "Hleður...",
reload: "Hleð aftur",
verify: "Staðfesta",
verificationRequired: "Staðfesting er nauðsynleg!",
verified: "Staðfest",
verifying: "Að staðfesta...",
waitAlert: "Að staðfesta... vinsamlegast bíða.",
cancel: "Hætta við",
enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."
};
globalThis.$altcha.i18n.set("is", i18n$D);
const i18n$C = {
ariaLinkLabel: "Altcha (sito ufficiale)",
enterCode: "Inserisci il codice",
enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",
error: "Verifica fallita. Riprova più tardi.",
expired: "Verifica scaduta. Riprova.",
footer: 'Protetto da <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sito ufficiale)">ALTCHA</a>',
getAudioChallenge: "Ottieni una sfida audio",
label: "Non sono un robot",
loading: "Caricamento...",
reload: "Ricarica",
verify: "Verifica",
verificationRequired: "Verifica richiesta!",
verified: "Verificato",
verifying: "Verifica in corso...",
waitAlert: "Verifica in corso... attendere.",
cancel: "Annulla",
enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante."
};
globalThis.$altcha.i18n.set("it", i18n$C);
const i18n$B = {
ariaLinkLabel: "Altcha (oficiali svetainė)",
enterCode: "Įveskite kodą",
enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",
error: "Patvirtinimas nepavyko. Bandykite vėliau.",
expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.",
footer: 'Apsaugota <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiali svetainė)">ALTCHA</a>',
getAudioChallenge: "Gauti garso užduotį",
label: "Aš nesu robotas",
loading: "Įkeliama...",
reload: "Įkelti iš naujo",
verify: "Patvirtinti",
verificationRequired: "Reikalingas patvirtinimas!",
verified: "Patvirtinta",
verifying: "Tikrinama...",
waitAlert: "Tikrinama... prašome palaukti.",
cancel: "Atšaukti",
enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."
};
globalThis.$altcha.i18n.set("lt", i18n$B);
const i18n$A = {
ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)",
enterCode: "Ievadiet kodu",
enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",
error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",
expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",
footer: 'Aizsargāts ar <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiālā tīmekļa vietne)">ALTCHA</a>',
getAudioChallenge: "Saņemt audio izaicinājumu",
label: "Es neesmu robots",
loading: "Notiek ielāde...",
reload: "Pārlādēt",
verify: "Verificēt",
verificationRequired: "Nepieciešama verifikācija!",
verified: "Verificēts",
verifying: "Notiek verifikācija...",
waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.",
cancel: "Atcelt",
enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."
};
globalThis.$altcha.i18n.set("lv", i18n$A);
const i18n$z = {
ariaLinkLabel: "Altcha (sit uffiċjali)",
enterCode: "Idħol il-kodiċi",
enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",
error: "Il-verifika falliet. Erġa’ pprova aktar tard.",
expired: "Il-verifika skadiet. Erġa’ pprova.",
footer: 'Protett minn <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sit uffiċjali)">ALTCHA</a>',
getAudioChallenge: "Ikseb sfida bl-awdjo",
label: "M’inix robot",
loading: "Qed jitgħabba...",
reload: "Ittella’ mill-ġdid",
verify: "Ivverifika",
verificationRequired: "Verifika meħtieġa!",
verified: "Ivverifikat",
verifying: "Verifika għaddejja...",
waitAlert: "Verifika għaddejja... stenna ftit.",
cancel: "Ikkanċella",
enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."
};
globalThis.$altcha.i18n.set("mt", i18n$z);
const i18n$y = {
ariaLinkLabel: "Altcha (offisiell nettside)",
enterCode: "Skriv inn kode",
enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.",
error: "Verifisering mislyktes. Prøv igjen senere.",
expired: "Verifiseringen utløp. Prøv igjen.",
footer: 'Beskyttet av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offisiell nettside)">ALTCHA</a>',
getAudioChallenge: "Få en lydutfordring",
label: "Jeg er ikke en robot",
loading: "Laster...",
reload: "Last på nytt",
verify: "Verifiser",
verificationRequired: "Verifisering kreves!",
verified: "Verifisert",
verifying: "Verifiserer...",
waitAlert: "Verifiserer... vennligst vent.",
cancel: "Avbryt",
enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor."
};
globalThis.$altcha.i18n.set("nb", i18n$y);
const i18n$x = {
ariaLinkLabel: "Altcha (officiële website)",
enterCode: "Voer code in",
enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",
error: "Verificatie mislukt. Probeer het later opnieuw.",
expired: "Verificatie verlopen. Probeer het opnieuw.",
footer: 'Beschermd door <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiële website)">ALTCHA</a>',
getAudioChallenge: "Audio-uitdaging ontvangen",
label: "Ik ben geen robot",
loading: "Laden...",
reload: "Herladen",
verify: "Verifiëren",
verificationRequired: "Verificatie vereist!",
verified: "Geverifieerd",
verifying: "Bezig met verifiëren...",
waitAlert: "Bezig met verifiëren... even geduld a.u.b.",
cancel: "Annuleren",
enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in."
};
globalThis.$altcha.i18n.set("nl", i18n$x);
const i18n$w = {
ariaLinkLabel: "Altcha (oficjalna strona internetowa)",
enterCode: "Wprowadź kod",
enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",
error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.",
expired: "Weryfikacja wygasła. Spróbuj ponownie.",
footer: 'Chronione przez <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficjalna strona internetowa)">ALTCHA</a>',
getAudioChallenge: "Pobierz zadanie dźwiękowe",
label: "Nie jestem robotem",
loading: "Ładowanie...",
reload: "Odśwież",
verify: "Zweryfikuj",
verificationRequired: "Wymagana weryfikacja!",
verified: "Zweryfikowano",
verifying: "Weryfikacja...",
waitAlert: "Trwa weryfikacja... proszę czekać.",
cancel: "Anuluj",
enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka."
};
globalThis.$altcha.i18n.set("pl", i18n$w);
const i18n$v = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduza o código",
enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",
error: "A verificação falhou. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Não sou um robô",
loading: "A carregar...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "A verificar...",
waitAlert: "A verificar... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-pt", i18n$v);
const i18n$u = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Digite o código",
enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",
error: "Falha na verificação. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Eu não sou um robô",
loading: "Carregando...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-br", i18n$u);
const i18n$t = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduceți codul",
enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",
error: "Verificarea a eșuat. Încearcă din nou mai târziu.",
expired: "Verificarea a expirat. Încearcă din nou.",
footer: 'Protejat de <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obține o provocare audio",
label: "Nu sunt un robot",
loading: "Se încarcă...",
reload: "Reîncarcă",
verify: "Verifică",
verificationRequired: "Verificare necesară!",
verified: "Verificat",
verifying: "Se verifică...",
waitAlert: "Se verifică... te rugăm să aștepți.",
cancel: "Anulare",
enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."
};
globalThis.$altcha.i18n.set("ro", i18n$t);
const i18n$s = {
ariaLinkLabel: "Altcha (официальный сайт)",
enterCode: "Введите код",
enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",
error: "Ошибка верификации. Попробуйте позже.",
expired: "Срок действия верификации истек. Попробуйте снова.",
footer: 'Защищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официальный сайт)">ALTCHA</a>',
getAudioChallenge: "Получить аудио задачу",
label: "Я не робот",
loading: "Загрузка...",
reload: "Перезагрузить",
verify: "Проверить",
verificationRequired: "Требуется проверка!",
verified: "Проверено",
verifying: "Идет проверка...",
waitAlert: "Идет проверка... Пожалуйста, подождите.",
cancel: "Отмена",
enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже."
};
globalThis.$altcha.i18n.set("ru", i18n$s);
const i18n$r = {
ariaLinkLabel: "Altcha (oficiálna webová stránka)",
enterCode: "Zadajte kód",
enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",
error: "Verifikácia zlyhala. Skúste to znova neskôr.",
expired: "Verifikácia vypršala. Skúste to znova.",
footer: 'Chránené <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiálna webová stránka)">ALTCHA</a>',
getAudioChallenge: "Získať audio výzvu",
label: "Nie som robot",
loading: "Načítava sa...",
reload: "Obnoviť",
verify: "Verifikovať",
verificationRequired: "Vyžaduje sa overenie!",
verified: "Verifikované",
verifying: "Prebieha verifikácia...",
waitAlert: "Prebieha verifikácia... prosím čakajte.",
cancel: "Zrušiť",
enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie."
};
globalThis.$altcha.i18n.set("sk", i18n$r);
const i18n$q = {
ariaLinkLabel: "Altcha (uradna spletna stran)",
enterCode: "Vnesite kodo",
enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",
error: "Preverjanje ni uspelo. Poskusite znova kasneje.",
expired: "Preverjanje je poteklo. Poskusite znova.",
footer: 'Zaščiteno z <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (uradna spletna stran)">ALTCHA</a>',
getAudioChallenge: "Pridobite zvočni izziv",
label: "Nisem robot",
loading: "Nalagam...",
reload: "Ponovno naloži",
verify: "Preveri",
verificationRequired: "Potrebna je preveritev!",
verified: "Preverjeno",
verifying: "Preverjanje...",
waitAlert: "Preverjanje... prosim počakajte.",
cancel: "Preklic",
enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."
};
globalThis.$altcha.i18n.set("sl", i18n$q);
const i18n$p = {
ariaLinkLabel: "Altcha (faqja zyrtare)",
enterCode: "Fut kodin",
enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",
error: "Verifikimi dështoi. Provoni përsëri më vonë.",
expired: "Verifikimi ka skaduar. Provoni përsëri.",
footer: 'I mbrojtur nga <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (faqja zyrtare)">ALTCHA</a>',
getAudioChallenge: "Merr një sfidë audio",
label: "Unë nuk jam një robot",
loading: "Duke u ngarkuar...",
reload: "Ringarko",
verify: "Verifiko",
verificationRequired: "Kërkohet verifikimi!",
verified: "I verifikuar",
verifying: "Duke verifikuar...",
waitAlert: "Duke verifikuar... ju lutem prisni.",
cancel: "Anuloje",
enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."
};
globalThis.$altcha.i18n.set("sq", i18n$p);
const i18n$o = {
ariaLinkLabel: "Altcha (zvanična web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (zvanična web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovo učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Откажи",
enterCodeFromImage: "Да бисте наставили, унесите код са слике испод."
};
globalThis.$altcha.i18n.set("sr", i18n$o);
const i18n$n = {
ariaLinkLabel: "Altcha (officiell webbplats)",
enterCode: "Ange kod",
enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
error: "Verifiering misslyckades. Försök igen senare.",
expired: "Verifieringen har gått ut. Försök igen.",
footer: 'Skyddad av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiell webbplats)">ALTCHA</a>',
getAudioChallenge: "Få ljudutmaning",
label: "Jag är inte en robot",
loading: "Laddar...",
reload: "Ladda om",
verify: "Verifiera",
verificationRequired: "Verifiering krävs!",
verified: "Verifierad",
verifying: "Verifierar...",
waitAlert: "Verifierar... vänligen vänta.",
cancel: "Avbryt",
enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan."
};
globalThis.$altcha.i18n.set("sv", i18n$n);
const i18n$m = {
ariaLinkLabel: "Altcha (resmi web sitesi)",
enterCode: "Kodu girin",
enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
footer: 'ALTCHA tarafından korunuyor <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (resmi web sitesi)">ALTCHA</a>',
getAudioChallenge: "Sesli doğrulama al",
label: "Ben robot değilim",
loading: "Yükleniyor...",
reload: "Yeniden yükle",
verify: "Doğrula",
verificationRequired: "Doğrulama gerekli!",
verified: "Doğrulandı",
verifying: "Doğrulama yapılıyor...",
waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.",
cancel: "İptal",
enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin."
};
globalThis.$altcha.i18n.set("tr", i18n$m);
const i18n$l = {
ariaLinkLabel: "Altcha (офіційний сайт)",
enterCode: "Введіть код",
enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
error: "Перевірка не вдалася. Спробуйте пізніше.",
expired: "Перевірка прострочена. Спробуйте знову.",
footer: 'Захищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (офіційний сайт)">ALTCHA</a>',
getAudioChallenge: "Отримати аудіо-челлендж",
label: "Я не робот",
loading: "Завантаження...",
reload: "Перезавантажити",
verify: "Перевірити",
verificationRequired: "Потрібна перевірка!",
verified: "Перевірено",
verifying: "Перевіряється...",
waitAlert: "Перевірка... будь ласка, зачекайте.",
cancel: "Скасувати",
enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче."
};
globalThis.$altcha.i18n.set("uk", i18n$l);
const i18n$k = {
ariaLinkLabel: "Altcha (amptelike webwerf)",
enterCode: "Voer kode in",
enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",
error: "Verifikasie het misluk. Probeer later weer.",
expired: "Verifikasie het verval. Probeer weer.",
footer: 'Beskerm deur <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (amptelike webwerf)">ALTCHA</a>',
getAudioChallenge: "Kry 'n klankuitdaging",
label: "Ek is nie 'n robot nie",
loading: "Laai...",
reload: "Laai weer",
verify: "Verifieer",
verificationRequired: "Verifikasie is vereis!",
verified: "Geverifieer",
verifying: "Verifieer...",
waitAlert: "Verifieer... wag asseblief.",
cancel: "Kanselleer",
enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."
};
globalThis.$altcha.i18n.set("af", i18n$k);
const i18n$j = {
ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)",
enterCode: "ኮድ አስገባ",
enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",
error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",
expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",
footer: 'በ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ዋናው ድህረ ገጽ)">ALTCHA</a> የተጠበቀ',
getAudioChallenge: "የድምጽ ፈተና ያግኙ",
label: "እኔ ሮቦት አይደለሁም",
loading: "በመጫን ላይ...",
reload: "እንደገና ጫን",
verify: "አረጋግጥ",
verificationRequired: "ማረጋገጫ ያስፈልጋል!",
verified: "ተረጋግጧል",
verifying: "በማረጋገጥ ላይ...",
waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",
cancel: "ይቅር",
enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"
};
globalThis.$altcha.i18n.set("am", i18n$j);
const i18n$i = {
ariaLinkLabel: "Altcha (tovuti rasmi)",
enterCode: "Weka nambari",
enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.",
error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.",
expired: "Uthibitishaji umeisha. Jaribu tena.",
footer: 'Imealindwa na <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (tovuti rasmi)">ALTCHA</a>',
getAudioChallenge: "Pata changamoto ya sauti",
label: "Mimi sio roboti",
loading: "Inapakia...",
reload: "Pakia tena",
verify: "Thibitisha",
verificationRequired: "Uthibitishaji unahitajika!",
verified: "Imethibitishwa",
verifying: "Inathibitisha...",
waitAlert: "Inathibitisha... tafadhali subiri.",
cancel: "Ghairi",
enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."
};
globalThis.$altcha.i18n.set("sw", i18n$i);
const i18n$h = {
ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)",
enterCode: "Tẹ koodu sii",
enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",
error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",
expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",
footer: 'Ti wa ni ààbò nipasẹ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oju opo wẹẹbu osise)">ALTCHA</a>',
getAudioChallenge: "Gba ìjàdú ohùn",
label: "Emi kii ṣe ẹrọ",
loading: "Ó ń gbé sílẹ̀...",
reload: "Tún gbé wọlé",
verify: "Ṣàdájọ́",
verificationRequired: "Ìdájọ́kòwò ni a nílò!",
verified: "A ti dájọ́",
verifying: "Ó ń ṣàdájọ́...",
waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",
cancel: "Fagbọsẹ",
enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."
};
globalThis.$altcha.i18n.set("yo", i18n$h);
const i18n$g = {
ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)",
enterCode: "কোড লিখুন",
enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",
error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",
expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",
footer: 'দ্বারা সুরক্ষিত <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (অফিসিয়াল ওয়েবসাইট)">ALTCHA</a>',
getAudioChallenge: "অডিও চ্যালেঞ্জ নিন",
label: "আমি রোবট নই",
loading: "লোড হচ্ছে...",
reload: "পুনরায় লোড করুন",
verify: "যাচাই করুন",
verificationRequired: "যাচাই প্রয়োজন!",
verified: "যাচাই করা হয়েছে",
verifying: "যাচাই করা হচ্ছে...",
waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",
cancel: "বাতিল করুন",
enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"
};
globalThis.$altcha.i18n.set("bn", i18n$g);
const i18n$f = {
ariaLinkLabel: "Altcha (אתר רשמי)",
enterCode: "הזן קוד",
enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",
error: "האימות נכשל. נסה שוב מאוחר יותר.",
expired: "תוקף האימות פג. נסה שוב.",
footer: 'מוגן על ידי <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (אתר רשמי)">ALTCHA</a>',
getAudioChallenge: "קבל אתגר שמע",
label: "אני לא רובוט",
loading: "טוען...",
reload: "טען מחדש",
verify: "אמת",
verificationRequired: "נדרש אימות!",
verified: "אומת",
verifying: "מאמת...",
waitAlert: "מבצע אימות... אנא המתן.",
cancel: "ביטול",
enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."
};
globalThis.$altcha.i18n.set("he", i18n$f);
const i18n$e = {
ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)",
enterCode: "कोड दर्ज करेंं",
enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",
error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",
expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",
footer: 'द्वारा संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (आधिकारिक वेबसाइट)">ALTCHA</a>',
getAudioChallenge: "ऑडियो चुनौती प्राप्त करें",
label: "मैं रोबोट नहीं हूँ",
loading: "लोड हो रहा है...",
reload: "पुनः लोड करें",
verify: "सत्यापित करें",
verificationRequired: "सत्यापन आवश्यक है!",
verified: "सत्यापित",
verifying: "सत्यापित कर रहे हैं...",
waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",
cancel: "रद्द करें",
enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"
};
globalThis.$altcha.i18n.set("hi", i18n$e);
const i18n$d = {
ariaLinkLabel: "Altcha (situs web resmi)",
enterCode: "Masukkan kode",
enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",
error: "Verifikasi gagal. Coba lagi nanti.",
expired: "Verifikasi telah kedaluwarsa. Coba lagi.",
footer: 'Dilindungi oleh <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (situs web resmi)">ALTCHA</a>',
getAudioChallenge: "Dapatkan tantangan audio",
label: "Saya bukan robot",
loading: "Memuat...",
reload: "Muat ulang",
verify: "Verifikasi",
verificationRequired: "Verifikasi diperlukan!",
verified: "Terverifikasi",
verifying: "Memverifikasi...",
waitAlert: "Memverifikasi... harap tunggu.",
cancel: "Batal",
enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."
};
globalThis.$altcha.i18n.set("id", i18n$d);
const i18n$c = {
ariaLinkLabel: "Altcha (公式ウェブサイト)",
enterCode: "コードを入力",
enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。",
error: "認証に失敗しました。後でもう一度試してください。",
expired: "認証が期限切れです。再試行してください。",
footer: '保護されています <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (公式ウェブサイト)">ALTCHA</a>',
getAudioChallenge: "音声チャレンジを取得",
label: "私はロボットではありません",
loading: "読み込み中...",
reload: "再読み込み",
verify: "確認",
verificationRequired: "認証が必要です!",
verified: "確認済み",
verifying: "確認中...",
waitAlert: "確認中...少々お待ちください。",
cancel: "キャンセル",
enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。"
};
globalThis.$altcha.i18n.set("ja", i18n$c);
const i18n$b = {
ariaLinkLabel: "Altcha (공식 웹사이트)",
enterCode: "코드 입력",
enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",
error: "인증 실패. 나중에 다시 시도해주세요.",
expired: "인증이 만료되었습니다. 다시 시도해주세요.",
footer: 'ALTCHA에서 보호됨 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (공식 웹사이트)">ALTCHA</a>',
getAudioChallenge: "오디오 챌린지 받기",
label: "저는 로봇이 아닙니다",
loading: "로딩 중...",
reload: "새로 고침",
verify: "확인",
verificationRequired: "인증이 필요합니다!",
verified: "확인됨",
verifying: "확인 중...",
waitAlert: "확인 중... 잠시만 기다려주세요.",
cancel: "취소",
enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요."
};
globalThis.$altcha.i18n.set("ko", i18n$b);
const i18n$a = {
ariaLinkLabel: "Altcha (ресми веб-сайт)",
enterCode: "Кодты енгізіңіз",
enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",
error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",
expired: "Тексеру мерзімі аяқталды. Қайталаңыз.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ресми веб-сайт)">ALTCHA</a> қорғайды',
getAudioChallenge: "Аудио сынақ алу",
label: "Мен робот емеспін",
loading: "Жүктелуде...",
reload: "Қайта жүктеу",
verify: "Тексеру",
verificationRequired: "Тексеру талап етіледі!",
verified: "Тексерілді",
verifying: "Тексеруде...",
waitAlert: "Тексерілуде... күте тұрыңыз.",
cancel: "Болдыру",
enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."
};
globalThis.$altcha.i18n.set("kk", i18n$a);
const i18n$9 = {
ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)",
enterCode: "कोड टाकाा",
enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",
error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",
expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",
footer: 'द्वारे संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (अधिकृत संकेतस्थळ)">ALTCHA</a>',
getAudioChallenge: "ऑडिओ चॅलेंज मिळवा",
label: "मी रोबोट नाही",
loading: "लोड होत आहे...",
reload: "पुन्हा लोड करा",
verify: "पुष्टीकरण करा",
verificationRequired: "पडताळणी आवश्यक आहे!",
verified: "पुष्टीकरण झाले",
verifying: "पुष्टीकरण करत आहे...",
waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",
cancel: "रद्द करा",
enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."
};
globalThis.$altcha.i18n.set("mr", i18n$9);
const i18n$8 = {
ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",
enterCode: "குறியீட்டை உள்ளிடவும்",
enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (அதிகாரப்பூர்வ வலைத்தளம்)">ALTCHA</a>',
getAudioChallenge: "ஒலி சவாலை பெறவும்",
label: "நான் ரோபோடான அல்ல",
loading: "செயலாக்கம்...",
reload: "மீண்டும் புதுப்பிக்கவும்",
verify: "சரிபார்க்கவும்",
verificationRequired: "சரிபார்ப்பு தேவை!",
verified: "சரிபார்க்கப்பட்டது",
verifying: "சரிபார்க்கப்படுகிறது...",
waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",
cancel: "ரத்துசெய்",
enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."
};
globalThis.$altcha.i18n.set("ta", i18n$8);
const i18n$7 = {
ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)",
enterCode: "కోడ్‌ని నమోదు చేయండి",
enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (అధికారిక వెబ్‌సైట్)">ALTCHA</a>',
getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
label: "నేను రోబోట్ కాదు",
loading: "లోడ్ అవుతోంది...",
reload: "మళ్ళీ లోడ్ చేయండి",
verify: "ధ్రువీకరించు",
verificationRequired: "ధృవీకరణ అవసరం!",
verified: "ధ్రువీకరించబడింది",
verifying: "ధ్రువీకరణ జరుగుతుంది...",
waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",
cancel: "రద్దు చేయండి",
enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."
};
globalThis.$altcha.i18n.set("te", i18n$7);
const i18n$6 = {
ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)",
enterCode: "ป้อนรหัส",
enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
footer: 'ป้องกันโดย <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (เว็บไซต์ทางการ)">ALTCHA</a>',
getAudioChallenge: "รับการท้าทายเสียง",
label: "ฉันไม่ใช่บอท",
loading: "กำลังโหลด...",
reload: "โหลดใหม่",
verify: "ตรวจสอบ",
verificationRequired: "จำเป็นต้องตรวจสอบ!",
verified: "ตรวจสอบแล้ว",
verifying: "กำลังตรวจสอบ...",
waitAlert: "กำลังตรวจสอบ... กรุณารอ",
cancel: "ยกเลิก",
enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"
};
globalThis.$altcha.i18n.set("th", i18n$6);
const i18n$5 = {
ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)",
enterCode: "کوڈ درج کریں",
enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (سرکاری ویب سائٹ)">ALTCHA</a>',
getAudioChallenge: "آڈیو چیلنج حاصل کریں",
label: "میں روبوٹ نہیں ہوں",
loading: "لوڈ ہو رہا ہے...",
reload: "دوبارہ لوڈ کریں",
verify: "توثیق کریں",
verificationRequired: "تصدیق ضروری ہے!",
verified: "توثیق شدہ",
verifying: "توثیق ہو رہی ہے...",
waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",
cancel: "منسوخ کریں",
enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"
};
globalThis.$altcha.i18n.set("ur", i18n$5);
const i18n$4 = {
ariaLinkLabel: "Altcha (rasmiy veb-sayt)",
enterCode: "Kodni kiriting",
enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",
error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",
expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (rasmiy veb-sayt)">ALTCHA</a> tomonidan himoyalangan',
getAudioChallenge: "Audio sinovni olish",
label: "Men robot emasman",
loading: "Yuklanmoqda...",
reload: "Qayta yuklash",
verify: "Tekshirish",
verificationRequired: "Tekshiruv talab qilinadi!",
verified: "Tekshirildi",
verifying: "Tekshirilmoqda...",
waitAlert: "Tekshirilmoqda... iltimos kuting.",
cancel: "Bekor qilish",
enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."
};
globalThis.$altcha.i18n.set("uz", i18n$4);
const i18n$3 = {
ariaLinkLabel: "Altcha (trang web chính thức)",
enterCode: "Nhập mã",
enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
error: "Xác minh thất bại. Vui lòng thử lại sau.",
expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
footer: 'Được bảo vệ bởi <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (trang web chính thức)">ALTCHA</a>',
getAudioChallenge: "Nhận thử thách âm thanh",
label: "Tôi không phải là robot",
loading: "Đang tải...",
reload: "Tải lại",
verify: "Xác minh",
verificationRequired: "Yêu cầu xác minh!",
verified: "Đã xác minh",
verifying: "Đang xác minh...",
waitAlert: "Đang xác minh... vui lòng chờ.",
cancel: "Hủy bỏ",
enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."
};
globalThis.$altcha.i18n.set("vi", i18n$3);
const i18n$2 = {
ariaLinkLabel: "Altcha (官方网站)",
enterCode: "输入代码",
enterCodeAria: "输入您听到的代码。按空格键播放音频。",
error: "验证失败。稍后再试。",
expired: "验证已过期。请重试。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方网站)">ALTCHA</a> 保护',
getAudioChallenge: "获取音频挑战",
label: "我不是机器人",
loading: "加载中...",
reload: "重新加载",
verify: "验证",
verificationRequired: "需要验证!",
verified: "已验证",
verifying: "正在验证...",
waitAlert: "正在验证... 请稍等。",
cancel: "取消",
enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。"
};
globalThis.$altcha.i18n.set("zh-cn", i18n$2);
const i18n$1 = {
ariaLinkLabel: "Altcha (官方網站)",
cancel: "取消",
enterCode: "輸入代碼",
enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。",
enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。",
error: "驗證失敗。請稍後再試。",
expired: "驗證已過期。請再試一次。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 提供保護',
getAudioChallenge: "取得音訊驗證",
label: "我唔係機械人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "驗證中...",
waitAlert: "驗證中... 請稍候。"
};
globalThis.$altcha.i18n.set("zh-hk", i18n$1);
const i18n = {
ariaLinkLabel: "Altcha (官方網站)",
enterCode: "輸入代碼",
enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
error: "驗證失敗。稍後再試。",
expired: "驗證已過期。請重試。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 保護',
getAudioChallenge: "獲取音頻挑戰",
label: "我不是機器人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "正在驗證...",
waitAlert: "正在驗證... 請稍等。",
cancel: "取消",
enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。"
};
globalThis.$altcha.i18n.set("zh-tw", i18n);
const noop = () => {
};
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function get(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let untracking = false;
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get(scope.store), {
[name]: value
});
} else {
Object.assign(get(scope.store), name);
}
scope.store.set(get(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n$Y = {
ariaLinkLabel: "Altcha (الموقع الرسمي)",
enterCode: "أدخل الرمز",
enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",
error: "فشل التحقق. حاول مرة أخرى لاحقاً.",
expired: "انتهت صلاحية التحقق. حاول مرة أخرى.",
footer: 'محمي بواسطة <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (الموقع الرسمي)">ALTCHA</a>',
getAudioChallenge: "احصل على تحدي صوتي",
label: "أنا لست روبوتاً",
loading: "جارٍ التحميل...",
reload: "إعادة تحميل",
verify: "تحقق",
verificationRequired: "مطلوب التحقق!",
verified: "تم التحقق",
verifying: "جارٍ التحقق...",
waitAlert: "جارٍ التحقق... يرجى الانتظار.",
cancel: "إلغاء",
enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه."
};
globalThis.$altcha.i18n.set("ar", i18n$Y);
const i18n$X = {
ariaLinkLabel: "Altcha (официален уебсайт)",
enterCode: "Въведете код",
enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",
error: "Проверката неуспешна. Моля, опитайте по-късно.",
expired: "Времето за проверка изтече. Моля, опитайте отново.",
footer: 'Защитено от <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официален уебсайт)">ALTCHA</a>',
getAudioChallenge: "Аудио проверка",
label: "Аз не съм робот",
loading: "Зареждане...",
reload: "Презареди",
verify: "Провери",
verificationRequired: "Изисква се проверка!",
verified: "Проверено",
verifying: "Проверява се...",
waitAlert: "Проверката е в процес... моля изчакайте.",
cancel: "Отказ",
enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу."
};
globalThis.$altcha.i18n.set("bg", i18n$X);
const i18n$W = {
ariaLinkLabel: "Altcha (афіцыйны сайт)",
enterCode: "Увядзіце код",
enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",
error: "Праверка не прайшла. Паспрабуйце пазней.",
expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.",
footer: 'Абаронена <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (афіцыйны сайт)">ALTCHA</a>',
getAudioChallenge: "Атрымаць аўдыё выклік",
label: "Я не робат",
loading: "Загрузка...",
reload: "Перазагрузіць",
verify: "Праверыць",
verificationRequired: "Патрабуецца праверка!",
verified: "Праверана",
verifying: "Правяраем...",
waitAlert: "Праверка... калі ласка, пачакайце.",
cancel: "Скасаваць",
enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй."
};
globalThis.$altcha.i18n.set("be", i18n$W);
const i18n$V = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("bs", i18n$V);
const i18n$U = {
ariaLinkLabel: "Altcha (lloc web oficial)",
enterCode: "Introdueix el codi",
enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",
error: "Verificació fallida. Torna-ho a provar més tard.",
expired: "Verificació expirada. Torna-ho a provar.",
footer: 'Protegit per <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (lloc web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtenir un desafiament d’àudio",
label: "No sóc un robot",
loading: "Carregant...",
reload: "Torna a carregar",
verify: "Verificar",
verificationRequired: "Es requereix verificació!",
verified: "Verificat",
verifying: "Verificant...",
waitAlert: "Verificant... si us plau, espera.",
cancel: "Cancel·la",
enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent."
};
globalThis.$altcha.i18n.set("ca", i18n$U);
const i18n$T = {
ariaLinkLabel: "Altcha (oficiální web)",
enterCode: "Zadejte kód",
enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",
error: "Ověření selhalo. Zkuste to prosím později.",
expired: "Ověření vypršelo. Zkuste to prosím znovu.",
footer: 'Chráněno pomocí <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiální web)">ALTCHA</a>',
getAudioChallenge: "Získat audio výzvu",
label: "Nejsem robot",
loading: "Načítání...",
reload: "Znovu načíst",
verify: "Ověřit",
verificationRequired: "Vyžaduje se ověření!",
verified: "Ověřeno",
verifying: "Ověřování...",
waitAlert: "Probíhá ověření... prosím počkejte.",
cancel: "Zrušit",
enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže."
};
globalThis.$altcha.i18n.set("cs", i18n$T);
const i18n$S = {
ariaLinkLabel: "Altcha (officiel hjemmeside)",
enterCode: "Indtast kode",
enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",
error: "Verificering mislykkedes. Prøv venligst igen senere.",
expired: "Verificering udløbet. Prøv venligst igen.",
footer: 'Beskyttet af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiel hjemmeside)">ALTCHA</a>',
getAudioChallenge: "Hent lydudfordring",
label: "Jeg er ikke en robot",
loading: "Indlæser...",
reload: "Genindlæs",
verify: "Verificer",
verificationRequired: "Verificering kræves!",
verified: "Verificeret",
verifying: "Verificerer...",
waitAlert: "Verificerer... vent venligst.",
cancel: "Annuller",
enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder."
};
globalThis.$altcha.i18n.set("da", i18n$S);
const i18n$R = {
ariaLinkLabel: "Altcha (offizielle Website)",
enterCode: "Code eingeben",
enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",
error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",
footer: 'Geschützt durch <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offizielle Website)">ALTCHA</a>',
getAudioChallenge: "Audio-Herausforderung anfordern",
label: "Ich bin kein Roboter",
loading: "Lade...",
reload: "Neu laden",
verify: "Überprüfen",
verificationRequired: "Überprüfung erforderlich!",
verified: "Überprüft",
verifying: "Wird überprüft...",
waitAlert: "Überprüfung läuft... bitte warten.",
cancel: "Abbrechen",
enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."
};
globalThis.$altcha.i18n.set("de", i18n$R);
const i18n$Q = {
ariaLinkLabel: "Altcha (επίσημος ιστότοπος)",
enterCode: "Εισαγάγετε κωδικό",
enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",
error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",
expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.",
footer: 'Προστατεύεται από το <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (επίσημος ιστότοπος)">ALTCHA</a>',
getAudioChallenge: "Λήψη ηχητικής δοκιμασίας",
label: "Δεν είμαι ρομπότ",
loading: "Φόρτωση...",
reload: "Επαναφόρτωση",
verify: "Επαλήθευση",
verificationRequired: "Απαιτείται έλεγχος!",
verified: "Επαληθεύτηκε",
verifying: "Γίνεται επαλήθευση...",
waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.",
cancel: "Ακύρωση",
enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."
};
globalThis.$altcha.i18n.set("el", i18n$Q);
const i18n$P = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Introduce el código",
enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor intente nuevamente más tarde.",
expired: "Verificación expirada. Por favor intente nuevamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un desafío de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Recargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espere.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo."
};
globalThis.$altcha.i18n.set("es-es", i18n$P);
const i18n$O = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Ingresa el código",
enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.",
expired: "La verificación expiró. Por favor inténtalo de nuevo.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un reto de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Volver a cargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espera.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación."
};
globalThis.$altcha.i18n.set("es-419", i18n$O);
const i18n$N = {
ariaLinkLabel: "Altcha (ametlik veebisait)",
enterCode: "Sisesta kood",
enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",
error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",
expired: "Kinnitamine aegus. Proovi uuesti.",
footer: 'Kaitstud <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ametlik veebisait)">ALTCHA</a> poolt',
getAudioChallenge: "Hangi heliülesanne",
label: "Ma ei ole robot",
loading: "Laadimine...",
reload: "Laadi uuesti",
verify: "Kinnita",
verificationRequired: "Kontroll on vajalik!",
verified: "Kinnitatud",
verifying: "Kinnitamine...",
waitAlert: "Kinnitamine... palun oota.",
cancel: "Tühista",
enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood."
};
globalThis.$altcha.i18n.set("et", i18n$N);
const i18n$M = {
ariaLinkLabel: "Altcha (webgune ofiziala)",
enterCode: "Sartu kodea",
enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",
error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.",
expired: "Egiaztatzea iraungi da. Saiatu berriro.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (webgune ofiziala)">ALTCHA</a>k babestuta',
getAudioChallenge: "Jaso audio-erronka bat",
label: "Ez naiz robot bat",
loading: "Kargatzen...",
reload: "Birkargatu",
verify: "Egiaztatu",
verificationRequired: "Egiaztatzea beharrezkoa da!",
verified: "Egiaztatuta",
verifying: "Egiaztatzen...",
waitAlert: "Egiaztatzen... itxaron mesedez.",
cancel: "Utzi",
enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea."
};
globalThis.$altcha.i18n.set("eu", i18n$M);
const i18n$L = {
ariaLinkLabel: "Altcha (وب‌سایت رسمی)",
enterCode: "کد را وارد کنید",
enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",
error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",
expired: "احراز هویت منقضی شد. دوباره تلاش کنید.",
footer: 'محافظت شده توسط <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (وب‌سایت رسمی)">ALTCHA</a>',
getAudioChallenge: "دریافت چالش صوتی",
label: "من ربات نیستم",
loading: "در حال بارگذاری...",
reload: "بارگذاری مجدد",
verify: "تایید",
verificationRequired: "احراز هویت لازم است!",
verified: "تایید شد",
verifying: "در حال تایید...",
waitAlert: "در حال تایید... لطفا منتظر بمانید.",
cancel: "لغو کردن",
enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید."
};
globalThis.$altcha.i18n.set("fa", i18n$L);
const i18n$K = {
ariaLinkLabel: "Altcha (offiziell Websäit)",
enterCode: "Code aginn",
enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",
error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",
expired: "Verifikatioun ofgelaf. Probéiert nach emol.",
footer: 'Geschützt vun <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offiziell Websäit)">ALTCHA</a>',
getAudioChallenge: "Kritt eng Audio-Herausfuerderung",
label: "Ech sinn keen Robot",
loading: "Lueden...",
reload: "Nei lueden",
verify: "Verifizéieren",
verificationRequired: "Verifikatioun néideg!",
verified: "Verifizéiert",
verifying: "Verifizéieren...",
waitAlert: "Verifizéieren... waart wgl.",
cancel: "Ofbriechen",
enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."
};
globalThis.$altcha.i18n.set("lb", i18n$K);
const i18n$J = {
ariaLinkLabel: "Altcha (virallinen verkkosivusto)",
enterCode: "Syötä koodi",
enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",
error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.",
expired: "Varmennus vanhentui. Yritä uudelleen.",
footer: 'Suojattu <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (virallinen verkkosivusto)">ALTCHA</a>:lla',
getAudioChallenge: "Hae äänitehtävä",
label: "En ole robotti",
loading: "Ladataan...",
reload: "Lataa uudelleen",
verify: "Vahvista",
verificationRequired: "Vahvistus vaaditaan!",
verified: "Vahvistettu",
verifying: "Vahvistetaan...",
waitAlert: "Vahvistetaan... odota hetki.",
cancel: "Peruuta",
enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi."
};
globalThis.$altcha.i18n.set("fi", i18n$J);
const i18n$I = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",
error: "Échec de la vérification. Réessayez plus tard.",
expired: "La vérification a expiré. Réessayez.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-ca", i18n$I);
const i18n$H = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",
error: "Échec de la vérification. Essayez à nouveau plus tard.",
expired: "La vérification a expiré. Essayez à nouveau.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-fr", i18n$H);
const i18n$G = {
ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)",
enterCode: "Iontráil cód",
enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",
error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.",
expired: "Tá an fíorú as feidhm. Bain triail eile as.",
footer: 'Cosanta ag <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (láithreán gréasáin oifigiúil)">ALTCHA</a>',
getAudioChallenge: "Faigh dúshlán fuaime",
label: "Níl mé i mo róbat",
loading: "Á luchtú...",
reload: "Athluchtaigh",
verify: "Fíoraigh",
verificationRequired: "Fíorú riachtanach!",
verified: "Fíoraithe",
verifying: "Fíorú ar siúl...",
waitAlert: "Fíorú ar siúl... fan go fóill.",
cancel: "Cealaigh",
enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."
};
globalThis.$altcha.i18n.set("ga", i18n$G);
const i18n$F = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",
error: "Provjera nije uspjela. Molimo pokušajte kasnije.",
expired: "Provjera je istekla. Molimo pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Audio provjera",
label: "Ja nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Provjeri",
verificationRequired: "Potrebna je provjera!",
verified: "Provjereno",
verifying: "Provjeravanje...",
waitAlert: "Provjera je u tijeku... molimo pričekajte.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("hr", i18n$F);
const i18n$E = {
ariaLinkLabel: "Altcha (hivatalos weboldal)",
enterCode: "Írja be a kódot",
enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",
error: "A hitelesítés nem sikerült. Próbáld meg később újra.",
expired: "A hitelesítés lejárt. Próbáld újra.",
footer: 'Védve a következő által: <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (hivatalos weboldal)">ALTCHA</a>',
getAudioChallenge: "Hangalapú kihívás kérése",
label: "Nem vagyok robot",
loading: "Betöltés...",
reload: "Újratöltés",
verify: "Ellenőrzés",
verificationRequired: "Ellenőrzés szükséges!",
verified: "Ellenőrizve",
verifying: "Ellenőrzés folyamatban...",
waitAlert: "Ellenőrzés folyamatban... kérlek várj.",
cancel: "Mégse",
enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját."
};
globalThis.$altcha.i18n.set("hu", i18n$E);
const i18n$D = {
ariaLinkLabel: "Altcha (opinber vefsíða)",
enterCode: "Sláðu inn kóða",
enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",
error: "Staðfesting mistókst. Reyndu aftur síðar.",
expired: "Staðfesting er útrunnin. Reyndu aftur.",
footer: 'Verndað af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (opinber vefsíða)">ALTCHA</a>',
getAudioChallenge: "Fá hljóðáskorun",
label: "Ég er ekki robot",
loading: "Hleður...",
reload: "Hleð aftur",
verify: "Staðfesta",
verificationRequired: "Staðfesting er nauðsynleg!",
verified: "Staðfest",
verifying: "Að staðfesta...",
waitAlert: "Að staðfesta... vinsamlegast bíða.",
cancel: "Hætta við",
enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."
};
globalThis.$altcha.i18n.set("is", i18n$D);
const i18n$C = {
ariaLinkLabel: "Altcha (sito ufficiale)",
enterCode: "Inserisci il codice",
enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",
error: "Verifica fallita. Riprova più tardi.",
expired: "Verifica scaduta. Riprova.",
footer: 'Protetto da <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sito ufficiale)">ALTCHA</a>',
getAudioChallenge: "Ottieni una sfida audio",
label: "Non sono un robot",
loading: "Caricamento...",
reload: "Ricarica",
verify: "Verifica",
verificationRequired: "Verifica richiesta!",
verified: "Verificato",
verifying: "Verifica in corso...",
waitAlert: "Verifica in corso... attendere.",
cancel: "Annulla",
enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante."
};
globalThis.$altcha.i18n.set("it", i18n$C);
const i18n$B = {
ariaLinkLabel: "Altcha (oficiali svetainė)",
enterCode: "Įveskite kodą",
enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",
error: "Patvirtinimas nepavyko. Bandykite vėliau.",
expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.",
footer: 'Apsaugota <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiali svetainė)">ALTCHA</a>',
getAudioChallenge: "Gauti garso užduotį",
label: "Aš nesu robotas",
loading: "Įkeliama...",
reload: "Įkelti iš naujo",
verify: "Patvirtinti",
verificationRequired: "Reikalingas patvirtinimas!",
verified: "Patvirtinta",
verifying: "Tikrinama...",
waitAlert: "Tikrinama... prašome palaukti.",
cancel: "Atšaukti",
enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."
};
globalThis.$altcha.i18n.set("lt", i18n$B);
const i18n$A = {
ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)",
enterCode: "Ievadiet kodu",
enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",
error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",
expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",
footer: 'Aizsargāts ar <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiālā tīmekļa vietne)">ALTCHA</a>',
getAudioChallenge: "Saņemt audio izaicinājumu",
label: "Es neesmu robots",
loading: "Notiek ielāde...",
reload: "Pārlādēt",
verify: "Verificēt",
verificationRequired: "Nepieciešama verifikācija!",
verified: "Verificēts",
verifying: "Notiek verifikācija...",
waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.",
cancel: "Atcelt",
enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."
};
globalThis.$altcha.i18n.set("lv", i18n$A);
const i18n$z = {
ariaLinkLabel: "Altcha (sit uffiċjali)",
enterCode: "Idħol il-kodiċi",
enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",
error: "Il-verifika falliet. Erġa’ pprova aktar tard.",
expired: "Il-verifika skadiet. Erġa’ pprova.",
footer: 'Protett minn <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sit uffiċjali)">ALTCHA</a>',
getAudioChallenge: "Ikseb sfida bl-awdjo",
label: "M’inix robot",
loading: "Qed jitgħabba...",
reload: "Ittella’ mill-ġdid",
verify: "Ivverifika",
verificationRequired: "Verifika meħtieġa!",
verified: "Ivverifikat",
verifying: "Verifika għaddejja...",
waitAlert: "Verifika għaddejja... stenna ftit.",
cancel: "Ikkanċella",
enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."
};
globalThis.$altcha.i18n.set("mt", i18n$z);
const i18n$y = {
ariaLinkLabel: "Altcha (offisiell nettside)",
enterCode: "Skriv inn kode",
enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.",
error: "Verifisering mislyktes. Prøv igjen senere.",
expired: "Verifiseringen utløp. Prøv igjen.",
footer: 'Beskyttet av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offisiell nettside)">ALTCHA</a>',
getAudioChallenge: "Få en lydutfordring",
label: "Jeg er ikke en robot",
loading: "Laster...",
reload: "Last på nytt",
verify: "Verifiser",
verificationRequired: "Verifisering kreves!",
verified: "Verifisert",
verifying: "Verifiserer...",
waitAlert: "Verifiserer... vennligst vent.",
cancel: "Avbryt",
enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor."
};
globalThis.$altcha.i18n.set("nb", i18n$y);
const i18n$x = {
ariaLinkLabel: "Altcha (officiële website)",
enterCode: "Voer code in",
enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",
error: "Verificatie mislukt. Probeer het later opnieuw.",
expired: "Verificatie verlopen. Probeer het opnieuw.",
footer: 'Beschermd door <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiële website)">ALTCHA</a>',
getAudioChallenge: "Audio-uitdaging ontvangen",
label: "Ik ben geen robot",
loading: "Laden...",
reload: "Herladen",
verify: "Verifiëren",
verificationRequired: "Verificatie vereist!",
verified: "Geverifieerd",
verifying: "Bezig met verifiëren...",
waitAlert: "Bezig met verifiëren... even geduld a.u.b.",
cancel: "Annuleren",
enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in."
};
globalThis.$altcha.i18n.set("nl", i18n$x);
const i18n$w = {
ariaLinkLabel: "Altcha (oficjalna strona internetowa)",
enterCode: "Wprowadź kod",
enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",
error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.",
expired: "Weryfikacja wygasła. Spróbuj ponownie.",
footer: 'Chronione przez <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficjalna strona internetowa)">ALTCHA</a>',
getAudioChallenge: "Pobierz zadanie dźwiękowe",
label: "Nie jestem robotem",
loading: "Ładowanie...",
reload: "Odśwież",
verify: "Zweryfikuj",
verificationRequired: "Wymagana weryfikacja!",
verified: "Zweryfikowano",
verifying: "Weryfikacja...",
waitAlert: "Trwa weryfikacja... proszę czekać.",
cancel: "Anuluj",
enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka."
};
globalThis.$altcha.i18n.set("pl", i18n$w);
const i18n$v = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduza o código",
enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",
error: "A verificação falhou. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Não sou um robô",
loading: "A carregar...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "A verificar...",
waitAlert: "A verificar... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-pt", i18n$v);
const i18n$u = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Digite o código",
enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",
error: "Falha na verificação. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Eu não sou um robô",
loading: "Carregando...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-br", i18n$u);
const i18n$t = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduceți codul",
enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",
error: "Verificarea a eșuat. Încearcă din nou mai târziu.",
expired: "Verificarea a expirat. Încearcă din nou.",
footer: 'Protejat de <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obține o provocare audio",
label: "Nu sunt un robot",
loading: "Se încarcă...",
reload: "Reîncarcă",
verify: "Verifică",
verificationRequired: "Verificare necesară!",
verified: "Verificat",
verifying: "Se verifică...",
waitAlert: "Se verifică... te rugăm să aștepți.",
cancel: "Anulare",
enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."
};
globalThis.$altcha.i18n.set("ro", i18n$t);
const i18n$s = {
ariaLinkLabel: "Altcha (официальный сайт)",
enterCode: "Введите код",
enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",
error: "Ошибка верификации. Попробуйте позже.",
expired: "Срок действия верификации истек. Попробуйте снова.",
footer: 'Защищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официальный сайт)">ALTCHA</a>',
getAudioChallenge: "Получить аудио задачу",
label: "Я не робот",
loading: "Загрузка...",
reload: "Перезагрузить",
verify: "Проверить",
verificationRequired: "Требуется проверка!",
verified: "Проверено",
verifying: "Идет проверка...",
waitAlert: "Идет проверка... Пожалуйста, подождите.",
cancel: "Отмена",
enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже."
};
globalThis.$altcha.i18n.set("ru", i18n$s);
const i18n$r = {
ariaLinkLabel: "Altcha (oficiálna webová stránka)",
enterCode: "Zadajte kód",
enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",
error: "Verifikácia zlyhala. Skúste to znova neskôr.",
expired: "Verifikácia vypršala. Skúste to znova.",
footer: 'Chránené <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiálna webová stránka)">ALTCHA</a>',
getAudioChallenge: "Získať audio výzvu",
label: "Nie som robot",
loading: "Načítava sa...",
reload: "Obnoviť",
verify: "Verifikovať",
verificationRequired: "Vyžaduje sa overenie!",
verified: "Verifikované",
verifying: "Prebieha verifikácia...",
waitAlert: "Prebieha verifikácia... prosím čakajte.",
cancel: "Zrušiť",
enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie."
};
globalThis.$altcha.i18n.set("sk", i18n$r);
const i18n$q = {
ariaLinkLabel: "Altcha (uradna spletna stran)",
enterCode: "Vnesite kodo",
enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",
error: "Preverjanje ni uspelo. Poskusite znova kasneje.",
expired: "Preverjanje je poteklo. Poskusite znova.",
footer: 'Zaščiteno z <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (uradna spletna stran)">ALTCHA</a>',
getAudioChallenge: "Pridobite zvočni izziv",
label: "Nisem robot",
loading: "Nalagam...",
reload: "Ponovno naloži",
verify: "Preveri",
verificationRequired: "Potrebna je preveritev!",
verified: "Preverjeno",
verifying: "Preverjanje...",
waitAlert: "Preverjanje... prosim počakajte.",
cancel: "Preklic",
enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."
};
globalThis.$altcha.i18n.set("sl", i18n$q);
const i18n$p = {
ariaLinkLabel: "Altcha (faqja zyrtare)",
enterCode: "Fut kodin",
enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",
error: "Verifikimi dështoi. Provoni përsëri më vonë.",
expired: "Verifikimi ka skaduar. Provoni përsëri.",
footer: 'I mbrojtur nga <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (faqja zyrtare)">ALTCHA</a>',
getAudioChallenge: "Merr një sfidë audio",
label: "Unë nuk jam një robot",
loading: "Duke u ngarkuar...",
reload: "Ringarko",
verify: "Verifiko",
verificationRequired: "Kërkohet verifikimi!",
verified: "I verifikuar",
verifying: "Duke verifikuar...",
waitAlert: "Duke verifikuar... ju lutem prisni.",
cancel: "Anuloje",
enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."
};
globalThis.$altcha.i18n.set("sq", i18n$p);
const i18n$o = {
ariaLinkLabel: "Altcha (zvanična web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (zvanična web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovo učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Откажи",
enterCodeFromImage: "Да бисте наставили, унесите код са слике испод."
};
globalThis.$altcha.i18n.set("sr", i18n$o);
const i18n$n = {
ariaLinkLabel: "Altcha (officiell webbplats)",
enterCode: "Ange kod",
enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
error: "Verifiering misslyckades. Försök igen senare.",
expired: "Verifieringen har gått ut. Försök igen.",
footer: 'Skyddad av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiell webbplats)">ALTCHA</a>',
getAudioChallenge: "Få ljudutmaning",
label: "Jag är inte en robot",
loading: "Laddar...",
reload: "Ladda om",
verify: "Verifiera",
verificationRequired: "Verifiering krävs!",
verified: "Verifierad",
verifying: "Verifierar...",
waitAlert: "Verifierar... vänligen vänta.",
cancel: "Avbryt",
enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan."
};
globalThis.$altcha.i18n.set("sv", i18n$n);
const i18n$m = {
ariaLinkLabel: "Altcha (resmi web sitesi)",
enterCode: "Kodu girin",
enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
footer: 'ALTCHA tarafından korunuyor <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (resmi web sitesi)">ALTCHA</a>',
getAudioChallenge: "Sesli doğrulama al",
label: "Ben robot değilim",
loading: "Yükleniyor...",
reload: "Yeniden yükle",
verify: "Doğrula",
verificationRequired: "Doğrulama gerekli!",
verified: "Doğrulandı",
verifying: "Doğrulama yapılıyor...",
waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.",
cancel: "İptal",
enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin."
};
globalThis.$altcha.i18n.set("tr", i18n$m);
const i18n$l = {
ariaLinkLabel: "Altcha (офіційний сайт)",
enterCode: "Введіть код",
enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
error: "Перевірка не вдалася. Спробуйте пізніше.",
expired: "Перевірка прострочена. Спробуйте знову.",
footer: 'Захищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (офіційний сайт)">ALTCHA</a>',
getAudioChallenge: "Отримати аудіо-челлендж",
label: "Я не робот",
loading: "Завантаження...",
reload: "Перезавантажити",
verify: "Перевірити",
verificationRequired: "Потрібна перевірка!",
verified: "Перевірено",
verifying: "Перевіряється...",
waitAlert: "Перевірка... будь ласка, зачекайте.",
cancel: "Скасувати",
enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче."
};
globalThis.$altcha.i18n.set("uk", i18n$l);
const i18n$k = {
ariaLinkLabel: "Altcha (amptelike webwerf)",
enterCode: "Voer kode in",
enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",
error: "Verifikasie het misluk. Probeer later weer.",
expired: "Verifikasie het verval. Probeer weer.",
footer: 'Beskerm deur <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (amptelike webwerf)">ALTCHA</a>',
getAudioChallenge: "Kry 'n klankuitdaging",
label: "Ek is nie 'n robot nie",
loading: "Laai...",
reload: "Laai weer",
verify: "Verifieer",
verificationRequired: "Verifikasie is vereis!",
verified: "Geverifieer",
verifying: "Verifieer...",
waitAlert: "Verifieer... wag asseblief.",
cancel: "Kanselleer",
enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."
};
globalThis.$altcha.i18n.set("af", i18n$k);
const i18n$j = {
ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)",
enterCode: "ኮድ አስገባ",
enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",
error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",
expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",
footer: 'በ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ዋናው ድህረ ገጽ)">ALTCHA</a> የተጠበቀ',
getAudioChallenge: "የድምጽ ፈተና ያግኙ",
label: "እኔ ሮቦት አይደለሁም",
loading: "በመጫን ላይ...",
reload: "እንደገና ጫን",
verify: "አረጋግጥ",
verificationRequired: "ማረጋገጫ ያስፈልጋል!",
verified: "ተረጋግጧል",
verifying: "በማረጋገጥ ላይ...",
waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",
cancel: "ይቅር",
enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"
};
globalThis.$altcha.i18n.set("am", i18n$j);
const i18n$i = {
ariaLinkLabel: "Altcha (tovuti rasmi)",
enterCode: "Weka nambari",
enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.",
error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.",
expired: "Uthibitishaji umeisha. Jaribu tena.",
footer: 'Imealindwa na <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (tovuti rasmi)">ALTCHA</a>',
getAudioChallenge: "Pata changamoto ya sauti",
label: "Mimi sio roboti",
loading: "Inapakia...",
reload: "Pakia tena",
verify: "Thibitisha",
verificationRequired: "Uthibitishaji unahitajika!",
verified: "Imethibitishwa",
verifying: "Inathibitisha...",
waitAlert: "Inathibitisha... tafadhali subiri.",
cancel: "Ghairi",
enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."
};
globalThis.$altcha.i18n.set("sw", i18n$i);
const i18n$h = {
ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)",
enterCode: "Tẹ koodu sii",
enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",
error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",
expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",
footer: 'Ti wa ni ààbò nipasẹ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oju opo wẹẹbu osise)">ALTCHA</a>',
getAudioChallenge: "Gba ìjàdú ohùn",
label: "Emi kii ṣe ẹrọ",
loading: "Ó ń gbé sílẹ̀...",
reload: "Tún gbé wọlé",
verify: "Ṣàdájọ́",
verificationRequired: "Ìdájọ́kòwò ni a nílò!",
verified: "A ti dájọ́",
verifying: "Ó ń ṣàdájọ́...",
waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",
cancel: "Fagbọsẹ",
enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."
};
globalThis.$altcha.i18n.set("yo", i18n$h);
const i18n$g = {
ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)",
enterCode: "কোড লিখুন",
enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",
error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",
expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",
footer: 'দ্বারা সুরক্ষিত <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (অফিসিয়াল ওয়েবসাইট)">ALTCHA</a>',
getAudioChallenge: "অডিও চ্যালেঞ্জ নিন",
label: "আমি রোবট নই",
loading: "লোড হচ্ছে...",
reload: "পুনরায় লোড করুন",
verify: "যাচাই করুন",
verificationRequired: "যাচাই প্রয়োজন!",
verified: "যাচাই করা হয়েছে",
verifying: "যাচাই করা হচ্ছে...",
waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",
cancel: "বাতিল করুন",
enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"
};
globalThis.$altcha.i18n.set("bn", i18n$g);
const i18n$f = {
ariaLinkLabel: "Altcha (אתר רשמי)",
enterCode: "הזן קוד",
enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",
error: "האימות נכשל. נסה שוב מאוחר יותר.",
expired: "תוקף האימות פג. נסה שוב.",
footer: 'מוגן על ידי <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (אתר רשמי)">ALTCHA</a>',
getAudioChallenge: "קבל אתגר שמע",
label: "אני לא רובוט",
loading: "טוען...",
reload: "טען מחדש",
verify: "אמת",
verificationRequired: "נדרש אימות!",
verified: "אומת",
verifying: "מאמת...",
waitAlert: "מבצע אימות... אנא המתן.",
cancel: "ביטול",
enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."
};
globalThis.$altcha.i18n.set("he", i18n$f);
const i18n$e = {
ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)",
enterCode: "कोड दर्ज करेंं",
enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",
error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",
expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",
footer: 'द्वारा संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (आधिकारिक वेबसाइट)">ALTCHA</a>',
getAudioChallenge: "ऑडियो चुनौती प्राप्त करें",
label: "मैं रोबोट नहीं हूँ",
loading: "लोड हो रहा है...",
reload: "पुनः लोड करें",
verify: "सत्यापित करें",
verificationRequired: "सत्यापन आवश्यक है!",
verified: "सत्यापित",
verifying: "सत्यापित कर रहे हैं...",
waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",
cancel: "रद्द करें",
enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"
};
globalThis.$altcha.i18n.set("hi", i18n$e);
const i18n$d = {
ariaLinkLabel: "Altcha (situs web resmi)",
enterCode: "Masukkan kode",
enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",
error: "Verifikasi gagal. Coba lagi nanti.",
expired: "Verifikasi telah kedaluwarsa. Coba lagi.",
footer: 'Dilindungi oleh <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (situs web resmi)">ALTCHA</a>',
getAudioChallenge: "Dapatkan tantangan audio",
label: "Saya bukan robot",
loading: "Memuat...",
reload: "Muat ulang",
verify: "Verifikasi",
verificationRequired: "Verifikasi diperlukan!",
verified: "Terverifikasi",
verifying: "Memverifikasi...",
waitAlert: "Memverifikasi... harap tunggu.",
cancel: "Batal",
enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."
};
globalThis.$altcha.i18n.set("id", i18n$d);
const i18n$c = {
ariaLinkLabel: "Altcha (公式ウェブサイト)",
enterCode: "コードを入力",
enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。",
error: "認証に失敗しました。後でもう一度試してください。",
expired: "認証が期限切れです。再試行してください。",
footer: '保護されています <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (公式ウェブサイト)">ALTCHA</a>',
getAudioChallenge: "音声チャレンジを取得",
label: "私はロボットではありません",
loading: "読み込み中...",
reload: "再読み込み",
verify: "確認",
verificationRequired: "認証が必要です!",
verified: "確認済み",
verifying: "確認中...",
waitAlert: "確認中...少々お待ちください。",
cancel: "キャンセル",
enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。"
};
globalThis.$altcha.i18n.set("ja", i18n$c);
const i18n$b = {
ariaLinkLabel: "Altcha (공식 웹사이트)",
enterCode: "코드 입력",
enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",
error: "인증 실패. 나중에 다시 시도해주세요.",
expired: "인증이 만료되었습니다. 다시 시도해주세요.",
footer: 'ALTCHA에서 보호됨 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (공식 웹사이트)">ALTCHA</a>',
getAudioChallenge: "오디오 챌린지 받기",
label: "저는 로봇이 아닙니다",
loading: "로딩 중...",
reload: "새로 고침",
verify: "확인",
verificationRequired: "인증이 필요합니다!",
verified: "확인됨",
verifying: "확인 중...",
waitAlert: "확인 중... 잠시만 기다려주세요.",
cancel: "취소",
enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요."
};
globalThis.$altcha.i18n.set("ko", i18n$b);
const i18n$a = {
ariaLinkLabel: "Altcha (ресми веб-сайт)",
enterCode: "Кодты енгізіңіз",
enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",
error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",
expired: "Тексеру мерзімі аяқталды. Қайталаңыз.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ресми веб-сайт)">ALTCHA</a> қорғайды',
getAudioChallenge: "Аудио сынақ алу",
label: "Мен робот емеспін",
loading: "Жүктелуде...",
reload: "Қайта жүктеу",
verify: "Тексеру",
verificationRequired: "Тексеру талап етіледі!",
verified: "Тексерілді",
verifying: "Тексеруде...",
waitAlert: "Тексерілуде... күте тұрыңыз.",
cancel: "Болдыру",
enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."
};
globalThis.$altcha.i18n.set("kk", i18n$a);
const i18n$9 = {
ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)",
enterCode: "कोड टाकाा",
enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",
error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",
expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",
footer: 'द्वारे संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (अधिकृत संकेतस्थळ)">ALTCHA</a>',
getAudioChallenge: "ऑडिओ चॅलेंज मिळवा",
label: "मी रोबोट नाही",
loading: "लोड होत आहे...",
reload: "पुन्हा लोड करा",
verify: "पुष्टीकरण करा",
verificationRequired: "पडताळणी आवश्यक आहे!",
verified: "पुष्टीकरण झाले",
verifying: "पुष्टीकरण करत आहे...",
waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",
cancel: "रद्द करा",
enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."
};
globalThis.$altcha.i18n.set("mr", i18n$9);
const i18n$8 = {
ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",
enterCode: "குறியீட்டை உள்ளிடவும்",
enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (அதிகாரப்பூர்வ வலைத்தளம்)">ALTCHA</a>',
getAudioChallenge: "ஒலி சவாலை பெறவும்",
label: "நான் ரோபோடான அல்ல",
loading: "செயலாக்கம்...",
reload: "மீண்டும் புதுப்பிக்கவும்",
verify: "சரிபார்க்கவும்",
verificationRequired: "சரிபார்ப்பு தேவை!",
verified: "சரிபார்க்கப்பட்டது",
verifying: "சரிபார்க்கப்படுகிறது...",
waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",
cancel: "ரத்துசெய்",
enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."
};
globalThis.$altcha.i18n.set("ta", i18n$8);
const i18n$7 = {
ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)",
enterCode: "కోడ్‌ని నమోదు చేయండి",
enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (అధికారిక వెబ్‌సైట్)">ALTCHA</a>',
getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
label: "నేను రోబోట్ కాదు",
loading: "లోడ్ అవుతోంది...",
reload: "మళ్ళీ లోడ్ చేయండి",
verify: "ధ్రువీకరించు",
verificationRequired: "ధృవీకరణ అవసరం!",
verified: "ధ్రువీకరించబడింది",
verifying: "ధ్రువీకరణ జరుగుతుంది...",
waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",
cancel: "రద్దు చేయండి",
enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."
};
globalThis.$altcha.i18n.set("te", i18n$7);
const i18n$6 = {
ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)",
enterCode: "ป้อนรหัส",
enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
footer: 'ป้องกันโดย <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (เว็บไซต์ทางการ)">ALTCHA</a>',
getAudioChallenge: "รับการท้าทายเสียง",
label: "ฉันไม่ใช่บอท",
loading: "กำลังโหลด...",
reload: "โหลดใหม่",
verify: "ตรวจสอบ",
verificationRequired: "จำเป็นต้องตรวจสอบ!",
verified: "ตรวจสอบแล้ว",
verifying: "กำลังตรวจสอบ...",
waitAlert: "กำลังตรวจสอบ... กรุณารอ",
cancel: "ยกเลิก",
enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"
};
globalThis.$altcha.i18n.set("th", i18n$6);
const i18n$5 = {
ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)",
enterCode: "کوڈ درج کریں",
enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (سرکاری ویب سائٹ)">ALTCHA</a>',
getAudioChallenge: "آڈیو چیلنج حاصل کریں",
label: "میں روبوٹ نہیں ہوں",
loading: "لوڈ ہو رہا ہے...",
reload: "دوبارہ لوڈ کریں",
verify: "توثیق کریں",
verificationRequired: "تصدیق ضروری ہے!",
verified: "توثیق شدہ",
verifying: "توثیق ہو رہی ہے...",
waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",
cancel: "منسوخ کریں",
enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"
};
globalThis.$altcha.i18n.set("ur", i18n$5);
const i18n$4 = {
ariaLinkLabel: "Altcha (rasmiy veb-sayt)",
enterCode: "Kodni kiriting",
enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",
error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",
expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (rasmiy veb-sayt)">ALTCHA</a> tomonidan himoyalangan',
getAudioChallenge: "Audio sinovni olish",
label: "Men robot emasman",
loading: "Yuklanmoqda...",
reload: "Qayta yuklash",
verify: "Tekshirish",
verificationRequired: "Tekshiruv talab qilinadi!",
verified: "Tekshirildi",
verifying: "Tekshirilmoqda...",
waitAlert: "Tekshirilmoqda... iltimos kuting.",
cancel: "Bekor qilish",
enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."
};
globalThis.$altcha.i18n.set("uz", i18n$4);
const i18n$3 = {
ariaLinkLabel: "Altcha (trang web chính thức)",
enterCode: "Nhập mã",
enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
error: "Xác minh thất bại. Vui lòng thử lại sau.",
expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
footer: 'Được bảo vệ bởi <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (trang web chính thức)">ALTCHA</a>',
getAudioChallenge: "Nhận thử thách âm thanh",
label: "Tôi không phải là robot",
loading: "Đang tải...",
reload: "Tải lại",
verify: "Xác minh",
verificationRequired: "Yêu cầu xác minh!",
verified: "Đã xác minh",
verifying: "Đang xác minh...",
waitAlert: "Đang xác minh... vui lòng chờ.",
cancel: "Hủy bỏ",
enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."
};
globalThis.$altcha.i18n.set("vi", i18n$3);
const i18n$2 = {
ariaLinkLabel: "Altcha (官方网站)",
enterCode: "输入代码",
enterCodeAria: "输入您听到的代码。按空格键播放音频。",
error: "验证失败。稍后再试。",
expired: "验证已过期。请重试。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方网站)">ALTCHA</a> 保护',
getAudioChallenge: "获取音频挑战",
label: "我不是机器人",
loading: "加载中...",
reload: "重新加载",
verify: "验证",
verificationRequired: "需要验证!",
verified: "已验证",
verifying: "正在验证...",
waitAlert: "正在验证... 请稍等。",
cancel: "取消",
enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。"
};
globalThis.$altcha.i18n.set("zh-cn", i18n$2);
const i18n$1 = {
ariaLinkLabel: "Altcha (官方網站)",
cancel: "取消",
enterCode: "輸入代碼",
enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。",
enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。",
error: "驗證失敗。請稍後再試。",
expired: "驗證已過期。請再試一次。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 提供保護',
getAudioChallenge: "取得音訊驗證",
label: "我唔係機械人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "驗證中...",
waitAlert: "驗證中... 請稍候。"
};
globalThis.$altcha.i18n.set("zh-hk", i18n$1);
const i18n = {
ariaLinkLabel: "Altcha (官方網站)",
enterCode: "輸入代碼",
enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
error: "驗證失敗。稍後再試。",
expired: "驗證已過期。請重試。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 保護',
getAudioChallenge: "獲取音頻挑戰",
label: "我不是機器人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "正在驗證...",
waitAlert: "正在驗證... 請稍等。",
cancel: "取消",
enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。"
};
globalThis.$altcha.i18n.set("zh-tw", i18n);
 
data/skin/front/mygreek/js/gd_board_goods.js+110
변경 전gd_board_goods.js
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
var getData = function (id, target) {
id = id.toLowerCase();
switch (id) {
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
$.ajax({
method: "POST",
url: "../board/memo_ps.php",
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return true;
};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function gd_open_write_layer(bdId, goodsNo, sno) {
$.ajax({
method: "GET",
}).success(function (data) {
writerLayer.show(data);
gd_center_layer();
 
}).error(function (e) {
alert(e.responseText);
});
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
var getData = function (id, target) {
id = id.toLowerCase();
switch (id) {
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
$.ajax({
method: "POST",
url: "../board/memo_ps.php",
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return true;
};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function gd_open_write_layer(bdId, goodsNo, sno) {
$.ajax({
method: "GET",
}).success(function (data) {
writerLayer.show(data);
gd_center_layer();
 
}).error(function (e) {
alert(e.responseText);
});
 
변경 후gd_board_goods.js
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
 
var getData = function (id, target) {
id = id.toLowerCase();
switch (id) {
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
$.ajax({
method: "POST",
url: "../board/memo_ps.php",
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return true;
};
 
function loadAltchaModule() {
if (window.gdAltchaModuleLoaded) {
return;
}
const wrap = document.querySelector('.capcha_altcha[data-altcha-src]');
if (!wrap) {
return;
}
window.gdAltchaModuleLoaded = true;
const src = wrap.getAttribute('data-altcha-src');
[src, src.replace('altcha.js', 'i18n.js')].forEach(function (url) {
const script = document.createElement('script');
script.type = 'module';
script.src = url;
document.head.appendChild(script);
});
}
 
function gd_open_write_layer(bdId, goodsNo, sno) {
$.ajax({
method: "GET",
}).success(function (data) {
writerLayer.show(data);
gd_center_layer();
loadAltchaModule();
}).error(function (e) {
alert(e.responseText);
});
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
 
var getData = function (id, target) {
id = id.toLowerCase();
switch (id) {
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
$.ajax({
method: "POST",
url: "../board/memo_ps.php",
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return true;
};
 
function loadAltchaModule() {
if (window.gdAltchaModuleLoaded) {
return;
}
const wrap = document.querySelector('.capcha_altcha[data-altcha-src]');
if (!wrap) {
return;
}
window.gdAltchaModuleLoaded = true;
const src = wrap.getAttribute('data-altcha-src');
[src, src.replace('altcha.js', 'i18n.js')].forEach(function (url) {
const script = document.createElement('script');
script.type = 'module';
script.src = url;
document.head.appendChild(script);
});
}
 
function gd_open_write_layer(bdId, goodsNo, sno) {
$.ajax({
method: "GET",
}).success(function (data) {
writerLayer.show(data);
gd_center_layer();
loadAltchaModule();
}).error(function (e) {
alert(e.responseText);
});
 
data/skin/front/mygreek/js/gd_board_view.js+74-2
변경 전gd_board_view.js
*/
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$('img.js_smart_img').each(function () {
$(this).css('max-width', '100%');
});
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
writerPw: commentFormAction.password.val(),
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val()
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
*/
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$('img.js_smart_img').each(function () {
$(this).css('max-width', '100%');
});
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
writerPw: commentFormAction.password.val(),
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val()
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
 
변경 후gd_board_view.js
*/
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
$('img.js_smart_img').each(function () {
$(this).css('max-width', '100%');
});
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
writerPw: commentFormAction.password.val(),
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
*/
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
$('img.js_smart_img').each(function () {
$(this).css('max-width', '100%');
});
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
writerPw: commentFormAction.password.val(),
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
 
data/skin/front/mygreek/js/gd_board_write.js+12-54
변경 전gd_board_write.js
if ($('.file_upload_sec').length > 10) {
$('.file_upload_sec:last').remove();
}
$.validator.addMethod("checkCaptcha", function (value, element, fl) {
var success = false;
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'captcha', 'captchaKey': value },
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
if (result == 'true') {
success = true;
}
}).error(function (e) {
alert(e.responseText);
});
 
return success;
}, __("자동등록방지 문자가 틀렸습니다."));
 
$("#frmWrite").validate({
 
submitHandler: function (form) {
if (boardSuubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
 
 
 
 
 
if($(form).find('[name="uploadType"]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
writerNm: 'required',
writerPw: 'required',
subject: 'required',
captchaKey: {
required: true,
checkCaptcha : true,
},
goodsPt: 'required',
writerEmail: {
required: true,
private: {
required: __('개인정보 수집 및 이용동의를 체크해주세요.')
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.'),
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
if ($('.file_upload_sec').length > 10) {
$('.file_upload_sec:last').remove();
}
$.validator.addMethod("checkCaptcha", function (value, element, fl) {
var success = false;
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'captcha', 'captchaKey': value },
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
if (result == 'true') {
success = true;
}
}).error(function (e) {
alert(e.responseText);
});
 
return success;
}, __("자동등록방지 문자가 틀렸습니다."));
 
$("#frmWrite").validate({
 
submitHandler: function (form) {
if (boardSuubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
 
 
 
 
 
if($(form).find('[name="uploadType"]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
writerNm: 'required',
writerPw: 'required',
subject: 'required',
captchaKey: {
required: true,
checkCaptcha : true,
},
goodsPt: 'required',
writerEmail: {
required: true,
private: {
required: __('개인정보 수집 및 이용동의를 체크해주세요.')
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.'),
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
 
변경 후gd_board_write.js
if ($('.file_upload_sec').length > 10) {
$('.file_upload_sec:last').remove();
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$("#frmWrite").validate({
ignore: 'altcha-widget *',
submitHandler: function (form) {
if (boardSuubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
if($(form).find('[name="uploadType"]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
writerNm: 'required',
writerPw: 'required',
subject: 'required',
 
 
 
 
goodsPt: 'required',
writerEmail: {
required: true,
private: {
required: __('개인정보 수집 및 이용동의를 체크해주세요.')
},
 
 
 
goodsPt: {
required: __('평가를 체크해주세요.')
},
if ($('.file_upload_sec').length > 10) {
$('.file_upload_sec:last').remove();
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$("#frmWrite").validate({
ignore: 'altcha-widget *',
submitHandler: function (form) {
if (boardSuubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
if($(form).find('[name="uploadType"]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
writerNm: 'required',
writerPw: 'required',
subject: 'required',
 
 
 
 
goodsPt: 'required',
writerEmail: {
required: true,
private: {
required: __('개인정보 수집 및 이용동의를 체크해주세요.')
},
 
 
 
goodsPt: {
required: __('평가를 체크해주세요.')
},
 
data/skin/front/mygreek/js/gd_common.js+46
변경 전gd_common.js
/**
* 프레임 리사이즈
*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function gd_resize_frame(obj) {
var iframeHeight = (obj).contentWindow.document.body.clientHeight;
(obj).height = iframeHeight + 80;
 
변경 후gd_common.js
/**
* 프레임 리사이즈
*/
/* iframe(mypage 등)으로 board 목록이 실릴 때, onload 1회 측정(resize_frame/gd_resize_frame) 이후에도
댓글/답글 폼 토글, ALTCHA 위젯 지연 렌더, 댓글 등록/삭제 등으로 내용 높이가 바뀌면
부모 iframe 높이를 다시 맞춘다. body 높이가 실제로 변했을 때만 호출해 재측정 루프를 방지. */
(function () {
let parentResize;
try {
if (window.parent === window) {
return; // 최상위 문서 → 대상 아님
}
parentResize = window.parent.gd_resize_frame || window.parent.resize_frame;
} catch (e) {
return; // cross-origin 부모 → 접근 불가, 대상 아님
}
if (typeof parentResize !== 'function' || typeof window.ResizeObserver === 'undefined') {
return;
}
const startObserve = function () {
const frameEl = window.frameElement
|| (window.name ? window.parent.document.getElementsByName(window.name)[0] : null);
if (!frameEl || !document.body) {
return;
}
let timer = null;
let lastHeight = -1;
const observer = new ResizeObserver(function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function () {
const height = document.body.clientHeight;
if (height === lastHeight) {
return; // 실제 콘텐츠 높이 변화 없음 → 재측정 루프 방지
}
lastHeight = height;
parentResize.call(window.parent, frameEl);
}, 100);
});
observer.observe(document.body);
};
if (document.body) {
startObserve();
} else {
document.addEventListener('DOMContentLoaded', startObserve);
}
})();
 
function gd_resize_frame(obj) {
var iframeHeight = (obj).contentWindow.document.body.clientHeight;
(obj).height = iframeHeight + 80;
 
data/skin/front/mygreek/js/gd_member2.js+12-14
변경 전gd_member2.js
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore",
focusCleanup: true,
rules: {
email: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
},
captchaKey: {
required: true
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.'),
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
 
if (validate.form()) {
 
 
 
 
 
$('.js_btn_join').attr("disabled", true);
form.submit();
} else {
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore",
focusCleanup: true,
rules: {
email: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
},
captchaKey: {
required: true
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.'),
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
 
if (validate.form()) {
 
 
 
 
 
$('.js_btn_join').attr("disabled", true);
form.submit();
} else {
 
변경 후gd_member2.js
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore, altcha-widget *",
focusCleanup: true,
rules: {
email: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
 
 
 
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
 
 
 
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
 
if (validate.form()) {
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return;
}
$('.js_btn_join').attr("disabled", true);
form.submit();
} else {
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore, altcha-widget *",
focusCleanup: true,
rules: {
email: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
 
 
 
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
 
 
 
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
 
if (validate.form()) {
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return;
}
$('.js_btn_join').attr("disabled", true);
form.submit();
} else {
 
data/skin/front/mygreek/member/join.html+4-20
변경 전join.html
<!-- //join_base_wrap -->
</div>
<!-- //content_box -->
 
 
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
<!--{? joinField.captcha.use == 'y'}-->
$('#reload_captcha').click(function (e) {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../member/captcha.php?ch=' + someDate);
}, 1);
}).trigger('click');
<!--{/}-->
 
gd_select_email_domain('email');
 
<!-- //join_base_wrap -->
</div>
<!-- //content_box -->
 
 
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
<!--{? joinField.captcha.use == 'y'}-->
$('#reload_captcha').click(function (e) {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../member/captcha.php?ch=' + someDate);
}, 1);
}).trigger('click');
<!--{/}-->
 
gd_select_email_domain('email');
 
 
변경 후join.html
<!-- //join_base_wrap -->
</div>
<!-- //content_box -->
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
 
 
 
 
 
 
 
 
 
 
 
gd_select_email_domain('email');
 
<!-- //join_base_wrap -->
</div>
<!-- //content_box -->
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
 
 
 
 
 
 
 
 
 
 
 
gd_select_email_domain('email');
 
 
data/skin/front/mygreek/member/_join_view_captcha.html+2-28
변경 전_join_view_captcha.html
<th><span>{=__('자동등록방지')}</span></th>
<td>
<div class="member_warning">
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" id="reload_captcha">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
</td>
</tr>
<th><span>{=__('자동등록방지')}</span></th>
<td>
<div class="member_warning">
<div class="capcha">
<div class="capcha_img">
<img src="./captcha.php" align="absmiddle" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/>
</div>
<div class="capcha_txt">
<p>{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
<input type="text" class="text captcha" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}"/>
<span class="btn_gray_list">
<button type="button" class="btn_gray_small" id="reload_captcha">
<span><img src="../img/etc/icon_reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</span>
</button>
</span>
</div>
</div>
</div>
</td>
</tr>
 
변경 후_join_view_captcha.html
<th><span>{=__('자동등록방지')}</span></th>
<td>
<div class="member_warning">
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
</td>
</tr>
<th><span>{=__('자동등록방지')}</span></th>
<td>
<div class="member_warning">
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
</td>
</tr>
 
data/skin/front/mygreek/share/_altcha.html+28
변경 전_altcha.html
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후_altcha.html
{*** [공통 위젯] 자동등록방지 ALTCHA | share/_altcha.html (Widget\Front\Share\AltchaWidget) ***}
{*** altchaChallenge : (필수) challenge 발급 스크립트 경로. 폼 위치에 따라 상대/절대 경로가 다르므로 호출부에서 지정 (mode 쿼리스트링은 위젯이 서버 사이드에서 부착) ***}
{*** altchaSrc : (옵션) 'y' 이면 data-altcha-src 부여 → AJAX 인라인 주입 폼(goods_board_write)에서 altcha.js 동적 로드 ***}
{*** altchaConfig : (옵션) altcha-widget configuration JSON 을 덮어씀. 미지정 시 {"hideLogo":true,"hideFooter":true} ***}
<div class="capcha capcha_altcha"<!--{? altchaSrc == 'y'}--> data-altcha-src="\{=c.PATH_SKIN}js/altcha/altcha.js"<!--{/}-->>
<altcha-widget
challenge="{=altchaChallenge}?mode={=altchaMode}"
name="altcha"
auto="off"
language="{=gGlobal.locale}"
configuration='<!--{? altchaConfig}-->{=altchaConfig}<!--{:}-->{"hideLogo":true,"hideFooter":true}<!--{/}-->'
type="native"
></altcha-widget>
</div>
{*** [공통 위젯] 자동등록방지 ALTCHA | share/_altcha.html (Widget\Front\Share\AltchaWidget) ***}
{*** altchaChallenge : (필수) challenge 발급 스크립트 경로. 폼 위치에 따라 상대/절대 경로가 다르므로 호출부에서 지정 (mode 쿼리스트링은 위젯이 서버 사이드에서 부착) ***}
{*** altchaSrc : (옵션) 'y' 이면 data-altcha-src 부여 → AJAX 인라인 주입 폼(goods_board_write)에서 altcha.js 동적 로드 ***}
{*** altchaConfig : (옵션) altcha-widget configuration JSON 을 덮어씀. 미지정 시 {"hideLogo":true,"hideFooter":true} ***}
<div class="capcha capcha_altcha"<!--{? altchaSrc == 'y'}--> data-altcha-src="\{=c.PATH_SKIN}js/altcha/altcha.js"<!--{/}-->>
<altcha-widget
challenge="{=altchaChallenge}?mode={=altchaMode}"
name="altcha"
auto="off"
language="{=gGlobal.locale}"
configuration='<!--{? altchaConfig}-->{=altchaConfig}<!--{:}-->{"hideLogo":true,"hideFooter":true}<!--{/}-->'
type="native"
></altcha-widget>
</div>
 
data/skin/front/story_g/board/popup_goods_board_write.html+6-36
변경 전popup_goods_board_write.html
<tr>
<th>{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php?ch={=time()}" align="absmiddle" id="captchaImg"/>
<!--<img src="../../img/etc/@capcha-img.png" alt="">-->
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="../img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
}
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<!--{ ? bdWrite.cfg.bdEditorFl == 'y'}-->
<script type="text/javascript">
var editorPath = '{=c.PATH_SKIN}js/smart';
<tr>
<th>{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php?ch={=time()}" align="absmiddle" id="captchaImg"/>
<!--<img src="../../img/etc/@capcha-img.png" alt="">-->
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="../img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
}
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<!--{ ? bdWrite.cfg.bdEditorFl == 'y'}-->
<script type="text/javascript">
var editorPath = '{=c.PATH_SKIN}js/smart';
 
변경 후popup_goods_board_write.html
<tr>
<th>{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
}
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!--{ ? bdWrite.cfg.bdEditorFl == 'y'}-->
<script type="text/javascript">
var editorPath = '{=c.PATH_SKIN}js/smart';
<tr>
<th>{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
}
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!--{ ? bdWrite.cfg.bdEditorFl == 'y'}-->
<script type="text/javascript">
var editorPath = '{=c.PATH_SKIN}js/smart';
 
data/skin/front/story_g/board/skin/default/view.html+12-64
변경 전view.html
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-write"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-write"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-write"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-write"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
data/skin/front/story_g/board/skin/default/write.html+6-34
변경 전write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
변경 후write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
data/skin/front/story_g/board/skin/event/view.html+12-64
변경 전view.html
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm comment-save js-comment-btn-write"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm comment-save js-comment-btn-write"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
 
변경 후view.html
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm comment-save js-comment-btn-write"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm comment-save js-comment-btn-write"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
 
data/skin/front/story_g/board/skin/event/write.html+6-36
변경 전write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
<!--<img src="../../img/etc/@capcha-img.png" alt="">-->
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
<!--<img src="../../img/etc/@capcha-img.png" alt="">-->
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
변경 후write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
data/skin/front/story_g/board/skin/gallery/view.html+12-64
변경 전view.html
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action comment-save"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="comment-save skinbtn base1 boardview-confirm js-comment-btn-write"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action comment-save"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="comment-save skinbtn base1 boardview-confirm js-comment-btn-write"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
 
변경 후view.html
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action comment-save"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="comment-save skinbtn base1 boardview-confirm js-comment-btn-write"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action comment-save"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="comment-save skinbtn base1 boardview-confirm js-comment-btn-write"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
 
data/skin/front/story_g/board/skin/gallery/write.html+6-34
변경 전write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
변경 후write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
data/skin/front/story_g/board/skin/qa/write.html+6-36
변경 전write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
<!--<img src="../../img/etc/@capcha-img.png" alt="">-->
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small2 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
<!--<img src="../../img/etc/@capcha-img.png" alt="">-->
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small2 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
변경 후write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
data/skin/front/story_g/board/template/default/write.html+6-34
변경 전write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
변경 후write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
data/skin/front/story_g/board/template/event/write.html+6-36
변경 전write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
<!--<img src="../../img/etc/@capcha-img.png" alt="">-->
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
<!--<img src="../../img/etc/@capcha-img.png" alt="">-->
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
변경 후write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
data/skin/front/story_g/board/template/gallery/write.html+6-34
변경 전write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
변경 후write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
data/skin/front/story_g/board/template/qa/write.html+6-36
변경 전write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
<!--<img src="../../img/etc/@capcha-img.png" alt="">-->
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small2 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
<!--<img src="../../img/etc/@capcha-img.png" alt="">-->
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small2 captchareload"><em><img
src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
변경 후write.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
select_email_domain('writerEmail');
</script>
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/template" class="template">
<div class="file-upload" style="margin-top:5px">
<label for="attach<%=idx%>"><input type="text" class="text" title="{=__('파일 첨부하기')}" readonly="readonly"/></label>
 
data/skin/front/story_g/css/gd_contents.css+8
변경 전gd_contents.css
float:left;
}
 
 
 
 
 
 
 
 
 
.board-view-comment .comment-wrap .text {
height:31px;
padding:0 10px;
 
변경 후gd_contents.css
float:left;
}
 
/* ALTCHA 위젯 래퍼는 float(위 .comment-write > div / 아래 .comment-reply > div)에서 제외.
로봇 확인 후 라벨이 '확인됨'으로 축소될 때 확인 버튼(float:right) 옆/아래로 파고들어
레이아웃이 틀어지는 문제 방지. clear:both 로 앞선 float 아래 새 줄에 고정한다. */
.comment-wrap .comment-write > div:has(.capcha_altcha),
.comment-wrap > ul > li .comment-reply > div:has(.capcha_altcha) {
clear:both;
}
 
.board-view-comment .comment-wrap .text {
height:31px;
padding:0 10px;
 
data/skin/front/story_g/css/gd_goods-view.css+10
변경 전gd_goods-view.css
cursor: text;
}
 
 
 
 
 
 
 
 
 
 
 
.review-board td .comment-wrap .text {
height: 31px;
padding: 0 10px;
 
변경 후gd_goods-view.css
cursor: text;
}
 
/* ALTCHA 위젯은 light DOM 이라 위 placeholder label 규칙이 위젯 내부 label 까지 잡음. 위젯 컨테이너 안 label 만 흐름 복원 (댓글쓰기/답글 공통). */
.review-board td .comment-wrap .comment-write .capcha_altcha label,
.review-board td .comment-wrap .comment-reply .capcha_altcha label {
position: static;
top: auto;
left: auto;
color: inherit;
cursor: pointer;
}
 
.review-board td .comment-wrap .text {
height: 31px;
padding: 0 10px;
 
data/skin/front/story_g/goods/goods_board_review_view.html+8-64
변경 전goods_board_review_view.html
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action goods-comment-save"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha" style="margin-top: 10px;">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="../img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<div class="comment-save-btn"><a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-write goods-comment-save"><em>{=__('확인')}</em></a></div>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha" style="margin-top: 10px">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="../img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action goods-comment-save"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha" style="margin-top: 10px;">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="../img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<div class="comment-save-btn"><a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-write goods-comment-save"><em>{=__('확인')}</em></a></div>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="capcha" style="margin-top: 10px">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px; padding-left: 0; padding-bottom: 5px; border: none;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload"><em><img
src="../img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
 
변경 후goods_board_review_view.html
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action goods-comment-save"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<div class="comment-save-btn"><a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-write goods-comment-save"><em>{=__('확인')}</em></a></div>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-action goods-comment-save"><em>{=__('확인')}</em></a>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
<!--{/}-->
<div class="comment-save-btn"><a href="javascript:void(0)" class="skinbtn base1 boardview-confirm js-comment-btn-write goods-comment-save"><em>{=__('확인')}</em></a></div>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{/}-->
<!--{ ? !gd_is_login() }-->
 
data/skin/front/story_g/goods/goods_board_write.html+2-36
변경 전goods_board_write.html
<tr>
<th>{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php?ch={=time()}" align="absmiddle" id="captchaImg"/>
<!--<img src="../../img/etc/@capcha-img.png" alt="">-->
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="../img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
<tr>
<th>{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php?ch={=time()}" align="absmiddle" id="captchaImg"/>
<!--<img src="../../img/etc/@capcha-img.png" alt="">-->
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5"
onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload"><em><img
src="../img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
<!--{/}-->
 
변경 후goods_board_write.html
<tr>
<th>{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php', 'altchaSrc', 'y')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
<tr>
<th>{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php', 'altchaSrc', 'y')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{/}-->
 
data/skin/front/story_g/goods/goods_view.html+4
변경 전goods_view.html
</div>
<!--//찜리스트 레이어 -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_goods.js" charset="utf-8"></script>
 
 
 
{=fbGoodsViewScript}
{ # footer }
</div>
<!--//찜리스트 레이어 -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_goods.js" charset="utf-8"></script>
 
 
 
{=fbGoodsViewScript}
{ # footer }
 
변경 후goods_view.html
</div>
<!--//찜리스트 레이어 -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_goods.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
{=fbGoodsViewScript}
{ # footer }
</div>
<!--//찜리스트 레이어 -->
<script type="text/javascript" src="\{=c.PATH_SKIN}js/gd_board_goods.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
 
{=fbGoodsViewScript}
{ # footer }
 
data/skin/front/story_g/js/altcha/altcha.js+3780
변경 전altcha.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후altcha.js
const DEV = false;
var is_array = Array.isArray;
var index_of = Array.prototype.indexOf;
var includes = Array.prototype.includes;
var array_from = Array.from;
var object_keys = Object.keys;
var define_property = Object.defineProperty;
var get_descriptor = Object.getOwnPropertyDescriptor;
var get_descriptors = Object.getOwnPropertyDescriptors;
var object_prototype = Object.prototype;
var array_prototype = Array.prototype;
var get_prototype_of = Object.getPrototypeOf;
var is_extensible = Object.isExtensible;
const noop = () => {
};
function run_all(arr) {
for (var i = 0; i < arr.length; i++) {
arr[i]();
}
}
function deferred() {
var resolve;
var reject;
var promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
return { promise, resolve, reject };
}
const DERIVED = 1 << 1;
const EFFECT = 1 << 2;
const RENDER_EFFECT = 1 << 3;
const MANAGED_EFFECT = 1 << 24;
const BLOCK_EFFECT = 1 << 4;
const BRANCH_EFFECT = 1 << 5;
const ROOT_EFFECT = 1 << 6;
const BOUNDARY_EFFECT = 1 << 7;
const CONNECTED = 1 << 9;
const CLEAN = 1 << 10;
const DIRTY = 1 << 11;
const MAYBE_DIRTY = 1 << 12;
const INERT = 1 << 13;
const DESTROYED = 1 << 14;
const REACTION_RAN = 1 << 15;
const DESTROYING = 1 << 25;
const EFFECT_TRANSPARENT = 1 << 16;
const EAGER_EFFECT = 1 << 17;
const HEAD_EFFECT = 1 << 18;
const EFFECT_PRESERVED = 1 << 19;
const USER_EFFECT = 1 << 20;
const WAS_MARKED = 1 << 16;
const REACTION_IS_UPDATING = 1 << 21;
const ASYNC = 1 << 22;
const ERROR_VALUE = 1 << 23;
const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state");
const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props");
const LOADING_ATTR_SYMBOL = /* @__PURE__ */ Symbol("");
const ATTRIBUTES_CACHE = /* @__PURE__ */ Symbol("attributes");
const CLASS_CACHE = /* @__PURE__ */ Symbol("class");
const STYLE_CACHE = /* @__PURE__ */ Symbol("style");
const TEXT_CACHE = /* @__PURE__ */ Symbol("text");
const FORM_RESET_HANDLER = /* @__PURE__ */ Symbol("form reset");
const STALE_REACTION = new class StaleReactionError extends Error {
name = "StaleReactionError";
message = "The reaction that called `getAbortSignal()` was re-run or destroyed";
}();
const IS_XHTML = (
// We gotta write it like this because after downleveling the pure comment may end up in the wrong location
!!globalThis.document?.contentType && /* @__PURE__ */ globalThis.document.contentType.includes("xml")
);
const TEXT_NODE = 3;
const COMMENT_NODE = 8;
function equals(value) {
return value === this.v;
}
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function safe_equals(value) {
return !safe_not_equal(value, this.v);
}
function lifecycle_outside_component(name) {
{
throw new Error(`https://svelte.dev/e/lifecycle_outside_component`);
}
}
function async_derived_orphan() {
{
throw new Error(`https://svelte.dev/e/async_derived_orphan`);
}
}
function effect_in_teardown(rune) {
{
throw new Error(`https://svelte.dev/e/effect_in_teardown`);
}
}
function effect_in_unowned_derived() {
{
throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`);
}
}
function effect_orphan(rune) {
{
throw new Error(`https://svelte.dev/e/effect_orphan`);
}
}
function effect_update_depth_exceeded() {
{
throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);
}
}
function hydration_failed() {
{
throw new Error(`https://svelte.dev/e/hydration_failed`);
}
}
function state_descriptors_fixed() {
{
throw new Error(`https://svelte.dev/e/state_descriptors_fixed`);
}
}
function state_prototype_fixed() {
{
throw new Error(`https://svelte.dev/e/state_prototype_fixed`);
}
}
function state_unsafe_mutation() {
{
throw new Error(`https://svelte.dev/e/state_unsafe_mutation`);
}
}
function svelte_boundary_reset_onerror() {
{
throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);
}
}
let tracing_mode_flag = false;
const TEMPLATE_FRAGMENT = 1;
const TEMPLATE_USE_IMPORT_NODE = 1 << 1;
const HYDRATION_START = "[";
const HYDRATION_START_ELSE = "[!";
const HYDRATION_START_FAILED = "[?";
const HYDRATION_END = "]";
const HYDRATION_ERROR = {};
const UNINITIALIZED = /* @__PURE__ */ Symbol("uninitialized");
const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml";
const NAMESPACE_SVG = "http://www.w3.org/2000/svg";
const NAMESPACE_MATHML = "http://www.w3.org/1998/Math/MathML";
const ATTACHMENT_KEY = "@attach";
let component_context = null;
function set_component_context(context) {
component_context = context;
}
function push(props, runes = false, fn) {
component_context = {
p: component_context,
i: false,
c: null,
e: null,
s: props,
x: null,
r: (
/** @type {Effect} */
active_effect
),
l: null
};
}
function pop(component2) {
var context = (
/** @type {ComponentContext} */
component_context
);
var effects = context.e;
if (effects !== null) {
context.e = null;
for (var fn of effects) {
create_user_effect(fn);
}
}
if (component2 !== void 0) {
context.x = component2;
}
context.i = true;
component_context = context.p;
return component2 ?? /** @type {T} */
{};
}
function is_runes() {
return true;
}
let micro_tasks = [];
function run_micro_tasks() {
var tasks = micro_tasks;
micro_tasks = [];
run_all(tasks);
}
function queue_micro_task(fn) {
if (micro_tasks.length === 0 && !is_flushing_sync) {
var tasks = micro_tasks;
queueMicrotask(() => {
if (tasks === micro_tasks) run_micro_tasks();
});
}
micro_tasks.push(fn);
}
function flush_tasks() {
while (micro_tasks.length > 0) {
run_micro_tasks();
}
}
function derived_inert() {
{
console.warn(`https://svelte.dev/e/derived_inert`);
}
}
function hydration_mismatch(location2) {
{
console.warn(`https://svelte.dev/e/hydration_mismatch`);
}
}
function select_multiple_invalid_value() {
{
console.warn(`https://svelte.dev/e/select_multiple_invalid_value`);
}
}
function svelte_boundary_reset_noop() {
{
console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);
}
}
let hydrating = false;
function set_hydrating(value) {
hydrating = value;
}
let hydrate_node;
function set_hydrate_node(node) {
if (node === null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return hydrate_node = node;
}
function hydrate_next() {
return set_hydrate_node(/* @__PURE__ */ get_next_sibling(hydrate_node));
}
function reset(node) {
if (!hydrating) return;
if (/* @__PURE__ */ get_next_sibling(hydrate_node) !== null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
hydrate_node = node;
}
function next(count = 1) {
if (hydrating) {
var i = count;
var node = hydrate_node;
while (i--) {
node = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(node);
}
hydrate_node = node;
}
}
function skip_nodes(remove = true) {
var depth = 0;
var node = hydrate_node;
while (true) {
if (node.nodeType === COMMENT_NODE) {
var data = (
/** @type {Comment} */
node.data
);
if (data === HYDRATION_END) {
if (depth === 0) return node;
depth -= 1;
} else if (data === HYDRATION_START || data === HYDRATION_START_ELSE || // "[1", "[2", etc. for if blocks
data[0] === "[" && !isNaN(Number(data.slice(1)))) {
depth += 1;
}
}
var next2 = (
/** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(node)
);
if (remove) node.remove();
node = next2;
}
}
function read_hydration_instruction(node) {
if (!node || node.nodeType !== COMMENT_NODE) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return (
/** @type {Comment} */
node.data
);
}
function proxy(value) {
if (typeof value !== "object" || value === null || STATE_SYMBOL in value) {
return value;
}
const prototype = get_prototype_of(value);
if (prototype !== object_prototype && prototype !== array_prototype) {
return value;
}
var sources = /* @__PURE__ */ new Map();
var is_proxied_array = is_array(value);
var version = /* @__PURE__ */ state(0);
var parent_version = update_version;
var with_parent = (fn) => {
if (update_version === parent_version) {
return fn();
}
var reaction = active_reaction;
var version2 = update_version;
set_active_reaction(null);
set_update_version(parent_version);
var result = fn();
set_active_reaction(reaction);
set_update_version(version2);
return result;
};
if (is_proxied_array) {
sources.set("length", /* @__PURE__ */ state(
/** @type {any[]} */
value.length
));
}
return new Proxy(
/** @type {any} */
value,
{
defineProperty(_, prop2, descriptor) {
if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) {
state_descriptors_fixed();
}
var s = sources.get(prop2);
if (s === void 0) {
with_parent(() => {
var s2 = /* @__PURE__ */ state(descriptor.value);
sources.set(prop2, s2);
return s2;
});
} else {
set(s, descriptor.value, true);
}
return true;
},
deleteProperty(target, prop2) {
var s = sources.get(prop2);
if (s === void 0) {
if (prop2 in target) {
const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
sources.set(prop2, s2);
increment(version);
}
} else {
set(s, UNINITIALIZED);
increment(version);
}
return true;
},
get(target, prop2, receiver) {
if (prop2 === STATE_SYMBOL) {
return value;
}
var s = sources.get(prop2);
var exists = prop2 in target;
if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) {
s = with_parent(() => {
var p = proxy(exists ? target[prop2] : UNINITIALIZED);
var s2 = /* @__PURE__ */ state(p);
return s2;
});
sources.set(prop2, s);
}
if (s !== void 0) {
var v = get(s);
return v === UNINITIALIZED ? void 0 : v;
}
return Reflect.get(target, prop2, receiver);
},
getOwnPropertyDescriptor(target, prop2) {
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor && "value" in descriptor) {
var s = sources.get(prop2);
if (s) descriptor.value = get(s);
} else if (descriptor === void 0) {
var source2 = sources.get(prop2);
var value2 = source2?.v;
if (source2 !== void 0 && value2 !== UNINITIALIZED) {
return {
enumerable: true,
configurable: true,
value: value2,
writable: true
};
}
}
return descriptor;
},
has(target, prop2) {
if (prop2 === STATE_SYMBOL) {
return true;
}
var s = sources.get(prop2);
var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2);
if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) {
if (s === void 0) {
s = with_parent(() => {
var p = has ? proxy(target[prop2]) : UNINITIALIZED;
var s2 = /* @__PURE__ */ state(p);
return s2;
});
sources.set(prop2, s);
}
var value2 = get(s);
if (value2 === UNINITIALIZED) {
return false;
}
}
return has;
},
set(target, prop2, value2, receiver) {
var s = sources.get(prop2);
var has = prop2 in target;
if (is_proxied_array && prop2 === "length") {
for (var i = value2; i < /** @type {Source<number>} */
s.v; i += 1) {
var other_s = sources.get(i + "");
if (other_s !== void 0) {
set(other_s, UNINITIALIZED);
} else if (i in target) {
other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
sources.set(i + "", other_s);
}
}
}
if (s === void 0) {
if (!has || get_descriptor(target, prop2)?.writable) {
s = with_parent(() => /* @__PURE__ */ state(void 0));
set(s, proxy(value2));
sources.set(prop2, s);
}
} else {
has = s.v !== UNINITIALIZED;
var p = with_parent(() => proxy(value2));
set(s, p);
}
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor?.set) {
descriptor.set.call(receiver, value2);
}
if (!has) {
if (is_proxied_array && typeof prop2 === "string") {
var ls = (
/** @type {Source<number>} */
sources.get("length")
);
var n = Number(prop2);
if (Number.isInteger(n) && n >= ls.v) {
set(ls, n + 1);
}
}
increment(version);
}
return true;
},
ownKeys(target) {
get(version);
var own_keys = Reflect.ownKeys(target).filter((key3) => {
var source3 = sources.get(key3);
return source3 === void 0 || source3.v !== UNINITIALIZED;
});
for (var [key2, source2] of sources) {
if (source2.v !== UNINITIALIZED && !(key2 in target)) {
own_keys.push(key2);
}
}
return own_keys;
},
setPrototypeOf() {
state_prototype_fixed();
}
}
);
}
function get_proxied_value(value) {
try {
if (value !== null && typeof value === "object" && STATE_SYMBOL in value) {
return value[STATE_SYMBOL];
}
} catch {
}
return value;
}
function is(a, b) {
return Object.is(get_proxied_value(a), get_proxied_value(b));
}
var $window;
var $document;
var is_firefox;
var first_child_getter;
var next_sibling_getter;
function init_operations() {
if ($window !== void 0) {
return;
}
$window = window;
$document = document;
is_firefox = /Firefox/.test(navigator.userAgent);
var element_prototype = Element.prototype;
var node_prototype = Node.prototype;
var text_prototype = Text.prototype;
first_child_getter = get_descriptor(node_prototype, "firstChild").get;
next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get;
if (is_extensible(element_prototype)) {
element_prototype[CLASS_CACHE] = void 0;
element_prototype[ATTRIBUTES_CACHE] = null;
element_prototype[STYLE_CACHE] = void 0;
element_prototype.__e = void 0;
}
if (is_extensible(text_prototype)) {
text_prototype[TEXT_CACHE] = void 0;
}
}
function create_text(value = "") {
return document.createTextNode(value);
}
// @__NO_SIDE_EFFECTS__
function get_first_child(node) {
return (
/** @type {TemplateNode | null} */
first_child_getter.call(node)
);
}
// @__NO_SIDE_EFFECTS__
function get_next_sibling(node) {
return (
/** @type {TemplateNode | null} */
next_sibling_getter.call(node)
);
}
function child(node, is_text) {
if (!hydrating) {
return /* @__PURE__ */ get_first_child(node);
}
var child2 = /* @__PURE__ */ get_first_child(hydrate_node);
if (child2 === null) {
child2 = hydrate_node.appendChild(create_text());
} else if (is_text && child2.nodeType !== TEXT_NODE) {
var text2 = create_text();
child2?.before(text2);
set_hydrate_node(text2);
return text2;
}
if (is_text) {
merge_text_nodes(
/** @type {Text} */
child2
);
}
set_hydrate_node(child2);
return child2;
}
function first_child(node, is_text = false) {
if (!hydrating) {
var first = /* @__PURE__ */ get_first_child(node);
if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first);
return first;
}
if (is_text) {
if (hydrate_node?.nodeType !== TEXT_NODE) {
var text2 = create_text();
hydrate_node?.before(text2);
set_hydrate_node(text2);
return text2;
}
merge_text_nodes(
/** @type {Text} */
hydrate_node
);
}
return hydrate_node;
}
function sibling(node, count = 1, is_text = false) {
let next_sibling = hydrating ? hydrate_node : node;
var last_sibling;
while (count--) {
last_sibling = next_sibling;
next_sibling = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(next_sibling);
}
if (!hydrating) {
return next_sibling;
}
if (is_text) {
if (next_sibling?.nodeType !== TEXT_NODE) {
var text2 = create_text();
if (next_sibling === null) {
last_sibling?.after(text2);
} else {
next_sibling.before(text2);
}
set_hydrate_node(text2);
return text2;
}
merge_text_nodes(
/** @type {Text} */
next_sibling
);
}
set_hydrate_node(next_sibling);
return next_sibling;
}
function clear_text_content(node) {
node.textContent = "";
}
function should_defer_append() {
return false;
}
function create_element(tag, namespace, is2) {
let options = void 0;
return (
/** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */
document.createElementNS(namespace ?? NAMESPACE_HTML, tag, options)
);
}
function merge_text_nodes(text2) {
if (
/** @type {string} */
text2.nodeValue.length < 65536
) {
return;
}
let next2 = text2.nextSibling;
while (next2 !== null && next2.nodeType === TEXT_NODE) {
next2.remove();
text2.nodeValue += /** @type {string} */
next2.nodeValue;
next2 = text2.nextSibling;
}
}
function handle_error(error) {
var effect2 = active_effect;
if (effect2 === null) {
active_reaction.f |= ERROR_VALUE;
return error;
}
if ((effect2.f & REACTION_RAN) === 0 && (effect2.f & EFFECT) === 0) {
throw error;
}
invoke_error_boundary(error, effect2);
}
function invoke_error_boundary(error, effect2) {
while (effect2 !== null) {
if ((effect2.f & BOUNDARY_EFFECT) !== 0) {
if ((effect2.f & REACTION_RAN) === 0) {
throw error;
}
try {
effect2.b.error(error);
return;
} catch (e) {
error = e;
}
}
effect2 = effect2.parent;
}
throw error;
}
const STATUS_MASK = -7169;
function set_signal_status(signal, status) {
signal.f = signal.f & STATUS_MASK | status;
}
function update_derived_status(derived2) {
if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) {
set_signal_status(derived2, CLEAN);
} else {
set_signal_status(derived2, MAYBE_DIRTY);
}
}
function clear_marked(deps) {
if (deps === null) return;
for (const dep of deps) {
if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {
continue;
}
dep.f ^= WAS_MARKED;
clear_marked(
/** @type {Derived} */
dep.deps
);
}
}
function defer_effect(effect2, dirty_effects, maybe_dirty_effects) {
if ((effect2.f & DIRTY) !== 0) {
dirty_effects.add(effect2);
} else if ((effect2.f & MAYBE_DIRTY) !== 0) {
maybe_dirty_effects.add(effect2);
}
clear_marked(effect2.deps);
set_signal_status(effect2, CLEAN);
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set2(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set2(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set2, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set: set2, update, subscribe };
}
function get$1(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let IS_UNMOUNTED = /* @__PURE__ */ Symbol("unmounted");
function store_get(store2, store_name, stores) {
const entry = stores[store_name] ??= {
store: null,
source: /* @__PURE__ */ mutable_source(void 0),
unsubscribe: noop
};
if (entry.store !== store2 && !(IS_UNMOUNTED in stores)) {
entry.unsubscribe();
entry.store = store2 ?? null;
if (store2 == null) {
entry.source.v = void 0;
entry.unsubscribe = noop;
} else {
var is_synchronous_callback = true;
entry.unsubscribe = subscribe_to_store(store2, (v) => {
if (is_synchronous_callback) {
entry.source.v = v;
} else {
set(entry.source, v);
}
});
is_synchronous_callback = false;
}
}
if (store2 && IS_UNMOUNTED in stores) {
return get$1(store2);
}
return get(entry.source);
}
function setup_stores() {
const stores = {};
function cleanup() {
teardown(() => {
for (var store_name in stores) {
const ref = stores[store_name];
ref.unsubscribe();
}
define_property(stores, IS_UNMOUNTED, {
enumerable: false,
value: true
});
});
}
return [stores, cleanup];
}
let first_batch = null;
let last_batch = null;
let current_batch = null;
let previous_batch = null;
let batch_values = null;
let last_scheduled_effect = null;
let is_flushing_sync = false;
let is_processing = false;
let collected_effects = null;
let legacy_updates = null;
var flush_count = 0;
var source_stacks = /* @__PURE__ */ new Set();
let uid = 1;
class Batch {
id = uid++;
/** True as soon as `#process` was called */
#started = false;
linked = true;
/** @type {Batch | null} */
#prev = null;
/** @type {Batch | null} */
#next = null;
/** @type {Map<Effect, ReturnType<typeof deferred<any>>>} */
async_deriveds = /* @__PURE__ */ new Map();
/**
* The current values of any signals that are updated in this batch.
* Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)
* They keys of this map are identical to `this.#previous`
* @type {Map<Value, [any, boolean]>}
*/
current = /* @__PURE__ */ new Map();
/**
* The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place.
* They keys of this map are identical to `this.#current`
* @type {Map<Value, any>}
*/
previous = /* @__PURE__ */ new Map();
/**
* Async effects which this batch doesn't take into account anymore when calculating blockers,
* as it has a value for it already.
* @type {Set<Effect>}
*/
unblocked = /* @__PURE__ */ new Set();
/**
* When the batch is committed (and the DOM is updated), we need to remove old branches
* and append new ones by calling the functions added inside (if/each/key/etc) blocks
* @type {Set<(batch: Batch) => void>}
*/
#commit_callbacks = /* @__PURE__ */ new Set();
/**
* If a fork is discarded, we need to destroy any effects that are no longer needed
* @type {Set<(batch: Batch) => void>}
*/
#discard_callbacks = /* @__PURE__ */ new Set();
/**
* Callbacks that should run only when a fork is committed.
* @type {Set<(batch: Batch) => void>}
*/
#fork_commit_callbacks = /* @__PURE__ */ new Set();
/**
* The number of async effects that are currently in flight
*/
#pending = 0;
/**
* Async effects that are currently in flight, _not_ inside a pending boundary
* @type {Map<Effect, number>}
*/
#blocking_pending = /* @__PURE__ */ new Map();
/**
* A deferred that resolves when the batch is committed, used with `settled()`
* TODO replace with Promise.withResolvers once supported widely enough
* @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}
*/
#deferred = null;
/**
* The root effects that need to be flushed
* @type {Effect[]}
*/
#roots = [];
/**
* Effects created while this batch was active.
* @type {Effect[]}
*/
#new_effects = [];
/**
* Deferred effects (which run after async work has completed) that are DIRTY
* @type {Set<Effect>}
*/
#dirty_effects = /* @__PURE__ */ new Set();
/**
* Deferred effects that are MAYBE_DIRTY
* @type {Set<Effect>}
*/
#maybe_dirty_effects = /* @__PURE__ */ new Set();
/**
* A map of branches that still exist, but will be destroyed when this batch
* is committed — we skip over these during `process`.
* The value contains child effects that were dirty/maybe_dirty before being reset,
* so they can be rescheduled if the branch survives.
* @type {Map<Effect, { d: Effect[], m: Effect[] }>}
*/
#skipped_branches = /* @__PURE__ */ new Map();
/**
* Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing
* @type {Set<Effect>}
*/
#unskipped_branches = /* @__PURE__ */ new Set();
is_fork = false;
#decrement_queued = false;
#is_deferred() {
if (this.is_fork) return true;
for (const effect2 of this.#blocking_pending.keys()) {
var e = effect2;
var skipped = false;
while (e.parent !== null) {
if (this.#skipped_branches.has(e)) {
skipped = true;
break;
}
e = e.parent;
}
if (!skipped) {
return true;
}
}
return false;
}
/**
* Add an effect to the #skipped_branches map and reset its children
* @param {Effect} effect
*/
skip_effect(effect2) {
if (!this.#skipped_branches.has(effect2)) {
this.#skipped_branches.set(effect2, { d: [], m: [] });
}
this.#unskipped_branches.delete(effect2);
}
/**
* Remove an effect from the #skipped_branches map and reschedule
* any tracked dirty/maybe_dirty child effects
* @param {Effect} effect
* @param {(e: Effect) => void} callback
*/
unskip_effect(effect2, callback = (e) => this.schedule(e)) {
var tracked = this.#skipped_branches.get(effect2);
if (tracked) {
this.#skipped_branches.delete(effect2);
for (var e of tracked.d) {
set_signal_status(e, DIRTY);
callback(e);
}
for (e of tracked.m) {
set_signal_status(e, MAYBE_DIRTY);
callback(e);
}
}
this.#unskipped_branches.add(effect2);
}
#process() {
this.#started = true;
if (flush_count++ > 1e3) {
this.#unlink();
infinite_loop_guard();
}
if (!this.#is_deferred()) {
for (const e of this.#dirty_effects) {
this.#maybe_dirty_effects.delete(e);
set_signal_status(e, DIRTY);
this.schedule(e);
}
for (const e of this.#maybe_dirty_effects) {
set_signal_status(e, MAYBE_DIRTY);
this.schedule(e);
}
}
const roots = this.#roots;
this.#roots = [];
this.apply();
var effects = collected_effects = [];
var render_effects = [];
var updates = legacy_updates = [];
for (const root2 of roots) {
try {
this.#traverse(root2, effects, render_effects);
} catch (e) {
reset_all(root2);
throw e;
}
}
current_batch = null;
if (updates.length > 0) {
var batch = Batch.ensure();
for (const e of updates) {
batch.schedule(e);
}
}
collected_effects = null;
legacy_updates = null;
if (this.#is_deferred()) {
this.#defer_effects(render_effects);
this.#defer_effects(effects);
for (const [e, t] of this.#skipped_branches) {
reset_branch(e, t);
}
if (updates.length > 0) {
/** @type {unknown} */
current_batch.#process();
}
return;
}
const earlier_batch = this.#find_earlier_batch();
if (earlier_batch) {
earlier_batch.#merge(this);
return;
}
this.#dirty_effects.clear();
this.#maybe_dirty_effects.clear();
for (const fn of this.#commit_callbacks) fn(this);
this.#commit_callbacks.clear();
previous_batch = this;
flush_queued_effects(render_effects);
flush_queued_effects(effects);
previous_batch = null;
this.#deferred?.resolve();
var next_batch = (
/** @type {Batch | null} */
/** @type {unknown} */
current_batch
);
if (this.linked && this.#pending === 0) {
this.#unlink();
}
if (this.#roots.length > 0) {
if (next_batch === null) {
next_batch = this;
this.#link();
}
const batch2 = next_batch;
batch2.#roots.push(...this.#roots.filter((r2) => !batch2.#roots.includes(r2)));
}
if (next_batch !== null) {
next_batch.#process();
}
}
/**
* Traverse the effect tree, executing effects or stashing
* them for later execution as appropriate
* @param {Effect} root
* @param {Effect[]} effects
* @param {Effect[]} render_effects
*/
#traverse(root2, effects, render_effects) {
root2.f ^= CLEAN;
var effect2 = root2.first;
while (effect2 !== null) {
var flags2 = effect2.f;
var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;
var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0;
var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.#skipped_branches.has(effect2);
if (!skip && effect2.fn !== null) {
if (is_branch) {
effect2.f ^= CLEAN;
} else if ((flags2 & EFFECT) !== 0) {
effects.push(effect2);
} else if (is_dirty(effect2)) {
if ((flags2 & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect2);
update_effect(effect2);
}
var child2 = effect2.first;
if (child2 !== null) {
effect2 = child2;
continue;
}
}
while (effect2 !== null) {
var next2 = effect2.next;
if (next2 !== null) {
effect2 = next2;
break;
}
effect2 = effect2.parent;
}
}
}
#find_earlier_batch() {
var batch = this.#prev;
while (batch !== null) {
if (!batch.is_fork) {
for (const [value, [, is_derived]] of this.current) {
if (batch.current.has(value) && !is_derived) {
return batch;
}
}
}
batch = batch.#prev;
}
return null;
}
/**
* @param {Batch} batch
*/
#merge(batch) {
for (const [source2, value] of batch.current) {
if (!this.previous.has(source2) && batch.previous.has(source2)) {
this.previous.set(source2, batch.previous.get(source2));
}
this.current.set(source2, value);
}
for (const [effect2, deferred2] of batch.async_deriveds) {
const d = this.async_deriveds.get(effect2);
if (d) deferred2.promise.then(d.resolve);
}
const mark = (value) => {
var reactions = value.reactions;
if (reactions === null) return;
for (const reaction of reactions) {
var flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark(
/** @type {Derived} */
reaction
);
} else {
var effect2 = (
/** @type {Effect} */
reaction
);
if (flags2 & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect2)) {
this.#maybe_dirty_effects.delete(effect2);
set_signal_status(effect2, DIRTY);
this.schedule(effect2);
}
}
}
};
for (const source2 of this.current.keys()) {
mark(source2);
}
this.oncommit(() => batch.discard());
batch.#unlink();
current_batch = this;
this.#process();
}
/**
* @param {Effect[]} effects
*/
#defer_effects(effects) {
for (var i = 0; i < effects.length; i += 1) {
defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);
}
}
/**
* Associate a change to a given source with the current
* batch, noting its previous and current values
* @param {Value} source
* @param {any} value
* @param {boolean} [is_derived]
*/
capture(source2, value, is_derived = false) {
if (source2.v !== UNINITIALIZED && !this.previous.has(source2)) {
this.previous.set(source2, source2.v);
}
if ((source2.f & ERROR_VALUE) === 0) {
this.current.set(source2, [value, is_derived]);
batch_values?.set(source2, value);
}
if (!this.is_fork) {
source2.v = value;
}
}
activate() {
current_batch = this;
}
deactivate() {
current_batch = null;
batch_values = null;
}
flush() {
try {
if (DEV) ;
is_processing = true;
current_batch = this;
this.#process();
} finally {
flush_count = 0;
last_scheduled_effect = null;
collected_effects = null;
legacy_updates = null;
is_processing = false;
current_batch = null;
batch_values = null;
old_values.clear();
}
}
discard() {
for (const fn of this.#discard_callbacks) fn(this);
this.#discard_callbacks.clear();
this.#fork_commit_callbacks.clear();
this.#unlink();
}
/**
* @param {Effect} effect
*/
register_created_effect(effect2) {
this.#new_effects.push(effect2);
}
#commit() {
this.#unlink();
for (let batch = first_batch; batch !== null; batch = batch.#next) {
var is_earlier = batch.id < this.id;
var sources = [];
for (const [source3, [value, is_derived]] of this.current) {
if (batch.current.has(source3)) {
var batch_value = (
/** @type {[any, boolean]} */
batch.current.get(source3)[0]
);
if (is_earlier && value !== batch_value) {
batch.current.set(source3, [value, is_derived]);
} else {
continue;
}
}
sources.push(source3);
}
if (is_earlier) {
for (const [effect2, deferred2] of this.async_deriveds) {
const d = batch.async_deriveds.get(effect2);
if (d) deferred2.promise.then(d.resolve);
}
}
if (!batch.#started) continue;
var others = [...batch.current.keys()].filter((s) => !this.current.has(s));
if (others.length === 0) {
if (is_earlier) {
batch.discard();
}
} else if (sources.length > 0) {
if (is_earlier) {
for (const unskipped of this.#unskipped_branches) {
batch.unskip_effect(unskipped, (e) => {
if ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) {
batch.schedule(e);
} else {
batch.#defer_effects([e]);
}
});
}
}
batch.activate();
var marked = /* @__PURE__ */ new Set();
var checked = /* @__PURE__ */ new Map();
for (var source2 of sources) {
mark_effects(source2, others, marked, checked);
}
checked = /* @__PURE__ */ new Map();
var current_unequal = [...batch.current.keys()].filter(
(c) => this.current.has(c) ? (
/** @type {[any, boolean]} */
this.current.get(c)[0] !== c.v
) : true
);
if (current_unequal.length > 0) {
for (const effect2 of this.#new_effects) {
if ((effect2.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 && depends_on(effect2, current_unequal, checked)) {
if ((effect2.f & (ASYNC | BLOCK_EFFECT)) !== 0) {
set_signal_status(effect2, DIRTY);
batch.schedule(effect2);
} else {
batch.#dirty_effects.add(effect2);
}
}
}
}
if (batch.#roots.length > 0) {
batch.apply();
for (var root2 of batch.#roots) {
batch.#traverse(root2, [], []);
}
batch.#roots = [];
}
batch.deactivate();
}
}
}
/**
* @param {boolean} blocking
* @param {Effect} effect
*/
increment(blocking, effect2) {
this.#pending += 1;
if (blocking) {
let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0;
this.#blocking_pending.set(effect2, blocking_pending_count + 1);
}
}
/**
* @param {boolean} blocking
* @param {Effect} effect
*/
decrement(blocking, effect2) {
this.#pending -= 1;
if (blocking) {
let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0;
if (blocking_pending_count === 1) {
this.#blocking_pending.delete(effect2);
} else {
this.#blocking_pending.set(effect2, blocking_pending_count - 1);
}
}
if (this.#decrement_queued) return;
this.#decrement_queued = true;
queue_micro_task(() => {
this.#decrement_queued = false;
if (this.linked) {
this.flush();
}
});
}
/**
* @param {Set<Effect>} dirty_effects
* @param {Set<Effect>} maybe_dirty_effects
*/
transfer_effects(dirty_effects, maybe_dirty_effects) {
for (const e of dirty_effects) {
this.#dirty_effects.add(e);
}
for (const e of maybe_dirty_effects) {
this.#maybe_dirty_effects.add(e);
}
dirty_effects.clear();
maybe_dirty_effects.clear();
}
/** @param {(batch: Batch) => void} fn */
oncommit(fn) {
this.#commit_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
ondiscard(fn) {
this.#discard_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
on_fork_commit(fn) {
this.#fork_commit_callbacks.add(fn);
}
run_fork_commit_callbacks() {
for (const fn of this.#fork_commit_callbacks) fn(this);
this.#fork_commit_callbacks.clear();
}
settled() {
return (this.#deferred ??= deferred()).promise;
}
static ensure() {
if (current_batch === null) {
const batch = current_batch = new Batch();
batch.#link();
if (!is_processing && !is_flushing_sync) {
queue_micro_task(() => {
if (!batch.#started) {
batch.flush();
}
});
}
}
return current_batch;
}
apply() {
{
batch_values = null;
return;
}
}
/**
*
* @param {Effect} effect
*/
schedule(effect2) {
last_scheduled_effect = effect2;
if (effect2.b?.is_pending && (effect2.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect2.f & REACTION_RAN) === 0) {
effect2.b.defer_effect(effect2);
return;
}
var e = effect2;
while (e.parent !== null) {
e = e.parent;
var flags2 = e.f;
if (collected_effects !== null && e === active_effect) {
if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) {
return;
}
}
if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {
if ((flags2 & CLEAN) === 0) {
return;
}
e.f ^= CLEAN;
}
}
this.#roots.push(e);
}
#link() {
if (last_batch === null) {
first_batch = last_batch = this;
} else {
last_batch.#next = this;
this.#prev = last_batch;
}
last_batch = this;
}
#unlink() {
var prev = this.#prev;
var next2 = this.#next;
if (prev === null) {
first_batch = next2;
} else {
prev.#next = next2;
}
if (next2 === null) {
last_batch = prev;
} else {
next2.#prev = prev;
}
this.linked = false;
}
}
function flushSync(fn) {
var was_flushing_sync = is_flushing_sync;
is_flushing_sync = true;
try {
var result;
if (fn) ;
while (true) {
flush_tasks();
if (current_batch === null) {
return (
/** @type {T} */
result
);
}
current_batch.flush();
}
} finally {
is_flushing_sync = was_flushing_sync;
}
}
function infinite_loop_guard() {
try {
effect_update_depth_exceeded();
} catch (error) {
invoke_error_boundary(error, last_scheduled_effect);
}
}
let eager_block_effects = null;
function flush_queued_effects(effects) {
var length = effects.length;
if (length === 0) return;
var i = 0;
while (i < length) {
var effect2 = effects[i++];
if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) {
eager_block_effects = /* @__PURE__ */ new Set();
update_effect(effect2);
if (effect2.deps === null && effect2.first === null && effect2.nodes === null && effect2.teardown === null && effect2.ac === null) {
unlink_effect(effect2);
}
if (eager_block_effects?.size > 0) {
old_values.clear();
for (const e of eager_block_effects) {
if ((e.f & (DESTROYED | INERT)) !== 0) continue;
const ordered_effects = [e];
let ancestor = e.parent;
while (ancestor !== null) {
if (eager_block_effects.has(ancestor)) {
eager_block_effects.delete(ancestor);
ordered_effects.push(ancestor);
}
ancestor = ancestor.parent;
}
for (let j = ordered_effects.length - 1; j >= 0; j--) {
const e2 = ordered_effects[j];
if ((e2.f & (DESTROYED | INERT)) !== 0) continue;
update_effect(e2);
}
}
eager_block_effects.clear();
}
}
}
eager_block_effects = null;
}
function mark_effects(value, sources, marked, checked) {
if (marked.has(value)) return;
marked.add(value);
if (value.reactions !== null) {
for (const reaction of value.reactions) {
const flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark_effects(
/** @type {Derived} */
reaction,
sources,
marked,
checked
);
} else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) {
set_signal_status(reaction, DIRTY);
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
}
function depends_on(reaction, sources, checked) {
const depends = checked.get(reaction);
if (depends !== void 0) return depends;
if (reaction.deps !== null) {
for (const dep of reaction.deps) {
if (includes.call(sources, dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on(
/** @type {Derived} */
dep,
sources,
checked
)) {
checked.set(
/** @type {Derived} */
dep,
true
);
return true;
}
}
}
checked.set(reaction, false);
return false;
}
function schedule_effect(effect2) {
current_batch.schedule(effect2);
}
function reset_branch(effect2, tracked) {
if ((effect2.f & BRANCH_EFFECT) !== 0 && (effect2.f & CLEAN) !== 0) {
return;
}
if ((effect2.f & DIRTY) !== 0) {
tracked.d.push(effect2);
} else if ((effect2.f & MAYBE_DIRTY) !== 0) {
tracked.m.push(effect2);
}
set_signal_status(effect2, CLEAN);
var e = effect2.first;
while (e !== null) {
reset_branch(e, tracked);
e = e.next;
}
}
function reset_all(effect2) {
set_signal_status(effect2, CLEAN);
var e = effect2.first;
while (e !== null) {
reset_all(e);
e = e.next;
}
}
function createSubscriber(start) {
let subscribers = 0;
let version = source(0);
let stop;
return () => {
if (effect_tracking()) {
get(version);
render_effect(() => {
if (subscribers === 0) {
stop = untrack(() => start(() => increment(version)));
}
subscribers += 1;
return () => {
queue_micro_task(() => {
subscribers -= 1;
if (subscribers === 0) {
stop?.();
stop = void 0;
increment(version);
}
});
};
});
}
};
}
var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;
function boundary(node, props, children, transform_error) {
new Boundary(node, props, children, transform_error);
}
class Boundary {
/** @type {Boundary | null} */
parent;
is_pending = false;
/**
* API-level transformError transform function. Transforms errors before they reach the `failed` snippet.
* Inherited from parent boundary, or defaults to identity.
* @type {(error: unknown) => unknown}
*/
transform_error;
/** @type {TemplateNode} */
#anchor;
/** @type {TemplateNode | null} */
#hydrate_open = hydrating ? hydrate_node : null;
/** @type {BoundaryProps} */
#props;
/** @type {((anchor: Node) => void)} */
#children;
/** @type {Effect} */
#effect;
/** @type {Effect | null} */
#main_effect = null;
/** @type {Effect | null} */
#pending_effect = null;
/** @type {Effect | null} */
#failed_effect = null;
/** @type {DocumentFragment | null} */
#offscreen_fragment = null;
#local_pending_count = 0;
#pending_count = 0;
#pending_count_update_queued = false;
/** @type {Set<Effect>} */
#dirty_effects = /* @__PURE__ */ new Set();
/** @type {Set<Effect>} */
#maybe_dirty_effects = /* @__PURE__ */ new Set();
/**
* A source containing the number of pending async deriveds/expressions.
* Only created if `$effect.pending()` is used inside the boundary,
* otherwise updating the source results in needless `Batch.ensure()`
* calls followed by no-op flushes
* @type {Source<number> | null}
*/
#effect_pending = null;
#effect_pending_subscriber = createSubscriber(() => {
this.#effect_pending = source(this.#local_pending_count);
return () => {
this.#effect_pending = null;
};
});
/**
* @param {TemplateNode} node
* @param {BoundaryProps} props
* @param {((anchor: Node) => void)} children
* @param {((error: unknown) => unknown) | undefined} [transform_error]
*/
constructor(node, props, children, transform_error) {
this.#anchor = node;
this.#props = props;
this.#children = (anchor) => {
var effect2 = (
/** @type {Effect} */
active_effect
);
effect2.b = this;
effect2.f |= BOUNDARY_EFFECT;
children(anchor);
};
this.parent = /** @type {Effect} */
active_effect.b;
this.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e);
this.#effect = block(() => {
if (hydrating) {
const comment2 = (
/** @type {Comment} */
this.#hydrate_open
);
hydrate_next();
const server_rendered_pending = comment2.data === HYDRATION_START_ELSE;
const server_rendered_failed = comment2.data.startsWith(HYDRATION_START_FAILED);
if (server_rendered_failed) {
const serialized_error = JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length));
this.#hydrate_failed_content(serialized_error);
} else if (server_rendered_pending) {
this.#hydrate_pending_content();
} else {
this.#hydrate_resolved_content();
}
} else {
this.#render();
}
}, flags);
if (hydrating) {
this.#anchor = hydrate_node;
}
}
#hydrate_resolved_content() {
try {
this.#main_effect = branch(() => this.#children(this.#anchor));
} catch (error) {
this.error(error);
}
}
/**
* @param {unknown} error The deserialized error from the server's hydration comment
*/
#hydrate_failed_content(error) {
const failed = this.#props.failed;
if (!failed) return;
this.#failed_effect = branch(() => {
failed(
this.#anchor,
() => error,
() => () => {
}
);
});
}
#hydrate_pending_content() {
const pending = this.#props.pending;
if (!pending) return;
this.is_pending = true;
this.#pending_effect = branch(() => pending(this.#anchor));
queue_micro_task(() => {
var fragment = this.#offscreen_fragment = document.createDocumentFragment();
var anchor = create_text();
fragment.append(anchor);
this.#main_effect = this.#run(() => {
return branch(() => this.#children(anchor));
});
if (this.#pending_count === 0) {
this.#anchor.before(fragment);
this.#offscreen_fragment = null;
pause_effect(
/** @type {Effect} */
this.#pending_effect,
() => {
this.#pending_effect = null;
}
);
this.#resolve(
/** @type {Batch} */
current_batch
);
}
});
}
#render() {
try {
this.is_pending = this.has_pending_snippet();
this.#pending_count = 0;
this.#local_pending_count = 0;
this.#main_effect = branch(() => {
this.#children(this.#anchor);
});
if (this.#pending_count > 0) {
var fragment = this.#offscreen_fragment = document.createDocumentFragment();
move_effect(this.#main_effect, fragment);
const pending = (
/** @type {(anchor: Node) => void} */
this.#props.pending
);
this.#pending_effect = branch(() => pending(this.#anchor));
} else {
this.#resolve(
/** @type {Batch} */
current_batch
);
}
} catch (error) {
this.error(error);
}
}
/**
* @param {Batch} batch
*/
#resolve(batch) {
this.is_pending = false;
batch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects);
}
/**
* Defer an effect inside a pending boundary until the boundary resolves
* @param {Effect} effect
*/
defer_effect(effect2) {
defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects);
}
/**
* Returns `false` if the effect exists inside a boundary whose pending snippet is shown
* @returns {boolean}
*/
is_rendered() {
return !this.is_pending && (!this.parent || this.parent.is_rendered());
}
has_pending_snippet() {
return !!this.#props.pending;
}
/**
* @template T
* @param {() => T} fn
*/
#run(fn) {
var previous_effect = active_effect;
var previous_reaction = active_reaction;
var previous_ctx = component_context;
set_active_effect(this.#effect);
set_active_reaction(this.#effect);
set_component_context(this.#effect.ctx);
try {
Batch.ensure();
return fn();
} catch (e) {
handle_error(e);
return null;
} finally {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_ctx);
}
}
/**
* Updates the pending count associated with the currently visible pending snippet,
* if any, such that we can replace the snippet with content once work is done
* @param {1 | -1} d
* @param {Batch} batch
*/
#update_pending_count(d, batch) {
if (!this.has_pending_snippet()) {
if (this.parent) {
this.parent.#update_pending_count(d, batch);
}
return;
}
this.#pending_count += d;
if (this.#pending_count === 0) {
this.#resolve(batch);
if (this.#pending_effect) {
pause_effect(this.#pending_effect, () => {
this.#pending_effect = null;
});
}
if (this.#offscreen_fragment) {
this.#anchor.before(this.#offscreen_fragment);
this.#offscreen_fragment = null;
}
}
}
/**
* Update the source that powers `$effect.pending()` inside this boundary,
* and controls when the current `pending` snippet (if any) is removed.
* Do not call from inside the class
* @param {1 | -1} d
* @param {Batch} batch
*/
update_pending_count(d, batch) {
this.#update_pending_count(d, batch);
this.#local_pending_count += d;
if (!this.#effect_pending || this.#pending_count_update_queued) return;
this.#pending_count_update_queued = true;
queue_micro_task(() => {
this.#pending_count_update_queued = false;
if (this.#effect_pending) {
internal_set(this.#effect_pending, this.#local_pending_count);
}
});
}
get_effect_pending() {
this.#effect_pending_subscriber();
return get(
/** @type {Source<number>} */
this.#effect_pending
);
}
/** @param {unknown} error */
error(error) {
if (!this.#props.onerror && !this.#props.failed) {
throw error;
}
if (current_batch?.is_fork) {
if (this.#main_effect) current_batch.skip_effect(this.#main_effect);
if (this.#pending_effect) current_batch.skip_effect(this.#pending_effect);
if (this.#failed_effect) current_batch.skip_effect(this.#failed_effect);
current_batch.on_fork_commit(() => {
this.#handle_error(error);
});
} else {
this.#handle_error(error);
}
}
/**
* @param {unknown} error
*/
#handle_error(error) {
if (this.#main_effect) {
destroy_effect(this.#main_effect);
this.#main_effect = null;
}
if (this.#pending_effect) {
destroy_effect(this.#pending_effect);
this.#pending_effect = null;
}
if (this.#failed_effect) {
destroy_effect(this.#failed_effect);
this.#failed_effect = null;
}
if (hydrating) {
set_hydrate_node(
/** @type {TemplateNode} */
this.#hydrate_open
);
next();
set_hydrate_node(skip_nodes());
}
var onerror = this.#props.onerror;
let failed = this.#props.failed;
var did_reset = false;
var calling_on_error = false;
const reset2 = () => {
if (did_reset) {
svelte_boundary_reset_noop();
return;
}
did_reset = true;
if (calling_on_error) {
svelte_boundary_reset_onerror();
}
if (this.#failed_effect !== null) {
pause_effect(this.#failed_effect, () => {
this.#failed_effect = null;
});
}
this.#run(() => {
this.#render();
});
};
const handle_error_result = (transformed_error) => {
try {
calling_on_error = true;
onerror?.(transformed_error, reset2);
calling_on_error = false;
} catch (error2) {
invoke_error_boundary(error2, this.#effect && this.#effect.parent);
}
if (failed) {
this.#failed_effect = this.#run(() => {
try {
return branch(() => {
var effect2 = (
/** @type {Effect} */
active_effect
);
effect2.b = this;
effect2.f |= BOUNDARY_EFFECT;
failed(
this.#anchor,
() => transformed_error,
() => reset2
);
});
} catch (error2) {
invoke_error_boundary(
error2,
/** @type {Effect} */
this.#effect.parent
);
return null;
}
});
}
};
queue_micro_task(() => {
var result;
try {
result = this.transform_error(error);
} catch (e) {
invoke_error_boundary(e, this.#effect && this.#effect.parent);
return;
}
if (result !== null && typeof result === "object" && typeof /** @type {any} */
result.then === "function") {
result.then(
handle_error_result,
/** @param {unknown} e */
(e) => invoke_error_boundary(e, this.#effect && this.#effect.parent)
);
} else {
handle_error_result(result);
}
});
}
}
function flatten(blockers, sync, async, fn) {
const d = derived;
var pending = blockers.filter((b) => !b.settled);
if (async.length === 0 && pending.length === 0) {
fn(sync.map(d));
return;
}
var parent = (
/** @type {Effect} */
active_effect
);
var restore = capture();
var blocker_promise = pending.length === 1 ? pending[0].promise : pending.length > 1 ? Promise.all(pending.map((b) => b.promise)) : null;
function finish(values) {
if ((parent.f & DESTROYED) !== 0) {
return;
}
restore();
try {
fn(values);
} catch (error) {
invoke_error_boundary(error, parent);
}
unset_context();
}
var decrement_pending = increment_pending();
if (async.length === 0) {
blocker_promise.then(() => finish(sync.map(d))).finally(decrement_pending);
return;
}
function run() {
Promise.all(async.map((expression) => /* @__PURE__ */ async_derived(expression))).then((result) => finish([...sync.map(d), ...result])).catch((error) => invoke_error_boundary(error, parent)).finally(decrement_pending);
}
if (blocker_promise) {
blocker_promise.then(() => {
restore();
run();
unset_context();
});
} else {
run();
}
}
function capture() {
var previous_effect = (
/** @type {Effect} */
active_effect
);
var previous_reaction = active_reaction;
var previous_component_context = component_context;
var previous_batch2 = (
/** @type {Batch} */
current_batch
);
return function restore(activate_batch = true) {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_component_context);
if (activate_batch && (previous_effect.f & DESTROYED) === 0) {
previous_batch2?.activate();
previous_batch2?.apply();
}
};
}
function unset_context(deactivate_batch = true) {
set_active_effect(null);
set_active_reaction(null);
set_component_context(null);
if (deactivate_batch) current_batch?.deactivate();
}
function increment_pending() {
var effect2 = (
/** @type {Effect} */
active_effect
);
var boundary2 = (
/** @type {Boundary} */
effect2.b
);
var batch = (
/** @type {Batch} */
current_batch
);
var blocking = boundary2.is_rendered();
boundary2.update_pending_count(1, batch);
batch.increment(blocking, effect2);
return () => {
boundary2.update_pending_count(-1, batch);
batch.decrement(blocking, effect2);
};
}
// @__NO_SIDE_EFFECTS__
function derived(fn) {
var flags2 = DERIVED | DIRTY;
if (active_effect !== null) {
active_effect.f |= EFFECT_PRESERVED;
}
const signal = {
ctx: component_context,
deps: null,
effects: null,
equals,
f: flags2,
fn,
reactions: null,
rv: 0,
v: (
/** @type {V} */
UNINITIALIZED
),
wv: 0,
parent: active_effect,
ac: null
};
return signal;
}
const OBSOLETE = /* @__PURE__ */ Symbol("obsolete");
// @__NO_SIDE_EFFECTS__
function async_derived(fn, label, location2) {
let parent = (
/** @type {Effect | null} */
active_effect
);
if (parent === null) {
async_derived_orphan();
}
var promise = (
/** @type {Promise<V>} */
/** @type {unknown} */
void 0
);
var signal = source(
/** @type {V} */
UNINITIALIZED
);
var should_suspend = !active_reaction;
var deferreds = /* @__PURE__ */ new Set();
async_effect(() => {
var effect2 = (
/** @type {Effect} */
active_effect
);
var d = deferred();
promise = d.promise;
try {
Promise.resolve(fn()).then(d.resolve, (e) => {
if (e !== STALE_REACTION) d.reject(e);
}).finally(unset_context);
} catch (error) {
d.reject(error);
unset_context();
}
var batch = (
/** @type {Batch} */
current_batch
);
if (should_suspend) {
if ((effect2.f & REACTION_RAN) !== 0) {
var decrement_pending = increment_pending();
}
if (
/** @type {Boundary} */
parent.b.is_rendered()
) {
batch.async_deriveds.get(effect2)?.reject(OBSOLETE);
} else {
for (const d2 of deferreds.values()) {
d2.reject(OBSOLETE);
}
}
deferreds.add(d);
batch.async_deriveds.set(effect2, d);
}
const handler = (value, error = void 0) => {
decrement_pending?.();
deferreds.delete(d);
if (error === OBSOLETE) return;
batch.activate();
if (error) {
signal.f |= ERROR_VALUE;
internal_set(signal, error);
} else {
if ((signal.f & ERROR_VALUE) !== 0) {
signal.f ^= ERROR_VALUE;
}
internal_set(signal, value);
}
batch.deactivate();
};
d.promise.then(handler, (e) => handler(null, e || "unknown"));
});
teardown(() => {
for (const d of deferreds) {
d.reject(OBSOLETE);
}
});
return new Promise((fulfil) => {
function next2(p) {
function go() {
if (p === promise) {
fulfil(signal);
} else {
next2(promise);
}
}
p.then(go, go);
}
next2(promise);
});
}
// @__NO_SIDE_EFFECTS__
function user_derived(fn) {
const d = /* @__PURE__ */ derived(fn);
push_reaction_value(d);
return d;
}
function destroy_derived_effects(derived2) {
var effects = derived2.effects;
if (effects !== null) {
derived2.effects = null;
for (var i = 0; i < effects.length; i += 1) {
destroy_effect(
/** @type {Effect} */
effects[i]
);
}
}
}
function execute_derived(derived2) {
var value;
var prev_active_effect = active_effect;
var parent = derived2.parent;
if (!is_destroying_effect && parent !== null && derived2.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead
(parent.f & (DESTROYED | INERT)) !== 0) {
derived_inert();
return derived2.v;
}
set_active_effect(parent);
{
try {
derived2.f &= ~WAS_MARKED;
destroy_derived_effects(derived2);
value = update_reaction(derived2);
} finally {
set_active_effect(prev_active_effect);
}
}
return value;
}
function update_derived(derived2) {
var value = execute_derived(derived2);
if (!derived2.equals(value)) {
derived2.wv = increment_write_version();
if (!current_batch?.is_fork || derived2.deps === null) {
if (current_batch !== null) {
current_batch.capture(derived2, value, true);
previous_batch?.capture(derived2, value, true);
} else {
derived2.v = value;
}
if (derived2.deps === null) {
set_signal_status(derived2, CLEAN);
return;
}
}
}
if (is_destroying_effect) {
return;
}
if (batch_values !== null) {
if (effect_tracking() || current_batch?.is_fork) {
batch_values.set(derived2, value);
}
} else {
update_derived_status(derived2);
}
}
function freeze_derived_effects(derived2) {
if (derived2.effects === null) return;
for (const e of derived2.effects) {
if (e.teardown || e.ac) {
e.teardown?.();
e.ac?.abort(STALE_REACTION);
if (e.fn !== null) e.teardown = noop;
e.ac = null;
remove_reactions(e, 0);
destroy_effect_children(e);
}
}
}
function unfreeze_derived_effects(derived2) {
if (derived2.effects === null) return;
for (const e of derived2.effects) {
if (e.teardown && e.fn !== null) {
update_effect(e);
}
}
}
let eager_effects = /* @__PURE__ */ new Set();
const old_values = /* @__PURE__ */ new Map();
let eager_effects_deferred = false;
function source(v, stack) {
var signal = {
f: 0,
// TODO ideally we could skip this altogether, but it causes type errors
v,
reactions: null,
equals,
rv: 0,
wv: 0
};
return signal;
}
// @__NO_SIDE_EFFECTS__
function state(v, stack) {
const s = source(v);
push_reaction_value(s);
return s;
}
// @__NO_SIDE_EFFECTS__
function mutable_source(initial_value, immutable = false, trackable = true) {
const s = source(initial_value);
if (!immutable) {
s.equals = safe_equals;
}
return s;
}
function set(source2, value, should_proxy = false) {
if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check
// to ensure we error if state is set inside an inspect effect
(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) {
state_unsafe_mutation();
}
let new_value = should_proxy ? proxy(value) : value;
return internal_set(source2, new_value, legacy_updates);
}
function internal_set(source2, value, updated_during_traversal = null) {
if (!source2.equals(value)) {
old_values.set(source2, is_destroying_effect ? value : source2.v);
var batch = Batch.ensure();
batch.capture(source2, value);
if ((source2.f & DERIVED) !== 0) {
const derived2 = (
/** @type {Derived} */
source2
);
if ((source2.f & DIRTY) !== 0) {
execute_derived(derived2);
}
if (batch_values === null) {
update_derived_status(derived2);
}
}
source2.wv = increment_write_version();
mark_reactions(source2, DIRTY, updated_during_traversal);
if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) {
if (untracked_writes === null) {
set_untracked_writes([source2]);
} else {
untracked_writes.push(source2);
}
}
if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {
flush_eager_effects();
}
}
return value;
}
function flush_eager_effects() {
eager_effects_deferred = false;
for (const effect2 of eager_effects) {
if ((effect2.f & CLEAN) !== 0) {
set_signal_status(effect2, MAYBE_DIRTY);
}
let dirty;
try {
dirty = is_dirty(effect2);
} catch {
dirty = true;
}
if (dirty) {
update_effect(effect2);
}
}
eager_effects.clear();
}
function increment(source2) {
set(source2, source2.v + 1);
}
function mark_reactions(signal, status, updated_during_traversal) {
var reactions = signal.reactions;
if (reactions === null) return;
var length = reactions.length;
for (var i = 0; i < length; i++) {
var reaction = reactions[i];
var flags2 = reaction.f;
var not_dirty = (flags2 & DIRTY) === 0;
if (not_dirty) {
set_signal_status(reaction, status);
}
if ((flags2 & EAGER_EFFECT) !== 0) {
eager_effects.add(
/** @type {Effect} */
reaction
);
} else if ((flags2 & DERIVED) !== 0) {
var derived2 = (
/** @type {Derived} */
reaction
);
batch_values?.delete(derived2);
if ((flags2 & WAS_MARKED) === 0) {
if (flags2 & CONNECTED && (active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)) {
reaction.f |= WAS_MARKED;
}
mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal);
}
} else if (not_dirty) {
var effect2 = (
/** @type {Effect} */
reaction
);
if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {
eager_block_effects.add(effect2);
}
if (updated_during_traversal !== null) {
updated_during_traversal.push(effect2);
} else {
schedule_effect(effect2);
}
}
}
}
function autofocus(dom, value) {
if (value) {
const body = document.body;
dom.autofocus = true;
queue_micro_task(() => {
if (document.activeElement === body) {
dom.focus();
}
});
}
}
let listening_to_form_reset = false;
function add_form_reset_listener() {
if (!listening_to_form_reset) {
listening_to_form_reset = true;
document.addEventListener(
"reset",
(evt) => {
Promise.resolve().then(() => {
if (!evt.defaultPrevented) {
for (
const e of
/**@type {HTMLFormElement} */
evt.target.elements
) {
e[FORM_RESET_HANDLER]?.();
}
}
});
},
// In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation)
{ capture: true }
);
}
}
function without_reactive_context(fn) {
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
return fn();
} finally {
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) {
element.addEventListener(event2, () => without_reactive_context(handler));
const prev = (
/** @type {any} */
element[FORM_RESET_HANDLER]
);
if (prev) {
element[FORM_RESET_HANDLER] = () => {
prev();
on_reset(true);
};
} else {
element[FORM_RESET_HANDLER] = () => on_reset(true);
}
add_form_reset_listener();
}
let is_updating_effect = false;
let is_destroying_effect = false;
function set_is_destroying_effect(value) {
is_destroying_effect = value;
}
let active_reaction = null;
let untracking = false;
function set_active_reaction(reaction) {
active_reaction = reaction;
}
let active_effect = null;
function set_active_effect(effect2) {
active_effect = effect2;
}
let current_sources = null;
function push_reaction_value(value) {
if (active_reaction !== null && true) {
if (current_sources === null) {
current_sources = [value];
} else {
current_sources.push(value);
}
}
}
let new_deps = null;
let skipped_deps = 0;
let untracked_writes = null;
function set_untracked_writes(value) {
untracked_writes = value;
}
let write_version = 1;
let read_version = 0;
let update_version = read_version;
function set_update_version(value) {
update_version = value;
}
function increment_write_version() {
return ++write_version;
}
function is_dirty(reaction) {
var flags2 = reaction.f;
if ((flags2 & DIRTY) !== 0) {
return true;
}
if (flags2 & DERIVED) {
reaction.f &= ~WAS_MARKED;
}
if ((flags2 & MAYBE_DIRTY) !== 0) {
var dependencies = (
/** @type {Value[]} */
reaction.deps
);
var length = dependencies.length;
for (var i = 0; i < length; i++) {
var dependency = dependencies[i];
if (is_dirty(
/** @type {Derived} */
dependency
)) {
update_derived(
/** @type {Derived} */
dependency
);
}
if (dependency.wv > reaction.wv) {
return true;
}
}
if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that
// traversal of the graph in the other batches still happens
batch_values === null) {
set_signal_status(reaction, CLEAN);
}
}
return false;
}
function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) {
var reactions = signal.reactions;
if (reactions === null) return;
if (current_sources !== null && includes.call(current_sources, signal)) {
return;
}
for (var i = 0; i < reactions.length; i++) {
var reaction = reactions[i];
if ((reaction.f & DERIVED) !== 0) {
schedule_possible_effect_self_invalidation(
/** @type {Derived} */
reaction,
effect2,
false
);
} else if (effect2 === reaction) {
if (root2) {
set_signal_status(reaction, DIRTY);
} else if ((reaction.f & CLEAN) !== 0) {
set_signal_status(reaction, MAYBE_DIRTY);
}
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
function update_reaction(reaction) {
var previous_deps = new_deps;
var previous_skipped_deps = skipped_deps;
var previous_untracked_writes = untracked_writes;
var previous_reaction = active_reaction;
var previous_sources = current_sources;
var previous_component_context = component_context;
var previous_untracking = untracking;
var previous_update_version = update_version;
var flags2 = reaction.f;
new_deps = /** @type {null | Value[]} */
null;
skipped_deps = 0;
untracked_writes = null;
active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;
current_sources = null;
set_component_context(reaction.ctx);
untracking = false;
update_version = ++read_version;
if (reaction.ac !== null) {
without_reactive_context(() => {
reaction.ac.abort(STALE_REACTION);
});
reaction.ac = null;
}
try {
reaction.f |= REACTION_IS_UPDATING;
var fn = (
/** @type {Function} */
reaction.fn
);
var result = fn();
reaction.f |= REACTION_RAN;
var deps = reaction.deps;
var is_fork = current_batch?.is_fork;
if (new_deps !== null) {
var i;
if (!is_fork) {
remove_reactions(reaction, skipped_deps);
}
if (deps !== null && skipped_deps > 0) {
deps.length = skipped_deps + new_deps.length;
for (i = 0; i < new_deps.length; i++) {
deps[skipped_deps + i] = new_deps[i];
}
} else {
reaction.deps = deps = new_deps;
}
if (effect_tracking() && (reaction.f & CONNECTED) !== 0) {
for (i = skipped_deps; i < deps.length; i++) {
(deps[i].reactions ??= []).push(reaction);
}
}
} else if (!is_fork && deps !== null && skipped_deps < deps.length) {
remove_reactions(reaction, skipped_deps);
deps.length = skipped_deps;
}
if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) {
for (i = 0; i < /** @type {Source[]} */
untracked_writes.length; i++) {
schedule_possible_effect_self_invalidation(
untracked_writes[i],
/** @type {Effect} */
reaction
);
}
}
if (previous_reaction !== null && previous_reaction !== reaction) {
read_version++;
if (previous_reaction.deps !== null) {
for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) {
previous_reaction.deps[i2].rv = read_version;
}
}
if (previous_deps !== null) {
for (const dep of previous_deps) {
dep.rv = read_version;
}
}
if (untracked_writes !== null) {
if (previous_untracked_writes === null) {
previous_untracked_writes = untracked_writes;
} else {
previous_untracked_writes.push(.../** @type {Source[]} */
untracked_writes);
}
}
}
if ((reaction.f & ERROR_VALUE) !== 0) {
reaction.f ^= ERROR_VALUE;
}
return result;
} catch (error) {
return handle_error(error);
} finally {
reaction.f ^= REACTION_IS_UPDATING;
new_deps = previous_deps;
skipped_deps = previous_skipped_deps;
untracked_writes = previous_untracked_writes;
active_reaction = previous_reaction;
current_sources = previous_sources;
set_component_context(previous_component_context);
untracking = previous_untracking;
update_version = previous_update_version;
}
}
function remove_reaction(signal, dependency) {
let reactions = dependency.reactions;
if (reactions !== null) {
var index = index_of.call(reactions, signal);
if (index !== -1) {
var new_length = reactions.length - 1;
if (new_length === 0) {
reactions = dependency.reactions = null;
} else {
reactions[index] = reactions[new_length];
reactions.pop();
}
}
}
if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear
// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`
// allows us to skip the expensive work of disconnecting and immediately reconnecting it
(new_deps === null || !includes.call(new_deps, dependency))) {
var derived2 = (
/** @type {Derived} */
dependency
);
if ((derived2.f & CONNECTED) !== 0) {
derived2.f ^= CONNECTED;
derived2.f &= ~WAS_MARKED;
}
if (derived2.v !== UNINITIALIZED) {
update_derived_status(derived2);
}
freeze_derived_effects(derived2);
remove_reactions(derived2, 0);
}
}
function remove_reactions(signal, start_index) {
var dependencies = signal.deps;
if (dependencies === null) return;
for (var i = start_index; i < dependencies.length; i++) {
remove_reaction(signal, dependencies[i]);
}
}
function update_effect(effect2) {
var flags2 = effect2.f;
if ((flags2 & DESTROYED) !== 0) {
return;
}
set_signal_status(effect2, CLEAN);
var previous_effect = active_effect;
var was_updating_effect = is_updating_effect;
active_effect = effect2;
is_updating_effect = true;
try {
if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {
destroy_block_effect_children(effect2);
} else {
destroy_effect_children(effect2);
}
execute_effect_teardown(effect2);
var teardown2 = update_reaction(effect2);
effect2.teardown = typeof teardown2 === "function" ? teardown2 : null;
effect2.wv = write_version;
var dep;
if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ;
} finally {
is_updating_effect = was_updating_effect;
active_effect = previous_effect;
}
}
async function tick() {
await Promise.resolve();
flushSync();
}
function get(signal) {
var flags2 = signal.f;
var is_derived = (flags2 & DERIVED) !== 0;
if (active_reaction !== null && !untracking) {
var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;
if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) {
var deps = active_reaction.deps;
if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {
if (signal.rv < read_version) {
signal.rv = read_version;
if (new_deps === null && deps !== null && deps[skipped_deps] === signal) {
skipped_deps++;
} else if (new_deps === null) {
new_deps = [signal];
} else {
new_deps.push(signal);
}
}
} else {
(active_reaction.deps ??= []).push(signal);
var reactions = signal.reactions;
if (reactions === null) {
signal.reactions = [active_reaction];
} else if (!includes.call(reactions, active_reaction)) {
reactions.push(active_reaction);
}
}
}
}
if (is_destroying_effect && old_values.has(signal)) {
return old_values.get(signal);
}
if (is_derived) {
var derived2 = (
/** @type {Derived} */
signal
);
if (is_destroying_effect) {
var value = derived2.v;
if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) {
value = execute_derived(derived2);
}
old_values.set(derived2, value);
return value;
}
var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0);
var is_new = (derived2.f & REACTION_RAN) === 0;
if (is_dirty(derived2)) {
if (should_connect) {
derived2.f |= CONNECTED;
}
update_derived(derived2);
}
if (should_connect && !is_new) {
unfreeze_derived_effects(derived2);
reconnect(derived2);
}
}
if (batch_values?.has(signal)) {
return batch_values.get(signal);
}
if ((signal.f & ERROR_VALUE) !== 0) {
throw signal.v;
}
return signal.v;
}
function reconnect(derived2) {
derived2.f |= CONNECTED;
if (derived2.deps === null) return;
for (const dep of derived2.deps) {
(dep.reactions ??= []).push(derived2);
if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {
unfreeze_derived_effects(
/** @type {Derived} */
dep
);
reconnect(
/** @type {Derived} */
dep
);
}
}
}
function depends_on_old_values(derived2) {
if (derived2.v === UNINITIALIZED) return true;
if (derived2.deps === null) return false;
for (const dep of derived2.deps) {
if (old_values.has(dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on_old_values(
/** @type {Derived} */
dep
)) {
return true;
}
}
return false;
}
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function validate_effect(rune) {
if (active_effect === null) {
if (active_reaction === null) {
effect_orphan();
}
effect_in_unowned_derived();
}
if (is_destroying_effect) {
effect_in_teardown();
}
}
function push_effect(effect2, parent_effect) {
var parent_last = parent_effect.last;
if (parent_last === null) {
parent_effect.last = parent_effect.first = effect2;
} else {
parent_last.next = effect2;
effect2.prev = parent_last;
parent_effect.last = effect2;
}
}
function create_effect(type, fn) {
var parent = active_effect;
if (parent !== null && (parent.f & INERT) !== 0) {
type |= INERT;
}
var effect2 = {
ctx: component_context,
deps: null,
nodes: null,
f: type | DIRTY | CONNECTED,
first: null,
fn,
last: null,
next: null,
parent,
b: parent && parent.b,
prev: null,
teardown: null,
wv: 0,
ac: null
};
current_batch?.register_created_effect(effect2);
var e = effect2;
if ((type & EFFECT) !== 0) {
if (collected_effects !== null) {
collected_effects.push(effect2);
} else {
Batch.ensure().schedule(effect2);
}
} else if (fn !== null) {
try {
update_effect(effect2);
} catch (e2) {
destroy_effect(effect2);
throw e2;
}
if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child
(e.f & EFFECT_PRESERVED) === 0) {
e = e.first;
if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {
e.f |= EFFECT_TRANSPARENT;
}
}
}
if (e !== null) {
e.parent = parent;
if (parent !== null) {
push_effect(e, parent);
}
if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) {
var derived2 = (
/** @type {Derived} */
active_reaction
);
(derived2.effects ??= []).push(e);
}
}
return effect2;
}
function effect_tracking() {
return active_reaction !== null && !untracking;
}
function teardown(fn) {
const effect2 = create_effect(RENDER_EFFECT, null);
set_signal_status(effect2, CLEAN);
effect2.teardown = fn;
return effect2;
}
function user_effect(fn) {
validate_effect();
var flags2 = (
/** @type {Effect} */
active_effect.f
);
var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & REACTION_RAN) === 0;
if (defer) {
var context = (
/** @type {ComponentContext} */
component_context
);
(context.e ??= []).push(fn);
} else {
return create_user_effect(fn);
}
}
function create_user_effect(fn) {
return create_effect(EFFECT | USER_EFFECT, fn);
}
function effect_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
return () => {
destroy_effect(effect2);
};
}
function component_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
return (options = {}) => {
return new Promise((fulfil) => {
if (options.outro) {
pause_effect(effect2, () => {
destroy_effect(effect2);
fulfil(void 0);
});
} else {
destroy_effect(effect2);
fulfil(void 0);
}
});
};
}
function effect(fn) {
return create_effect(EFFECT, fn);
}
function async_effect(fn) {
return create_effect(ASYNC | EFFECT_PRESERVED, fn);
}
function render_effect(fn, flags2 = 0) {
return create_effect(RENDER_EFFECT | flags2, fn);
}
function template_effect(fn, sync = [], async = [], blockers = []) {
flatten(blockers, sync, async, (values) => {
create_effect(RENDER_EFFECT, () => fn(...values.map(get)));
});
}
function block(fn, flags2 = 0) {
var effect2 = create_effect(BLOCK_EFFECT | flags2, fn);
return effect2;
}
function managed(fn, flags2 = 0) {
var effect2 = create_effect(MANAGED_EFFECT | flags2, fn);
return effect2;
}
function branch(fn) {
return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn);
}
function execute_effect_teardown(effect2) {
var teardown2 = effect2.teardown;
if (teardown2 !== null) {
const previously_destroying_effect = is_destroying_effect;
const previous_reaction = active_reaction;
set_is_destroying_effect(true);
set_active_reaction(null);
try {
teardown2.call(null);
} finally {
set_is_destroying_effect(previously_destroying_effect);
set_active_reaction(previous_reaction);
}
}
}
function destroy_effect_children(signal, remove_dom = false) {
var effect2 = signal.first;
signal.first = signal.last = null;
while (effect2 !== null) {
const controller = effect2.ac;
if (controller !== null) {
without_reactive_context(() => {
controller.abort(STALE_REACTION);
});
}
var next2 = effect2.next;
if ((effect2.f & ROOT_EFFECT) !== 0) {
effect2.parent = null;
} else {
destroy_effect(effect2, remove_dom);
}
effect2 = next2;
}
}
function destroy_block_effect_children(signal) {
var effect2 = signal.first;
while (effect2 !== null) {
var next2 = effect2.next;
if ((effect2.f & BRANCH_EFFECT) === 0) {
destroy_effect(effect2);
}
effect2 = next2;
}
}
function destroy_effect(effect2, remove_dom = true) {
var removed = false;
if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) {
remove_effect_dom(
effect2.nodes.start,
/** @type {TemplateNode} */
effect2.nodes.end
);
removed = true;
}
set_signal_status(effect2, DESTROYING);
destroy_effect_children(effect2, remove_dom && !removed);
remove_reactions(effect2, 0);
var transitions = effect2.nodes && effect2.nodes.t;
if (transitions !== null) {
for (const transition of transitions) {
transition.stop();
}
}
execute_effect_teardown(effect2);
effect2.f ^= DESTROYING;
effect2.f |= DESTROYED;
var parent = effect2.parent;
if (parent !== null && parent.first !== null) {
unlink_effect(effect2);
}
effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = effect2.b = null;
}
function remove_effect_dom(node, end) {
while (node !== null) {
var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
node.remove();
node = next2;
}
}
function unlink_effect(effect2) {
var parent = effect2.parent;
var prev = effect2.prev;
var next2 = effect2.next;
if (prev !== null) prev.next = next2;
if (next2 !== null) next2.prev = prev;
if (parent !== null) {
if (parent.first === effect2) parent.first = next2;
if (parent.last === effect2) parent.last = prev;
}
}
function pause_effect(effect2, callback, destroy = true) {
var transitions = [];
pause_children(effect2, transitions, true);
var fn = () => {
if (destroy) destroy_effect(effect2);
if (callback) callback();
};
var remaining = transitions.length;
if (remaining > 0) {
var check = () => --remaining || fn();
for (var transition of transitions) {
transition.out(check);
}
} else {
fn();
}
}
function pause_children(effect2, transitions, local) {
if ((effect2.f & INERT) !== 0) return;
effect2.f ^= INERT;
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition of t) {
if (transition.is_global || local) {
transitions.push(transition);
}
}
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
if ((child2.f & ROOT_EFFECT) === 0) {
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent,
// it means the parent block effect was pruned. In that case,
// transparency information was transferred to the branch effect.
(child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0;
pause_children(child2, transitions, transparent ? local : false);
}
child2 = sibling2;
}
}
function resume_effect(effect2) {
resume_children(effect2, true);
}
function resume_children(effect2, local) {
if ((effect2.f & INERT) === 0) return;
effect2.f ^= INERT;
if ((effect2.f & CLEAN) === 0) {
set_signal_status(effect2, DIRTY);
Batch.ensure().schedule(effect2);
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0;
resume_children(child2, transparent ? local : false);
child2 = sibling2;
}
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition of t) {
if (transition.is_global || local) {
transition.in();
}
}
}
}
function move_effect(effect2, fragment) {
if (!effect2.nodes) return;
var node = effect2.nodes.start;
var end = effect2.nodes.end;
while (node !== null) {
var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
fragment.append(node);
node = next2;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get$1(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get$1(scope.store), {
[name]: value
});
} else {
Object.assign(get$1(scope.store), name);
}
scope.store.set(get$1(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n = {
ariaLinkLabel: "Altcha (official website)",
cancel: "Cancel",
enterCode: "Enter code",
enterCodeAria: "Enter code you hear. Press Space to play audio.",
enterCodeFromImage: "To proceed, please enter the code from the image below.",
error: "Verification failed. Try again later.",
expired: "Verification expired. Try again.",
footer: 'Protected by <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (official website)">ALTCHA</a>',
getAudioChallenge: "Get an audio challenge",
label: "I'm not a robot",
loading: "Loading...",
reload: "Reload",
verify: "Verify",
verificationRequired: "Verification required!",
verified: "Verified",
verifying: "Verifying...",
waitAlert: "Verifying... please wait."
};
globalThis.$altcha.i18n.set("en", i18n);
const PUBLIC_VERSION = "5";
if (typeof window !== "undefined") {
((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION);
}
const event_symbol = /* @__PURE__ */ Symbol("events");
const all_registered_events = /* @__PURE__ */ new Set();
const root_event_handles = /* @__PURE__ */ new Set();
function create_event(event_name, dom, handler, options = {}) {
function target_handler(event2) {
if (!options.capture) {
handle_event_propagation.call(dom, event2);
}
if (!event2.cancelBubble) {
return without_reactive_context(() => {
return handler?.call(this, event2);
});
}
}
if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") {
queue_micro_task(() => {
dom.addEventListener(event_name, target_handler, options);
});
} else {
dom.addEventListener(event_name, target_handler, options);
}
return target_handler;
}
function event(event_name, dom, handler, capture2, passive) {
var options = { capture: capture2, passive };
var target_handler = create_event(event_name, dom, handler, options);
if (dom === document.body || // @ts-ignore
dom === window || // @ts-ignore
dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed
dom instanceof HTMLMediaElement) {
teardown(() => {
dom.removeEventListener(event_name, target_handler, options);
});
}
}
function delegated(event_name, element, handler) {
(element[event_symbol] ??= {})[event_name] = handler;
}
function delegate(events) {
for (var i = 0; i < events.length; i++) {
all_registered_events.add(events[i]);
}
for (var fn of root_event_handles) {
fn(events);
}
}
let last_propagated_event = null;
function handle_event_propagation(event2) {
var handler_element = this;
var owner_document = (
/** @type {Node} */
handler_element.ownerDocument
);
var event_name = event2.type;
var path = event2.composedPath?.() || [];
var current_target = (
/** @type {null | Element} */
path[0] || event2.target
);
last_propagated_event = event2;
var path_idx = 0;
var handled_at = last_propagated_event === event2 && event2[event_symbol];
if (handled_at) {
var at_idx = path.indexOf(handled_at);
if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */
window)) {
event2[event_symbol] = handler_element;
return;
}
var handler_idx = path.indexOf(handler_element);
if (handler_idx === -1) {
return;
}
if (at_idx <= handler_idx) {
path_idx = at_idx;
}
}
current_target = /** @type {Element} */
path[path_idx] || event2.target;
if (current_target === handler_element) return;
define_property(event2, "currentTarget", {
configurable: true,
get() {
return current_target || owner_document;
}
});
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
var throw_error;
var other_errors = [];
while (current_target !== null) {
var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */
current_target.host || null;
try {
var delegated2 = current_target[event_symbol]?.[event_name];
if (delegated2 != null && (!/** @type {any} */
current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well
// -> the target could not have been disabled because it emits the event in the first place
event2.target === current_target)) {
delegated2.call(current_target, event2);
}
} catch (error) {
if (throw_error) {
other_errors.push(error);
} else {
throw_error = error;
}
}
if (event2.cancelBubble || parent_element === handler_element || parent_element === null) {
break;
}
current_target = parent_element;
}
if (throw_error) {
for (let error of other_errors) {
queueMicrotask(() => {
throw error;
});
}
throw throw_error;
}
} finally {
event2[event_symbol] = handler_element;
delete event2.currentTarget;
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
const policy = (
// We gotta write it like this because after downleveling the pure comment may end up in the wrong location
globalThis?.window?.trustedTypes && /* @__PURE__ */ globalThis.window.trustedTypes.createPolicy("svelte-trusted-html", {
/** @param {string} html */
createHTML: (html2) => {
return html2;
}
})
);
function create_trusted_html(html2) {
return (
/** @type {string} */
policy?.createHTML(html2) ?? html2
);
}
function create_fragment_from_html(html2) {
var elem = create_element("template");
elem.innerHTML = create_trusted_html(html2.replaceAll("<!>", "<!---->"));
return elem.content;
}
function assign_nodes(start, end) {
var effect2 = (
/** @type {Effect} */
active_effect
);
if (effect2.nodes === null) {
effect2.nodes = { start, end, a: null, t: null };
}
}
// @__NO_SIDE_EFFECTS__
function from_html(content, flags2) {
var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0;
var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0;
var node;
var has_start = !content.startsWith("<!>");
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (node === void 0) {
node = create_fragment_from_html(has_start ? content : "<!>" + content);
if (!is_fragment) node = /** @type {TemplateNode} */
/* @__PURE__ */ get_first_child(node);
}
var clone = (
/** @type {TemplateNode} */
use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)
);
if (is_fragment) {
var start = (
/** @type {TemplateNode} */
/* @__PURE__ */ get_first_child(clone)
);
var end = (
/** @type {TemplateNode} */
clone.lastChild
);
assign_nodes(start, end);
} else {
assign_nodes(clone, clone);
}
return clone;
};
}
// @__NO_SIDE_EFFECTS__
function from_namespace(content, flags2, ns = "svg") {
var has_start = !content.startsWith("<!>");
var wrapped = `<${ns}>${has_start ? content : "<!>" + content}</${ns}>`;
var node;
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (!node) {
var fragment = (
/** @type {DocumentFragment} */
create_fragment_from_html(wrapped)
);
var root2 = (
/** @type {Element} */
/* @__PURE__ */ get_first_child(fragment)
);
{
node = /** @type {Element} */
/* @__PURE__ */ get_first_child(root2);
}
}
var clone = (
/** @type {TemplateNode} */
node.cloneNode(true)
);
{
assign_nodes(clone, clone);
}
return clone;
};
}
// @__NO_SIDE_EFFECTS__
function from_svg(content, flags2) {
return /* @__PURE__ */ from_namespace(content, flags2, "svg");
}
function text(value = "") {
if (!hydrating) {
var t = create_text(value + "");
assign_nodes(t, t);
return t;
}
var node = hydrate_node;
if (node.nodeType !== TEXT_NODE) {
node.before(node = create_text());
set_hydrate_node(node);
} else {
merge_text_nodes(
/** @type {Text} */
node
);
}
assign_nodes(node, node);
return node;
}
function comment() {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
var frag = document.createDocumentFragment();
var start = document.createComment("");
var anchor = create_text();
frag.append(start, anchor);
assign_nodes(start, anchor);
return frag;
}
function append(anchor, dom) {
if (hydrating) {
var effect2 = (
/** @type {Effect & { nodes: EffectNodes }} */
active_effect
);
if ((effect2.f & REACTION_RAN) === 0 || effect2.nodes.end === null) {
effect2.nodes.end = hydrate_node;
}
hydrate_next();
return;
}
if (anchor === null) {
return;
}
anchor.before(
/** @type {Node} */
dom
);
}
function is_capture_event(name) {
return name.endsWith("capture") && name !== "gotpointercapture" && name !== "lostpointercapture";
}
const DELEGATED_EVENTS = [
"beforeinput",
"click",
"change",
"dblclick",
"contextmenu",
"focusin",
"focusout",
"input",
"keydown",
"keyup",
"mousedown",
"mousemove",
"mouseout",
"mouseover",
"mouseup",
"pointerdown",
"pointermove",
"pointerout",
"pointerover",
"pointerup",
"touchend",
"touchmove",
"touchstart"
];
function can_delegate_event(event_name) {
return DELEGATED_EVENTS.includes(event_name);
}
const ATTRIBUTE_ALIASES = {
// no `class: 'className'` because we handle that separately
formnovalidate: "formNoValidate",
ismap: "isMap",
nomodule: "noModule",
playsinline: "playsInline",
readonly: "readOnly",
defaultvalue: "defaultValue",
defaultchecked: "defaultChecked",
srcobject: "srcObject",
novalidate: "noValidate",
allowfullscreen: "allowFullscreen",
disablepictureinpicture: "disablePictureInPicture",
disableremoteplayback: "disableRemotePlayback"
};
function normalize_attribute(name) {
name = name.toLowerCase();
return ATTRIBUTE_ALIASES[name] ?? name;
}
const PASSIVE_EVENTS = ["touchstart", "touchmove"];
function is_passive_event(name) {
return PASSIVE_EVENTS.includes(name);
}
function set_text(text2, value) {
var str = value == null ? "" : typeof value === "object" ? `${value}` : value;
if (str !== /** @type {any} */
(text2[TEXT_CACHE] ??= text2.nodeValue)) {
text2[TEXT_CACHE] = str;
text2.nodeValue = `${str}`;
}
}
function mount(component2, options) {
return _mount(component2, options);
}
function hydrate(component2, options) {
init_operations();
options.intro = options.intro ?? false;
const target = options.target;
const was_hydrating = hydrating;
const previous_hydrate_node = hydrate_node;
try {
var anchor = /* @__PURE__ */ get_first_child(target);
while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */
anchor.data !== HYDRATION_START)) {
anchor = /* @__PURE__ */ get_next_sibling(anchor);
}
if (!anchor) {
throw HYDRATION_ERROR;
}
set_hydrating(true);
set_hydrate_node(
/** @type {Comment} */
anchor
);
const instance = _mount(component2, { ...options, anchor });
set_hydrating(false);
return (
/** @type {Exports} */
instance
);
} catch (error) {
if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) {
throw error;
}
if (error !== HYDRATION_ERROR) {
console.warn("Failed to hydrate: ", error);
}
if (options.recover === false) {
hydration_failed();
}
init_operations();
clear_text_content(target);
set_hydrating(false);
return mount(component2, options);
} finally {
set_hydrating(was_hydrating);
set_hydrate_node(previous_hydrate_node);
}
}
const listeners = /* @__PURE__ */ new Map();
function _mount(Component, { target, anchor, props = {}, events, context, intro = true, transformError }) {
init_operations();
var component2 = void 0;
var unmount2 = component_root(() => {
var anchor_node = anchor ?? target.appendChild(create_text());
boundary(
/** @type {TemplateNode} */
anchor_node,
{
pending: () => {
}
},
(anchor_node2) => {
push({});
var ctx = (
/** @type {ComponentContext} */
component_context
);
if (context) ctx.c = context;
if (events) {
props.$$events = events;
}
if (hydrating) {
assign_nodes(
/** @type {TemplateNode} */
anchor_node2,
null
);
}
component2 = Component(anchor_node2, props) || {};
if (hydrating) {
active_effect.nodes.end = hydrate_node;
if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */
hydrate_node.data !== HYDRATION_END) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
}
pop();
},
transformError
);
var registered_events = /* @__PURE__ */ new Set();
var event_handle = (events2) => {
for (var i = 0; i < events2.length; i++) {
var event_name = events2[i];
if (registered_events.has(event_name)) continue;
registered_events.add(event_name);
var passive = is_passive_event(event_name);
for (const node of [target, document]) {
var counts = listeners.get(node);
if (counts === void 0) {
counts = /* @__PURE__ */ new Map();
listeners.set(node, counts);
}
var count = counts.get(event_name);
if (count === void 0) {
node.addEventListener(event_name, handle_event_propagation, { passive });
counts.set(event_name, 1);
} else {
counts.set(event_name, count + 1);
}
}
}
};
event_handle(array_from(all_registered_events));
root_event_handles.add(event_handle);
return () => {
for (var event_name of registered_events) {
for (const node of [target, document]) {
var counts = (
/** @type {Map<string, number>} */
listeners.get(node)
);
var count = (
/** @type {number} */
counts.get(event_name)
);
if (--count == 0) {
node.removeEventListener(event_name, handle_event_propagation);
counts.delete(event_name);
if (counts.size === 0) {
listeners.delete(node);
}
} else {
counts.set(event_name, count);
}
}
}
root_event_handles.delete(event_handle);
if (anchor_node !== anchor) {
anchor_node.parentNode?.removeChild(anchor_node);
}
};
});
mounted_components.set(component2, unmount2);
return component2;
}
let mounted_components = /* @__PURE__ */ new WeakMap();
function unmount(component2, options) {
const fn = mounted_components.get(component2);
if (fn) {
mounted_components.delete(component2);
return fn(options);
}
return Promise.resolve();
}
class BranchManager {
/** @type {TemplateNode} */
anchor;
/** @type {Map<Batch, Key>} */
#batches = /* @__PURE__ */ new Map();
/**
* Map of keys to effects that are currently rendered in the DOM.
* These effects are visible and actively part of the document tree.
* Example:
*
data/skin/front/story_g/js/altcha/i18n.js+2656
변경 전i18n.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후i18n.js
const noop = () => {
};
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function get(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let untracking = false;
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get(scope.store), {
[name]: value
});
} else {
Object.assign(get(scope.store), name);
}
scope.store.set(get(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n$Y = {
ariaLinkLabel: "Altcha (الموقع الرسمي)",
enterCode: "أدخل الرمز",
enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",
error: "فشل التحقق. حاول مرة أخرى لاحقاً.",
expired: "انتهت صلاحية التحقق. حاول مرة أخرى.",
footer: 'محمي بواسطة <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (الموقع الرسمي)">ALTCHA</a>',
getAudioChallenge: "احصل على تحدي صوتي",
label: "أنا لست روبوتاً",
loading: "جارٍ التحميل...",
reload: "إعادة تحميل",
verify: "تحقق",
verificationRequired: "مطلوب التحقق!",
verified: "تم التحقق",
verifying: "جارٍ التحقق...",
waitAlert: "جارٍ التحقق... يرجى الانتظار.",
cancel: "إلغاء",
enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه."
};
globalThis.$altcha.i18n.set("ar", i18n$Y);
const i18n$X = {
ariaLinkLabel: "Altcha (официален уебсайт)",
enterCode: "Въведете код",
enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",
error: "Проверката неуспешна. Моля, опитайте по-късно.",
expired: "Времето за проверка изтече. Моля, опитайте отново.",
footer: 'Защитено от <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официален уебсайт)">ALTCHA</a>',
getAudioChallenge: "Аудио проверка",
label: "Аз не съм робот",
loading: "Зареждане...",
reload: "Презареди",
verify: "Провери",
verificationRequired: "Изисква се проверка!",
verified: "Проверено",
verifying: "Проверява се...",
waitAlert: "Проверката е в процес... моля изчакайте.",
cancel: "Отказ",
enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу."
};
globalThis.$altcha.i18n.set("bg", i18n$X);
const i18n$W = {
ariaLinkLabel: "Altcha (афіцыйны сайт)",
enterCode: "Увядзіце код",
enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",
error: "Праверка не прайшла. Паспрабуйце пазней.",
expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.",
footer: 'Абаронена <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (афіцыйны сайт)">ALTCHA</a>',
getAudioChallenge: "Атрымаць аўдыё выклік",
label: "Я не робат",
loading: "Загрузка...",
reload: "Перазагрузіць",
verify: "Праверыць",
verificationRequired: "Патрабуецца праверка!",
verified: "Праверана",
verifying: "Правяраем...",
waitAlert: "Праверка... калі ласка, пачакайце.",
cancel: "Скасаваць",
enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй."
};
globalThis.$altcha.i18n.set("be", i18n$W);
const i18n$V = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("bs", i18n$V);
const i18n$U = {
ariaLinkLabel: "Altcha (lloc web oficial)",
enterCode: "Introdueix el codi",
enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",
error: "Verificació fallida. Torna-ho a provar més tard.",
expired: "Verificació expirada. Torna-ho a provar.",
footer: 'Protegit per <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (lloc web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtenir un desafiament d’àudio",
label: "No sóc un robot",
loading: "Carregant...",
reload: "Torna a carregar",
verify: "Verificar",
verificationRequired: "Es requereix verificació!",
verified: "Verificat",
verifying: "Verificant...",
waitAlert: "Verificant... si us plau, espera.",
cancel: "Cancel·la",
enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent."
};
globalThis.$altcha.i18n.set("ca", i18n$U);
const i18n$T = {
ariaLinkLabel: "Altcha (oficiální web)",
enterCode: "Zadejte kód",
enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",
error: "Ověření selhalo. Zkuste to prosím později.",
expired: "Ověření vypršelo. Zkuste to prosím znovu.",
footer: 'Chráněno pomocí <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiální web)">ALTCHA</a>',
getAudioChallenge: "Získat audio výzvu",
label: "Nejsem robot",
loading: "Načítání...",
reload: "Znovu načíst",
verify: "Ověřit",
verificationRequired: "Vyžaduje se ověření!",
verified: "Ověřeno",
verifying: "Ověřování...",
waitAlert: "Probíhá ověření... prosím počkejte.",
cancel: "Zrušit",
enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže."
};
globalThis.$altcha.i18n.set("cs", i18n$T);
const i18n$S = {
ariaLinkLabel: "Altcha (officiel hjemmeside)",
enterCode: "Indtast kode",
enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",
error: "Verificering mislykkedes. Prøv venligst igen senere.",
expired: "Verificering udløbet. Prøv venligst igen.",
footer: 'Beskyttet af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiel hjemmeside)">ALTCHA</a>',
getAudioChallenge: "Hent lydudfordring",
label: "Jeg er ikke en robot",
loading: "Indlæser...",
reload: "Genindlæs",
verify: "Verificer",
verificationRequired: "Verificering kræves!",
verified: "Verificeret",
verifying: "Verificerer...",
waitAlert: "Verificerer... vent venligst.",
cancel: "Annuller",
enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder."
};
globalThis.$altcha.i18n.set("da", i18n$S);
const i18n$R = {
ariaLinkLabel: "Altcha (offizielle Website)",
enterCode: "Code eingeben",
enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",
error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",
footer: 'Geschützt durch <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offizielle Website)">ALTCHA</a>',
getAudioChallenge: "Audio-Herausforderung anfordern",
label: "Ich bin kein Roboter",
loading: "Lade...",
reload: "Neu laden",
verify: "Überprüfen",
verificationRequired: "Überprüfung erforderlich!",
verified: "Überprüft",
verifying: "Wird überprüft...",
waitAlert: "Überprüfung läuft... bitte warten.",
cancel: "Abbrechen",
enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."
};
globalThis.$altcha.i18n.set("de", i18n$R);
const i18n$Q = {
ariaLinkLabel: "Altcha (επίσημος ιστότοπος)",
enterCode: "Εισαγάγετε κωδικό",
enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",
error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",
expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.",
footer: 'Προστατεύεται από το <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (επίσημος ιστότοπος)">ALTCHA</a>',
getAudioChallenge: "Λήψη ηχητικής δοκιμασίας",
label: "Δεν είμαι ρομπότ",
loading: "Φόρτωση...",
reload: "Επαναφόρτωση",
verify: "Επαλήθευση",
verificationRequired: "Απαιτείται έλεγχος!",
verified: "Επαληθεύτηκε",
verifying: "Γίνεται επαλήθευση...",
waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.",
cancel: "Ακύρωση",
enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."
};
globalThis.$altcha.i18n.set("el", i18n$Q);
const i18n$P = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Introduce el código",
enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor intente nuevamente más tarde.",
expired: "Verificación expirada. Por favor intente nuevamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un desafío de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Recargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espere.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo."
};
globalThis.$altcha.i18n.set("es-es", i18n$P);
const i18n$O = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Ingresa el código",
enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.",
expired: "La verificación expiró. Por favor inténtalo de nuevo.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un reto de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Volver a cargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espera.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación."
};
globalThis.$altcha.i18n.set("es-419", i18n$O);
const i18n$N = {
ariaLinkLabel: "Altcha (ametlik veebisait)",
enterCode: "Sisesta kood",
enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",
error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",
expired: "Kinnitamine aegus. Proovi uuesti.",
footer: 'Kaitstud <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ametlik veebisait)">ALTCHA</a> poolt',
getAudioChallenge: "Hangi heliülesanne",
label: "Ma ei ole robot",
loading: "Laadimine...",
reload: "Laadi uuesti",
verify: "Kinnita",
verificationRequired: "Kontroll on vajalik!",
verified: "Kinnitatud",
verifying: "Kinnitamine...",
waitAlert: "Kinnitamine... palun oota.",
cancel: "Tühista",
enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood."
};
globalThis.$altcha.i18n.set("et", i18n$N);
const i18n$M = {
ariaLinkLabel: "Altcha (webgune ofiziala)",
enterCode: "Sartu kodea",
enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",
error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.",
expired: "Egiaztatzea iraungi da. Saiatu berriro.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (webgune ofiziala)">ALTCHA</a>k babestuta',
getAudioChallenge: "Jaso audio-erronka bat",
label: "Ez naiz robot bat",
loading: "Kargatzen...",
reload: "Birkargatu",
verify: "Egiaztatu",
verificationRequired: "Egiaztatzea beharrezkoa da!",
verified: "Egiaztatuta",
verifying: "Egiaztatzen...",
waitAlert: "Egiaztatzen... itxaron mesedez.",
cancel: "Utzi",
enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea."
};
globalThis.$altcha.i18n.set("eu", i18n$M);
const i18n$L = {
ariaLinkLabel: "Altcha (وب‌سایت رسمی)",
enterCode: "کد را وارد کنید",
enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",
error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",
expired: "احراز هویت منقضی شد. دوباره تلاش کنید.",
footer: 'محافظت شده توسط <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (وب‌سایت رسمی)">ALTCHA</a>',
getAudioChallenge: "دریافت چالش صوتی",
label: "من ربات نیستم",
loading: "در حال بارگذاری...",
reload: "بارگذاری مجدد",
verify: "تایید",
verificationRequired: "احراز هویت لازم است!",
verified: "تایید شد",
verifying: "در حال تایید...",
waitAlert: "در حال تایید... لطفا منتظر بمانید.",
cancel: "لغو کردن",
enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید."
};
globalThis.$altcha.i18n.set("fa", i18n$L);
const i18n$K = {
ariaLinkLabel: "Altcha (offiziell Websäit)",
enterCode: "Code aginn",
enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",
error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",
expired: "Verifikatioun ofgelaf. Probéiert nach emol.",
footer: 'Geschützt vun <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offiziell Websäit)">ALTCHA</a>',
getAudioChallenge: "Kritt eng Audio-Herausfuerderung",
label: "Ech sinn keen Robot",
loading: "Lueden...",
reload: "Nei lueden",
verify: "Verifizéieren",
verificationRequired: "Verifikatioun néideg!",
verified: "Verifizéiert",
verifying: "Verifizéieren...",
waitAlert: "Verifizéieren... waart wgl.",
cancel: "Ofbriechen",
enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."
};
globalThis.$altcha.i18n.set("lb", i18n$K);
const i18n$J = {
ariaLinkLabel: "Altcha (virallinen verkkosivusto)",
enterCode: "Syötä koodi",
enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",
error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.",
expired: "Varmennus vanhentui. Yritä uudelleen.",
footer: 'Suojattu <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (virallinen verkkosivusto)">ALTCHA</a>:lla',
getAudioChallenge: "Hae äänitehtävä",
label: "En ole robotti",
loading: "Ladataan...",
reload: "Lataa uudelleen",
verify: "Vahvista",
verificationRequired: "Vahvistus vaaditaan!",
verified: "Vahvistettu",
verifying: "Vahvistetaan...",
waitAlert: "Vahvistetaan... odota hetki.",
cancel: "Peruuta",
enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi."
};
globalThis.$altcha.i18n.set("fi", i18n$J);
const i18n$I = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",
error: "Échec de la vérification. Réessayez plus tard.",
expired: "La vérification a expiré. Réessayez.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-ca", i18n$I);
const i18n$H = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",
error: "Échec de la vérification. Essayez à nouveau plus tard.",
expired: "La vérification a expiré. Essayez à nouveau.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-fr", i18n$H);
const i18n$G = {
ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)",
enterCode: "Iontráil cód",
enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",
error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.",
expired: "Tá an fíorú as feidhm. Bain triail eile as.",
footer: 'Cosanta ag <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (láithreán gréasáin oifigiúil)">ALTCHA</a>',
getAudioChallenge: "Faigh dúshlán fuaime",
label: "Níl mé i mo róbat",
loading: "Á luchtú...",
reload: "Athluchtaigh",
verify: "Fíoraigh",
verificationRequired: "Fíorú riachtanach!",
verified: "Fíoraithe",
verifying: "Fíorú ar siúl...",
waitAlert: "Fíorú ar siúl... fan go fóill.",
cancel: "Cealaigh",
enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."
};
globalThis.$altcha.i18n.set("ga", i18n$G);
const i18n$F = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",
error: "Provjera nije uspjela. Molimo pokušajte kasnije.",
expired: "Provjera je istekla. Molimo pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Audio provjera",
label: "Ja nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Provjeri",
verificationRequired: "Potrebna je provjera!",
verified: "Provjereno",
verifying: "Provjeravanje...",
waitAlert: "Provjera je u tijeku... molimo pričekajte.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("hr", i18n$F);
const i18n$E = {
ariaLinkLabel: "Altcha (hivatalos weboldal)",
enterCode: "Írja be a kódot",
enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",
error: "A hitelesítés nem sikerült. Próbáld meg később újra.",
expired: "A hitelesítés lejárt. Próbáld újra.",
footer: 'Védve a következő által: <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (hivatalos weboldal)">ALTCHA</a>',
getAudioChallenge: "Hangalapú kihívás kérése",
label: "Nem vagyok robot",
loading: "Betöltés...",
reload: "Újratöltés",
verify: "Ellenőrzés",
verificationRequired: "Ellenőrzés szükséges!",
verified: "Ellenőrizve",
verifying: "Ellenőrzés folyamatban...",
waitAlert: "Ellenőrzés folyamatban... kérlek várj.",
cancel: "Mégse",
enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját."
};
globalThis.$altcha.i18n.set("hu", i18n$E);
const i18n$D = {
ariaLinkLabel: "Altcha (opinber vefsíða)",
enterCode: "Sláðu inn kóða",
enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",
error: "Staðfesting mistókst. Reyndu aftur síðar.",
expired: "Staðfesting er útrunnin. Reyndu aftur.",
footer: 'Verndað af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (opinber vefsíða)">ALTCHA</a>',
getAudioChallenge: "Fá hljóðáskorun",
label: "Ég er ekki robot",
loading: "Hleður...",
reload: "Hleð aftur",
verify: "Staðfesta",
verificationRequired: "Staðfesting er nauðsynleg!",
verified: "Staðfest",
verifying: "Að staðfesta...",
waitAlert: "Að staðfesta... vinsamlegast bíða.",
cancel: "Hætta við",
enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."
};
globalThis.$altcha.i18n.set("is", i18n$D);
const i18n$C = {
ariaLinkLabel: "Altcha (sito ufficiale)",
enterCode: "Inserisci il codice",
enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",
error: "Verifica fallita. Riprova più tardi.",
expired: "Verifica scaduta. Riprova.",
footer: 'Protetto da <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sito ufficiale)">ALTCHA</a>',
getAudioChallenge: "Ottieni una sfida audio",
label: "Non sono un robot",
loading: "Caricamento...",
reload: "Ricarica",
verify: "Verifica",
verificationRequired: "Verifica richiesta!",
verified: "Verificato",
verifying: "Verifica in corso...",
waitAlert: "Verifica in corso... attendere.",
cancel: "Annulla",
enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante."
};
globalThis.$altcha.i18n.set("it", i18n$C);
const i18n$B = {
ariaLinkLabel: "Altcha (oficiali svetainė)",
enterCode: "Įveskite kodą",
enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",
error: "Patvirtinimas nepavyko. Bandykite vėliau.",
expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.",
footer: 'Apsaugota <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiali svetainė)">ALTCHA</a>',
getAudioChallenge: "Gauti garso užduotį",
label: "Aš nesu robotas",
loading: "Įkeliama...",
reload: "Įkelti iš naujo",
verify: "Patvirtinti",
verificationRequired: "Reikalingas patvirtinimas!",
verified: "Patvirtinta",
verifying: "Tikrinama...",
waitAlert: "Tikrinama... prašome palaukti.",
cancel: "Atšaukti",
enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."
};
globalThis.$altcha.i18n.set("lt", i18n$B);
const i18n$A = {
ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)",
enterCode: "Ievadiet kodu",
enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",
error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",
expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",
footer: 'Aizsargāts ar <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiālā tīmekļa vietne)">ALTCHA</a>',
getAudioChallenge: "Saņemt audio izaicinājumu",
label: "Es neesmu robots",
loading: "Notiek ielāde...",
reload: "Pārlādēt",
verify: "Verificēt",
verificationRequired: "Nepieciešama verifikācija!",
verified: "Verificēts",
verifying: "Notiek verifikācija...",
waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.",
cancel: "Atcelt",
enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."
};
globalThis.$altcha.i18n.set("lv", i18n$A);
const i18n$z = {
ariaLinkLabel: "Altcha (sit uffiċjali)",
enterCode: "Idħol il-kodiċi",
enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",
error: "Il-verifika falliet. Erġa’ pprova aktar tard.",
expired: "Il-verifika skadiet. Erġa’ pprova.",
footer: 'Protett minn <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sit uffiċjali)">ALTCHA</a>',
getAudioChallenge: "Ikseb sfida bl-awdjo",
label: "M’inix robot",
loading: "Qed jitgħabba...",
reload: "Ittella’ mill-ġdid",
verify: "Ivverifika",
verificationRequired: "Verifika meħtieġa!",
verified: "Ivverifikat",
verifying: "Verifika għaddejja...",
waitAlert: "Verifika għaddejja... stenna ftit.",
cancel: "Ikkanċella",
enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."
};
globalThis.$altcha.i18n.set("mt", i18n$z);
const i18n$y = {
ariaLinkLabel: "Altcha (offisiell nettside)",
enterCode: "Skriv inn kode",
enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.",
error: "Verifisering mislyktes. Prøv igjen senere.",
expired: "Verifiseringen utløp. Prøv igjen.",
footer: 'Beskyttet av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offisiell nettside)">ALTCHA</a>',
getAudioChallenge: "Få en lydutfordring",
label: "Jeg er ikke en robot",
loading: "Laster...",
reload: "Last på nytt",
verify: "Verifiser",
verificationRequired: "Verifisering kreves!",
verified: "Verifisert",
verifying: "Verifiserer...",
waitAlert: "Verifiserer... vennligst vent.",
cancel: "Avbryt",
enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor."
};
globalThis.$altcha.i18n.set("nb", i18n$y);
const i18n$x = {
ariaLinkLabel: "Altcha (officiële website)",
enterCode: "Voer code in",
enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",
error: "Verificatie mislukt. Probeer het later opnieuw.",
expired: "Verificatie verlopen. Probeer het opnieuw.",
footer: 'Beschermd door <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiële website)">ALTCHA</a>',
getAudioChallenge: "Audio-uitdaging ontvangen",
label: "Ik ben geen robot",
loading: "Laden...",
reload: "Herladen",
verify: "Verifiëren",
verificationRequired: "Verificatie vereist!",
verified: "Geverifieerd",
verifying: "Bezig met verifiëren...",
waitAlert: "Bezig met verifiëren... even geduld a.u.b.",
cancel: "Annuleren",
enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in."
};
globalThis.$altcha.i18n.set("nl", i18n$x);
const i18n$w = {
ariaLinkLabel: "Altcha (oficjalna strona internetowa)",
enterCode: "Wprowadź kod",
enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",
error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.",
expired: "Weryfikacja wygasła. Spróbuj ponownie.",
footer: 'Chronione przez <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficjalna strona internetowa)">ALTCHA</a>',
getAudioChallenge: "Pobierz zadanie dźwiękowe",
label: "Nie jestem robotem",
loading: "Ładowanie...",
reload: "Odśwież",
verify: "Zweryfikuj",
verificationRequired: "Wymagana weryfikacja!",
verified: "Zweryfikowano",
verifying: "Weryfikacja...",
waitAlert: "Trwa weryfikacja... proszę czekać.",
cancel: "Anuluj",
enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka."
};
globalThis.$altcha.i18n.set("pl", i18n$w);
const i18n$v = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduza o código",
enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",
error: "A verificação falhou. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Não sou um robô",
loading: "A carregar...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "A verificar...",
waitAlert: "A verificar... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-pt", i18n$v);
const i18n$u = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Digite o código",
enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",
error: "Falha na verificação. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Eu não sou um robô",
loading: "Carregando...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-br", i18n$u);
const i18n$t = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduceți codul",
enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",
error: "Verificarea a eșuat. Încearcă din nou mai târziu.",
expired: "Verificarea a expirat. Încearcă din nou.",
footer: 'Protejat de <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obține o provocare audio",
label: "Nu sunt un robot",
loading: "Se încarcă...",
reload: "Reîncarcă",
verify: "Verifică",
verificationRequired: "Verificare necesară!",
verified: "Verificat",
verifying: "Se verifică...",
waitAlert: "Se verifică... te rugăm să aștepți.",
cancel: "Anulare",
enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."
};
globalThis.$altcha.i18n.set("ro", i18n$t);
const i18n$s = {
ariaLinkLabel: "Altcha (официальный сайт)",
enterCode: "Введите код",
enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",
error: "Ошибка верификации. Попробуйте позже.",
expired: "Срок действия верификации истек. Попробуйте снова.",
footer: 'Защищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официальный сайт)">ALTCHA</a>',
getAudioChallenge: "Получить аудио задачу",
label: "Я не робот",
loading: "Загрузка...",
reload: "Перезагрузить",
verify: "Проверить",
verificationRequired: "Требуется проверка!",
verified: "Проверено",
verifying: "Идет проверка...",
waitAlert: "Идет проверка... Пожалуйста, подождите.",
cancel: "Отмена",
enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже."
};
globalThis.$altcha.i18n.set("ru", i18n$s);
const i18n$r = {
ariaLinkLabel: "Altcha (oficiálna webová stránka)",
enterCode: "Zadajte kód",
enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",
error: "Verifikácia zlyhala. Skúste to znova neskôr.",
expired: "Verifikácia vypršala. Skúste to znova.",
footer: 'Chránené <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiálna webová stránka)">ALTCHA</a>',
getAudioChallenge: "Získať audio výzvu",
label: "Nie som robot",
loading: "Načítava sa...",
reload: "Obnoviť",
verify: "Verifikovať",
verificationRequired: "Vyžaduje sa overenie!",
verified: "Verifikované",
verifying: "Prebieha verifikácia...",
waitAlert: "Prebieha verifikácia... prosím čakajte.",
cancel: "Zrušiť",
enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie."
};
globalThis.$altcha.i18n.set("sk", i18n$r);
const i18n$q = {
ariaLinkLabel: "Altcha (uradna spletna stran)",
enterCode: "Vnesite kodo",
enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",
error: "Preverjanje ni uspelo. Poskusite znova kasneje.",
expired: "Preverjanje je poteklo. Poskusite znova.",
footer: 'Zaščiteno z <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (uradna spletna stran)">ALTCHA</a>',
getAudioChallenge: "Pridobite zvočni izziv",
label: "Nisem robot",
loading: "Nalagam...",
reload: "Ponovno naloži",
verify: "Preveri",
verificationRequired: "Potrebna je preveritev!",
verified: "Preverjeno",
verifying: "Preverjanje...",
waitAlert: "Preverjanje... prosim počakajte.",
cancel: "Preklic",
enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."
};
globalThis.$altcha.i18n.set("sl", i18n$q);
const i18n$p = {
ariaLinkLabel: "Altcha (faqja zyrtare)",
enterCode: "Fut kodin",
enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",
error: "Verifikimi dështoi. Provoni përsëri më vonë.",
expired: "Verifikimi ka skaduar. Provoni përsëri.",
footer: 'I mbrojtur nga <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (faqja zyrtare)">ALTCHA</a>',
getAudioChallenge: "Merr një sfidë audio",
label: "Unë nuk jam një robot",
loading: "Duke u ngarkuar...",
reload: "Ringarko",
verify: "Verifiko",
verificationRequired: "Kërkohet verifikimi!",
verified: "I verifikuar",
verifying: "Duke verifikuar...",
waitAlert: "Duke verifikuar... ju lutem prisni.",
cancel: "Anuloje",
enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."
};
globalThis.$altcha.i18n.set("sq", i18n$p);
const i18n$o = {
ariaLinkLabel: "Altcha (zvanična web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (zvanična web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovo učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Откажи",
enterCodeFromImage: "Да бисте наставили, унесите код са слике испод."
};
globalThis.$altcha.i18n.set("sr", i18n$o);
const i18n$n = {
ariaLinkLabel: "Altcha (officiell webbplats)",
enterCode: "Ange kod",
enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
error: "Verifiering misslyckades. Försök igen senare.",
expired: "Verifieringen har gått ut. Försök igen.",
footer: 'Skyddad av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiell webbplats)">ALTCHA</a>',
getAudioChallenge: "Få ljudutmaning",
label: "Jag är inte en robot",
loading: "Laddar...",
reload: "Ladda om",
verify: "Verifiera",
verificationRequired: "Verifiering krävs!",
verified: "Verifierad",
verifying: "Verifierar...",
waitAlert: "Verifierar... vänligen vänta.",
cancel: "Avbryt",
enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan."
};
globalThis.$altcha.i18n.set("sv", i18n$n);
const i18n$m = {
ariaLinkLabel: "Altcha (resmi web sitesi)",
enterCode: "Kodu girin",
enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
footer: 'ALTCHA tarafından korunuyor <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (resmi web sitesi)">ALTCHA</a>',
getAudioChallenge: "Sesli doğrulama al",
label: "Ben robot değilim",
loading: "Yükleniyor...",
reload: "Yeniden yükle",
verify: "Doğrula",
verificationRequired: "Doğrulama gerekli!",
verified: "Doğrulandı",
verifying: "Doğrulama yapılıyor...",
waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.",
cancel: "İptal",
enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin."
};
globalThis.$altcha.i18n.set("tr", i18n$m);
const i18n$l = {
ariaLinkLabel: "Altcha (офіційний сайт)",
enterCode: "Введіть код",
enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
error: "Перевірка не вдалася. Спробуйте пізніше.",
expired: "Перевірка прострочена. Спробуйте знову.",
footer: 'Захищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (офіційний сайт)">ALTCHA</a>',
getAudioChallenge: "Отримати аудіо-челлендж",
label: "Я не робот",
loading: "Завантаження...",
reload: "Перезавантажити",
verify: "Перевірити",
verificationRequired: "Потрібна перевірка!",
verified: "Перевірено",
verifying: "Перевіряється...",
waitAlert: "Перевірка... будь ласка, зачекайте.",
cancel: "Скасувати",
enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче."
};
globalThis.$altcha.i18n.set("uk", i18n$l);
const i18n$k = {
ariaLinkLabel: "Altcha (amptelike webwerf)",
enterCode: "Voer kode in",
enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",
error: "Verifikasie het misluk. Probeer later weer.",
expired: "Verifikasie het verval. Probeer weer.",
footer: 'Beskerm deur <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (amptelike webwerf)">ALTCHA</a>',
getAudioChallenge: "Kry 'n klankuitdaging",
label: "Ek is nie 'n robot nie",
loading: "Laai...",
reload: "Laai weer",
verify: "Verifieer",
verificationRequired: "Verifikasie is vereis!",
verified: "Geverifieer",
verifying: "Verifieer...",
waitAlert: "Verifieer... wag asseblief.",
cancel: "Kanselleer",
enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."
};
globalThis.$altcha.i18n.set("af", i18n$k);
const i18n$j = {
ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)",
enterCode: "ኮድ አስገባ",
enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",
error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",
expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",
footer: 'በ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ዋናው ድህረ ገጽ)">ALTCHA</a> የተጠበቀ',
getAudioChallenge: "የድምጽ ፈተና ያግኙ",
label: "እኔ ሮቦት አይደለሁም",
loading: "በመጫን ላይ...",
reload: "እንደገና ጫን",
verify: "አረጋግጥ",
verificationRequired: "ማረጋገጫ ያስፈልጋል!",
verified: "ተረጋግጧል",
verifying: "በማረጋገጥ ላይ...",
waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",
cancel: "ይቅር",
enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"
};
globalThis.$altcha.i18n.set("am", i18n$j);
const i18n$i = {
ariaLinkLabel: "Altcha (tovuti rasmi)",
enterCode: "Weka nambari",
enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.",
error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.",
expired: "Uthibitishaji umeisha. Jaribu tena.",
footer: 'Imealindwa na <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (tovuti rasmi)">ALTCHA</a>',
getAudioChallenge: "Pata changamoto ya sauti",
label: "Mimi sio roboti",
loading: "Inapakia...",
reload: "Pakia tena",
verify: "Thibitisha",
verificationRequired: "Uthibitishaji unahitajika!",
verified: "Imethibitishwa",
verifying: "Inathibitisha...",
waitAlert: "Inathibitisha... tafadhali subiri.",
cancel: "Ghairi",
enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."
};
globalThis.$altcha.i18n.set("sw", i18n$i);
const i18n$h = {
ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)",
enterCode: "Tẹ koodu sii",
enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",
error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",
expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",
footer: 'Ti wa ni ààbò nipasẹ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oju opo wẹẹbu osise)">ALTCHA</a>',
getAudioChallenge: "Gba ìjàdú ohùn",
label: "Emi kii ṣe ẹrọ",
loading: "Ó ń gbé sílẹ̀...",
reload: "Tún gbé wọlé",
verify: "Ṣàdájọ́",
verificationRequired: "Ìdájọ́kòwò ni a nílò!",
verified: "A ti dájọ́",
verifying: "Ó ń ṣàdájọ́...",
waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",
cancel: "Fagbọsẹ",
enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."
};
globalThis.$altcha.i18n.set("yo", i18n$h);
const i18n$g = {
ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)",
enterCode: "কোড লিখুন",
enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",
error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",
expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",
footer: 'দ্বারা সুরক্ষিত <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (অফিসিয়াল ওয়েবসাইট)">ALTCHA</a>',
getAudioChallenge: "অডিও চ্যালেঞ্জ নিন",
label: "আমি রোবট নই",
loading: "লোড হচ্ছে...",
reload: "পুনরায় লোড করুন",
verify: "যাচাই করুন",
verificationRequired: "যাচাই প্রয়োজন!",
verified: "যাচাই করা হয়েছে",
verifying: "যাচাই করা হচ্ছে...",
waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",
cancel: "বাতিল করুন",
enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"
};
globalThis.$altcha.i18n.set("bn", i18n$g);
const i18n$f = {
ariaLinkLabel: "Altcha (אתר רשמי)",
enterCode: "הזן קוד",
enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",
error: "האימות נכשל. נסה שוב מאוחר יותר.",
expired: "תוקף האימות פג. נסה שוב.",
footer: 'מוגן על ידי <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (אתר רשמי)">ALTCHA</a>',
getAudioChallenge: "קבל אתגר שמע",
label: "אני לא רובוט",
loading: "טוען...",
reload: "טען מחדש",
verify: "אמת",
verificationRequired: "נדרש אימות!",
verified: "אומת",
verifying: "מאמת...",
waitAlert: "מבצע אימות... אנא המתן.",
cancel: "ביטול",
enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."
};
globalThis.$altcha.i18n.set("he", i18n$f);
const i18n$e = {
ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)",
enterCode: "कोड दर्ज करेंं",
enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",
error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",
expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",
footer: 'द्वारा संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (आधिकारिक वेबसाइट)">ALTCHA</a>',
getAudioChallenge: "ऑडियो चुनौती प्राप्त करें",
label: "मैं रोबोट नहीं हूँ",
loading: "लोड हो रहा है...",
reload: "पुनः लोड करें",
verify: "सत्यापित करें",
verificationRequired: "सत्यापन आवश्यक है!",
verified: "सत्यापित",
verifying: "सत्यापित कर रहे हैं...",
waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",
cancel: "रद्द करें",
enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"
};
globalThis.$altcha.i18n.set("hi", i18n$e);
const i18n$d = {
ariaLinkLabel: "Altcha (situs web resmi)",
enterCode: "Masukkan kode",
enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",
error: "Verifikasi gagal. Coba lagi nanti.",
expired: "Verifikasi telah kedaluwarsa. Coba lagi.",
footer: 'Dilindungi oleh <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (situs web resmi)">ALTCHA</a>',
getAudioChallenge: "Dapatkan tantangan audio",
label: "Saya bukan robot",
loading: "Memuat...",
reload: "Muat ulang",
verify: "Verifikasi",
verificationRequired: "Verifikasi diperlukan!",
verified: "Terverifikasi",
verifying: "Memverifikasi...",
waitAlert: "Memverifikasi... harap tunggu.",
cancel: "Batal",
enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."
};
globalThis.$altcha.i18n.set("id", i18n$d);
const i18n$c = {
ariaLinkLabel: "Altcha (公式ウェブサイト)",
enterCode: "コードを入力",
enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。",
error: "認証に失敗しました。後でもう一度試してください。",
expired: "認証が期限切れです。再試行してください。",
footer: '保護されています <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (公式ウェブサイト)">ALTCHA</a>',
getAudioChallenge: "音声チャレンジを取得",
label: "私はロボットではありません",
loading: "読み込み中...",
reload: "再読み込み",
verify: "確認",
verificationRequired: "認証が必要です!",
verified: "確認済み",
verifying: "確認中...",
waitAlert: "確認中...少々お待ちください。",
cancel: "キャンセル",
enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。"
};
globalThis.$altcha.i18n.set("ja", i18n$c);
const i18n$b = {
ariaLinkLabel: "Altcha (공식 웹사이트)",
enterCode: "코드 입력",
enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",
error: "인증 실패. 나중에 다시 시도해주세요.",
expired: "인증이 만료되었습니다. 다시 시도해주세요.",
footer: 'ALTCHA에서 보호됨 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (공식 웹사이트)">ALTCHA</a>',
getAudioChallenge: "오디오 챌린지 받기",
label: "저는 로봇이 아닙니다",
loading: "로딩 중...",
reload: "새로 고침",
verify: "확인",
verificationRequired: "인증이 필요합니다!",
verified: "확인됨",
verifying: "확인 중...",
waitAlert: "확인 중... 잠시만 기다려주세요.",
cancel: "취소",
enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요."
};
globalThis.$altcha.i18n.set("ko", i18n$b);
const i18n$a = {
ariaLinkLabel: "Altcha (ресми веб-сайт)",
enterCode: "Кодты енгізіңіз",
enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",
error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",
expired: "Тексеру мерзімі аяқталды. Қайталаңыз.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ресми веб-сайт)">ALTCHA</a> қорғайды',
getAudioChallenge: "Аудио сынақ алу",
label: "Мен робот емеспін",
loading: "Жүктелуде...",
reload: "Қайта жүктеу",
verify: "Тексеру",
verificationRequired: "Тексеру талап етіледі!",
verified: "Тексерілді",
verifying: "Тексеруде...",
waitAlert: "Тексерілуде... күте тұрыңыз.",
cancel: "Болдыру",
enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."
};
globalThis.$altcha.i18n.set("kk", i18n$a);
const i18n$9 = {
ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)",
enterCode: "कोड टाकाा",
enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",
error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",
expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",
footer: 'द्वारे संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (अधिकृत संकेतस्थळ)">ALTCHA</a>',
getAudioChallenge: "ऑडिओ चॅलेंज मिळवा",
label: "मी रोबोट नाही",
loading: "लोड होत आहे...",
reload: "पुन्हा लोड करा",
verify: "पुष्टीकरण करा",
verificationRequired: "पडताळणी आवश्यक आहे!",
verified: "पुष्टीकरण झाले",
verifying: "पुष्टीकरण करत आहे...",
waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",
cancel: "रद्द करा",
enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."
};
globalThis.$altcha.i18n.set("mr", i18n$9);
const i18n$8 = {
ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",
enterCode: "குறியீட்டை உள்ளிடவும்",
enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (அதிகாரப்பூர்வ வலைத்தளம்)">ALTCHA</a>',
getAudioChallenge: "ஒலி சவாலை பெறவும்",
label: "நான் ரோபோடான அல்ல",
loading: "செயலாக்கம்...",
reload: "மீண்டும் புதுப்பிக்கவும்",
verify: "சரிபார்க்கவும்",
verificationRequired: "சரிபார்ப்பு தேவை!",
verified: "சரிபார்க்கப்பட்டது",
verifying: "சரிபார்க்கப்படுகிறது...",
waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",
cancel: "ரத்துசெய்",
enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."
};
globalThis.$altcha.i18n.set("ta", i18n$8);
const i18n$7 = {
ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)",
enterCode: "కోడ్‌ని నమోదు చేయండి",
enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (అధికారిక వెబ్‌సైట్)">ALTCHA</a>',
getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
label: "నేను రోబోట్ కాదు",
loading: "లోడ్ అవుతోంది...",
reload: "మళ్ళీ లోడ్ చేయండి",
verify: "ధ్రువీకరించు",
verificationRequired: "ధృవీకరణ అవసరం!",
verified: "ధ్రువీకరించబడింది",
verifying: "ధ్రువీకరణ జరుగుతుంది...",
waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",
cancel: "రద్దు చేయండి",
enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."
};
globalThis.$altcha.i18n.set("te", i18n$7);
const i18n$6 = {
ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)",
enterCode: "ป้อนรหัส",
enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
footer: 'ป้องกันโดย <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (เว็บไซต์ทางการ)">ALTCHA</a>',
getAudioChallenge: "รับการท้าทายเสียง",
label: "ฉันไม่ใช่บอท",
loading: "กำลังโหลด...",
reload: "โหลดใหม่",
verify: "ตรวจสอบ",
verificationRequired: "จำเป็นต้องตรวจสอบ!",
verified: "ตรวจสอบแล้ว",
verifying: "กำลังตรวจสอบ...",
waitAlert: "กำลังตรวจสอบ... กรุณารอ",
cancel: "ยกเลิก",
enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"
};
globalThis.$altcha.i18n.set("th", i18n$6);
const i18n$5 = {
ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)",
enterCode: "کوڈ درج کریں",
enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (سرکاری ویب سائٹ)">ALTCHA</a>',
getAudioChallenge: "آڈیو چیلنج حاصل کریں",
label: "میں روبوٹ نہیں ہوں",
loading: "لوڈ ہو رہا ہے...",
reload: "دوبارہ لوڈ کریں",
verify: "توثیق کریں",
verificationRequired: "تصدیق ضروری ہے!",
verified: "توثیق شدہ",
verifying: "توثیق ہو رہی ہے...",
waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",
cancel: "منسوخ کریں",
enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"
};
globalThis.$altcha.i18n.set("ur", i18n$5);
const i18n$4 = {
ariaLinkLabel: "Altcha (rasmiy veb-sayt)",
enterCode: "Kodni kiriting",
enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",
error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",
expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (rasmiy veb-sayt)">ALTCHA</a> tomonidan himoyalangan',
getAudioChallenge: "Audio sinovni olish",
label: "Men robot emasman",
loading: "Yuklanmoqda...",
reload: "Qayta yuklash",
verify: "Tekshirish",
verificationRequired: "Tekshiruv talab qilinadi!",
verified: "Tekshirildi",
verifying: "Tekshirilmoqda...",
waitAlert: "Tekshirilmoqda... iltimos kuting.",
cancel: "Bekor qilish",
enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."
};
globalThis.$altcha.i18n.set("uz", i18n$4);
const i18n$3 = {
ariaLinkLabel: "Altcha (trang web chính thức)",
enterCode: "Nhập mã",
enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
error: "Xác minh thất bại. Vui lòng thử lại sau.",
expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
footer: 'Được bảo vệ bởi <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (trang web chính thức)">ALTCHA</a>',
getAudioChallenge: "Nhận thử thách âm thanh",
label: "Tôi không phải là robot",
loading: "Đang tải...",
reload: "Tải lại",
verify: "Xác minh",
verificationRequired: "Yêu cầu xác minh!",
verified: "Đã xác minh",
verifying: "Đang xác minh...",
waitAlert: "Đang xác minh... vui lòng chờ.",
cancel: "Hủy bỏ",
enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."
};
globalThis.$altcha.i18n.set("vi", i18n$3);
const i18n$2 = {
ariaLinkLabel: "Altcha (官方网站)",
enterCode: "输入代码",
enterCodeAria: "输入您听到的代码。按空格键播放音频。",
error: "验证失败。稍后再试。",
expired: "验证已过期。请重试。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方网站)">ALTCHA</a> 保护',
getAudioChallenge: "获取音频挑战",
label: "我不是机器人",
loading: "加载中...",
reload: "重新加载",
verify: "验证",
verificationRequired: "需要验证!",
verified: "已验证",
verifying: "正在验证...",
waitAlert: "正在验证... 请稍等。",
cancel: "取消",
enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。"
};
globalThis.$altcha.i18n.set("zh-cn", i18n$2);
const i18n$1 = {
ariaLinkLabel: "Altcha (官方網站)",
cancel: "取消",
enterCode: "輸入代碼",
enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。",
enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。",
error: "驗證失敗。請稍後再試。",
expired: "驗證已過期。請再試一次。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 提供保護',
getAudioChallenge: "取得音訊驗證",
label: "我唔係機械人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "驗證中...",
waitAlert: "驗證中... 請稍候。"
};
globalThis.$altcha.i18n.set("zh-hk", i18n$1);
const i18n = {
ariaLinkLabel: "Altcha (官方網站)",
enterCode: "輸入代碼",
enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
error: "驗證失敗。稍後再試。",
expired: "驗證已過期。請重試。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 保護',
getAudioChallenge: "獲取音頻挑戰",
label: "我不是機器人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "正在驗證...",
waitAlert: "正在驗證... 請稍等。",
cancel: "取消",
enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。"
};
globalThis.$altcha.i18n.set("zh-tw", i18n);
const noop = () => {
};
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function get(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let untracking = false;
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get(scope.store), {
[name]: value
});
} else {
Object.assign(get(scope.store), name);
}
scope.store.set(get(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n$Y = {
ariaLinkLabel: "Altcha (الموقع الرسمي)",
enterCode: "أدخل الرمز",
enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",
error: "فشل التحقق. حاول مرة أخرى لاحقاً.",
expired: "انتهت صلاحية التحقق. حاول مرة أخرى.",
footer: 'محمي بواسطة <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (الموقع الرسمي)">ALTCHA</a>',
getAudioChallenge: "احصل على تحدي صوتي",
label: "أنا لست روبوتاً",
loading: "جارٍ التحميل...",
reload: "إعادة تحميل",
verify: "تحقق",
verificationRequired: "مطلوب التحقق!",
verified: "تم التحقق",
verifying: "جارٍ التحقق...",
waitAlert: "جارٍ التحقق... يرجى الانتظار.",
cancel: "إلغاء",
enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه."
};
globalThis.$altcha.i18n.set("ar", i18n$Y);
const i18n$X = {
ariaLinkLabel: "Altcha (официален уебсайт)",
enterCode: "Въведете код",
enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",
error: "Проверката неуспешна. Моля, опитайте по-късно.",
expired: "Времето за проверка изтече. Моля, опитайте отново.",
footer: 'Защитено от <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официален уебсайт)">ALTCHA</a>',
getAudioChallenge: "Аудио проверка",
label: "Аз не съм робот",
loading: "Зареждане...",
reload: "Презареди",
verify: "Провери",
verificationRequired: "Изисква се проверка!",
verified: "Проверено",
verifying: "Проверява се...",
waitAlert: "Проверката е в процес... моля изчакайте.",
cancel: "Отказ",
enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу."
};
globalThis.$altcha.i18n.set("bg", i18n$X);
const i18n$W = {
ariaLinkLabel: "Altcha (афіцыйны сайт)",
enterCode: "Увядзіце код",
enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",
error: "Праверка не прайшла. Паспрабуйце пазней.",
expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.",
footer: 'Абаронена <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (афіцыйны сайт)">ALTCHA</a>',
getAudioChallenge: "Атрымаць аўдыё выклік",
label: "Я не робат",
loading: "Загрузка...",
reload: "Перазагрузіць",
verify: "Праверыць",
verificationRequired: "Патрабуецца праверка!",
verified: "Праверана",
verifying: "Правяраем...",
waitAlert: "Праверка... калі ласка, пачакайце.",
cancel: "Скасаваць",
enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй."
};
globalThis.$altcha.i18n.set("be", i18n$W);
const i18n$V = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("bs", i18n$V);
const i18n$U = {
ariaLinkLabel: "Altcha (lloc web oficial)",
enterCode: "Introdueix el codi",
enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",
error: "Verificació fallida. Torna-ho a provar més tard.",
expired: "Verificació expirada. Torna-ho a provar.",
footer: 'Protegit per <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (lloc web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtenir un desafiament d’àudio",
label: "No sóc un robot",
loading: "Carregant...",
reload: "Torna a carregar",
verify: "Verificar",
verificationRequired: "Es requereix verificació!",
verified: "Verificat",
verifying: "Verificant...",
waitAlert: "Verificant... si us plau, espera.",
cancel: "Cancel·la",
enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent."
};
globalThis.$altcha.i18n.set("ca", i18n$U);
const i18n$T = {
ariaLinkLabel: "Altcha (oficiální web)",
enterCode: "Zadejte kód",
enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",
error: "Ověření selhalo. Zkuste to prosím později.",
expired: "Ověření vypršelo. Zkuste to prosím znovu.",
footer: 'Chráněno pomocí <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiální web)">ALTCHA</a>',
getAudioChallenge: "Získat audio výzvu",
label: "Nejsem robot",
loading: "Načítání...",
reload: "Znovu načíst",
verify: "Ověřit",
verificationRequired: "Vyžaduje se ověření!",
verified: "Ověřeno",
verifying: "Ověřování...",
waitAlert: "Probíhá ověření... prosím počkejte.",
cancel: "Zrušit",
enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže."
};
globalThis.$altcha.i18n.set("cs", i18n$T);
const i18n$S = {
ariaLinkLabel: "Altcha (officiel hjemmeside)",
enterCode: "Indtast kode",
enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",
error: "Verificering mislykkedes. Prøv venligst igen senere.",
expired: "Verificering udløbet. Prøv venligst igen.",
footer: 'Beskyttet af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiel hjemmeside)">ALTCHA</a>',
getAudioChallenge: "Hent lydudfordring",
label: "Jeg er ikke en robot",
loading: "Indlæser...",
reload: "Genindlæs",
verify: "Verificer",
verificationRequired: "Verificering kræves!",
verified: "Verificeret",
verifying: "Verificerer...",
waitAlert: "Verificerer... vent venligst.",
cancel: "Annuller",
enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder."
};
globalThis.$altcha.i18n.set("da", i18n$S);
const i18n$R = {
ariaLinkLabel: "Altcha (offizielle Website)",
enterCode: "Code eingeben",
enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",
error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",
footer: 'Geschützt durch <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offizielle Website)">ALTCHA</a>',
getAudioChallenge: "Audio-Herausforderung anfordern",
label: "Ich bin kein Roboter",
loading: "Lade...",
reload: "Neu laden",
verify: "Überprüfen",
verificationRequired: "Überprüfung erforderlich!",
verified: "Überprüft",
verifying: "Wird überprüft...",
waitAlert: "Überprüfung läuft... bitte warten.",
cancel: "Abbrechen",
enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."
};
globalThis.$altcha.i18n.set("de", i18n$R);
const i18n$Q = {
ariaLinkLabel: "Altcha (επίσημος ιστότοπος)",
enterCode: "Εισαγάγετε κωδικό",
enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",
error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",
expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.",
footer: 'Προστατεύεται από το <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (επίσημος ιστότοπος)">ALTCHA</a>',
getAudioChallenge: "Λήψη ηχητικής δοκιμασίας",
label: "Δεν είμαι ρομπότ",
loading: "Φόρτωση...",
reload: "Επαναφόρτωση",
verify: "Επαλήθευση",
verificationRequired: "Απαιτείται έλεγχος!",
verified: "Επαληθεύτηκε",
verifying: "Γίνεται επαλήθευση...",
waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.",
cancel: "Ακύρωση",
enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."
};
globalThis.$altcha.i18n.set("el", i18n$Q);
const i18n$P = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Introduce el código",
enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor intente nuevamente más tarde.",
expired: "Verificación expirada. Por favor intente nuevamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un desafío de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Recargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espere.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo."
};
globalThis.$altcha.i18n.set("es-es", i18n$P);
const i18n$O = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Ingresa el código",
enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.",
expired: "La verificación expiró. Por favor inténtalo de nuevo.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un reto de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Volver a cargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espera.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación."
};
globalThis.$altcha.i18n.set("es-419", i18n$O);
const i18n$N = {
ariaLinkLabel: "Altcha (ametlik veebisait)",
enterCode: "Sisesta kood",
enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",
error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",
expired: "Kinnitamine aegus. Proovi uuesti.",
footer: 'Kaitstud <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ametlik veebisait)">ALTCHA</a> poolt',
getAudioChallenge: "Hangi heliülesanne",
label: "Ma ei ole robot",
loading: "Laadimine...",
reload: "Laadi uuesti",
verify: "Kinnita",
verificationRequired: "Kontroll on vajalik!",
verified: "Kinnitatud",
verifying: "Kinnitamine...",
waitAlert: "Kinnitamine... palun oota.",
cancel: "Tühista",
enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood."
};
globalThis.$altcha.i18n.set("et", i18n$N);
const i18n$M = {
ariaLinkLabel: "Altcha (webgune ofiziala)",
enterCode: "Sartu kodea",
enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",
error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.",
expired: "Egiaztatzea iraungi da. Saiatu berriro.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (webgune ofiziala)">ALTCHA</a>k babestuta',
getAudioChallenge: "Jaso audio-erronka bat",
label: "Ez naiz robot bat",
loading: "Kargatzen...",
reload: "Birkargatu",
verify: "Egiaztatu",
verificationRequired: "Egiaztatzea beharrezkoa da!",
verified: "Egiaztatuta",
verifying: "Egiaztatzen...",
waitAlert: "Egiaztatzen... itxaron mesedez.",
cancel: "Utzi",
enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea."
};
globalThis.$altcha.i18n.set("eu", i18n$M);
const i18n$L = {
ariaLinkLabel: "Altcha (وب‌سایت رسمی)",
enterCode: "کد را وارد کنید",
enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",
error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",
expired: "احراز هویت منقضی شد. دوباره تلاش کنید.",
footer: 'محافظت شده توسط <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (وب‌سایت رسمی)">ALTCHA</a>',
getAudioChallenge: "دریافت چالش صوتی",
label: "من ربات نیستم",
loading: "در حال بارگذاری...",
reload: "بارگذاری مجدد",
verify: "تایید",
verificationRequired: "احراز هویت لازم است!",
verified: "تایید شد",
verifying: "در حال تایید...",
waitAlert: "در حال تایید... لطفا منتظر بمانید.",
cancel: "لغو کردن",
enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید."
};
globalThis.$altcha.i18n.set("fa", i18n$L);
const i18n$K = {
ariaLinkLabel: "Altcha (offiziell Websäit)",
enterCode: "Code aginn",
enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",
error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",
expired: "Verifikatioun ofgelaf. Probéiert nach emol.",
footer: 'Geschützt vun <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offiziell Websäit)">ALTCHA</a>',
getAudioChallenge: "Kritt eng Audio-Herausfuerderung",
label: "Ech sinn keen Robot",
loading: "Lueden...",
reload: "Nei lueden",
verify: "Verifizéieren",
verificationRequired: "Verifikatioun néideg!",
verified: "Verifizéiert",
verifying: "Verifizéieren...",
waitAlert: "Verifizéieren... waart wgl.",
cancel: "Ofbriechen",
enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."
};
globalThis.$altcha.i18n.set("lb", i18n$K);
const i18n$J = {
ariaLinkLabel: "Altcha (virallinen verkkosivusto)",
enterCode: "Syötä koodi",
enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",
error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.",
expired: "Varmennus vanhentui. Yritä uudelleen.",
footer: 'Suojattu <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (virallinen verkkosivusto)">ALTCHA</a>:lla',
getAudioChallenge: "Hae äänitehtävä",
label: "En ole robotti",
loading: "Ladataan...",
reload: "Lataa uudelleen",
verify: "Vahvista",
verificationRequired: "Vahvistus vaaditaan!",
verified: "Vahvistettu",
verifying: "Vahvistetaan...",
waitAlert: "Vahvistetaan... odota hetki.",
cancel: "Peruuta",
enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi."
};
globalThis.$altcha.i18n.set("fi", i18n$J);
const i18n$I = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",
error: "Échec de la vérification. Réessayez plus tard.",
expired: "La vérification a expiré. Réessayez.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-ca", i18n$I);
const i18n$H = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",
error: "Échec de la vérification. Essayez à nouveau plus tard.",
expired: "La vérification a expiré. Essayez à nouveau.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-fr", i18n$H);
const i18n$G = {
ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)",
enterCode: "Iontráil cód",
enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",
error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.",
expired: "Tá an fíorú as feidhm. Bain triail eile as.",
footer: 'Cosanta ag <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (láithreán gréasáin oifigiúil)">ALTCHA</a>',
getAudioChallenge: "Faigh dúshlán fuaime",
label: "Níl mé i mo róbat",
loading: "Á luchtú...",
reload: "Athluchtaigh",
verify: "Fíoraigh",
verificationRequired: "Fíorú riachtanach!",
verified: "Fíoraithe",
verifying: "Fíorú ar siúl...",
waitAlert: "Fíorú ar siúl... fan go fóill.",
cancel: "Cealaigh",
enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."
};
globalThis.$altcha.i18n.set("ga", i18n$G);
const i18n$F = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",
error: "Provjera nije uspjela. Molimo pokušajte kasnije.",
expired: "Provjera je istekla. Molimo pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Audio provjera",
label: "Ja nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Provjeri",
verificationRequired: "Potrebna je provjera!",
verified: "Provjereno",
verifying: "Provjeravanje...",
waitAlert: "Provjera je u tijeku... molimo pričekajte.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("hr", i18n$F);
const i18n$E = {
ariaLinkLabel: "Altcha (hivatalos weboldal)",
enterCode: "Írja be a kódot",
enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",
error: "A hitelesítés nem sikerült. Próbáld meg később újra.",
expired: "A hitelesítés lejárt. Próbáld újra.",
footer: 'Védve a következő által: <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (hivatalos weboldal)">ALTCHA</a>',
getAudioChallenge: "Hangalapú kihívás kérése",
label: "Nem vagyok robot",
loading: "Betöltés...",
reload: "Újratöltés",
verify: "Ellenőrzés",
verificationRequired: "Ellenőrzés szükséges!",
verified: "Ellenőrizve",
verifying: "Ellenőrzés folyamatban...",
waitAlert: "Ellenőrzés folyamatban... kérlek várj.",
cancel: "Mégse",
enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját."
};
globalThis.$altcha.i18n.set("hu", i18n$E);
const i18n$D = {
ariaLinkLabel: "Altcha (opinber vefsíða)",
enterCode: "Sláðu inn kóða",
enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",
error: "Staðfesting mistókst. Reyndu aftur síðar.",
expired: "Staðfesting er útrunnin. Reyndu aftur.",
footer: 'Verndað af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (opinber vefsíða)">ALTCHA</a>',
getAudioChallenge: "Fá hljóðáskorun",
label: "Ég er ekki robot",
loading: "Hleður...",
reload: "Hleð aftur",
verify: "Staðfesta",
verificationRequired: "Staðfesting er nauðsynleg!",
verified: "Staðfest",
verifying: "Að staðfesta...",
waitAlert: "Að staðfesta... vinsamlegast bíða.",
cancel: "Hætta við",
enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."
};
globalThis.$altcha.i18n.set("is", i18n$D);
const i18n$C = {
ariaLinkLabel: "Altcha (sito ufficiale)",
enterCode: "Inserisci il codice",
enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",
error: "Verifica fallita. Riprova più tardi.",
expired: "Verifica scaduta. Riprova.",
footer: 'Protetto da <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sito ufficiale)">ALTCHA</a>',
getAudioChallenge: "Ottieni una sfida audio",
label: "Non sono un robot",
loading: "Caricamento...",
reload: "Ricarica",
verify: "Verifica",
verificationRequired: "Verifica richiesta!",
verified: "Verificato",
verifying: "Verifica in corso...",
waitAlert: "Verifica in corso... attendere.",
cancel: "Annulla",
enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante."
};
globalThis.$altcha.i18n.set("it", i18n$C);
const i18n$B = {
ariaLinkLabel: "Altcha (oficiali svetainė)",
enterCode: "Įveskite kodą",
enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",
error: "Patvirtinimas nepavyko. Bandykite vėliau.",
expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.",
footer: 'Apsaugota <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiali svetainė)">ALTCHA</a>',
getAudioChallenge: "Gauti garso užduotį",
label: "Aš nesu robotas",
loading: "Įkeliama...",
reload: "Įkelti iš naujo",
verify: "Patvirtinti",
verificationRequired: "Reikalingas patvirtinimas!",
verified: "Patvirtinta",
verifying: "Tikrinama...",
waitAlert: "Tikrinama... prašome palaukti.",
cancel: "Atšaukti",
enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."
};
globalThis.$altcha.i18n.set("lt", i18n$B);
const i18n$A = {
ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)",
enterCode: "Ievadiet kodu",
enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",
error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",
expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",
footer: 'Aizsargāts ar <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiālā tīmekļa vietne)">ALTCHA</a>',
getAudioChallenge: "Saņemt audio izaicinājumu",
label: "Es neesmu robots",
loading: "Notiek ielāde...",
reload: "Pārlādēt",
verify: "Verificēt",
verificationRequired: "Nepieciešama verifikācija!",
verified: "Verificēts",
verifying: "Notiek verifikācija...",
waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.",
cancel: "Atcelt",
enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."
};
globalThis.$altcha.i18n.set("lv", i18n$A);
const i18n$z = {
ariaLinkLabel: "Altcha (sit uffiċjali)",
enterCode: "Idħol il-kodiċi",
enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",
error: "Il-verifika falliet. Erġa’ pprova aktar tard.",
expired: "Il-verifika skadiet. Erġa’ pprova.",
footer: 'Protett minn <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sit uffiċjali)">ALTCHA</a>',
getAudioChallenge: "Ikseb sfida bl-awdjo",
label: "M’inix robot",
loading: "Qed jitgħabba...",
reload: "Ittella’ mill-ġdid",
verify: "Ivverifika",
verificationRequired: "Verifika meħtieġa!",
verified: "Ivverifikat",
verifying: "Verifika għaddejja...",
waitAlert: "Verifika għaddejja... stenna ftit.",
cancel: "Ikkanċella",
enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."
};
globalThis.$altcha.i18n.set("mt", i18n$z);
const i18n$y = {
ariaLinkLabel: "Altcha (offisiell nettside)",
enterCode: "Skriv inn kode",
enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.",
error: "Verifisering mislyktes. Prøv igjen senere.",
expired: "Verifiseringen utløp. Prøv igjen.",
footer: 'Beskyttet av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offisiell nettside)">ALTCHA</a>',
getAudioChallenge: "Få en lydutfordring",
label: "Jeg er ikke en robot",
loading: "Laster...",
reload: "Last på nytt",
verify: "Verifiser",
verificationRequired: "Verifisering kreves!",
verified: "Verifisert",
verifying: "Verifiserer...",
waitAlert: "Verifiserer... vennligst vent.",
cancel: "Avbryt",
enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor."
};
globalThis.$altcha.i18n.set("nb", i18n$y);
const i18n$x = {
ariaLinkLabel: "Altcha (officiële website)",
enterCode: "Voer code in",
enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",
error: "Verificatie mislukt. Probeer het later opnieuw.",
expired: "Verificatie verlopen. Probeer het opnieuw.",
footer: 'Beschermd door <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiële website)">ALTCHA</a>',
getAudioChallenge: "Audio-uitdaging ontvangen",
label: "Ik ben geen robot",
loading: "Laden...",
reload: "Herladen",
verify: "Verifiëren",
verificationRequired: "Verificatie vereist!",
verified: "Geverifieerd",
verifying: "Bezig met verifiëren...",
waitAlert: "Bezig met verifiëren... even geduld a.u.b.",
cancel: "Annuleren",
enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in."
};
globalThis.$altcha.i18n.set("nl", i18n$x);
const i18n$w = {
ariaLinkLabel: "Altcha (oficjalna strona internetowa)",
enterCode: "Wprowadź kod",
enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",
error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.",
expired: "Weryfikacja wygasła. Spróbuj ponownie.",
footer: 'Chronione przez <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficjalna strona internetowa)">ALTCHA</a>',
getAudioChallenge: "Pobierz zadanie dźwiękowe",
label: "Nie jestem robotem",
loading: "Ładowanie...",
reload: "Odśwież",
verify: "Zweryfikuj",
verificationRequired: "Wymagana weryfikacja!",
verified: "Zweryfikowano",
verifying: "Weryfikacja...",
waitAlert: "Trwa weryfikacja... proszę czekać.",
cancel: "Anuluj",
enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka."
};
globalThis.$altcha.i18n.set("pl", i18n$w);
const i18n$v = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduza o código",
enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",
error: "A verificação falhou. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Não sou um robô",
loading: "A carregar...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "A verificar...",
waitAlert: "A verificar... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-pt", i18n$v);
const i18n$u = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Digite o código",
enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",
error: "Falha na verificação. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Eu não sou um robô",
loading: "Carregando...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-br", i18n$u);
const i18n$t = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduceți codul",
enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",
error: "Verificarea a eșuat. Încearcă din nou mai târziu.",
expired: "Verificarea a expirat. Încearcă din nou.",
footer: 'Protejat de <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obține o provocare audio",
label: "Nu sunt un robot",
loading: "Se încarcă...",
reload: "Reîncarcă",
verify: "Verifică",
verificationRequired: "Verificare necesară!",
verified: "Verificat",
verifying: "Se verifică...",
waitAlert: "Se verifică... te rugăm să aștepți.",
cancel: "Anulare",
enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."
};
globalThis.$altcha.i18n.set("ro", i18n$t);
const i18n$s = {
ariaLinkLabel: "Altcha (официальный сайт)",
enterCode: "Введите код",
enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",
error: "Ошибка верификации. Попробуйте позже.",
expired: "Срок действия верификации истек. Попробуйте снова.",
footer: 'Защищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официальный сайт)">ALTCHA</a>',
getAudioChallenge: "Получить аудио задачу",
label: "Я не робот",
loading: "Загрузка...",
reload: "Перезагрузить",
verify: "Проверить",
verificationRequired: "Требуется проверка!",
verified: "Проверено",
verifying: "Идет проверка...",
waitAlert: "Идет проверка... Пожалуйста, подождите.",
cancel: "Отмена",
enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже."
};
globalThis.$altcha.i18n.set("ru", i18n$s);
const i18n$r = {
ariaLinkLabel: "Altcha (oficiálna webová stránka)",
enterCode: "Zadajte kód",
enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",
error: "Verifikácia zlyhala. Skúste to znova neskôr.",
expired: "Verifikácia vypršala. Skúste to znova.",
footer: 'Chránené <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiálna webová stránka)">ALTCHA</a>',
getAudioChallenge: "Získať audio výzvu",
label: "Nie som robot",
loading: "Načítava sa...",
reload: "Obnoviť",
verify: "Verifikovať",
verificationRequired: "Vyžaduje sa overenie!",
verified: "Verifikované",
verifying: "Prebieha verifikácia...",
waitAlert: "Prebieha verifikácia... prosím čakajte.",
cancel: "Zrušiť",
enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie."
};
globalThis.$altcha.i18n.set("sk", i18n$r);
const i18n$q = {
ariaLinkLabel: "Altcha (uradna spletna stran)",
enterCode: "Vnesite kodo",
enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",
error: "Preverjanje ni uspelo. Poskusite znova kasneje.",
expired: "Preverjanje je poteklo. Poskusite znova.",
footer: 'Zaščiteno z <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (uradna spletna stran)">ALTCHA</a>',
getAudioChallenge: "Pridobite zvočni izziv",
label: "Nisem robot",
loading: "Nalagam...",
reload: "Ponovno naloži",
verify: "Preveri",
verificationRequired: "Potrebna je preveritev!",
verified: "Preverjeno",
verifying: "Preverjanje...",
waitAlert: "Preverjanje... prosim počakajte.",
cancel: "Preklic",
enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."
};
globalThis.$altcha.i18n.set("sl", i18n$q);
const i18n$p = {
ariaLinkLabel: "Altcha (faqja zyrtare)",
enterCode: "Fut kodin",
enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",
error: "Verifikimi dështoi. Provoni përsëri më vonë.",
expired: "Verifikimi ka skaduar. Provoni përsëri.",
footer: 'I mbrojtur nga <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (faqja zyrtare)">ALTCHA</a>',
getAudioChallenge: "Merr një sfidë audio",
label: "Unë nuk jam një robot",
loading: "Duke u ngarkuar...",
reload: "Ringarko",
verify: "Verifiko",
verificationRequired: "Kërkohet verifikimi!",
verified: "I verifikuar",
verifying: "Duke verifikuar...",
waitAlert: "Duke verifikuar... ju lutem prisni.",
cancel: "Anuloje",
enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."
};
globalThis.$altcha.i18n.set("sq", i18n$p);
const i18n$o = {
ariaLinkLabel: "Altcha (zvanična web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (zvanična web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovo učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Откажи",
enterCodeFromImage: "Да бисте наставили, унесите код са слике испод."
};
globalThis.$altcha.i18n.set("sr", i18n$o);
const i18n$n = {
ariaLinkLabel: "Altcha (officiell webbplats)",
enterCode: "Ange kod",
enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
error: "Verifiering misslyckades. Försök igen senare.",
expired: "Verifieringen har gått ut. Försök igen.",
footer: 'Skyddad av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiell webbplats)">ALTCHA</a>',
getAudioChallenge: "Få ljudutmaning",
label: "Jag är inte en robot",
loading: "Laddar...",
reload: "Ladda om",
verify: "Verifiera",
verificationRequired: "Verifiering krävs!",
verified: "Verifierad",
verifying: "Verifierar...",
waitAlert: "Verifierar... vänligen vänta.",
cancel: "Avbryt",
enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan."
};
globalThis.$altcha.i18n.set("sv", i18n$n);
const i18n$m = {
ariaLinkLabel: "Altcha (resmi web sitesi)",
enterCode: "Kodu girin",
enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
footer: 'ALTCHA tarafından korunuyor <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (resmi web sitesi)">ALTCHA</a>',
getAudioChallenge: "Sesli doğrulama al",
label: "Ben robot değilim",
loading: "Yükleniyor...",
reload: "Yeniden yükle",
verify: "Doğrula",
verificationRequired: "Doğrulama gerekli!",
verified: "Doğrulandı",
verifying: "Doğrulama yapılıyor...",
waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.",
cancel: "İptal",
enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin."
};
globalThis.$altcha.i18n.set("tr", i18n$m);
const i18n$l = {
ariaLinkLabel: "Altcha (офіційний сайт)",
enterCode: "Введіть код",
enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
error: "Перевірка не вдалася. Спробуйте пізніше.",
expired: "Перевірка прострочена. Спробуйте знову.",
footer: 'Захищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (офіційний сайт)">ALTCHA</a>',
getAudioChallenge: "Отримати аудіо-челлендж",
label: "Я не робот",
loading: "Завантаження...",
reload: "Перезавантажити",
verify: "Перевірити",
verificationRequired: "Потрібна перевірка!",
verified: "Перевірено",
verifying: "Перевіряється...",
waitAlert: "Перевірка... будь ласка, зачекайте.",
cancel: "Скасувати",
enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче."
};
globalThis.$altcha.i18n.set("uk", i18n$l);
const i18n$k = {
ariaLinkLabel: "Altcha (amptelike webwerf)",
enterCode: "Voer kode in",
enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",
error: "Verifikasie het misluk. Probeer later weer.",
expired: "Verifikasie het verval. Probeer weer.",
footer: 'Beskerm deur <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (amptelike webwerf)">ALTCHA</a>',
getAudioChallenge: "Kry 'n klankuitdaging",
label: "Ek is nie 'n robot nie",
loading: "Laai...",
reload: "Laai weer",
verify: "Verifieer",
verificationRequired: "Verifikasie is vereis!",
verified: "Geverifieer",
verifying: "Verifieer...",
waitAlert: "Verifieer... wag asseblief.",
cancel: "Kanselleer",
enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."
};
globalThis.$altcha.i18n.set("af", i18n$k);
const i18n$j = {
ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)",
enterCode: "ኮድ አስገባ",
enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",
error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",
expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",
footer: 'በ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ዋናው ድህረ ገጽ)">ALTCHA</a> የተጠበቀ',
getAudioChallenge: "የድምጽ ፈተና ያግኙ",
label: "እኔ ሮቦት አይደለሁም",
loading: "በመጫን ላይ...",
reload: "እንደገና ጫን",
verify: "አረጋግጥ",
verificationRequired: "ማረጋገጫ ያስፈልጋል!",
verified: "ተረጋግጧል",
verifying: "በማረጋገጥ ላይ...",
waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",
cancel: "ይቅር",
enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"
};
globalThis.$altcha.i18n.set("am", i18n$j);
const i18n$i = {
ariaLinkLabel: "Altcha (tovuti rasmi)",
enterCode: "Weka nambari",
enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.",
error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.",
expired: "Uthibitishaji umeisha. Jaribu tena.",
footer: 'Imealindwa na <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (tovuti rasmi)">ALTCHA</a>',
getAudioChallenge: "Pata changamoto ya sauti",
label: "Mimi sio roboti",
loading: "Inapakia...",
reload: "Pakia tena",
verify: "Thibitisha",
verificationRequired: "Uthibitishaji unahitajika!",
verified: "Imethibitishwa",
verifying: "Inathibitisha...",
waitAlert: "Inathibitisha... tafadhali subiri.",
cancel: "Ghairi",
enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."
};
globalThis.$altcha.i18n.set("sw", i18n$i);
const i18n$h = {
ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)",
enterCode: "Tẹ koodu sii",
enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",
error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",
expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",
footer: 'Ti wa ni ààbò nipasẹ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oju opo wẹẹbu osise)">ALTCHA</a>',
getAudioChallenge: "Gba ìjàdú ohùn",
label: "Emi kii ṣe ẹrọ",
loading: "Ó ń gbé sílẹ̀...",
reload: "Tún gbé wọlé",
verify: "Ṣàdájọ́",
verificationRequired: "Ìdájọ́kòwò ni a nílò!",
verified: "A ti dájọ́",
verifying: "Ó ń ṣàdájọ́...",
waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",
cancel: "Fagbọsẹ",
enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."
};
globalThis.$altcha.i18n.set("yo", i18n$h);
const i18n$g = {
ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)",
enterCode: "কোড লিখুন",
enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",
error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",
expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",
footer: 'দ্বারা সুরক্ষিত <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (অফিসিয়াল ওয়েবসাইট)">ALTCHA</a>',
getAudioChallenge: "অডিও চ্যালেঞ্জ নিন",
label: "আমি রোবট নই",
loading: "লোড হচ্ছে...",
reload: "পুনরায় লোড করুন",
verify: "যাচাই করুন",
verificationRequired: "যাচাই প্রয়োজন!",
verified: "যাচাই করা হয়েছে",
verifying: "যাচাই করা হচ্ছে...",
waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",
cancel: "বাতিল করুন",
enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"
};
globalThis.$altcha.i18n.set("bn", i18n$g);
const i18n$f = {
ariaLinkLabel: "Altcha (אתר רשמי)",
enterCode: "הזן קוד",
enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",
error: "האימות נכשל. נסה שוב מאוחר יותר.",
expired: "תוקף האימות פג. נסה שוב.",
footer: 'מוגן על ידי <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (אתר רשמי)">ALTCHA</a>',
getAudioChallenge: "קבל אתגר שמע",
label: "אני לא רובוט",
loading: "טוען...",
reload: "טען מחדש",
verify: "אמת",
verificationRequired: "נדרש אימות!",
verified: "אומת",
verifying: "מאמת...",
waitAlert: "מבצע אימות... אנא המתן.",
cancel: "ביטול",
enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."
};
globalThis.$altcha.i18n.set("he", i18n$f);
const i18n$e = {
ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)",
enterCode: "कोड दर्ज करेंं",
enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",
error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",
expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",
footer: 'द्वारा संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (आधिकारिक वेबसाइट)">ALTCHA</a>',
getAudioChallenge: "ऑडियो चुनौती प्राप्त करें",
label: "मैं रोबोट नहीं हूँ",
loading: "लोड हो रहा है...",
reload: "पुनः लोड करें",
verify: "सत्यापित करें",
verificationRequired: "सत्यापन आवश्यक है!",
verified: "सत्यापित",
verifying: "सत्यापित कर रहे हैं...",
waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",
cancel: "रद्द करें",
enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"
};
globalThis.$altcha.i18n.set("hi", i18n$e);
const i18n$d = {
ariaLinkLabel: "Altcha (situs web resmi)",
enterCode: "Masukkan kode",
enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",
error: "Verifikasi gagal. Coba lagi nanti.",
expired: "Verifikasi telah kedaluwarsa. Coba lagi.",
footer: 'Dilindungi oleh <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (situs web resmi)">ALTCHA</a>',
getAudioChallenge: "Dapatkan tantangan audio",
label: "Saya bukan robot",
loading: "Memuat...",
reload: "Muat ulang",
verify: "Verifikasi",
verificationRequired: "Verifikasi diperlukan!",
verified: "Terverifikasi",
verifying: "Memverifikasi...",
waitAlert: "Memverifikasi... harap tunggu.",
cancel: "Batal",
enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."
};
globalThis.$altcha.i18n.set("id", i18n$d);
const i18n$c = {
ariaLinkLabel: "Altcha (公式ウェブサイト)",
enterCode: "コードを入力",
enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。",
error: "認証に失敗しました。後でもう一度試してください。",
expired: "認証が期限切れです。再試行してください。",
footer: '保護されています <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (公式ウェブサイト)">ALTCHA</a>',
getAudioChallenge: "音声チャレンジを取得",
label: "私はロボットではありません",
loading: "読み込み中...",
reload: "再読み込み",
verify: "確認",
verificationRequired: "認証が必要です!",
verified: "確認済み",
verifying: "確認中...",
waitAlert: "確認中...少々お待ちください。",
cancel: "キャンセル",
enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。"
};
globalThis.$altcha.i18n.set("ja", i18n$c);
const i18n$b = {
ariaLinkLabel: "Altcha (공식 웹사이트)",
enterCode: "코드 입력",
enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",
error: "인증 실패. 나중에 다시 시도해주세요.",
expired: "인증이 만료되었습니다. 다시 시도해주세요.",
footer: 'ALTCHA에서 보호됨 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (공식 웹사이트)">ALTCHA</a>',
getAudioChallenge: "오디오 챌린지 받기",
label: "저는 로봇이 아닙니다",
loading: "로딩 중...",
reload: "새로 고침",
verify: "확인",
verificationRequired: "인증이 필요합니다!",
verified: "확인됨",
verifying: "확인 중...",
waitAlert: "확인 중... 잠시만 기다려주세요.",
cancel: "취소",
enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요."
};
globalThis.$altcha.i18n.set("ko", i18n$b);
const i18n$a = {
ariaLinkLabel: "Altcha (ресми веб-сайт)",
enterCode: "Кодты енгізіңіз",
enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",
error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",
expired: "Тексеру мерзімі аяқталды. Қайталаңыз.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ресми веб-сайт)">ALTCHA</a> қорғайды',
getAudioChallenge: "Аудио сынақ алу",
label: "Мен робот емеспін",
loading: "Жүктелуде...",
reload: "Қайта жүктеу",
verify: "Тексеру",
verificationRequired: "Тексеру талап етіледі!",
verified: "Тексерілді",
verifying: "Тексеруде...",
waitAlert: "Тексерілуде... күте тұрыңыз.",
cancel: "Болдыру",
enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."
};
globalThis.$altcha.i18n.set("kk", i18n$a);
const i18n$9 = {
ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)",
enterCode: "कोड टाकाा",
enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",
error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",
expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",
footer: 'द्वारे संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (अधिकृत संकेतस्थळ)">ALTCHA</a>',
getAudioChallenge: "ऑडिओ चॅलेंज मिळवा",
label: "मी रोबोट नाही",
loading: "लोड होत आहे...",
reload: "पुन्हा लोड करा",
verify: "पुष्टीकरण करा",
verificationRequired: "पडताळणी आवश्यक आहे!",
verified: "पुष्टीकरण झाले",
verifying: "पुष्टीकरण करत आहे...",
waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",
cancel: "रद्द करा",
enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."
};
globalThis.$altcha.i18n.set("mr", i18n$9);
const i18n$8 = {
ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",
enterCode: "குறியீட்டை உள்ளிடவும்",
enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (அதிகாரப்பூர்வ வலைத்தளம்)">ALTCHA</a>',
getAudioChallenge: "ஒலி சவாலை பெறவும்",
label: "நான் ரோபோடான அல்ல",
loading: "செயலாக்கம்...",
reload: "மீண்டும் புதுப்பிக்கவும்",
verify: "சரிபார்க்கவும்",
verificationRequired: "சரிபார்ப்பு தேவை!",
verified: "சரிபார்க்கப்பட்டது",
verifying: "சரிபார்க்கப்படுகிறது...",
waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",
cancel: "ரத்துசெய்",
enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."
};
globalThis.$altcha.i18n.set("ta", i18n$8);
const i18n$7 = {
ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)",
enterCode: "కోడ్‌ని నమోదు చేయండి",
enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (అధికారిక వెబ్‌సైట్)">ALTCHA</a>',
getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
label: "నేను రోబోట్ కాదు",
loading: "లోడ్ అవుతోంది...",
reload: "మళ్ళీ లోడ్ చేయండి",
verify: "ధ్రువీకరించు",
verificationRequired: "ధృవీకరణ అవసరం!",
verified: "ధ్రువీకరించబడింది",
verifying: "ధ్రువీకరణ జరుగుతుంది...",
waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",
cancel: "రద్దు చేయండి",
enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."
};
globalThis.$altcha.i18n.set("te", i18n$7);
const i18n$6 = {
ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)",
enterCode: "ป้อนรหัส",
enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
footer: 'ป้องกันโดย <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (เว็บไซต์ทางการ)">ALTCHA</a>',
getAudioChallenge: "รับการท้าทายเสียง",
label: "ฉันไม่ใช่บอท",
loading: "กำลังโหลด...",
reload: "โหลดใหม่",
verify: "ตรวจสอบ",
verificationRequired: "จำเป็นต้องตรวจสอบ!",
verified: "ตรวจสอบแล้ว",
verifying: "กำลังตรวจสอบ...",
waitAlert: "กำลังตรวจสอบ... กรุณารอ",
cancel: "ยกเลิก",
enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"
};
globalThis.$altcha.i18n.set("th", i18n$6);
const i18n$5 = {
ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)",
enterCode: "کوڈ درج کریں",
enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (سرکاری ویب سائٹ)">ALTCHA</a>',
getAudioChallenge: "آڈیو چیلنج حاصل کریں",
label: "میں روبوٹ نہیں ہوں",
loading: "لوڈ ہو رہا ہے...",
reload: "دوبارہ لوڈ کریں",
verify: "توثیق کریں",
verificationRequired: "تصدیق ضروری ہے!",
verified: "توثیق شدہ",
verifying: "توثیق ہو رہی ہے...",
waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",
cancel: "منسوخ کریں",
enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"
};
globalThis.$altcha.i18n.set("ur", i18n$5);
const i18n$4 = {
ariaLinkLabel: "Altcha (rasmiy veb-sayt)",
enterCode: "Kodni kiriting",
enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",
error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",
expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (rasmiy veb-sayt)">ALTCHA</a> tomonidan himoyalangan',
getAudioChallenge: "Audio sinovni olish",
label: "Men robot emasman",
loading: "Yuklanmoqda...",
reload: "Qayta yuklash",
verify: "Tekshirish",
verificationRequired: "Tekshiruv talab qilinadi!",
verified: "Tekshirildi",
verifying: "Tekshirilmoqda...",
waitAlert: "Tekshirilmoqda... iltimos kuting.",
cancel: "Bekor qilish",
enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."
};
globalThis.$altcha.i18n.set("uz", i18n$4);
const i18n$3 = {
ariaLinkLabel: "Altcha (trang web chính thức)",
enterCode: "Nhập mã",
enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
error: "Xác minh thất bại. Vui lòng thử lại sau.",
expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
footer: 'Được bảo vệ bởi <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (trang web chính thức)">ALTCHA</a>',
getAudioChallenge: "Nhận thử thách âm thanh",
label: "Tôi không phải là robot",
loading: "Đang tải...",
reload: "Tải lại",
verify: "Xác minh",
verificationRequired: "Yêu cầu xác minh!",
verified: "Đã xác minh",
verifying: "Đang xác minh...",
waitAlert: "Đang xác minh... vui lòng chờ.",
cancel: "Hủy bỏ",
enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."
};
globalThis.$altcha.i18n.set("vi", i18n$3);
const i18n$2 = {
ariaLinkLabel: "Altcha (官方网站)",
enterCode: "输入代码",
enterCodeAria: "输入您听到的代码。按空格键播放音频。",
error: "验证失败。稍后再试。",
expired: "验证已过期。请重试。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方网站)">ALTCHA</a> 保护',
getAudioChallenge: "获取音频挑战",
label: "我不是机器人",
loading: "加载中...",
reload: "重新加载",
verify: "验证",
verificationRequired: "需要验证!",
verified: "已验证",
verifying: "正在验证...",
waitAlert: "正在验证... 请稍等。",
cancel: "取消",
enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。"
};
globalThis.$altcha.i18n.set("zh-cn", i18n$2);
const i18n$1 = {
ariaLinkLabel: "Altcha (官方網站)",
cancel: "取消",
enterCode: "輸入代碼",
enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。",
enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。",
error: "驗證失敗。請稍後再試。",
expired: "驗證已過期。請再試一次。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 提供保護',
getAudioChallenge: "取得音訊驗證",
label: "我唔係機械人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "驗證中...",
waitAlert: "驗證中... 請稍候。"
};
globalThis.$altcha.i18n.set("zh-hk", i18n$1);
const i18n = {
ariaLinkLabel: "Altcha (官方網站)",
enterCode: "輸入代碼",
enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
error: "驗證失敗。稍後再試。",
expired: "驗證已過期。請重試。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 保護',
getAudioChallenge: "獲取音頻挑戰",
label: "我不是機器人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "正在驗證...",
waitAlert: "正在驗證... 請稍等。",
cancel: "取消",
enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。"
};
globalThis.$altcha.i18n.set("zh-tw", i18n);
 
data/skin/front/story_g/js/gd_board_goods.js+110
변경 전gd_board_goods.js
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
var getData = function (id, target) {
id = id.toLowerCase();
switch (id) {
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return true;
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function openWriteLayer(bdId, goodsNo,sno) {
$.ajax({
method: "GET",
}).success(function (data) {
writerLayer.show(data);
centerLayer();
 
}).error(function (e) {
if(e.responseText)
alert(e.responseText);
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
var getData = function (id, target) {
id = id.toLowerCase();
switch (id) {
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return true;
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function openWriteLayer(bdId, goodsNo,sno) {
$.ajax({
method: "GET",
}).success(function (data) {
writerLayer.show(data);
centerLayer();
 
}).error(function (e) {
if(e.responseText)
alert(e.responseText);
 
변경 후gd_board_goods.js
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
 
var getData = function (id, target) {
id = id.toLowerCase();
switch (id) {
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return true;
}
 
function loadAltchaModule() {
if (window.gdAltchaModuleLoaded) {
return;
}
const wrap = document.querySelector('.capcha_altcha[data-altcha-src]');
if (!wrap) {
return;
}
window.gdAltchaModuleLoaded = true;
const src = wrap.getAttribute('data-altcha-src');
[src, src.replace('altcha.js', 'i18n.js')].forEach(function (url) {
const script = document.createElement('script');
script.type = 'module';
script.src = url;
document.head.appendChild(script);
});
}
 
function openWriteLayer(bdId, goodsNo,sno) {
$.ajax({
method: "GET",
}).success(function (data) {
writerLayer.show(data);
centerLayer();
loadAltchaModule();
}).error(function (e) {
if(e.responseText)
alert(e.responseText);
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
 
var getData = function (id, target) {
id = id.toLowerCase();
switch (id) {
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return true;
}
 
function loadAltchaModule() {
if (window.gdAltchaModuleLoaded) {
return;
}
const wrap = document.querySelector('.capcha_altcha[data-altcha-src]');
if (!wrap) {
return;
}
window.gdAltchaModuleLoaded = true;
const src = wrap.getAttribute('data-altcha-src');
[src, src.replace('altcha.js', 'i18n.js')].forEach(function (url) {
const script = document.createElement('script');
script.type = 'module';
script.src = url;
document.head.appendChild(script);
});
}
 
function openWriteLayer(bdId, goodsNo,sno) {
$.ajax({
method: "GET",
}).success(function (data) {
writerLayer.show(data);
centerLayer();
loadAltchaModule();
}).error(function (e) {
if(e.responseText)
alert(e.responseText);
 
data/skin/front/story_g/js/gd_board_view.js+72
변경 전gd_board_view.js
*/
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$('img.js-smart-img').each(function () {
$(this).css('max-width', '100%');
});
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
*/
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$('img.js-smart-img').each(function () {
$(this).css('max-width', '100%');
});
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
 
변경 후gd_board_view.js
*/
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
$('img.js-smart-img').each(function () {
$(this).css('max-width', '100%');
});
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
*/
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
$('img.js-smart-img').each(function () {
$(this).css('max-width', '100%');
});
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if ($('#secretReplyModify').is(":checked") || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
 
data/skin/front/story_g/js/gd_board_write.js+560-602
변경 전gd_board_write.js
function captchaReload() {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../board/captcha.php?ch=' + someDate);
}, 1);
}
function addUpload() {
var uploadBoxCount = $('#uploadBox').find('.file-upload').length;
if (uploadBoxCount >= 10) {
alert(__("업로드는 최대 10개만 지원합니다"));
return;
}
var ifrmObj = $(window.frameElement);
var ifrmHeight = ifrmObj.height();
ifrmObj.height(ifrmHeight + 33);
var addUploadBox = _.template(
$("script.template").html()
);
$('#uploadBox:last').append(addUploadBox({idx: uploadBoxCount + 1}));
}
function uploadRemove(obj) {
var bdId = $('[name="bdId"]').val();
var target = $(obj);
index = target.prevAll('input:file').attr('index'); //$('.file-upload button.uploadremove').index(target)+1;
var saveFileNm = $("input[name='saveFileNm[" + index + "]']").val();
var ifrmObj = $(window.frameElement);
var ifrmHeight = ifrmObj.height();
ifrmObj.height(ifrmHeight - 33);
target.closest('.file-upload').remove();
// 파일 없음 처리
if (!saveFileNm) return;
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {
mode: 'deleteUploadImage',
bdId: bdId,
saveFileNm: saveFileNm
},
cache: false,
async: false,
}).success(function (result) {
$("input[name='uploadFileNm[" + index + "]']").remove(); // 삭제된 uploadFileNm 값 제거
$("input[name='saveFileNm[" + index + "]']").remove(); // 삭제된 saveFileNm 값 제거
}).error(function (e) {
alert(e.responseText);
});
}
var boardSuubmitFl = true;
$(document).ready(function () {
var uploadBoxCount = $('#uploadBox').find('.file-upload').length;
$('.file-upload:last').find('label').attr('for', 'attach' + uploadBoxCount);
$('.file-upload:last').find('input[type=file]').attr('id', 'attach' + uploadBoxCount);
if (cfgUploadFl == 'y') {
$('#addUploadBtn').bind('click', function () {
addUpload();
});
}
if ($('.file-upload').length > 10) {
$('.file-upload:last').remove();
}
$.validator.addMethod("checkCaptcha", function (value, element, fl) {
var success = false;
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'captcha', 'captchaKey': value },
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
if (result == 'true') {
success = true;
}
}).error(function (e) {
alert(e.responseText);
});
return success;
}, __("자동등록방지 문자가 틀렸습니다."));
$("#frmWrite").validate({
submitHandler: function (form) {
if (boardSuubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
if (cfgEditorFl == 'y') {
oEditors.getById["editor"].exec("UPDATE_CONTENTS_FIELD", []); // 에디터의 내용이 textarea에 적용됩니다.
}
form.submit();
boardSuubmitFl = false;
},
rules: {
private: 'required',
contents: {
required: function (textarea) {
if (cfgEditorFl == 'y') {
var editorcontent = oEditors.getById[textarea.id].getIR(); // 에디터의 내용 가져오기.
editorcontent = editorcontent.replace(/<(?!img).*?>/ig, '').replace('&nbsp;', ''); //이미지테그제외한 테그제거
return editorcontent.length === 0;
}
else {
return textarea.value.length === 0;
}
}
},
writerNm: 'required',
writerPw: 'required',
subject: 'required',
captchaKey: {
required: true,
checkCaptcha : true,
},
goodsPt: 'required',
writerEmail: {
required: true,
email: true
},
},
messages: {
writerNm: {
required: __('작성자를 입력해주세요.')
},
writerPw: {
required: __('비밀번호를 입력해주세요.')
},
subject: {
required: __('제목을 입력해주세요.')
},
contents: {
required: __('내용을 입력해주세요')
},
private: {
required: __('개인정보 수집 및 이용동의를 체크해주세요.')
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.'),
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
writerEmail: {
required: __('이메일을 입력해주세요.'),
email: __('메일 형식이 틀렸습니다.')
}
}
})
$("#category").on("change", function(){
var category = $(this).val();
var bdId = $('[name="bdId"]').val();
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'category', bdId: bdId, 'category': category},
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
oEditors.getById["editor"].exec("SET_IR", ['']);
oEditors.getById["editor"].exec("PASTE_HTML", [result]);
}).error(function (e) {
alert(e.responseText);
});
});
$('body').on('click','.js-select-remove',function(){
$(this).closest('div.js-select-item').remove();
$('.selected-info-text').show();
})
$('.btn-open-layer').bind('click', function (e) {
var params = {};
if(typeof bdId != 'undefined') {
params = {
bdId : bdId,
bdSno : bdSno,
};
}
if ($(this).attr('href') == '#addGoodsLayer') {
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_goods_select.php",
success: function (data) {
$('#addGoodsLayer').empty().append(data);
$('#addGoodsLayer').find('>div').center();
},
error: function (data) {
alert(data.message);
closeLayer();
}
});
}
else if ($(this).attr('href') == '#addOrderLayer') {
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_order_select.php",
success: function (data) {
$('#addOrderLayer').empty().append(data);
$('#addOrderLayer').find('>div').center();
},
error: function (data) {
alert(data.message);
closeLayer();
}
});
}
});
$(document).on("change", "input:file", function () {
var thisObj = $(this);
var name = this.name;
var idx = $('input[name="' + name + '"]').index(this);
//ajax업로드 처리
var uploadImages = [];
gdAjaxUpload.upload(
{
formObj: $("#frmWrite"),
thisObj: $(this),
actionUrl: '../board/board_ps.php',
params: {bdId: $('[name=bdId]').val(), 'mode': 'ajaxUpload'},
onbeforeunload: function () {
if (uploadImages.length == 0) {
return false;
}
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'deleteGarbageImage', bdId: $('[name=bdId]').val(), deleteImage: uploadImages.join('^|^')},
cache: false,
}).success(function (data) {
}).error(function (e) {
});
},
successAfter: function (data) {
thisObj.attr('index',data.index);
uploadImages.push(data.saveFileNm);
},
failAfter : function(data) {
if (data.result == 'fail' && name == 'upfiles[]') {
$('input[name="' + name + '"]').eq(idx).val('');
}
}
}
)
});
});
function setAddGoods(frmData) {
$.each(frmData.info, function (key, val) {
var selectGoodsTblTr = _.template($('#selectGoodsTblTr').html());
var param = {goodsNo: val.goodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, goodsPrice: val.goodsPrice};
selectGoodstblTrHtml = selectGoodsTblTr(param);
});
$("#selectGoodsBox").empty();
$("#selectGoodsBox").append(selectGoodstblTrHtml);
$('.selected-info-text').hide();
if(parent && parent!=this){
parent.resize_frame(parent.document.getElementsByName(window.name)[0]);
}
}
function setAddOrder(frmData) {
$.each(frmData.info, function (key, val) {
var selectGoodsTblTr = _.template($('#selectOrderTblTr').html());
var param = {orderNo: val.orderNo, orderGoodsNo: val.orderGoodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, optionName:val.optionName,goodsPrice:val.goodsPrice,goodsNo : val.goodsNo};
selectGoodstblTrHtml = selectGoodsTblTr(param);
});
$("#selectOrderBox").empty();
$("#selectOrderBox").append(selectGoodstblTrHtml);
$('.selected-info-text').hide();
if(parent && parent!=this){
parent.resize_frame(parent.document.getElementsByName(window.name)[0]);
}
}
function captchaReload() {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../board/captcha.php?ch=' + someDate);
}, 1);
}
function addUpload() {
var uploadBoxCount = $('#uploadBox').find('.file-upload').length;
if (uploadBoxCount >= 10) {
alert(__("업로드는 최대 10개만 지원합니다"));
return;
}
var ifrmObj = $(window.frameElement);
var ifrmHeight = ifrmObj.height();
ifrmObj.height(ifrmHeight + 33);
var addUploadBox = _.template(
$("script.template").html()
);
$('#uploadBox:last').append(addUploadBox({idx: uploadBoxCount + 1}));
}
function uploadRemove(obj) {
var bdId = $('[name="bdId"]').val();
var target = $(obj);
index = target.prevAll('input:file').attr('index'); //$('.file-upload button.uploadremove').index(target)+1;
var saveFileNm = $("input[name='saveFileNm[" + index + "]']").val();
var ifrmObj = $(window.frameElement);
var ifrmHeight = ifrmObj.height();
ifrmObj.height(ifrmHeight - 33);
target.closest('.file-upload').remove();
// 파일 없음 처리
if (!saveFileNm) return;
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {
mode: 'deleteUploadImage',
bdId: bdId,
saveFileNm: saveFileNm
},
cache: false,
async: false,
}).success(function (result) {
$("input[name='uploadFileNm[" + index + "]']").remove(); // 삭제된 uploadFileNm 값 제거
$("input[name='saveFileNm[" + index + "]']").remove(); // 삭제된 saveFileNm 값 제거
}).error(function (e) {
alert(e.responseText);
});
}
var boardSuubmitFl = true;
$(document).ready(function () {
var uploadBoxCount = $('#uploadBox').find('.file-upload').length;
$('.file-upload:last').find('label').attr('for', 'attach' + uploadBoxCount);
$('.file-upload:last').find('input[type=file]').attr('id', 'attach' + uploadBoxCount);
if (cfgUploadFl == 'y') {
$('#addUploadBtn').bind('click', function () {
addUpload();
});
}
if ($('.file-upload').length > 10) {
$('.file-upload:last').remove();
}
$.validator.addMethod("checkCaptcha", function (value, element, fl) {
var success = false;
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'captcha', 'captchaKey': value },
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
if (result == 'true') {
success = true;
}
}).error(function (e) {
alert(e.responseText);
});
return success;
}, __("자동등록방지 문자가 틀렸습니다."));
$("#frmWrite").validate({
submitHandler: function (form) {
if (boardSuubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
if (cfgEditorFl == 'y') {
oEditors.getById["editor"].exec("UPDATE_CONTENTS_FIELD", []); // 에디터의 내용이 textarea에 적용됩니다.
}
form.submit();
boardSuubmitFl = false;
},
rules: {
private: 'required',
contents: {
required: function (textarea) {
if (cfgEditorFl == 'y') {
var editorcontent = oEditors.getById[textarea.id].getIR(); // 에디터의 내용 가져오기.
editorcontent = editorcontent.replace(/<(?!img).*?>/ig, '').replace('&nbsp;', ''); //이미지테그제외한 테그제거
return editorcontent.length === 0;
}
else {
return textarea.value.length === 0;
}
}
},
writerNm: 'required',
writerPw: 'required',
subject: 'required',
captchaKey: {
required: true,
checkCaptcha : true,
},
goodsPt: 'required',
writerEmail: {
required: true,
email: true
},
},
messages: {
writerNm: {
required: __('작성자를 입력해주세요.')
},
writerPw: {
required: __('비밀번호를 입력해주세요.')
},
subject: {
required: __('제목을 입력해주세요.')
},
contents: {
required: __('내용을 입력해주세요')
},
private: {
required: __('개인정보 수집 및 이용동의를 체크해주세요.')
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.'),
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
writerEmail: {
required: __('이메일을 입력해주세요.'),
email: __('메일 형식이 틀렸습니다.')
}
}
})
$("#category").on("change", function(){
var category = $(this).val();
var bdId = $('[name="bdId"]').val();
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'category', bdId: bdId, 'category': category},
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
oEditors.getById["editor"].exec("SET_IR", ['']);
oEditors.getById["editor"].exec("PASTE_HTML", [result]);
}).error(function (e) {
alert(e.responseText);
});
});
$('body').on('click','.js-select-remove',function(){
$(this).closest('div.js-select-item').remove();
$('.selected-info-text').show();
})
$('.btn-open-layer').bind('click', function (e) {
var params = {};
if(typeof bdId != 'undefined') {
params = {
bdId : bdId,
bdSno : bdSno,
};
}
if ($(this).attr('href') == '#addGoodsLayer') {
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_goods_select.php",
success: function (data) {
$('#addGoodsLayer').empty().append(data);
$('#addGoodsLayer').find('>div').center();
},
error: function (data) {
alert(data.message);
closeLayer();
}
});
}
else if ($(this).attr('href') == '#addOrderLayer') {
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_order_select.php",
success: function (data) {
$('#addOrderLayer').empty().append(data);
$('#addOrderLayer').find('>div').center();
},
error: function (data) {
alert(data.message);
closeLayer();
}
});
}
});
$(document).on("change", "input:file", function () {
var thisObj = $(this);
var name = this.name;
var idx = $('input[name="' + name + '"]').index(this);
//ajax업로드 처리
var uploadImages = [];
gdAjaxUpload.upload(
{
formObj: $("#frmWrite"),
thisObj: $(this),
actionUrl: '../board/board_ps.php',
params: {bdId: $('[name=bdId]').val(), 'mode': 'ajaxUpload'},
onbeforeunload: function () {
if (uploadImages.length == 0) {
return false;
}
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'deleteGarbageImage', bdId: $('[name=bdId]').val(), deleteImage: uploadImages.join('^|^')},
cache: false,
}).success(function (data) {
}).error(function (e) {
});
},
successAfter: function (data) {
thisObj.attr('index',data.index);
uploadImages.push(data.saveFileNm);
},
failAfter : function(data) {
if (data.result == 'fail' && name == 'upfiles[]') {
$('input[name="' + name + '"]').eq(idx).val('');
}
}
}
)
});
});
function setAddGoods(frmData) {
$.each(frmData.info, function (key, val) {
var selectGoodsTblTr = _.template($('#selectGoodsTblTr').html());
var param = {goodsNo: val.goodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, goodsPrice: val.goodsPrice};
selectGoodstblTrHtml = selectGoodsTblTr(param);
});
$("#selectGoodsBox").empty();
$("#selectGoodsBox").append(selectGoodstblTrHtml);
$('.selected-info-text').hide();
if(parent && parent!=this){
parent.resize_frame(parent.document.getElementsByName(window.name)[0]);
}
}
function setAddOrder(frmData) {
$.each(frmData.info, function (key, val) {
var selectGoodsTblTr = _.template($('#selectOrderTblTr').html());
var param = {orderNo: val.orderNo, orderGoodsNo: val.orderGoodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, optionName:val.optionName,goodsPrice:val.goodsPrice,goodsNo : val.goodsNo};
selectGoodstblTrHtml = selectGoodsTblTr(param);
});
$("#selectOrderBox").empty();
$("#selectOrderBox").append(selectGoodstblTrHtml);
$('.selected-info-text').hide();
if(parent && parent!=this){
parent.resize_frame(parent.document.getElementsByName(window.name)[0]);
}
}
 
변경 후gd_board_write.js
 
function captchaReload() {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../board/captcha.php?ch=' + someDate);
}, 1);
}
 
function addUpload() {
var uploadBoxCount = $('#uploadBox').find('.file-upload').length;
if (uploadBoxCount >= 10) {
alert(__("업로드는 최대 10개만 지원합니다"));
return;
}
 
var ifrmObj = $(window.frameElement);
var ifrmHeight = ifrmObj.height();
ifrmObj.height(ifrmHeight + 33);
 
var addUploadBox = _.template(
$("script.template").html()
);
 
$('#uploadBox:last').append(addUploadBox({idx: uploadBoxCount + 1}));
}
 
function uploadRemove(obj) {
var bdId = $('[name="bdId"]').val();
var target = $(obj);
index = target.prevAll('input:file').attr('index'); //$('.file-upload button.uploadremove').index(target)+1;
var saveFileNm = $("input[name='saveFileNm[" + index + "]']").val();
 
var ifrmObj = $(window.frameElement);
var ifrmHeight = ifrmObj.height();
ifrmObj.height(ifrmHeight - 33);
 
target.closest('.file-upload').remove();
 
// 파일 없음 처리
if (!saveFileNm) return;
 
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {
mode: 'deleteUploadImage',
bdId: bdId,
saveFileNm: saveFileNm
},
cache: false,
async: false,
}).success(function (result) {
$("input[name='uploadFileNm[" + index + "]']").remove(); // 삭제된 uploadFileNm 값 제거
$("input[name='saveFileNm[" + index + "]']").remove(); // 삭제된 saveFileNm 값 제거
}).error(function (e) {
alert(e.responseText);
});
}
var boardSuubmitFl = true;
$(document).ready(function () {
var uploadBoxCount = $('#uploadBox').find('.file-upload').length;
$('.file-upload:last').find('label').attr('for', 'attach' + uploadBoxCount);
$('.file-upload:last').find('input[type=file]').attr('id', 'attach' + uploadBoxCount);
 
if (cfgUploadFl == 'y') {
$('#addUploadBtn').bind('click', function () {
addUpload();
});
}
 
if ($('.file-upload').length > 10) {
$('.file-upload:last').remove();
}
 
$("#frmWrite").validate({
ignore: 'altcha-widget *',
submitHandler: function (form) {
if (boardSuubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
if (cfgEditorFl == 'y') {
oEditors.getById["editor"].exec("UPDATE_CONTENTS_FIELD", []); // 에디터의 내용이 textarea에 적용됩니다.
}
 
form.submit();
boardSuubmitFl = false;
},
rules: {
private: 'required',
contents: {
required: function (textarea) {
if (cfgEditorFl == 'y') {
var editorcontent = oEditors.getById[textarea.id].getIR(); // 에디터의 내용 가져오기.
editorcontent = editorcontent.replace(/<(?!img).*?>/ig, '').replace('&nbsp;', ''); //이미지테그제외한 테그제거
return editorcontent.length === 0;
}
else {
return textarea.value.length === 0;
}
}
},
writerNm: 'required',
writerPw: 'required',
subject: 'required',
goodsPt: 'required',
writerEmail: {
required: true,
email: true
},
},
messages: {
writerNm: {
required: __('작성자를 입력해주세요.')
},
writerPw: {
required: __('비밀번호를 입력해주세요.')
},
subject: {
required: __('제목을 입력해주세요.')
},
contents: {
required: __('내용을 입력해주세요')
},
private: {
required: __('개인정보 수집 및 이용동의를 체크해주세요.')
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
writerEmail: {
required: __('이메일을 입력해주세요.'),
email: __('메일 형식이 틀렸습니다.')
}
 
}
})
 
$("#category").on("change", function(){
var category = $(this).val();
var bdId = $('[name="bdId"]').val();
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'category', bdId: bdId, 'category': category},
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
oEditors.getById["editor"].exec("SET_IR", ['']);
oEditors.getById["editor"].exec("PASTE_HTML", [result]);
}).error(function (e) {
alert(e.responseText);
});
});
 
$('body').on('click','.js-select-remove',function(){
$(this).closest('div.js-select-item').remove();
$('.selected-info-text').show();
})
 
$('.btn-open-layer').bind('click', function (e) {
var params = {};
if(typeof bdId != 'undefined') {
params = {
bdId : bdId,
bdSno : bdSno,
};
}
if ($(this).attr('href') == '#addGoodsLayer') {
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_goods_select.php",
success: function (data) {
$('#addGoodsLayer').empty().append(data);
$('#addGoodsLayer').find('>div').center();
},
error: function (data) {
alert(data.message);
closeLayer();
}
});
}
else if ($(this).attr('href') == '#addOrderLayer') {
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_order_select.php",
success: function (data) {
$('#addOrderLayer').empty().append(data);
$('#addOrderLayer').find('>div').center();
},
error: function (data) {
alert(data.message);
closeLayer();
}
});
}
});
 
$(document).on("change", "input:file", function () {
var thisObj = $(this);
var name = this.name;
var idx = $('input[name="' + name + '"]').index(this);
//ajax업로드 처리
var uploadImages = [];
gdAjaxUpload.upload(
{
formObj: $("#frmWrite"),
thisObj: $(this),
actionUrl: '../board/board_ps.php',
params: {bdId: $('[name=bdId]').val(), 'mode': 'ajaxUpload'},
onbeforeunload: function () {
if (uploadImages.length == 0) {
return false;
}
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'deleteGarbageImage', bdId: $('[name=bdId]').val(), deleteImage: uploadImages.join('^|^')},
cache: false,
}).success(function (data) {
}).error(function (e) {
});
},
successAfter: function (data) {
thisObj.attr('index',data.index);
uploadImages.push(data.saveFileNm);
},
failAfter : function(data) {
if (data.result == 'fail' && name == 'upfiles[]') {
$('input[name="' + name + '"]').eq(idx).val('');
}
}
}
)
});
});
 
function setAddGoods(frmData) {
$.each(frmData.info, function (key, val) {
var selectGoodsTblTr = _.template($('#selectGoodsTblTr').html());
var param = {goodsNo: val.goodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, goodsPrice: val.goodsPrice};
selectGoodstblTrHtml = selectGoodsTblTr(param);
});
$("#selectGoodsBox").empty();
$("#selectGoodsBox").append(selectGoodstblTrHtml);
$('.selected-info-text').hide();
 
if(parent && parent!=this){
parent.resize_frame(parent.document.getElementsByName(window.name)[0]);
}
}
 
function setAddOrder(frmData) {
$.each(frmData.info, function (key, val) {
var selectGoodsTblTr = _.template($('#selectOrderTblTr').html());
var param = {orderNo: val.orderNo, orderGoodsNo: val.orderGoodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, optionName:val.optionName,goodsPrice:val.goodsPrice,goodsNo : val.goodsNo};
selectGoodstblTrHtml = selectGoodsTblTr(param);
});
$("#selectOrderBox").empty();
$("#selectOrderBox").append(selectGoodstblTrHtml);
$('.selected-info-text').hide();
if(parent && parent!=this){
parent.resize_frame(parent.document.getElementsByName(window.name)[0]);
}
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function captchaReload() {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../board/captcha.php?ch=' + someDate);
}, 1);
}
 
function addUpload() {
var uploadBoxCount = $('#uploadBox').find('.file-upload').length;
if (uploadBoxCount >= 10) {
alert(__("업로드는 최대 10개만 지원합니다"));
return;
}
 
var ifrmObj = $(window.frameElement);
var ifrmHeight = ifrmObj.height();
ifrmObj.height(ifrmHeight + 33);
 
var addUploadBox = _.template(
$("script.template").html()
);
 
$('#uploadBox:last').append(addUploadBox({idx: uploadBoxCount + 1}));
}
 
function uploadRemove(obj) {
var bdId = $('[name="bdId"]').val();
var target = $(obj);
index = target.prevAll('input:file').attr('index'); //$('.file-upload button.uploadremove').index(target)+1;
var saveFileNm = $("input[name='saveFileNm[" + index + "]']").val();
 
var ifrmObj = $(window.frameElement);
var ifrmHeight = ifrmObj.height();
ifrmObj.height(ifrmHeight - 33);
 
target.closest('.file-upload').remove();
 
// 파일 없음 처리
if (!saveFileNm) return;
 
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {
mode: 'deleteUploadImage',
bdId: bdId,
saveFileNm: saveFileNm
},
cache: false,
async: false,
}).success(function (result) {
$("input[name='uploadFileNm[" + index + "]']").remove(); // 삭제된 uploadFileNm 값 제거
$("input[name='saveFileNm[" + index + "]']").remove(); // 삭제된 saveFileNm 값 제거
}).error(function (e) {
alert(e.responseText);
});
}
var boardSuubmitFl = true;
$(document).ready(function () {
var uploadBoxCount = $('#uploadBox').find('.file-upload').length;
$('.file-upload:last').find('label').attr('for', 'attach' + uploadBoxCount);
$('.file-upload:last').find('input[type=file]').attr('id', 'attach' + uploadBoxCount);
 
if (cfgUploadFl == 'y') {
$('#addUploadBtn').bind('click', function () {
addUpload();
});
}
 
if ($('.file-upload').length > 10) {
$('.file-upload:last').remove();
}
 
$("#frmWrite").validate({
ignore: 'altcha-widget *',
submitHandler: function (form) {
if (boardSuubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
if (cfgEditorFl == 'y') {
oEditors.getById["editor"].exec("UPDATE_CONTENTS_FIELD", []); // 에디터의 내용이 textarea에 적용됩니다.
}
 
form.submit();
boardSuubmitFl = false;
},
rules: {
private: 'required',
contents: {
required: function (textarea) {
if (cfgEditorFl == 'y') {
var editorcontent = oEditors.getById[textarea.id].getIR(); // 에디터의 내용 가져오기.
editorcontent = editorcontent.replace(/<(?!img).*?>/ig, '').replace('&nbsp;', ''); //이미지테그제외한 테그제거
return editorcontent.length === 0;
}
else {
return textarea.value.length === 0;
}
}
},
writerNm: 'required',
writerPw: 'required',
subject: 'required',
goodsPt: 'required',
writerEmail: {
required: true,
email: true
},
},
messages: {
writerNm: {
required: __('작성자를 입력해주세요.')
},
writerPw: {
required: __('비밀번호를 입력해주세요.')
},
subject: {
required: __('제목을 입력해주세요.')
},
contents: {
required: __('내용을 입력해주세요')
},
private: {
required: __('개인정보 수집 및 이용동의를 체크해주세요.')
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
writerEmail: {
required: __('이메일을 입력해주세요.'),
email: __('메일 형식이 틀렸습니다.')
}
 
}
})
 
$("#category").on("change", function(){
var category = $(this).val();
var bdId = $('[name="bdId"]').val();
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'category', bdId: bdId, 'category': category},
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
oEditors.getById["editor"].exec("SET_IR", ['']);
oEditors.getById["editor"].exec("PASTE_HTML", [result]);
}).error(function (e) {
alert(e.responseText);
});
});
 
$('body').on('click','.js-select-remove',function(){
$(this).closest('div.js-select-item').remove();
$('.selected-info-text').show();
})
 
$('.btn-open-layer').bind('click', function (e) {
var params = {};
if(typeof bdId != 'undefined') {
params = {
bdId : bdId,
bdSno : bdSno,
};
}
if ($(this).attr('href') == '#addGoodsLayer') {
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_goods_select.php",
success: function (data) {
$('#addGoodsLayer').empty().append(data);
$('#addGoodsLayer').find('>div').center();
},
error: function (data) {
alert(data.message);
closeLayer();
}
});
}
else if ($(this).attr('href') == '#addOrderLayer') {
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_order_select.php",
success: function (data) {
$('#addOrderLayer').empty().append(data);
$('#addOrderLayer').find('>div').center();
},
error: function (data) {
alert(data.message);
closeLayer();
}
});
}
});
 
$(document).on("change", "input:file", function () {
var thisObj = $(this);
var name = this.name;
var idx = $('input[name="' + name + '"]').index(this);
//ajax업로드 처리
var uploadImages = [];
gdAjaxUpload.upload(
{
formObj: $("#frmWrite"),
thisObj: $(this),
actionUrl: '../board/board_ps.php',
params: {bdId: $('[name=bdId]').val(), 'mode': 'ajaxUpload'},
onbeforeunload: function () {
if (uploadImages.length == 0) {
return false;
}
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'deleteGarbageImage', bdId: $('[name=bdId]').val(), deleteImage: uploadImages.join('^|^')},
cache: false,
}).success(function (data) {
}).error(function (e) {
});
},
successAfter: function (data) {
thisObj.attr('index',data.index);
uploadImages.push(data.saveFileNm);
},
failAfter : function(data) {
if (data.result == 'fail' && name == 'upfiles[]') {
$('input[name="' + name + '"]').eq(idx).val('');
}
}
}
)
});
});
 
function setAddGoods(frmData) {
$.each(frmData.info, function (key, val) {
var selectGoodsTblTr = _.template($('#selectGoodsTblTr').html());
var param = {goodsNo: val.goodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, goodsPrice: val.goodsPrice};
selectGoodstblTrHtml = selectGoodsTblTr(param);
});
$("#selectGoodsBox").empty();
$("#selectGoodsBox").append(selectGoodstblTrHtml);
$('.selected-info-text').hide();
 
if(parent && parent!=this){
parent.resize_frame(parent.document.getElementsByName(window.name)[0]);
}
}
 
function setAddOrder(frmData) {
$.each(frmData.info, function (key, val) {
var selectGoodsTblTr = _.template($('#selectOrderTblTr').html());
var param = {orderNo: val.orderNo, orderGoodsNo: val.orderGoodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, optionName:val.optionName,goodsPrice:val.goodsPrice,goodsNo : val.goodsNo};
selectGoodstblTrHtml = selectGoodsTblTr(param);
});
$("#selectOrderBox").empty();
$("#selectOrderBox").append(selectGoodstblTrHtml);
$('.selected-info-text').hide();
if(parent && parent!=this){
parent.resize_frame(parent.document.getElementsByName(window.name)[0]);
}
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
data/skin/front/story_g/js/gd_common.js+46
변경 전gd_common.js
(obj).height = iframeHeight + 80;
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/**
* 회원다운로드 쿠폰 링크 다운 받기
*
 
변경 후gd_common.js
(obj).height = iframeHeight + 80;
}
 
/* iframe(mypage 등)으로 board 목록이 실릴 때, onload 1회 측정(resize_frame/gd_resize_frame) 이후에도
댓글/답글 폼 토글, ALTCHA 위젯 지연 렌더, 댓글 등록/삭제 등으로 내용 높이가 바뀌면
부모 iframe 높이를 다시 맞춘다. body 높이가 실제로 변했을 때만 호출해 재측정 루프를 방지. */
(function () {
let parentResize;
try {
if (window.parent === window) {
return; // 최상위 문서 → 대상 아님
}
parentResize = window.parent.gd_resize_frame || window.parent.resize_frame;
} catch (e) {
return; // cross-origin 부모 → 접근 불가, 대상 아님
}
if (typeof parentResize !== 'function' || typeof window.ResizeObserver === 'undefined') {
return;
}
const startObserve = function () {
const frameEl = window.frameElement
|| (window.name ? window.parent.document.getElementsByName(window.name)[0] : null);
if (!frameEl || !document.body) {
return;
}
let timer = null;
let lastHeight = -1;
const observer = new ResizeObserver(function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function () {
const height = document.body.clientHeight;
if (height === lastHeight) {
return; // 실제 콘텐츠 높이 변화 없음 → 재측정 루프 방지
}
lastHeight = height;
parentResize.call(window.parent, frameEl);
}, 100);
});
observer.observe(document.body);
};
if (document.body) {
startObserve();
} else {
document.addEventListener('DOMContentLoaded', startObserve);
}
})();
 
/**
* 회원다운로드 쿠폰 링크 다운 받기
*
 
data/skin/front/story_g/js/gd_member2.js+12-14
변경 전gd_member2.js
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore",
focusCleanup: true,
rules: {
email: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
},
captchaKey: {
required: true
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.'),
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
if (validate.form()) {
 
 
 
 
 
$('.btn-join').attr("disabled", true);
form.submit();
} else {
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore",
focusCleanup: true,
rules: {
email: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
},
captchaKey: {
required: true
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.'),
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
if (validate.form()) {
 
 
 
 
 
$('.btn-join').attr("disabled", true);
form.submit();
} else {
 
변경 후gd_member2.js
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore, altcha-widget *",
focusCleanup: true,
rules: {
email: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
 
 
 
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
 
 
 
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
if (validate.form()) {
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return;
}
$('.btn-join').attr("disabled", true);
form.submit();
} else {
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore, altcha-widget *",
focusCleanup: true,
rules: {
email: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
 
 
 
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
 
 
 
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
if (validate.form()) {
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return;
}
$('.btn-join').attr("disabled", true);
form.submit();
} else {
 
data/skin/front/story_g/member/join.html+4-20
변경 전join.html
</form>
</div>
</div>
 
 
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
<!--{? joinField.captcha.use == 'y'}-->
$('#reload_captcha').click(function (e) {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../member/captcha.php?ch=' + someDate);
}, 1);
}).trigger('click');
<!--{/}-->
select_email_domain('email');
</form>
</div>
</div>
 
 
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
<!--{? joinField.captcha.use == 'y'}-->
$('#reload_captcha').click(function (e) {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../member/captcha.php?ch=' + someDate);
}, 1);
}).trigger('click');
<!--{/}-->
select_email_domain('email');
 
변경 후join.html
</form>
</div>
</div>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
 
 
 
 
 
 
 
 
 
select_email_domain('email');
</form>
</div>
</div>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
 
 
 
 
 
 
 
 
 
select_email_domain('email');
 
data/skin/front/story_g/member/_join_view_captcha.html+2-30
변경 전_join_view_captcha.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" id="reload_captcha" class="normal-btn small1 captchareload"><em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
</tbody>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br/>')}</p>
</div>
<div class="txt-field hs" style="width:105px;">
<input type="text" class="text captcha" name="captchaKey" maxlength="5" onKeyUp="javascript:this.value=this.value.toUpperCase();" onfocus="this.select()" label="{=__('자동등록방지문자')}">
</div>
<button type="button" id="reload_captcha" class="normal-btn small1 captchareload"><em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</td>
</tr>
</tbody>
 
변경 후_join_view_captcha.html
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
</tbody>
<tr>
<th class="ta-l">{=__('자동등록방지')}</th>
<td>
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
</tbody>
 
data/skin/front/story_g/share/_altcha.html+28
변경 전_altcha.html
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후_altcha.html
{*** [공통 위젯] 자동등록방지 ALTCHA | share/_altcha.html (Widget\Front\Share\AltchaWidget) ***}
{*** altchaChallenge : (필수) challenge 발급 스크립트 경로. 폼 위치에 따라 상대/절대 경로가 다르므로 호출부에서 지정 (mode 쿼리스트링은 위젯이 서버 사이드에서 부착) ***}
{*** altchaSrc : (옵션) 'y' 이면 data-altcha-src 부여 → AJAX 인라인 주입 폼(goods_board_write)에서 altcha.js 동적 로드 ***}
{*** altchaConfig : (옵션) altcha-widget configuration JSON 을 덮어씀. 미지정 시 {"hideLogo":true,"hideFooter":true} ***}
<div class="capcha capcha_altcha"<!--{? altchaSrc == 'y'}--> data-altcha-src="\{=c.PATH_SKIN}js/altcha/altcha.js"<!--{/}-->>
<altcha-widget
challenge="{=altchaChallenge}?mode={=altchaMode}"
name="altcha"
auto="off"
language="{=gGlobal.locale}"
configuration='<!--{? altchaConfig}-->{=altchaConfig}<!--{:}-->{"hideLogo":true,"hideFooter":true}<!--{/}-->'
type="native"
></altcha-widget>
</div>
{*** [공통 위젯] 자동등록방지 ALTCHA | share/_altcha.html (Widget\Front\Share\AltchaWidget) ***}
{*** altchaChallenge : (필수) challenge 발급 스크립트 경로. 폼 위치에 따라 상대/절대 경로가 다르므로 호출부에서 지정 (mode 쿼리스트링은 위젯이 서버 사이드에서 부착) ***}
{*** altchaSrc : (옵션) 'y' 이면 data-altcha-src 부여 → AJAX 인라인 주입 폼(goods_board_write)에서 altcha.js 동적 로드 ***}
{*** altchaConfig : (옵션) altcha-widget configuration JSON 을 덮어씀. 미지정 시 {"hideLogo":true,"hideFooter":true} ***}
<div class="capcha capcha_altcha"<!--{? altchaSrc == 'y'}--> data-altcha-src="\{=c.PATH_SKIN}js/altcha/altcha.js"<!--{/}-->>
<altcha-widget
challenge="{=altchaChallenge}?mode={=altchaMode}"
name="altcha"
auto="off"
language="{=gGlobal.locale}"
configuration='<!--{? altchaConfig}-->{=altchaConfig}<!--{:}-->{"hideLogo":true,"hideFooter":true}<!--{/}-->'
type="native"
></altcha-widget>
</div>
 
data/skin/mobile/moment/board/skin/default/view.html+8-48
변경 전view.html
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span>
</div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span>
</div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span>
</div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span>
</div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
 
data/skin/mobile/moment/board/skin/default/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/moment/board/skin/event/view.html+8-48
변경 전view.html
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span>
</div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span>
</div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span>
</div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span>
</div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
 
data/skin/mobile/moment/board/skin/event/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/moment/board/skin/gallery/view.html+8-48
변경 전view.html
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span>
</div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span>
</div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span>
</div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span>
</div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
 
data/skin/mobile/moment/board/skin/gallery/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/moment/board/skin/qa/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동방지등록 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동방지등록 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/moment/board/template/default/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/moment/board/template/event/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/moment/board/template/gallery/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/moment/board/template/qa/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/moment/goods/goods_board_qa_list.html+4
변경 전goods_board_qa_list.html
</div>
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<script type="text/javascript">
<!--
$(document).ready(function () {
</div>
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<script type="text/javascript">
<!--
$(document).ready(function () {
 
변경 후goods_board_qa_list.html
</div>
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
<!--
$(document).ready(function () {
</div>
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
<!--
$(document).ready(function () {
 
data/skin/mobile/moment/goods/goods_board_review_list.html+4
변경 전goods_board_review_list.html
 
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<script type="text/javascript">
<!--
$(document).ready(function () {
 
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<script type="text/javascript">
<!--
$(document).ready(function () {
 
변경 후goods_board_review_list.html
 
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
<!--
$(document).ready(function () {
 
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
<!--
$(document).ready(function () {
 
data/skin/mobile/moment/goods/goods_board_view.html+12-56
변경 전goods_board_view.html
</div>
</div>
</div>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="자동등록방지 이미지"></span>
</div>
<div class="capcha_body">
<p class="capcha_text">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="captcha">
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="../img/etc/icon-reset.png" alt="이미지 새로고침"> 이미지 새로고침</button></div>
</div>
</div>
</div>
<!--{/}-->
</div>
<!-- 비회원 개인정보 수집동의 // -->
</div>
</div>
</div>
</div>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="자동등록방지 이미지"></span>
</div>
<div class="capcha_body">
<p class="capcha_text">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="captcha">
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="../img/etc/icon-reset.png" alt="이미지 새로고침"> 이미지 새로고침</button></div>
</div>
</div>
</div>
<!--{/}-->
</div>
<!--{:}-->
<div class="comment_write js_form_write">
</div>
</div>
</div>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="자동등록방지 이미지"></span>
</div>
<div class="capcha_body">
<p class="capcha_text">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="captcha">
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="../img/etc/icon-reset.png" alt="이미지 새로고침"> 이미지 새로고침</button></div>
</div>
</div>
</div>
<!--{/}-->
</div>
<!-- 비회원 개인정보 수집동의 // -->
</div>
</div>
</div>
</div>
<!--{? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img">
<span><img src="../board/captcha.php" class="captchaImg" alt="자동등록방지 이미지"></span>
</div>
<div class="capcha_body">
<p class="capcha_text">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="captcha">
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="../img/etc/icon-reset.png" alt="이미지 새로고침"> 이미지 새로고침</button></div>
</div>
</div>
</div>
<!--{/}-->
</div>
<!--{:}-->
<div class="comment_write js_form_write">
 
변경 후goods_board_view.html
</div>
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
<!-- 비회원 개인정보 수집동의 // -->
</div>
</div>
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
<!--{:}-->
<div class="comment_write js_form_write">
</div>
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
<!-- 비회원 개인정보 수집동의 // -->
</div>
</div>
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
<!--{:}-->
<div class="comment_write js_form_write">
 
data/skin/mobile/moment/goods/goods_view.html+4
변경 전goods_view.html
<!--{ / }-->
<div id="layerDim" class="dn zidx310">&nbsp;</div>
<script type="text/javascript" src="../js/gd_board_goods.js" charset="utf-8"></script>
 
 
{=fbGoodsViewScript}
{#footer}
<!--{ / }-->
<div id="layerDim" class="dn zidx310">&nbsp;</div>
<script type="text/javascript" src="../js/gd_board_goods.js" charset="utf-8"></script>
 
 
{=fbGoodsViewScript}
{#footer}
 
변경 후goods_view.html
<!--{ / }-->
<div id="layerDim" class="dn zidx310">&nbsp;</div>
<script type="text/javascript" src="../js/gd_board_goods.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
{=fbGoodsViewScript}
{#footer}
<!--{ / }-->
<div id="layerDim" class="dn zidx310">&nbsp;</div>
<script type="text/javascript" src="../js/gd_board_goods.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
{=fbGoodsViewScript}
{#footer}
 
data/skin/mobile/moment/js/altcha/altcha.js+3780
변경 전altcha.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후altcha.js
const DEV = false;
var is_array = Array.isArray;
var index_of = Array.prototype.indexOf;
var includes = Array.prototype.includes;
var array_from = Array.from;
var object_keys = Object.keys;
var define_property = Object.defineProperty;
var get_descriptor = Object.getOwnPropertyDescriptor;
var get_descriptors = Object.getOwnPropertyDescriptors;
var object_prototype = Object.prototype;
var array_prototype = Array.prototype;
var get_prototype_of = Object.getPrototypeOf;
var is_extensible = Object.isExtensible;
const noop = () => {
};
function run_all(arr) {
for (var i = 0; i < arr.length; i++) {
arr[i]();
}
}
function deferred() {
var resolve;
var reject;
var promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
return { promise, resolve, reject };
}
const DERIVED = 1 << 1;
const EFFECT = 1 << 2;
const RENDER_EFFECT = 1 << 3;
const MANAGED_EFFECT = 1 << 24;
const BLOCK_EFFECT = 1 << 4;
const BRANCH_EFFECT = 1 << 5;
const ROOT_EFFECT = 1 << 6;
const BOUNDARY_EFFECT = 1 << 7;
const CONNECTED = 1 << 9;
const CLEAN = 1 << 10;
const DIRTY = 1 << 11;
const MAYBE_DIRTY = 1 << 12;
const INERT = 1 << 13;
const DESTROYED = 1 << 14;
const REACTION_RAN = 1 << 15;
const DESTROYING = 1 << 25;
const EFFECT_TRANSPARENT = 1 << 16;
const EAGER_EFFECT = 1 << 17;
const HEAD_EFFECT = 1 << 18;
const EFFECT_PRESERVED = 1 << 19;
const USER_EFFECT = 1 << 20;
const WAS_MARKED = 1 << 16;
const REACTION_IS_UPDATING = 1 << 21;
const ASYNC = 1 << 22;
const ERROR_VALUE = 1 << 23;
const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state");
const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props");
const LOADING_ATTR_SYMBOL = /* @__PURE__ */ Symbol("");
const ATTRIBUTES_CACHE = /* @__PURE__ */ Symbol("attributes");
const CLASS_CACHE = /* @__PURE__ */ Symbol("class");
const STYLE_CACHE = /* @__PURE__ */ Symbol("style");
const TEXT_CACHE = /* @__PURE__ */ Symbol("text");
const FORM_RESET_HANDLER = /* @__PURE__ */ Symbol("form reset");
const STALE_REACTION = new class StaleReactionError extends Error {
name = "StaleReactionError";
message = "The reaction that called `getAbortSignal()` was re-run or destroyed";
}();
const IS_XHTML = (
// We gotta write it like this because after downleveling the pure comment may end up in the wrong location
!!globalThis.document?.contentType && /* @__PURE__ */ globalThis.document.contentType.includes("xml")
);
const TEXT_NODE = 3;
const COMMENT_NODE = 8;
function equals(value) {
return value === this.v;
}
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function safe_equals(value) {
return !safe_not_equal(value, this.v);
}
function lifecycle_outside_component(name) {
{
throw new Error(`https://svelte.dev/e/lifecycle_outside_component`);
}
}
function async_derived_orphan() {
{
throw new Error(`https://svelte.dev/e/async_derived_orphan`);
}
}
function effect_in_teardown(rune) {
{
throw new Error(`https://svelte.dev/e/effect_in_teardown`);
}
}
function effect_in_unowned_derived() {
{
throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`);
}
}
function effect_orphan(rune) {
{
throw new Error(`https://svelte.dev/e/effect_orphan`);
}
}
function effect_update_depth_exceeded() {
{
throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);
}
}
function hydration_failed() {
{
throw new Error(`https://svelte.dev/e/hydration_failed`);
}
}
function state_descriptors_fixed() {
{
throw new Error(`https://svelte.dev/e/state_descriptors_fixed`);
}
}
function state_prototype_fixed() {
{
throw new Error(`https://svelte.dev/e/state_prototype_fixed`);
}
}
function state_unsafe_mutation() {
{
throw new Error(`https://svelte.dev/e/state_unsafe_mutation`);
}
}
function svelte_boundary_reset_onerror() {
{
throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);
}
}
let tracing_mode_flag = false;
const TEMPLATE_FRAGMENT = 1;
const TEMPLATE_USE_IMPORT_NODE = 1 << 1;
const HYDRATION_START = "[";
const HYDRATION_START_ELSE = "[!";
const HYDRATION_START_FAILED = "[?";
const HYDRATION_END = "]";
const HYDRATION_ERROR = {};
const UNINITIALIZED = /* @__PURE__ */ Symbol("uninitialized");
const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml";
const NAMESPACE_SVG = "http://www.w3.org/2000/svg";
const NAMESPACE_MATHML = "http://www.w3.org/1998/Math/MathML";
const ATTACHMENT_KEY = "@attach";
let component_context = null;
function set_component_context(context) {
component_context = context;
}
function push(props, runes = false, fn) {
component_context = {
p: component_context,
i: false,
c: null,
e: null,
s: props,
x: null,
r: (
/** @type {Effect} */
active_effect
),
l: null
};
}
function pop(component2) {
var context = (
/** @type {ComponentContext} */
component_context
);
var effects = context.e;
if (effects !== null) {
context.e = null;
for (var fn of effects) {
create_user_effect(fn);
}
}
if (component2 !== void 0) {
context.x = component2;
}
context.i = true;
component_context = context.p;
return component2 ?? /** @type {T} */
{};
}
function is_runes() {
return true;
}
let micro_tasks = [];
function run_micro_tasks() {
var tasks = micro_tasks;
micro_tasks = [];
run_all(tasks);
}
function queue_micro_task(fn) {
if (micro_tasks.length === 0 && !is_flushing_sync) {
var tasks = micro_tasks;
queueMicrotask(() => {
if (tasks === micro_tasks) run_micro_tasks();
});
}
micro_tasks.push(fn);
}
function flush_tasks() {
while (micro_tasks.length > 0) {
run_micro_tasks();
}
}
function derived_inert() {
{
console.warn(`https://svelte.dev/e/derived_inert`);
}
}
function hydration_mismatch(location2) {
{
console.warn(`https://svelte.dev/e/hydration_mismatch`);
}
}
function select_multiple_invalid_value() {
{
console.warn(`https://svelte.dev/e/select_multiple_invalid_value`);
}
}
function svelte_boundary_reset_noop() {
{
console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);
}
}
let hydrating = false;
function set_hydrating(value) {
hydrating = value;
}
let hydrate_node;
function set_hydrate_node(node) {
if (node === null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return hydrate_node = node;
}
function hydrate_next() {
return set_hydrate_node(/* @__PURE__ */ get_next_sibling(hydrate_node));
}
function reset(node) {
if (!hydrating) return;
if (/* @__PURE__ */ get_next_sibling(hydrate_node) !== null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
hydrate_node = node;
}
function next(count = 1) {
if (hydrating) {
var i = count;
var node = hydrate_node;
while (i--) {
node = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(node);
}
hydrate_node = node;
}
}
function skip_nodes(remove = true) {
var depth = 0;
var node = hydrate_node;
while (true) {
if (node.nodeType === COMMENT_NODE) {
var data = (
/** @type {Comment} */
node.data
);
if (data === HYDRATION_END) {
if (depth === 0) return node;
depth -= 1;
} else if (data === HYDRATION_START || data === HYDRATION_START_ELSE || // "[1", "[2", etc. for if blocks
data[0] === "[" && !isNaN(Number(data.slice(1)))) {
depth += 1;
}
}
var next2 = (
/** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(node)
);
if (remove) node.remove();
node = next2;
}
}
function read_hydration_instruction(node) {
if (!node || node.nodeType !== COMMENT_NODE) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return (
/** @type {Comment} */
node.data
);
}
function proxy(value) {
if (typeof value !== "object" || value === null || STATE_SYMBOL in value) {
return value;
}
const prototype = get_prototype_of(value);
if (prototype !== object_prototype && prototype !== array_prototype) {
return value;
}
var sources = /* @__PURE__ */ new Map();
var is_proxied_array = is_array(value);
var version = /* @__PURE__ */ state(0);
var parent_version = update_version;
var with_parent = (fn) => {
if (update_version === parent_version) {
return fn();
}
var reaction = active_reaction;
var version2 = update_version;
set_active_reaction(null);
set_update_version(parent_version);
var result = fn();
set_active_reaction(reaction);
set_update_version(version2);
return result;
};
if (is_proxied_array) {
sources.set("length", /* @__PURE__ */ state(
/** @type {any[]} */
value.length
));
}
return new Proxy(
/** @type {any} */
value,
{
defineProperty(_, prop2, descriptor) {
if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) {
state_descriptors_fixed();
}
var s = sources.get(prop2);
if (s === void 0) {
with_parent(() => {
var s2 = /* @__PURE__ */ state(descriptor.value);
sources.set(prop2, s2);
return s2;
});
} else {
set(s, descriptor.value, true);
}
return true;
},
deleteProperty(target, prop2) {
var s = sources.get(prop2);
if (s === void 0) {
if (prop2 in target) {
const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
sources.set(prop2, s2);
increment(version);
}
} else {
set(s, UNINITIALIZED);
increment(version);
}
return true;
},
get(target, prop2, receiver) {
if (prop2 === STATE_SYMBOL) {
return value;
}
var s = sources.get(prop2);
var exists = prop2 in target;
if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) {
s = with_parent(() => {
var p = proxy(exists ? target[prop2] : UNINITIALIZED);
var s2 = /* @__PURE__ */ state(p);
return s2;
});
sources.set(prop2, s);
}
if (s !== void 0) {
var v = get(s);
return v === UNINITIALIZED ? void 0 : v;
}
return Reflect.get(target, prop2, receiver);
},
getOwnPropertyDescriptor(target, prop2) {
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor && "value" in descriptor) {
var s = sources.get(prop2);
if (s) descriptor.value = get(s);
} else if (descriptor === void 0) {
var source2 = sources.get(prop2);
var value2 = source2?.v;
if (source2 !== void 0 && value2 !== UNINITIALIZED) {
return {
enumerable: true,
configurable: true,
value: value2,
writable: true
};
}
}
return descriptor;
},
has(target, prop2) {
if (prop2 === STATE_SYMBOL) {
return true;
}
var s = sources.get(prop2);
var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2);
if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) {
if (s === void 0) {
s = with_parent(() => {
var p = has ? proxy(target[prop2]) : UNINITIALIZED;
var s2 = /* @__PURE__ */ state(p);
return s2;
});
sources.set(prop2, s);
}
var value2 = get(s);
if (value2 === UNINITIALIZED) {
return false;
}
}
return has;
},
set(target, prop2, value2, receiver) {
var s = sources.get(prop2);
var has = prop2 in target;
if (is_proxied_array && prop2 === "length") {
for (var i = value2; i < /** @type {Source<number>} */
s.v; i += 1) {
var other_s = sources.get(i + "");
if (other_s !== void 0) {
set(other_s, UNINITIALIZED);
} else if (i in target) {
other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
sources.set(i + "", other_s);
}
}
}
if (s === void 0) {
if (!has || get_descriptor(target, prop2)?.writable) {
s = with_parent(() => /* @__PURE__ */ state(void 0));
set(s, proxy(value2));
sources.set(prop2, s);
}
} else {
has = s.v !== UNINITIALIZED;
var p = with_parent(() => proxy(value2));
set(s, p);
}
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor?.set) {
descriptor.set.call(receiver, value2);
}
if (!has) {
if (is_proxied_array && typeof prop2 === "string") {
var ls = (
/** @type {Source<number>} */
sources.get("length")
);
var n = Number(prop2);
if (Number.isInteger(n) && n >= ls.v) {
set(ls, n + 1);
}
}
increment(version);
}
return true;
},
ownKeys(target) {
get(version);
var own_keys = Reflect.ownKeys(target).filter((key3) => {
var source3 = sources.get(key3);
return source3 === void 0 || source3.v !== UNINITIALIZED;
});
for (var [key2, source2] of sources) {
if (source2.v !== UNINITIALIZED && !(key2 in target)) {
own_keys.push(key2);
}
}
return own_keys;
},
setPrototypeOf() {
state_prototype_fixed();
}
}
);
}
function get_proxied_value(value) {
try {
if (value !== null && typeof value === "object" && STATE_SYMBOL in value) {
return value[STATE_SYMBOL];
}
} catch {
}
return value;
}
function is(a, b) {
return Object.is(get_proxied_value(a), get_proxied_value(b));
}
var $window;
var $document;
var is_firefox;
var first_child_getter;
var next_sibling_getter;
function init_operations() {
if ($window !== void 0) {
return;
}
$window = window;
$document = document;
is_firefox = /Firefox/.test(navigator.userAgent);
var element_prototype = Element.prototype;
var node_prototype = Node.prototype;
var text_prototype = Text.prototype;
first_child_getter = get_descriptor(node_prototype, "firstChild").get;
next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get;
if (is_extensible(element_prototype)) {
element_prototype[CLASS_CACHE] = void 0;
element_prototype[ATTRIBUTES_CACHE] = null;
element_prototype[STYLE_CACHE] = void 0;
element_prototype.__e = void 0;
}
if (is_extensible(text_prototype)) {
text_prototype[TEXT_CACHE] = void 0;
}
}
function create_text(value = "") {
return document.createTextNode(value);
}
// @__NO_SIDE_EFFECTS__
function get_first_child(node) {
return (
/** @type {TemplateNode | null} */
first_child_getter.call(node)
);
}
// @__NO_SIDE_EFFECTS__
function get_next_sibling(node) {
return (
/** @type {TemplateNode | null} */
next_sibling_getter.call(node)
);
}
function child(node, is_text) {
if (!hydrating) {
return /* @__PURE__ */ get_first_child(node);
}
var child2 = /* @__PURE__ */ get_first_child(hydrate_node);
if (child2 === null) {
child2 = hydrate_node.appendChild(create_text());
} else if (is_text && child2.nodeType !== TEXT_NODE) {
var text2 = create_text();
child2?.before(text2);
set_hydrate_node(text2);
return text2;
}
if (is_text) {
merge_text_nodes(
/** @type {Text} */
child2
);
}
set_hydrate_node(child2);
return child2;
}
function first_child(node, is_text = false) {
if (!hydrating) {
var first = /* @__PURE__ */ get_first_child(node);
if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first);
return first;
}
if (is_text) {
if (hydrate_node?.nodeType !== TEXT_NODE) {
var text2 = create_text();
hydrate_node?.before(text2);
set_hydrate_node(text2);
return text2;
}
merge_text_nodes(
/** @type {Text} */
hydrate_node
);
}
return hydrate_node;
}
function sibling(node, count = 1, is_text = false) {
let next_sibling = hydrating ? hydrate_node : node;
var last_sibling;
while (count--) {
last_sibling = next_sibling;
next_sibling = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(next_sibling);
}
if (!hydrating) {
return next_sibling;
}
if (is_text) {
if (next_sibling?.nodeType !== TEXT_NODE) {
var text2 = create_text();
if (next_sibling === null) {
last_sibling?.after(text2);
} else {
next_sibling.before(text2);
}
set_hydrate_node(text2);
return text2;
}
merge_text_nodes(
/** @type {Text} */
next_sibling
);
}
set_hydrate_node(next_sibling);
return next_sibling;
}
function clear_text_content(node) {
node.textContent = "";
}
function should_defer_append() {
return false;
}
function create_element(tag, namespace, is2) {
let options = void 0;
return (
/** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */
document.createElementNS(namespace ?? NAMESPACE_HTML, tag, options)
);
}
function merge_text_nodes(text2) {
if (
/** @type {string} */
text2.nodeValue.length < 65536
) {
return;
}
let next2 = text2.nextSibling;
while (next2 !== null && next2.nodeType === TEXT_NODE) {
next2.remove();
text2.nodeValue += /** @type {string} */
next2.nodeValue;
next2 = text2.nextSibling;
}
}
function handle_error(error) {
var effect2 = active_effect;
if (effect2 === null) {
active_reaction.f |= ERROR_VALUE;
return error;
}
if ((effect2.f & REACTION_RAN) === 0 && (effect2.f & EFFECT) === 0) {
throw error;
}
invoke_error_boundary(error, effect2);
}
function invoke_error_boundary(error, effect2) {
while (effect2 !== null) {
if ((effect2.f & BOUNDARY_EFFECT) !== 0) {
if ((effect2.f & REACTION_RAN) === 0) {
throw error;
}
try {
effect2.b.error(error);
return;
} catch (e) {
error = e;
}
}
effect2 = effect2.parent;
}
throw error;
}
const STATUS_MASK = -7169;
function set_signal_status(signal, status) {
signal.f = signal.f & STATUS_MASK | status;
}
function update_derived_status(derived2) {
if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) {
set_signal_status(derived2, CLEAN);
} else {
set_signal_status(derived2, MAYBE_DIRTY);
}
}
function clear_marked(deps) {
if (deps === null) return;
for (const dep of deps) {
if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {
continue;
}
dep.f ^= WAS_MARKED;
clear_marked(
/** @type {Derived} */
dep.deps
);
}
}
function defer_effect(effect2, dirty_effects, maybe_dirty_effects) {
if ((effect2.f & DIRTY) !== 0) {
dirty_effects.add(effect2);
} else if ((effect2.f & MAYBE_DIRTY) !== 0) {
maybe_dirty_effects.add(effect2);
}
clear_marked(effect2.deps);
set_signal_status(effect2, CLEAN);
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set2(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set2(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set2, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set: set2, update, subscribe };
}
function get$1(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let IS_UNMOUNTED = /* @__PURE__ */ Symbol("unmounted");
function store_get(store2, store_name, stores) {
const entry = stores[store_name] ??= {
store: null,
source: /* @__PURE__ */ mutable_source(void 0),
unsubscribe: noop
};
if (entry.store !== store2 && !(IS_UNMOUNTED in stores)) {
entry.unsubscribe();
entry.store = store2 ?? null;
if (store2 == null) {
entry.source.v = void 0;
entry.unsubscribe = noop;
} else {
var is_synchronous_callback = true;
entry.unsubscribe = subscribe_to_store(store2, (v) => {
if (is_synchronous_callback) {
entry.source.v = v;
} else {
set(entry.source, v);
}
});
is_synchronous_callback = false;
}
}
if (store2 && IS_UNMOUNTED in stores) {
return get$1(store2);
}
return get(entry.source);
}
function setup_stores() {
const stores = {};
function cleanup() {
teardown(() => {
for (var store_name in stores) {
const ref = stores[store_name];
ref.unsubscribe();
}
define_property(stores, IS_UNMOUNTED, {
enumerable: false,
value: true
});
});
}
return [stores, cleanup];
}
let first_batch = null;
let last_batch = null;
let current_batch = null;
let previous_batch = null;
let batch_values = null;
let last_scheduled_effect = null;
let is_flushing_sync = false;
let is_processing = false;
let collected_effects = null;
let legacy_updates = null;
var flush_count = 0;
var source_stacks = /* @__PURE__ */ new Set();
let uid = 1;
class Batch {
id = uid++;
/** True as soon as `#process` was called */
#started = false;
linked = true;
/** @type {Batch | null} */
#prev = null;
/** @type {Batch | null} */
#next = null;
/** @type {Map<Effect, ReturnType<typeof deferred<any>>>} */
async_deriveds = /* @__PURE__ */ new Map();
/**
* The current values of any signals that are updated in this batch.
* Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)
* They keys of this map are identical to `this.#previous`
* @type {Map<Value, [any, boolean]>}
*/
current = /* @__PURE__ */ new Map();
/**
* The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place.
* They keys of this map are identical to `this.#current`
* @type {Map<Value, any>}
*/
previous = /* @__PURE__ */ new Map();
/**
* Async effects which this batch doesn't take into account anymore when calculating blockers,
* as it has a value for it already.
* @type {Set<Effect>}
*/
unblocked = /* @__PURE__ */ new Set();
/**
* When the batch is committed (and the DOM is updated), we need to remove old branches
* and append new ones by calling the functions added inside (if/each/key/etc) blocks
* @type {Set<(batch: Batch) => void>}
*/
#commit_callbacks = /* @__PURE__ */ new Set();
/**
* If a fork is discarded, we need to destroy any effects that are no longer needed
* @type {Set<(batch: Batch) => void>}
*/
#discard_callbacks = /* @__PURE__ */ new Set();
/**
* Callbacks that should run only when a fork is committed.
* @type {Set<(batch: Batch) => void>}
*/
#fork_commit_callbacks = /* @__PURE__ */ new Set();
/**
* The number of async effects that are currently in flight
*/
#pending = 0;
/**
* Async effects that are currently in flight, _not_ inside a pending boundary
* @type {Map<Effect, number>}
*/
#blocking_pending = /* @__PURE__ */ new Map();
/**
* A deferred that resolves when the batch is committed, used with `settled()`
* TODO replace with Promise.withResolvers once supported widely enough
* @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}
*/
#deferred = null;
/**
* The root effects that need to be flushed
* @type {Effect[]}
*/
#roots = [];
/**
* Effects created while this batch was active.
* @type {Effect[]}
*/
#new_effects = [];
/**
* Deferred effects (which run after async work has completed) that are DIRTY
* @type {Set<Effect>}
*/
#dirty_effects = /* @__PURE__ */ new Set();
/**
* Deferred effects that are MAYBE_DIRTY
* @type {Set<Effect>}
*/
#maybe_dirty_effects = /* @__PURE__ */ new Set();
/**
* A map of branches that still exist, but will be destroyed when this batch
* is committed — we skip over these during `process`.
* The value contains child effects that were dirty/maybe_dirty before being reset,
* so they can be rescheduled if the branch survives.
* @type {Map<Effect, { d: Effect[], m: Effect[] }>}
*/
#skipped_branches = /* @__PURE__ */ new Map();
/**
* Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing
* @type {Set<Effect>}
*/
#unskipped_branches = /* @__PURE__ */ new Set();
is_fork = false;
#decrement_queued = false;
#is_deferred() {
if (this.is_fork) return true;
for (const effect2 of this.#blocking_pending.keys()) {
var e = effect2;
var skipped = false;
while (e.parent !== null) {
if (this.#skipped_branches.has(e)) {
skipped = true;
break;
}
e = e.parent;
}
if (!skipped) {
return true;
}
}
return false;
}
/**
* Add an effect to the #skipped_branches map and reset its children
* @param {Effect} effect
*/
skip_effect(effect2) {
if (!this.#skipped_branches.has(effect2)) {
this.#skipped_branches.set(effect2, { d: [], m: [] });
}
this.#unskipped_branches.delete(effect2);
}
/**
* Remove an effect from the #skipped_branches map and reschedule
* any tracked dirty/maybe_dirty child effects
* @param {Effect} effect
* @param {(e: Effect) => void} callback
*/
unskip_effect(effect2, callback = (e) => this.schedule(e)) {
var tracked = this.#skipped_branches.get(effect2);
if (tracked) {
this.#skipped_branches.delete(effect2);
for (var e of tracked.d) {
set_signal_status(e, DIRTY);
callback(e);
}
for (e of tracked.m) {
set_signal_status(e, MAYBE_DIRTY);
callback(e);
}
}
this.#unskipped_branches.add(effect2);
}
#process() {
this.#started = true;
if (flush_count++ > 1e3) {
this.#unlink();
infinite_loop_guard();
}
if (!this.#is_deferred()) {
for (const e of this.#dirty_effects) {
this.#maybe_dirty_effects.delete(e);
set_signal_status(e, DIRTY);
this.schedule(e);
}
for (const e of this.#maybe_dirty_effects) {
set_signal_status(e, MAYBE_DIRTY);
this.schedule(e);
}
}
const roots = this.#roots;
this.#roots = [];
this.apply();
var effects = collected_effects = [];
var render_effects = [];
var updates = legacy_updates = [];
for (const root2 of roots) {
try {
this.#traverse(root2, effects, render_effects);
} catch (e) {
reset_all(root2);
throw e;
}
}
current_batch = null;
if (updates.length > 0) {
var batch = Batch.ensure();
for (const e of updates) {
batch.schedule(e);
}
}
collected_effects = null;
legacy_updates = null;
if (this.#is_deferred()) {
this.#defer_effects(render_effects);
this.#defer_effects(effects);
for (const [e, t] of this.#skipped_branches) {
reset_branch(e, t);
}
if (updates.length > 0) {
/** @type {unknown} */
current_batch.#process();
}
return;
}
const earlier_batch = this.#find_earlier_batch();
if (earlier_batch) {
earlier_batch.#merge(this);
return;
}
this.#dirty_effects.clear();
this.#maybe_dirty_effects.clear();
for (const fn of this.#commit_callbacks) fn(this);
this.#commit_callbacks.clear();
previous_batch = this;
flush_queued_effects(render_effects);
flush_queued_effects(effects);
previous_batch = null;
this.#deferred?.resolve();
var next_batch = (
/** @type {Batch | null} */
/** @type {unknown} */
current_batch
);
if (this.linked && this.#pending === 0) {
this.#unlink();
}
if (this.#roots.length > 0) {
if (next_batch === null) {
next_batch = this;
this.#link();
}
const batch2 = next_batch;
batch2.#roots.push(...this.#roots.filter((r2) => !batch2.#roots.includes(r2)));
}
if (next_batch !== null) {
next_batch.#process();
}
}
/**
* Traverse the effect tree, executing effects or stashing
* them for later execution as appropriate
* @param {Effect} root
* @param {Effect[]} effects
* @param {Effect[]} render_effects
*/
#traverse(root2, effects, render_effects) {
root2.f ^= CLEAN;
var effect2 = root2.first;
while (effect2 !== null) {
var flags2 = effect2.f;
var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;
var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0;
var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.#skipped_branches.has(effect2);
if (!skip && effect2.fn !== null) {
if (is_branch) {
effect2.f ^= CLEAN;
} else if ((flags2 & EFFECT) !== 0) {
effects.push(effect2);
} else if (is_dirty(effect2)) {
if ((flags2 & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect2);
update_effect(effect2);
}
var child2 = effect2.first;
if (child2 !== null) {
effect2 = child2;
continue;
}
}
while (effect2 !== null) {
var next2 = effect2.next;
if (next2 !== null) {
effect2 = next2;
break;
}
effect2 = effect2.parent;
}
}
}
#find_earlier_batch() {
var batch = this.#prev;
while (batch !== null) {
if (!batch.is_fork) {
for (const [value, [, is_derived]] of this.current) {
if (batch.current.has(value) && !is_derived) {
return batch;
}
}
}
batch = batch.#prev;
}
return null;
}
/**
* @param {Batch} batch
*/
#merge(batch) {
for (const [source2, value] of batch.current) {
if (!this.previous.has(source2) && batch.previous.has(source2)) {
this.previous.set(source2, batch.previous.get(source2));
}
this.current.set(source2, value);
}
for (const [effect2, deferred2] of batch.async_deriveds) {
const d = this.async_deriveds.get(effect2);
if (d) deferred2.promise.then(d.resolve);
}
const mark = (value) => {
var reactions = value.reactions;
if (reactions === null) return;
for (const reaction of reactions) {
var flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark(
/** @type {Derived} */
reaction
);
} else {
var effect2 = (
/** @type {Effect} */
reaction
);
if (flags2 & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect2)) {
this.#maybe_dirty_effects.delete(effect2);
set_signal_status(effect2, DIRTY);
this.schedule(effect2);
}
}
}
};
for (const source2 of this.current.keys()) {
mark(source2);
}
this.oncommit(() => batch.discard());
batch.#unlink();
current_batch = this;
this.#process();
}
/**
* @param {Effect[]} effects
*/
#defer_effects(effects) {
for (var i = 0; i < effects.length; i += 1) {
defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);
}
}
/**
* Associate a change to a given source with the current
* batch, noting its previous and current values
* @param {Value} source
* @param {any} value
* @param {boolean} [is_derived]
*/
capture(source2, value, is_derived = false) {
if (source2.v !== UNINITIALIZED && !this.previous.has(source2)) {
this.previous.set(source2, source2.v);
}
if ((source2.f & ERROR_VALUE) === 0) {
this.current.set(source2, [value, is_derived]);
batch_values?.set(source2, value);
}
if (!this.is_fork) {
source2.v = value;
}
}
activate() {
current_batch = this;
}
deactivate() {
current_batch = null;
batch_values = null;
}
flush() {
try {
if (DEV) ;
is_processing = true;
current_batch = this;
this.#process();
} finally {
flush_count = 0;
last_scheduled_effect = null;
collected_effects = null;
legacy_updates = null;
is_processing = false;
current_batch = null;
batch_values = null;
old_values.clear();
}
}
discard() {
for (const fn of this.#discard_callbacks) fn(this);
this.#discard_callbacks.clear();
this.#fork_commit_callbacks.clear();
this.#unlink();
}
/**
* @param {Effect} effect
*/
register_created_effect(effect2) {
this.#new_effects.push(effect2);
}
#commit() {
this.#unlink();
for (let batch = first_batch; batch !== null; batch = batch.#next) {
var is_earlier = batch.id < this.id;
var sources = [];
for (const [source3, [value, is_derived]] of this.current) {
if (batch.current.has(source3)) {
var batch_value = (
/** @type {[any, boolean]} */
batch.current.get(source3)[0]
);
if (is_earlier && value !== batch_value) {
batch.current.set(source3, [value, is_derived]);
} else {
continue;
}
}
sources.push(source3);
}
if (is_earlier) {
for (const [effect2, deferred2] of this.async_deriveds) {
const d = batch.async_deriveds.get(effect2);
if (d) deferred2.promise.then(d.resolve);
}
}
if (!batch.#started) continue;
var others = [...batch.current.keys()].filter((s) => !this.current.has(s));
if (others.length === 0) {
if (is_earlier) {
batch.discard();
}
} else if (sources.length > 0) {
if (is_earlier) {
for (const unskipped of this.#unskipped_branches) {
batch.unskip_effect(unskipped, (e) => {
if ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) {
batch.schedule(e);
} else {
batch.#defer_effects([e]);
}
});
}
}
batch.activate();
var marked = /* @__PURE__ */ new Set();
var checked = /* @__PURE__ */ new Map();
for (var source2 of sources) {
mark_effects(source2, others, marked, checked);
}
checked = /* @__PURE__ */ new Map();
var current_unequal = [...batch.current.keys()].filter(
(c) => this.current.has(c) ? (
/** @type {[any, boolean]} */
this.current.get(c)[0] !== c.v
) : true
);
if (current_unequal.length > 0) {
for (const effect2 of this.#new_effects) {
if ((effect2.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 && depends_on(effect2, current_unequal, checked)) {
if ((effect2.f & (ASYNC | BLOCK_EFFECT)) !== 0) {
set_signal_status(effect2, DIRTY);
batch.schedule(effect2);
} else {
batch.#dirty_effects.add(effect2);
}
}
}
}
if (batch.#roots.length > 0) {
batch.apply();
for (var root2 of batch.#roots) {
batch.#traverse(root2, [], []);
}
batch.#roots = [];
}
batch.deactivate();
}
}
}
/**
* @param {boolean} blocking
* @param {Effect} effect
*/
increment(blocking, effect2) {
this.#pending += 1;
if (blocking) {
let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0;
this.#blocking_pending.set(effect2, blocking_pending_count + 1);
}
}
/**
* @param {boolean} blocking
* @param {Effect} effect
*/
decrement(blocking, effect2) {
this.#pending -= 1;
if (blocking) {
let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0;
if (blocking_pending_count === 1) {
this.#blocking_pending.delete(effect2);
} else {
this.#blocking_pending.set(effect2, blocking_pending_count - 1);
}
}
if (this.#decrement_queued) return;
this.#decrement_queued = true;
queue_micro_task(() => {
this.#decrement_queued = false;
if (this.linked) {
this.flush();
}
});
}
/**
* @param {Set<Effect>} dirty_effects
* @param {Set<Effect>} maybe_dirty_effects
*/
transfer_effects(dirty_effects, maybe_dirty_effects) {
for (const e of dirty_effects) {
this.#dirty_effects.add(e);
}
for (const e of maybe_dirty_effects) {
this.#maybe_dirty_effects.add(e);
}
dirty_effects.clear();
maybe_dirty_effects.clear();
}
/** @param {(batch: Batch) => void} fn */
oncommit(fn) {
this.#commit_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
ondiscard(fn) {
this.#discard_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
on_fork_commit(fn) {
this.#fork_commit_callbacks.add(fn);
}
run_fork_commit_callbacks() {
for (const fn of this.#fork_commit_callbacks) fn(this);
this.#fork_commit_callbacks.clear();
}
settled() {
return (this.#deferred ??= deferred()).promise;
}
static ensure() {
if (current_batch === null) {
const batch = current_batch = new Batch();
batch.#link();
if (!is_processing && !is_flushing_sync) {
queue_micro_task(() => {
if (!batch.#started) {
batch.flush();
}
});
}
}
return current_batch;
}
apply() {
{
batch_values = null;
return;
}
}
/**
*
* @param {Effect} effect
*/
schedule(effect2) {
last_scheduled_effect = effect2;
if (effect2.b?.is_pending && (effect2.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect2.f & REACTION_RAN) === 0) {
effect2.b.defer_effect(effect2);
return;
}
var e = effect2;
while (e.parent !== null) {
e = e.parent;
var flags2 = e.f;
if (collected_effects !== null && e === active_effect) {
if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) {
return;
}
}
if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {
if ((flags2 & CLEAN) === 0) {
return;
}
e.f ^= CLEAN;
}
}
this.#roots.push(e);
}
#link() {
if (last_batch === null) {
first_batch = last_batch = this;
} else {
last_batch.#next = this;
this.#prev = last_batch;
}
last_batch = this;
}
#unlink() {
var prev = this.#prev;
var next2 = this.#next;
if (prev === null) {
first_batch = next2;
} else {
prev.#next = next2;
}
if (next2 === null) {
last_batch = prev;
} else {
next2.#prev = prev;
}
this.linked = false;
}
}
function flushSync(fn) {
var was_flushing_sync = is_flushing_sync;
is_flushing_sync = true;
try {
var result;
if (fn) ;
while (true) {
flush_tasks();
if (current_batch === null) {
return (
/** @type {T} */
result
);
}
current_batch.flush();
}
} finally {
is_flushing_sync = was_flushing_sync;
}
}
function infinite_loop_guard() {
try {
effect_update_depth_exceeded();
} catch (error) {
invoke_error_boundary(error, last_scheduled_effect);
}
}
let eager_block_effects = null;
function flush_queued_effects(effects) {
var length = effects.length;
if (length === 0) return;
var i = 0;
while (i < length) {
var effect2 = effects[i++];
if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) {
eager_block_effects = /* @__PURE__ */ new Set();
update_effect(effect2);
if (effect2.deps === null && effect2.first === null && effect2.nodes === null && effect2.teardown === null && effect2.ac === null) {
unlink_effect(effect2);
}
if (eager_block_effects?.size > 0) {
old_values.clear();
for (const e of eager_block_effects) {
if ((e.f & (DESTROYED | INERT)) !== 0) continue;
const ordered_effects = [e];
let ancestor = e.parent;
while (ancestor !== null) {
if (eager_block_effects.has(ancestor)) {
eager_block_effects.delete(ancestor);
ordered_effects.push(ancestor);
}
ancestor = ancestor.parent;
}
for (let j = ordered_effects.length - 1; j >= 0; j--) {
const e2 = ordered_effects[j];
if ((e2.f & (DESTROYED | INERT)) !== 0) continue;
update_effect(e2);
}
}
eager_block_effects.clear();
}
}
}
eager_block_effects = null;
}
function mark_effects(value, sources, marked, checked) {
if (marked.has(value)) return;
marked.add(value);
if (value.reactions !== null) {
for (const reaction of value.reactions) {
const flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark_effects(
/** @type {Derived} */
reaction,
sources,
marked,
checked
);
} else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) {
set_signal_status(reaction, DIRTY);
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
}
function depends_on(reaction, sources, checked) {
const depends = checked.get(reaction);
if (depends !== void 0) return depends;
if (reaction.deps !== null) {
for (const dep of reaction.deps) {
if (includes.call(sources, dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on(
/** @type {Derived} */
dep,
sources,
checked
)) {
checked.set(
/** @type {Derived} */
dep,
true
);
return true;
}
}
}
checked.set(reaction, false);
return false;
}
function schedule_effect(effect2) {
current_batch.schedule(effect2);
}
function reset_branch(effect2, tracked) {
if ((effect2.f & BRANCH_EFFECT) !== 0 && (effect2.f & CLEAN) !== 0) {
return;
}
if ((effect2.f & DIRTY) !== 0) {
tracked.d.push(effect2);
} else if ((effect2.f & MAYBE_DIRTY) !== 0) {
tracked.m.push(effect2);
}
set_signal_status(effect2, CLEAN);
var e = effect2.first;
while (e !== null) {
reset_branch(e, tracked);
e = e.next;
}
}
function reset_all(effect2) {
set_signal_status(effect2, CLEAN);
var e = effect2.first;
while (e !== null) {
reset_all(e);
e = e.next;
}
}
function createSubscriber(start) {
let subscribers = 0;
let version = source(0);
let stop;
return () => {
if (effect_tracking()) {
get(version);
render_effect(() => {
if (subscribers === 0) {
stop = untrack(() => start(() => increment(version)));
}
subscribers += 1;
return () => {
queue_micro_task(() => {
subscribers -= 1;
if (subscribers === 0) {
stop?.();
stop = void 0;
increment(version);
}
});
};
});
}
};
}
var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;
function boundary(node, props, children, transform_error) {
new Boundary(node, props, children, transform_error);
}
class Boundary {
/** @type {Boundary | null} */
parent;
is_pending = false;
/**
* API-level transformError transform function. Transforms errors before they reach the `failed` snippet.
* Inherited from parent boundary, or defaults to identity.
* @type {(error: unknown) => unknown}
*/
transform_error;
/** @type {TemplateNode} */
#anchor;
/** @type {TemplateNode | null} */
#hydrate_open = hydrating ? hydrate_node : null;
/** @type {BoundaryProps} */
#props;
/** @type {((anchor: Node) => void)} */
#children;
/** @type {Effect} */
#effect;
/** @type {Effect | null} */
#main_effect = null;
/** @type {Effect | null} */
#pending_effect = null;
/** @type {Effect | null} */
#failed_effect = null;
/** @type {DocumentFragment | null} */
#offscreen_fragment = null;
#local_pending_count = 0;
#pending_count = 0;
#pending_count_update_queued = false;
/** @type {Set<Effect>} */
#dirty_effects = /* @__PURE__ */ new Set();
/** @type {Set<Effect>} */
#maybe_dirty_effects = /* @__PURE__ */ new Set();
/**
* A source containing the number of pending async deriveds/expressions.
* Only created if `$effect.pending()` is used inside the boundary,
* otherwise updating the source results in needless `Batch.ensure()`
* calls followed by no-op flushes
* @type {Source<number> | null}
*/
#effect_pending = null;
#effect_pending_subscriber = createSubscriber(() => {
this.#effect_pending = source(this.#local_pending_count);
return () => {
this.#effect_pending = null;
};
});
/**
* @param {TemplateNode} node
* @param {BoundaryProps} props
* @param {((anchor: Node) => void)} children
* @param {((error: unknown) => unknown) | undefined} [transform_error]
*/
constructor(node, props, children, transform_error) {
this.#anchor = node;
this.#props = props;
this.#children = (anchor) => {
var effect2 = (
/** @type {Effect} */
active_effect
);
effect2.b = this;
effect2.f |= BOUNDARY_EFFECT;
children(anchor);
};
this.parent = /** @type {Effect} */
active_effect.b;
this.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e);
this.#effect = block(() => {
if (hydrating) {
const comment2 = (
/** @type {Comment} */
this.#hydrate_open
);
hydrate_next();
const server_rendered_pending = comment2.data === HYDRATION_START_ELSE;
const server_rendered_failed = comment2.data.startsWith(HYDRATION_START_FAILED);
if (server_rendered_failed) {
const serialized_error = JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length));
this.#hydrate_failed_content(serialized_error);
} else if (server_rendered_pending) {
this.#hydrate_pending_content();
} else {
this.#hydrate_resolved_content();
}
} else {
this.#render();
}
}, flags);
if (hydrating) {
this.#anchor = hydrate_node;
}
}
#hydrate_resolved_content() {
try {
this.#main_effect = branch(() => this.#children(this.#anchor));
} catch (error) {
this.error(error);
}
}
/**
* @param {unknown} error The deserialized error from the server's hydration comment
*/
#hydrate_failed_content(error) {
const failed = this.#props.failed;
if (!failed) return;
this.#failed_effect = branch(() => {
failed(
this.#anchor,
() => error,
() => () => {
}
);
});
}
#hydrate_pending_content() {
const pending = this.#props.pending;
if (!pending) return;
this.is_pending = true;
this.#pending_effect = branch(() => pending(this.#anchor));
queue_micro_task(() => {
var fragment = this.#offscreen_fragment = document.createDocumentFragment();
var anchor = create_text();
fragment.append(anchor);
this.#main_effect = this.#run(() => {
return branch(() => this.#children(anchor));
});
if (this.#pending_count === 0) {
this.#anchor.before(fragment);
this.#offscreen_fragment = null;
pause_effect(
/** @type {Effect} */
this.#pending_effect,
() => {
this.#pending_effect = null;
}
);
this.#resolve(
/** @type {Batch} */
current_batch
);
}
});
}
#render() {
try {
this.is_pending = this.has_pending_snippet();
this.#pending_count = 0;
this.#local_pending_count = 0;
this.#main_effect = branch(() => {
this.#children(this.#anchor);
});
if (this.#pending_count > 0) {
var fragment = this.#offscreen_fragment = document.createDocumentFragment();
move_effect(this.#main_effect, fragment);
const pending = (
/** @type {(anchor: Node) => void} */
this.#props.pending
);
this.#pending_effect = branch(() => pending(this.#anchor));
} else {
this.#resolve(
/** @type {Batch} */
current_batch
);
}
} catch (error) {
this.error(error);
}
}
/**
* @param {Batch} batch
*/
#resolve(batch) {
this.is_pending = false;
batch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects);
}
/**
* Defer an effect inside a pending boundary until the boundary resolves
* @param {Effect} effect
*/
defer_effect(effect2) {
defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects);
}
/**
* Returns `false` if the effect exists inside a boundary whose pending snippet is shown
* @returns {boolean}
*/
is_rendered() {
return !this.is_pending && (!this.parent || this.parent.is_rendered());
}
has_pending_snippet() {
return !!this.#props.pending;
}
/**
* @template T
* @param {() => T} fn
*/
#run(fn) {
var previous_effect = active_effect;
var previous_reaction = active_reaction;
var previous_ctx = component_context;
set_active_effect(this.#effect);
set_active_reaction(this.#effect);
set_component_context(this.#effect.ctx);
try {
Batch.ensure();
return fn();
} catch (e) {
handle_error(e);
return null;
} finally {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_ctx);
}
}
/**
* Updates the pending count associated with the currently visible pending snippet,
* if any, such that we can replace the snippet with content once work is done
* @param {1 | -1} d
* @param {Batch} batch
*/
#update_pending_count(d, batch) {
if (!this.has_pending_snippet()) {
if (this.parent) {
this.parent.#update_pending_count(d, batch);
}
return;
}
this.#pending_count += d;
if (this.#pending_count === 0) {
this.#resolve(batch);
if (this.#pending_effect) {
pause_effect(this.#pending_effect, () => {
this.#pending_effect = null;
});
}
if (this.#offscreen_fragment) {
this.#anchor.before(this.#offscreen_fragment);
this.#offscreen_fragment = null;
}
}
}
/**
* Update the source that powers `$effect.pending()` inside this boundary,
* and controls when the current `pending` snippet (if any) is removed.
* Do not call from inside the class
* @param {1 | -1} d
* @param {Batch} batch
*/
update_pending_count(d, batch) {
this.#update_pending_count(d, batch);
this.#local_pending_count += d;
if (!this.#effect_pending || this.#pending_count_update_queued) return;
this.#pending_count_update_queued = true;
queue_micro_task(() => {
this.#pending_count_update_queued = false;
if (this.#effect_pending) {
internal_set(this.#effect_pending, this.#local_pending_count);
}
});
}
get_effect_pending() {
this.#effect_pending_subscriber();
return get(
/** @type {Source<number>} */
this.#effect_pending
);
}
/** @param {unknown} error */
error(error) {
if (!this.#props.onerror && !this.#props.failed) {
throw error;
}
if (current_batch?.is_fork) {
if (this.#main_effect) current_batch.skip_effect(this.#main_effect);
if (this.#pending_effect) current_batch.skip_effect(this.#pending_effect);
if (this.#failed_effect) current_batch.skip_effect(this.#failed_effect);
current_batch.on_fork_commit(() => {
this.#handle_error(error);
});
} else {
this.#handle_error(error);
}
}
/**
* @param {unknown} error
*/
#handle_error(error) {
if (this.#main_effect) {
destroy_effect(this.#main_effect);
this.#main_effect = null;
}
if (this.#pending_effect) {
destroy_effect(this.#pending_effect);
this.#pending_effect = null;
}
if (this.#failed_effect) {
destroy_effect(this.#failed_effect);
this.#failed_effect = null;
}
if (hydrating) {
set_hydrate_node(
/** @type {TemplateNode} */
this.#hydrate_open
);
next();
set_hydrate_node(skip_nodes());
}
var onerror = this.#props.onerror;
let failed = this.#props.failed;
var did_reset = false;
var calling_on_error = false;
const reset2 = () => {
if (did_reset) {
svelte_boundary_reset_noop();
return;
}
did_reset = true;
if (calling_on_error) {
svelte_boundary_reset_onerror();
}
if (this.#failed_effect !== null) {
pause_effect(this.#failed_effect, () => {
this.#failed_effect = null;
});
}
this.#run(() => {
this.#render();
});
};
const handle_error_result = (transformed_error) => {
try {
calling_on_error = true;
onerror?.(transformed_error, reset2);
calling_on_error = false;
} catch (error2) {
invoke_error_boundary(error2, this.#effect && this.#effect.parent);
}
if (failed) {
this.#failed_effect = this.#run(() => {
try {
return branch(() => {
var effect2 = (
/** @type {Effect} */
active_effect
);
effect2.b = this;
effect2.f |= BOUNDARY_EFFECT;
failed(
this.#anchor,
() => transformed_error,
() => reset2
);
});
} catch (error2) {
invoke_error_boundary(
error2,
/** @type {Effect} */
this.#effect.parent
);
return null;
}
});
}
};
queue_micro_task(() => {
var result;
try {
result = this.transform_error(error);
} catch (e) {
invoke_error_boundary(e, this.#effect && this.#effect.parent);
return;
}
if (result !== null && typeof result === "object" && typeof /** @type {any} */
result.then === "function") {
result.then(
handle_error_result,
/** @param {unknown} e */
(e) => invoke_error_boundary(e, this.#effect && this.#effect.parent)
);
} else {
handle_error_result(result);
}
});
}
}
function flatten(blockers, sync, async, fn) {
const d = derived;
var pending = blockers.filter((b) => !b.settled);
if (async.length === 0 && pending.length === 0) {
fn(sync.map(d));
return;
}
var parent = (
/** @type {Effect} */
active_effect
);
var restore = capture();
var blocker_promise = pending.length === 1 ? pending[0].promise : pending.length > 1 ? Promise.all(pending.map((b) => b.promise)) : null;
function finish(values) {
if ((parent.f & DESTROYED) !== 0) {
return;
}
restore();
try {
fn(values);
} catch (error) {
invoke_error_boundary(error, parent);
}
unset_context();
}
var decrement_pending = increment_pending();
if (async.length === 0) {
blocker_promise.then(() => finish(sync.map(d))).finally(decrement_pending);
return;
}
function run() {
Promise.all(async.map((expression) => /* @__PURE__ */ async_derived(expression))).then((result) => finish([...sync.map(d), ...result])).catch((error) => invoke_error_boundary(error, parent)).finally(decrement_pending);
}
if (blocker_promise) {
blocker_promise.then(() => {
restore();
run();
unset_context();
});
} else {
run();
}
}
function capture() {
var previous_effect = (
/** @type {Effect} */
active_effect
);
var previous_reaction = active_reaction;
var previous_component_context = component_context;
var previous_batch2 = (
/** @type {Batch} */
current_batch
);
return function restore(activate_batch = true) {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_component_context);
if (activate_batch && (previous_effect.f & DESTROYED) === 0) {
previous_batch2?.activate();
previous_batch2?.apply();
}
};
}
function unset_context(deactivate_batch = true) {
set_active_effect(null);
set_active_reaction(null);
set_component_context(null);
if (deactivate_batch) current_batch?.deactivate();
}
function increment_pending() {
var effect2 = (
/** @type {Effect} */
active_effect
);
var boundary2 = (
/** @type {Boundary} */
effect2.b
);
var batch = (
/** @type {Batch} */
current_batch
);
var blocking = boundary2.is_rendered();
boundary2.update_pending_count(1, batch);
batch.increment(blocking, effect2);
return () => {
boundary2.update_pending_count(-1, batch);
batch.decrement(blocking, effect2);
};
}
// @__NO_SIDE_EFFECTS__
function derived(fn) {
var flags2 = DERIVED | DIRTY;
if (active_effect !== null) {
active_effect.f |= EFFECT_PRESERVED;
}
const signal = {
ctx: component_context,
deps: null,
effects: null,
equals,
f: flags2,
fn,
reactions: null,
rv: 0,
v: (
/** @type {V} */
UNINITIALIZED
),
wv: 0,
parent: active_effect,
ac: null
};
return signal;
}
const OBSOLETE = /* @__PURE__ */ Symbol("obsolete");
// @__NO_SIDE_EFFECTS__
function async_derived(fn, label, location2) {
let parent = (
/** @type {Effect | null} */
active_effect
);
if (parent === null) {
async_derived_orphan();
}
var promise = (
/** @type {Promise<V>} */
/** @type {unknown} */
void 0
);
var signal = source(
/** @type {V} */
UNINITIALIZED
);
var should_suspend = !active_reaction;
var deferreds = /* @__PURE__ */ new Set();
async_effect(() => {
var effect2 = (
/** @type {Effect} */
active_effect
);
var d = deferred();
promise = d.promise;
try {
Promise.resolve(fn()).then(d.resolve, (e) => {
if (e !== STALE_REACTION) d.reject(e);
}).finally(unset_context);
} catch (error) {
d.reject(error);
unset_context();
}
var batch = (
/** @type {Batch} */
current_batch
);
if (should_suspend) {
if ((effect2.f & REACTION_RAN) !== 0) {
var decrement_pending = increment_pending();
}
if (
/** @type {Boundary} */
parent.b.is_rendered()
) {
batch.async_deriveds.get(effect2)?.reject(OBSOLETE);
} else {
for (const d2 of deferreds.values()) {
d2.reject(OBSOLETE);
}
}
deferreds.add(d);
batch.async_deriveds.set(effect2, d);
}
const handler = (value, error = void 0) => {
decrement_pending?.();
deferreds.delete(d);
if (error === OBSOLETE) return;
batch.activate();
if (error) {
signal.f |= ERROR_VALUE;
internal_set(signal, error);
} else {
if ((signal.f & ERROR_VALUE) !== 0) {
signal.f ^= ERROR_VALUE;
}
internal_set(signal, value);
}
batch.deactivate();
};
d.promise.then(handler, (e) => handler(null, e || "unknown"));
});
teardown(() => {
for (const d of deferreds) {
d.reject(OBSOLETE);
}
});
return new Promise((fulfil) => {
function next2(p) {
function go() {
if (p === promise) {
fulfil(signal);
} else {
next2(promise);
}
}
p.then(go, go);
}
next2(promise);
});
}
// @__NO_SIDE_EFFECTS__
function user_derived(fn) {
const d = /* @__PURE__ */ derived(fn);
push_reaction_value(d);
return d;
}
function destroy_derived_effects(derived2) {
var effects = derived2.effects;
if (effects !== null) {
derived2.effects = null;
for (var i = 0; i < effects.length; i += 1) {
destroy_effect(
/** @type {Effect} */
effects[i]
);
}
}
}
function execute_derived(derived2) {
var value;
var prev_active_effect = active_effect;
var parent = derived2.parent;
if (!is_destroying_effect && parent !== null && derived2.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead
(parent.f & (DESTROYED | INERT)) !== 0) {
derived_inert();
return derived2.v;
}
set_active_effect(parent);
{
try {
derived2.f &= ~WAS_MARKED;
destroy_derived_effects(derived2);
value = update_reaction(derived2);
} finally {
set_active_effect(prev_active_effect);
}
}
return value;
}
function update_derived(derived2) {
var value = execute_derived(derived2);
if (!derived2.equals(value)) {
derived2.wv = increment_write_version();
if (!current_batch?.is_fork || derived2.deps === null) {
if (current_batch !== null) {
current_batch.capture(derived2, value, true);
previous_batch?.capture(derived2, value, true);
} else {
derived2.v = value;
}
if (derived2.deps === null) {
set_signal_status(derived2, CLEAN);
return;
}
}
}
if (is_destroying_effect) {
return;
}
if (batch_values !== null) {
if (effect_tracking() || current_batch?.is_fork) {
batch_values.set(derived2, value);
}
} else {
update_derived_status(derived2);
}
}
function freeze_derived_effects(derived2) {
if (derived2.effects === null) return;
for (const e of derived2.effects) {
if (e.teardown || e.ac) {
e.teardown?.();
e.ac?.abort(STALE_REACTION);
if (e.fn !== null) e.teardown = noop;
e.ac = null;
remove_reactions(e, 0);
destroy_effect_children(e);
}
}
}
function unfreeze_derived_effects(derived2) {
if (derived2.effects === null) return;
for (const e of derived2.effects) {
if (e.teardown && e.fn !== null) {
update_effect(e);
}
}
}
let eager_effects = /* @__PURE__ */ new Set();
const old_values = /* @__PURE__ */ new Map();
let eager_effects_deferred = false;
function source(v, stack) {
var signal = {
f: 0,
// TODO ideally we could skip this altogether, but it causes type errors
v,
reactions: null,
equals,
rv: 0,
wv: 0
};
return signal;
}
// @__NO_SIDE_EFFECTS__
function state(v, stack) {
const s = source(v);
push_reaction_value(s);
return s;
}
// @__NO_SIDE_EFFECTS__
function mutable_source(initial_value, immutable = false, trackable = true) {
const s = source(initial_value);
if (!immutable) {
s.equals = safe_equals;
}
return s;
}
function set(source2, value, should_proxy = false) {
if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check
// to ensure we error if state is set inside an inspect effect
(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) {
state_unsafe_mutation();
}
let new_value = should_proxy ? proxy(value) : value;
return internal_set(source2, new_value, legacy_updates);
}
function internal_set(source2, value, updated_during_traversal = null) {
if (!source2.equals(value)) {
old_values.set(source2, is_destroying_effect ? value : source2.v);
var batch = Batch.ensure();
batch.capture(source2, value);
if ((source2.f & DERIVED) !== 0) {
const derived2 = (
/** @type {Derived} */
source2
);
if ((source2.f & DIRTY) !== 0) {
execute_derived(derived2);
}
if (batch_values === null) {
update_derived_status(derived2);
}
}
source2.wv = increment_write_version();
mark_reactions(source2, DIRTY, updated_during_traversal);
if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) {
if (untracked_writes === null) {
set_untracked_writes([source2]);
} else {
untracked_writes.push(source2);
}
}
if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {
flush_eager_effects();
}
}
return value;
}
function flush_eager_effects() {
eager_effects_deferred = false;
for (const effect2 of eager_effects) {
if ((effect2.f & CLEAN) !== 0) {
set_signal_status(effect2, MAYBE_DIRTY);
}
let dirty;
try {
dirty = is_dirty(effect2);
} catch {
dirty = true;
}
if (dirty) {
update_effect(effect2);
}
}
eager_effects.clear();
}
function increment(source2) {
set(source2, source2.v + 1);
}
function mark_reactions(signal, status, updated_during_traversal) {
var reactions = signal.reactions;
if (reactions === null) return;
var length = reactions.length;
for (var i = 0; i < length; i++) {
var reaction = reactions[i];
var flags2 = reaction.f;
var not_dirty = (flags2 & DIRTY) === 0;
if (not_dirty) {
set_signal_status(reaction, status);
}
if ((flags2 & EAGER_EFFECT) !== 0) {
eager_effects.add(
/** @type {Effect} */
reaction
);
} else if ((flags2 & DERIVED) !== 0) {
var derived2 = (
/** @type {Derived} */
reaction
);
batch_values?.delete(derived2);
if ((flags2 & WAS_MARKED) === 0) {
if (flags2 & CONNECTED && (active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)) {
reaction.f |= WAS_MARKED;
}
mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal);
}
} else if (not_dirty) {
var effect2 = (
/** @type {Effect} */
reaction
);
if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {
eager_block_effects.add(effect2);
}
if (updated_during_traversal !== null) {
updated_during_traversal.push(effect2);
} else {
schedule_effect(effect2);
}
}
}
}
function autofocus(dom, value) {
if (value) {
const body = document.body;
dom.autofocus = true;
queue_micro_task(() => {
if (document.activeElement === body) {
dom.focus();
}
});
}
}
let listening_to_form_reset = false;
function add_form_reset_listener() {
if (!listening_to_form_reset) {
listening_to_form_reset = true;
document.addEventListener(
"reset",
(evt) => {
Promise.resolve().then(() => {
if (!evt.defaultPrevented) {
for (
const e of
/**@type {HTMLFormElement} */
evt.target.elements
) {
e[FORM_RESET_HANDLER]?.();
}
}
});
},
// In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation)
{ capture: true }
);
}
}
function without_reactive_context(fn) {
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
return fn();
} finally {
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) {
element.addEventListener(event2, () => without_reactive_context(handler));
const prev = (
/** @type {any} */
element[FORM_RESET_HANDLER]
);
if (prev) {
element[FORM_RESET_HANDLER] = () => {
prev();
on_reset(true);
};
} else {
element[FORM_RESET_HANDLER] = () => on_reset(true);
}
add_form_reset_listener();
}
let is_updating_effect = false;
let is_destroying_effect = false;
function set_is_destroying_effect(value) {
is_destroying_effect = value;
}
let active_reaction = null;
let untracking = false;
function set_active_reaction(reaction) {
active_reaction = reaction;
}
let active_effect = null;
function set_active_effect(effect2) {
active_effect = effect2;
}
let current_sources = null;
function push_reaction_value(value) {
if (active_reaction !== null && true) {
if (current_sources === null) {
current_sources = [value];
} else {
current_sources.push(value);
}
}
}
let new_deps = null;
let skipped_deps = 0;
let untracked_writes = null;
function set_untracked_writes(value) {
untracked_writes = value;
}
let write_version = 1;
let read_version = 0;
let update_version = read_version;
function set_update_version(value) {
update_version = value;
}
function increment_write_version() {
return ++write_version;
}
function is_dirty(reaction) {
var flags2 = reaction.f;
if ((flags2 & DIRTY) !== 0) {
return true;
}
if (flags2 & DERIVED) {
reaction.f &= ~WAS_MARKED;
}
if ((flags2 & MAYBE_DIRTY) !== 0) {
var dependencies = (
/** @type {Value[]} */
reaction.deps
);
var length = dependencies.length;
for (var i = 0; i < length; i++) {
var dependency = dependencies[i];
if (is_dirty(
/** @type {Derived} */
dependency
)) {
update_derived(
/** @type {Derived} */
dependency
);
}
if (dependency.wv > reaction.wv) {
return true;
}
}
if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that
// traversal of the graph in the other batches still happens
batch_values === null) {
set_signal_status(reaction, CLEAN);
}
}
return false;
}
function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) {
var reactions = signal.reactions;
if (reactions === null) return;
if (current_sources !== null && includes.call(current_sources, signal)) {
return;
}
for (var i = 0; i < reactions.length; i++) {
var reaction = reactions[i];
if ((reaction.f & DERIVED) !== 0) {
schedule_possible_effect_self_invalidation(
/** @type {Derived} */
reaction,
effect2,
false
);
} else if (effect2 === reaction) {
if (root2) {
set_signal_status(reaction, DIRTY);
} else if ((reaction.f & CLEAN) !== 0) {
set_signal_status(reaction, MAYBE_DIRTY);
}
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
function update_reaction(reaction) {
var previous_deps = new_deps;
var previous_skipped_deps = skipped_deps;
var previous_untracked_writes = untracked_writes;
var previous_reaction = active_reaction;
var previous_sources = current_sources;
var previous_component_context = component_context;
var previous_untracking = untracking;
var previous_update_version = update_version;
var flags2 = reaction.f;
new_deps = /** @type {null | Value[]} */
null;
skipped_deps = 0;
untracked_writes = null;
active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;
current_sources = null;
set_component_context(reaction.ctx);
untracking = false;
update_version = ++read_version;
if (reaction.ac !== null) {
without_reactive_context(() => {
reaction.ac.abort(STALE_REACTION);
});
reaction.ac = null;
}
try {
reaction.f |= REACTION_IS_UPDATING;
var fn = (
/** @type {Function} */
reaction.fn
);
var result = fn();
reaction.f |= REACTION_RAN;
var deps = reaction.deps;
var is_fork = current_batch?.is_fork;
if (new_deps !== null) {
var i;
if (!is_fork) {
remove_reactions(reaction, skipped_deps);
}
if (deps !== null && skipped_deps > 0) {
deps.length = skipped_deps + new_deps.length;
for (i = 0; i < new_deps.length; i++) {
deps[skipped_deps + i] = new_deps[i];
}
} else {
reaction.deps = deps = new_deps;
}
if (effect_tracking() && (reaction.f & CONNECTED) !== 0) {
for (i = skipped_deps; i < deps.length; i++) {
(deps[i].reactions ??= []).push(reaction);
}
}
} else if (!is_fork && deps !== null && skipped_deps < deps.length) {
remove_reactions(reaction, skipped_deps);
deps.length = skipped_deps;
}
if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) {
for (i = 0; i < /** @type {Source[]} */
untracked_writes.length; i++) {
schedule_possible_effect_self_invalidation(
untracked_writes[i],
/** @type {Effect} */
reaction
);
}
}
if (previous_reaction !== null && previous_reaction !== reaction) {
read_version++;
if (previous_reaction.deps !== null) {
for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) {
previous_reaction.deps[i2].rv = read_version;
}
}
if (previous_deps !== null) {
for (const dep of previous_deps) {
dep.rv = read_version;
}
}
if (untracked_writes !== null) {
if (previous_untracked_writes === null) {
previous_untracked_writes = untracked_writes;
} else {
previous_untracked_writes.push(.../** @type {Source[]} */
untracked_writes);
}
}
}
if ((reaction.f & ERROR_VALUE) !== 0) {
reaction.f ^= ERROR_VALUE;
}
return result;
} catch (error) {
return handle_error(error);
} finally {
reaction.f ^= REACTION_IS_UPDATING;
new_deps = previous_deps;
skipped_deps = previous_skipped_deps;
untracked_writes = previous_untracked_writes;
active_reaction = previous_reaction;
current_sources = previous_sources;
set_component_context(previous_component_context);
untracking = previous_untracking;
update_version = previous_update_version;
}
}
function remove_reaction(signal, dependency) {
let reactions = dependency.reactions;
if (reactions !== null) {
var index = index_of.call(reactions, signal);
if (index !== -1) {
var new_length = reactions.length - 1;
if (new_length === 0) {
reactions = dependency.reactions = null;
} else {
reactions[index] = reactions[new_length];
reactions.pop();
}
}
}
if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear
// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`
// allows us to skip the expensive work of disconnecting and immediately reconnecting it
(new_deps === null || !includes.call(new_deps, dependency))) {
var derived2 = (
/** @type {Derived} */
dependency
);
if ((derived2.f & CONNECTED) !== 0) {
derived2.f ^= CONNECTED;
derived2.f &= ~WAS_MARKED;
}
if (derived2.v !== UNINITIALIZED) {
update_derived_status(derived2);
}
freeze_derived_effects(derived2);
remove_reactions(derived2, 0);
}
}
function remove_reactions(signal, start_index) {
var dependencies = signal.deps;
if (dependencies === null) return;
for (var i = start_index; i < dependencies.length; i++) {
remove_reaction(signal, dependencies[i]);
}
}
function update_effect(effect2) {
var flags2 = effect2.f;
if ((flags2 & DESTROYED) !== 0) {
return;
}
set_signal_status(effect2, CLEAN);
var previous_effect = active_effect;
var was_updating_effect = is_updating_effect;
active_effect = effect2;
is_updating_effect = true;
try {
if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {
destroy_block_effect_children(effect2);
} else {
destroy_effect_children(effect2);
}
execute_effect_teardown(effect2);
var teardown2 = update_reaction(effect2);
effect2.teardown = typeof teardown2 === "function" ? teardown2 : null;
effect2.wv = write_version;
var dep;
if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ;
} finally {
is_updating_effect = was_updating_effect;
active_effect = previous_effect;
}
}
async function tick() {
await Promise.resolve();
flushSync();
}
function get(signal) {
var flags2 = signal.f;
var is_derived = (flags2 & DERIVED) !== 0;
if (active_reaction !== null && !untracking) {
var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;
if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) {
var deps = active_reaction.deps;
if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {
if (signal.rv < read_version) {
signal.rv = read_version;
if (new_deps === null && deps !== null && deps[skipped_deps] === signal) {
skipped_deps++;
} else if (new_deps === null) {
new_deps = [signal];
} else {
new_deps.push(signal);
}
}
} else {
(active_reaction.deps ??= []).push(signal);
var reactions = signal.reactions;
if (reactions === null) {
signal.reactions = [active_reaction];
} else if (!includes.call(reactions, active_reaction)) {
reactions.push(active_reaction);
}
}
}
}
if (is_destroying_effect && old_values.has(signal)) {
return old_values.get(signal);
}
if (is_derived) {
var derived2 = (
/** @type {Derived} */
signal
);
if (is_destroying_effect) {
var value = derived2.v;
if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) {
value = execute_derived(derived2);
}
old_values.set(derived2, value);
return value;
}
var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0);
var is_new = (derived2.f & REACTION_RAN) === 0;
if (is_dirty(derived2)) {
if (should_connect) {
derived2.f |= CONNECTED;
}
update_derived(derived2);
}
if (should_connect && !is_new) {
unfreeze_derived_effects(derived2);
reconnect(derived2);
}
}
if (batch_values?.has(signal)) {
return batch_values.get(signal);
}
if ((signal.f & ERROR_VALUE) !== 0) {
throw signal.v;
}
return signal.v;
}
function reconnect(derived2) {
derived2.f |= CONNECTED;
if (derived2.deps === null) return;
for (const dep of derived2.deps) {
(dep.reactions ??= []).push(derived2);
if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {
unfreeze_derived_effects(
/** @type {Derived} */
dep
);
reconnect(
/** @type {Derived} */
dep
);
}
}
}
function depends_on_old_values(derived2) {
if (derived2.v === UNINITIALIZED) return true;
if (derived2.deps === null) return false;
for (const dep of derived2.deps) {
if (old_values.has(dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on_old_values(
/** @type {Derived} */
dep
)) {
return true;
}
}
return false;
}
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function validate_effect(rune) {
if (active_effect === null) {
if (active_reaction === null) {
effect_orphan();
}
effect_in_unowned_derived();
}
if (is_destroying_effect) {
effect_in_teardown();
}
}
function push_effect(effect2, parent_effect) {
var parent_last = parent_effect.last;
if (parent_last === null) {
parent_effect.last = parent_effect.first = effect2;
} else {
parent_last.next = effect2;
effect2.prev = parent_last;
parent_effect.last = effect2;
}
}
function create_effect(type, fn) {
var parent = active_effect;
if (parent !== null && (parent.f & INERT) !== 0) {
type |= INERT;
}
var effect2 = {
ctx: component_context,
deps: null,
nodes: null,
f: type | DIRTY | CONNECTED,
first: null,
fn,
last: null,
next: null,
parent,
b: parent && parent.b,
prev: null,
teardown: null,
wv: 0,
ac: null
};
current_batch?.register_created_effect(effect2);
var e = effect2;
if ((type & EFFECT) !== 0) {
if (collected_effects !== null) {
collected_effects.push(effect2);
} else {
Batch.ensure().schedule(effect2);
}
} else if (fn !== null) {
try {
update_effect(effect2);
} catch (e2) {
destroy_effect(effect2);
throw e2;
}
if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child
(e.f & EFFECT_PRESERVED) === 0) {
e = e.first;
if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {
e.f |= EFFECT_TRANSPARENT;
}
}
}
if (e !== null) {
e.parent = parent;
if (parent !== null) {
push_effect(e, parent);
}
if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) {
var derived2 = (
/** @type {Derived} */
active_reaction
);
(derived2.effects ??= []).push(e);
}
}
return effect2;
}
function effect_tracking() {
return active_reaction !== null && !untracking;
}
function teardown(fn) {
const effect2 = create_effect(RENDER_EFFECT, null);
set_signal_status(effect2, CLEAN);
effect2.teardown = fn;
return effect2;
}
function user_effect(fn) {
validate_effect();
var flags2 = (
/** @type {Effect} */
active_effect.f
);
var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & REACTION_RAN) === 0;
if (defer) {
var context = (
/** @type {ComponentContext} */
component_context
);
(context.e ??= []).push(fn);
} else {
return create_user_effect(fn);
}
}
function create_user_effect(fn) {
return create_effect(EFFECT | USER_EFFECT, fn);
}
function effect_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
return () => {
destroy_effect(effect2);
};
}
function component_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
return (options = {}) => {
return new Promise((fulfil) => {
if (options.outro) {
pause_effect(effect2, () => {
destroy_effect(effect2);
fulfil(void 0);
});
} else {
destroy_effect(effect2);
fulfil(void 0);
}
});
};
}
function effect(fn) {
return create_effect(EFFECT, fn);
}
function async_effect(fn) {
return create_effect(ASYNC | EFFECT_PRESERVED, fn);
}
function render_effect(fn, flags2 = 0) {
return create_effect(RENDER_EFFECT | flags2, fn);
}
function template_effect(fn, sync = [], async = [], blockers = []) {
flatten(blockers, sync, async, (values) => {
create_effect(RENDER_EFFECT, () => fn(...values.map(get)));
});
}
function block(fn, flags2 = 0) {
var effect2 = create_effect(BLOCK_EFFECT | flags2, fn);
return effect2;
}
function managed(fn, flags2 = 0) {
var effect2 = create_effect(MANAGED_EFFECT | flags2, fn);
return effect2;
}
function branch(fn) {
return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn);
}
function execute_effect_teardown(effect2) {
var teardown2 = effect2.teardown;
if (teardown2 !== null) {
const previously_destroying_effect = is_destroying_effect;
const previous_reaction = active_reaction;
set_is_destroying_effect(true);
set_active_reaction(null);
try {
teardown2.call(null);
} finally {
set_is_destroying_effect(previously_destroying_effect);
set_active_reaction(previous_reaction);
}
}
}
function destroy_effect_children(signal, remove_dom = false) {
var effect2 = signal.first;
signal.first = signal.last = null;
while (effect2 !== null) {
const controller = effect2.ac;
if (controller !== null) {
without_reactive_context(() => {
controller.abort(STALE_REACTION);
});
}
var next2 = effect2.next;
if ((effect2.f & ROOT_EFFECT) !== 0) {
effect2.parent = null;
} else {
destroy_effect(effect2, remove_dom);
}
effect2 = next2;
}
}
function destroy_block_effect_children(signal) {
var effect2 = signal.first;
while (effect2 !== null) {
var next2 = effect2.next;
if ((effect2.f & BRANCH_EFFECT) === 0) {
destroy_effect(effect2);
}
effect2 = next2;
}
}
function destroy_effect(effect2, remove_dom = true) {
var removed = false;
if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) {
remove_effect_dom(
effect2.nodes.start,
/** @type {TemplateNode} */
effect2.nodes.end
);
removed = true;
}
set_signal_status(effect2, DESTROYING);
destroy_effect_children(effect2, remove_dom && !removed);
remove_reactions(effect2, 0);
var transitions = effect2.nodes && effect2.nodes.t;
if (transitions !== null) {
for (const transition of transitions) {
transition.stop();
}
}
execute_effect_teardown(effect2);
effect2.f ^= DESTROYING;
effect2.f |= DESTROYED;
var parent = effect2.parent;
if (parent !== null && parent.first !== null) {
unlink_effect(effect2);
}
effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = effect2.b = null;
}
function remove_effect_dom(node, end) {
while (node !== null) {
var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
node.remove();
node = next2;
}
}
function unlink_effect(effect2) {
var parent = effect2.parent;
var prev = effect2.prev;
var next2 = effect2.next;
if (prev !== null) prev.next = next2;
if (next2 !== null) next2.prev = prev;
if (parent !== null) {
if (parent.first === effect2) parent.first = next2;
if (parent.last === effect2) parent.last = prev;
}
}
function pause_effect(effect2, callback, destroy = true) {
var transitions = [];
pause_children(effect2, transitions, true);
var fn = () => {
if (destroy) destroy_effect(effect2);
if (callback) callback();
};
var remaining = transitions.length;
if (remaining > 0) {
var check = () => --remaining || fn();
for (var transition of transitions) {
transition.out(check);
}
} else {
fn();
}
}
function pause_children(effect2, transitions, local) {
if ((effect2.f & INERT) !== 0) return;
effect2.f ^= INERT;
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition of t) {
if (transition.is_global || local) {
transitions.push(transition);
}
}
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
if ((child2.f & ROOT_EFFECT) === 0) {
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent,
// it means the parent block effect was pruned. In that case,
// transparency information was transferred to the branch effect.
(child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0;
pause_children(child2, transitions, transparent ? local : false);
}
child2 = sibling2;
}
}
function resume_effect(effect2) {
resume_children(effect2, true);
}
function resume_children(effect2, local) {
if ((effect2.f & INERT) === 0) return;
effect2.f ^= INERT;
if ((effect2.f & CLEAN) === 0) {
set_signal_status(effect2, DIRTY);
Batch.ensure().schedule(effect2);
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0;
resume_children(child2, transparent ? local : false);
child2 = sibling2;
}
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition of t) {
if (transition.is_global || local) {
transition.in();
}
}
}
}
function move_effect(effect2, fragment) {
if (!effect2.nodes) return;
var node = effect2.nodes.start;
var end = effect2.nodes.end;
while (node !== null) {
var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
fragment.append(node);
node = next2;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get$1(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get$1(scope.store), {
[name]: value
});
} else {
Object.assign(get$1(scope.store), name);
}
scope.store.set(get$1(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n = {
ariaLinkLabel: "Altcha (official website)",
cancel: "Cancel",
enterCode: "Enter code",
enterCodeAria: "Enter code you hear. Press Space to play audio.",
enterCodeFromImage: "To proceed, please enter the code from the image below.",
error: "Verification failed. Try again later.",
expired: "Verification expired. Try again.",
footer: 'Protected by <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (official website)">ALTCHA</a>',
getAudioChallenge: "Get an audio challenge",
label: "I'm not a robot",
loading: "Loading...",
reload: "Reload",
verify: "Verify",
verificationRequired: "Verification required!",
verified: "Verified",
verifying: "Verifying...",
waitAlert: "Verifying... please wait."
};
globalThis.$altcha.i18n.set("en", i18n);
const PUBLIC_VERSION = "5";
if (typeof window !== "undefined") {
((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION);
}
const event_symbol = /* @__PURE__ */ Symbol("events");
const all_registered_events = /* @__PURE__ */ new Set();
const root_event_handles = /* @__PURE__ */ new Set();
function create_event(event_name, dom, handler, options = {}) {
function target_handler(event2) {
if (!options.capture) {
handle_event_propagation.call(dom, event2);
}
if (!event2.cancelBubble) {
return without_reactive_context(() => {
return handler?.call(this, event2);
});
}
}
if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") {
queue_micro_task(() => {
dom.addEventListener(event_name, target_handler, options);
});
} else {
dom.addEventListener(event_name, target_handler, options);
}
return target_handler;
}
function event(event_name, dom, handler, capture2, passive) {
var options = { capture: capture2, passive };
var target_handler = create_event(event_name, dom, handler, options);
if (dom === document.body || // @ts-ignore
dom === window || // @ts-ignore
dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed
dom instanceof HTMLMediaElement) {
teardown(() => {
dom.removeEventListener(event_name, target_handler, options);
});
}
}
function delegated(event_name, element, handler) {
(element[event_symbol] ??= {})[event_name] = handler;
}
function delegate(events) {
for (var i = 0; i < events.length; i++) {
all_registered_events.add(events[i]);
}
for (var fn of root_event_handles) {
fn(events);
}
}
let last_propagated_event = null;
function handle_event_propagation(event2) {
var handler_element = this;
var owner_document = (
/** @type {Node} */
handler_element.ownerDocument
);
var event_name = event2.type;
var path = event2.composedPath?.() || [];
var current_target = (
/** @type {null | Element} */
path[0] || event2.target
);
last_propagated_event = event2;
var path_idx = 0;
var handled_at = last_propagated_event === event2 && event2[event_symbol];
if (handled_at) {
var at_idx = path.indexOf(handled_at);
if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */
window)) {
event2[event_symbol] = handler_element;
return;
}
var handler_idx = path.indexOf(handler_element);
if (handler_idx === -1) {
return;
}
if (at_idx <= handler_idx) {
path_idx = at_idx;
}
}
current_target = /** @type {Element} */
path[path_idx] || event2.target;
if (current_target === handler_element) return;
define_property(event2, "currentTarget", {
configurable: true,
get() {
return current_target || owner_document;
}
});
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
var throw_error;
var other_errors = [];
while (current_target !== null) {
var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */
current_target.host || null;
try {
var delegated2 = current_target[event_symbol]?.[event_name];
if (delegated2 != null && (!/** @type {any} */
current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well
// -> the target could not have been disabled because it emits the event in the first place
event2.target === current_target)) {
delegated2.call(current_target, event2);
}
} catch (error) {
if (throw_error) {
other_errors.push(error);
} else {
throw_error = error;
}
}
if (event2.cancelBubble || parent_element === handler_element || parent_element === null) {
break;
}
current_target = parent_element;
}
if (throw_error) {
for (let error of other_errors) {
queueMicrotask(() => {
throw error;
});
}
throw throw_error;
}
} finally {
event2[event_symbol] = handler_element;
delete event2.currentTarget;
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
const policy = (
// We gotta write it like this because after downleveling the pure comment may end up in the wrong location
globalThis?.window?.trustedTypes && /* @__PURE__ */ globalThis.window.trustedTypes.createPolicy("svelte-trusted-html", {
/** @param {string} html */
createHTML: (html2) => {
return html2;
}
})
);
function create_trusted_html(html2) {
return (
/** @type {string} */
policy?.createHTML(html2) ?? html2
);
}
function create_fragment_from_html(html2) {
var elem = create_element("template");
elem.innerHTML = create_trusted_html(html2.replaceAll("<!>", "<!---->"));
return elem.content;
}
function assign_nodes(start, end) {
var effect2 = (
/** @type {Effect} */
active_effect
);
if (effect2.nodes === null) {
effect2.nodes = { start, end, a: null, t: null };
}
}
// @__NO_SIDE_EFFECTS__
function from_html(content, flags2) {
var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0;
var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0;
var node;
var has_start = !content.startsWith("<!>");
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (node === void 0) {
node = create_fragment_from_html(has_start ? content : "<!>" + content);
if (!is_fragment) node = /** @type {TemplateNode} */
/* @__PURE__ */ get_first_child(node);
}
var clone = (
/** @type {TemplateNode} */
use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)
);
if (is_fragment) {
var start = (
/** @type {TemplateNode} */
/* @__PURE__ */ get_first_child(clone)
);
var end = (
/** @type {TemplateNode} */
clone.lastChild
);
assign_nodes(start, end);
} else {
assign_nodes(clone, clone);
}
return clone;
};
}
// @__NO_SIDE_EFFECTS__
function from_namespace(content, flags2, ns = "svg") {
var has_start = !content.startsWith("<!>");
var wrapped = `<${ns}>${has_start ? content : "<!>" + content}</${ns}>`;
var node;
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (!node) {
var fragment = (
/** @type {DocumentFragment} */
create_fragment_from_html(wrapped)
);
var root2 = (
/** @type {Element} */
/* @__PURE__ */ get_first_child(fragment)
);
{
node = /** @type {Element} */
/* @__PURE__ */ get_first_child(root2);
}
}
var clone = (
/** @type {TemplateNode} */
node.cloneNode(true)
);
{
assign_nodes(clone, clone);
}
return clone;
};
}
// @__NO_SIDE_EFFECTS__
function from_svg(content, flags2) {
return /* @__PURE__ */ from_namespace(content, flags2, "svg");
}
function text(value = "") {
if (!hydrating) {
var t = create_text(value + "");
assign_nodes(t, t);
return t;
}
var node = hydrate_node;
if (node.nodeType !== TEXT_NODE) {
node.before(node = create_text());
set_hydrate_node(node);
} else {
merge_text_nodes(
/** @type {Text} */
node
);
}
assign_nodes(node, node);
return node;
}
function comment() {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
var frag = document.createDocumentFragment();
var start = document.createComment("");
var anchor = create_text();
frag.append(start, anchor);
assign_nodes(start, anchor);
return frag;
}
function append(anchor, dom) {
if (hydrating) {
var effect2 = (
/** @type {Effect & { nodes: EffectNodes }} */
active_effect
);
if ((effect2.f & REACTION_RAN) === 0 || effect2.nodes.end === null) {
effect2.nodes.end = hydrate_node;
}
hydrate_next();
return;
}
if (anchor === null) {
return;
}
anchor.before(
/** @type {Node} */
dom
);
}
function is_capture_event(name) {
return name.endsWith("capture") && name !== "gotpointercapture" && name !== "lostpointercapture";
}
const DELEGATED_EVENTS = [
"beforeinput",
"click",
"change",
"dblclick",
"contextmenu",
"focusin",
"focusout",
"input",
"keydown",
"keyup",
"mousedown",
"mousemove",
"mouseout",
"mouseover",
"mouseup",
"pointerdown",
"pointermove",
"pointerout",
"pointerover",
"pointerup",
"touchend",
"touchmove",
"touchstart"
];
function can_delegate_event(event_name) {
return DELEGATED_EVENTS.includes(event_name);
}
const ATTRIBUTE_ALIASES = {
// no `class: 'className'` because we handle that separately
formnovalidate: "formNoValidate",
ismap: "isMap",
nomodule: "noModule",
playsinline: "playsInline",
readonly: "readOnly",
defaultvalue: "defaultValue",
defaultchecked: "defaultChecked",
srcobject: "srcObject",
novalidate: "noValidate",
allowfullscreen: "allowFullscreen",
disablepictureinpicture: "disablePictureInPicture",
disableremoteplayback: "disableRemotePlayback"
};
function normalize_attribute(name) {
name = name.toLowerCase();
return ATTRIBUTE_ALIASES[name] ?? name;
}
const PASSIVE_EVENTS = ["touchstart", "touchmove"];
function is_passive_event(name) {
return PASSIVE_EVENTS.includes(name);
}
function set_text(text2, value) {
var str = value == null ? "" : typeof value === "object" ? `${value}` : value;
if (str !== /** @type {any} */
(text2[TEXT_CACHE] ??= text2.nodeValue)) {
text2[TEXT_CACHE] = str;
text2.nodeValue = `${str}`;
}
}
function mount(component2, options) {
return _mount(component2, options);
}
function hydrate(component2, options) {
init_operations();
options.intro = options.intro ?? false;
const target = options.target;
const was_hydrating = hydrating;
const previous_hydrate_node = hydrate_node;
try {
var anchor = /* @__PURE__ */ get_first_child(target);
while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */
anchor.data !== HYDRATION_START)) {
anchor = /* @__PURE__ */ get_next_sibling(anchor);
}
if (!anchor) {
throw HYDRATION_ERROR;
}
set_hydrating(true);
set_hydrate_node(
/** @type {Comment} */
anchor
);
const instance = _mount(component2, { ...options, anchor });
set_hydrating(false);
return (
/** @type {Exports} */
instance
);
} catch (error) {
if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) {
throw error;
}
if (error !== HYDRATION_ERROR) {
console.warn("Failed to hydrate: ", error);
}
if (options.recover === false) {
hydration_failed();
}
init_operations();
clear_text_content(target);
set_hydrating(false);
return mount(component2, options);
} finally {
set_hydrating(was_hydrating);
set_hydrate_node(previous_hydrate_node);
}
}
const listeners = /* @__PURE__ */ new Map();
function _mount(Component, { target, anchor, props = {}, events, context, intro = true, transformError }) {
init_operations();
var component2 = void 0;
var unmount2 = component_root(() => {
var anchor_node = anchor ?? target.appendChild(create_text());
boundary(
/** @type {TemplateNode} */
anchor_node,
{
pending: () => {
}
},
(anchor_node2) => {
push({});
var ctx = (
/** @type {ComponentContext} */
component_context
);
if (context) ctx.c = context;
if (events) {
props.$$events = events;
}
if (hydrating) {
assign_nodes(
/** @type {TemplateNode} */
anchor_node2,
null
);
}
component2 = Component(anchor_node2, props) || {};
if (hydrating) {
active_effect.nodes.end = hydrate_node;
if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */
hydrate_node.data !== HYDRATION_END) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
}
pop();
},
transformError
);
var registered_events = /* @__PURE__ */ new Set();
var event_handle = (events2) => {
for (var i = 0; i < events2.length; i++) {
var event_name = events2[i];
if (registered_events.has(event_name)) continue;
registered_events.add(event_name);
var passive = is_passive_event(event_name);
for (const node of [target, document]) {
var counts = listeners.get(node);
if (counts === void 0) {
counts = /* @__PURE__ */ new Map();
listeners.set(node, counts);
}
var count = counts.get(event_name);
if (count === void 0) {
node.addEventListener(event_name, handle_event_propagation, { passive });
counts.set(event_name, 1);
} else {
counts.set(event_name, count + 1);
}
}
}
};
event_handle(array_from(all_registered_events));
root_event_handles.add(event_handle);
return () => {
for (var event_name of registered_events) {
for (const node of [target, document]) {
var counts = (
/** @type {Map<string, number>} */
listeners.get(node)
);
var count = (
/** @type {number} */
counts.get(event_name)
);
if (--count == 0) {
node.removeEventListener(event_name, handle_event_propagation);
counts.delete(event_name);
if (counts.size === 0) {
listeners.delete(node);
}
} else {
counts.set(event_name, count);
}
}
}
root_event_handles.delete(event_handle);
if (anchor_node !== anchor) {
anchor_node.parentNode?.removeChild(anchor_node);
}
};
});
mounted_components.set(component2, unmount2);
return component2;
}
let mounted_components = /* @__PURE__ */ new WeakMap();
function unmount(component2, options) {
const fn = mounted_components.get(component2);
if (fn) {
mounted_components.delete(component2);
return fn(options);
}
return Promise.resolve();
}
class BranchManager {
/** @type {TemplateNode} */
anchor;
/** @type {Map<Batch, Key>} */
#batches = /* @__PURE__ */ new Map();
/**
* Map of keys to effects that are currently rendered in the DOM.
* These effects are visible and actively part of the document tree.
* Example:
*
data/skin/mobile/moment/js/altcha/i18n.js+2656
변경 전i18n.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후i18n.js
const noop = () => {
};
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function get(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let untracking = false;
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get(scope.store), {
[name]: value
});
} else {
Object.assign(get(scope.store), name);
}
scope.store.set(get(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n$Y = {
ariaLinkLabel: "Altcha (الموقع الرسمي)",
enterCode: "أدخل الرمز",
enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",
error: "فشل التحقق. حاول مرة أخرى لاحقاً.",
expired: "انتهت صلاحية التحقق. حاول مرة أخرى.",
footer: 'محمي بواسطة <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (الموقع الرسمي)">ALTCHA</a>',
getAudioChallenge: "احصل على تحدي صوتي",
label: "أنا لست روبوتاً",
loading: "جارٍ التحميل...",
reload: "إعادة تحميل",
verify: "تحقق",
verificationRequired: "مطلوب التحقق!",
verified: "تم التحقق",
verifying: "جارٍ التحقق...",
waitAlert: "جارٍ التحقق... يرجى الانتظار.",
cancel: "إلغاء",
enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه."
};
globalThis.$altcha.i18n.set("ar", i18n$Y);
const i18n$X = {
ariaLinkLabel: "Altcha (официален уебсайт)",
enterCode: "Въведете код",
enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",
error: "Проверката неуспешна. Моля, опитайте по-късно.",
expired: "Времето за проверка изтече. Моля, опитайте отново.",
footer: 'Защитено от <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официален уебсайт)">ALTCHA</a>',
getAudioChallenge: "Аудио проверка",
label: "Аз не съм робот",
loading: "Зареждане...",
reload: "Презареди",
verify: "Провери",
verificationRequired: "Изисква се проверка!",
verified: "Проверено",
verifying: "Проверява се...",
waitAlert: "Проверката е в процес... моля изчакайте.",
cancel: "Отказ",
enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу."
};
globalThis.$altcha.i18n.set("bg", i18n$X);
const i18n$W = {
ariaLinkLabel: "Altcha (афіцыйны сайт)",
enterCode: "Увядзіце код",
enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",
error: "Праверка не прайшла. Паспрабуйце пазней.",
expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.",
footer: 'Абаронена <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (афіцыйны сайт)">ALTCHA</a>',
getAudioChallenge: "Атрымаць аўдыё выклік",
label: "Я не робат",
loading: "Загрузка...",
reload: "Перазагрузіць",
verify: "Праверыць",
verificationRequired: "Патрабуецца праверка!",
verified: "Праверана",
verifying: "Правяраем...",
waitAlert: "Праверка... калі ласка, пачакайце.",
cancel: "Скасаваць",
enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй."
};
globalThis.$altcha.i18n.set("be", i18n$W);
const i18n$V = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("bs", i18n$V);
const i18n$U = {
ariaLinkLabel: "Altcha (lloc web oficial)",
enterCode: "Introdueix el codi",
enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",
error: "Verificació fallida. Torna-ho a provar més tard.",
expired: "Verificació expirada. Torna-ho a provar.",
footer: 'Protegit per <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (lloc web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtenir un desafiament d’àudio",
label: "No sóc un robot",
loading: "Carregant...",
reload: "Torna a carregar",
verify: "Verificar",
verificationRequired: "Es requereix verificació!",
verified: "Verificat",
verifying: "Verificant...",
waitAlert: "Verificant... si us plau, espera.",
cancel: "Cancel·la",
enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent."
};
globalThis.$altcha.i18n.set("ca", i18n$U);
const i18n$T = {
ariaLinkLabel: "Altcha (oficiální web)",
enterCode: "Zadejte kód",
enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",
error: "Ověření selhalo. Zkuste to prosím později.",
expired: "Ověření vypršelo. Zkuste to prosím znovu.",
footer: 'Chráněno pomocí <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiální web)">ALTCHA</a>',
getAudioChallenge: "Získat audio výzvu",
label: "Nejsem robot",
loading: "Načítání...",
reload: "Znovu načíst",
verify: "Ověřit",
verificationRequired: "Vyžaduje se ověření!",
verified: "Ověřeno",
verifying: "Ověřování...",
waitAlert: "Probíhá ověření... prosím počkejte.",
cancel: "Zrušit",
enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže."
};
globalThis.$altcha.i18n.set("cs", i18n$T);
const i18n$S = {
ariaLinkLabel: "Altcha (officiel hjemmeside)",
enterCode: "Indtast kode",
enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",
error: "Verificering mislykkedes. Prøv venligst igen senere.",
expired: "Verificering udløbet. Prøv venligst igen.",
footer: 'Beskyttet af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiel hjemmeside)">ALTCHA</a>',
getAudioChallenge: "Hent lydudfordring",
label: "Jeg er ikke en robot",
loading: "Indlæser...",
reload: "Genindlæs",
verify: "Verificer",
verificationRequired: "Verificering kræves!",
verified: "Verificeret",
verifying: "Verificerer...",
waitAlert: "Verificerer... vent venligst.",
cancel: "Annuller",
enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder."
};
globalThis.$altcha.i18n.set("da", i18n$S);
const i18n$R = {
ariaLinkLabel: "Altcha (offizielle Website)",
enterCode: "Code eingeben",
enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",
error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",
footer: 'Geschützt durch <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offizielle Website)">ALTCHA</a>',
getAudioChallenge: "Audio-Herausforderung anfordern",
label: "Ich bin kein Roboter",
loading: "Lade...",
reload: "Neu laden",
verify: "Überprüfen",
verificationRequired: "Überprüfung erforderlich!",
verified: "Überprüft",
verifying: "Wird überprüft...",
waitAlert: "Überprüfung läuft... bitte warten.",
cancel: "Abbrechen",
enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."
};
globalThis.$altcha.i18n.set("de", i18n$R);
const i18n$Q = {
ariaLinkLabel: "Altcha (επίσημος ιστότοπος)",
enterCode: "Εισαγάγετε κωδικό",
enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",
error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",
expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.",
footer: 'Προστατεύεται από το <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (επίσημος ιστότοπος)">ALTCHA</a>',
getAudioChallenge: "Λήψη ηχητικής δοκιμασίας",
label: "Δεν είμαι ρομπότ",
loading: "Φόρτωση...",
reload: "Επαναφόρτωση",
verify: "Επαλήθευση",
verificationRequired: "Απαιτείται έλεγχος!",
verified: "Επαληθεύτηκε",
verifying: "Γίνεται επαλήθευση...",
waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.",
cancel: "Ακύρωση",
enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."
};
globalThis.$altcha.i18n.set("el", i18n$Q);
const i18n$P = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Introduce el código",
enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor intente nuevamente más tarde.",
expired: "Verificación expirada. Por favor intente nuevamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un desafío de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Recargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espere.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo."
};
globalThis.$altcha.i18n.set("es-es", i18n$P);
const i18n$O = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Ingresa el código",
enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.",
expired: "La verificación expiró. Por favor inténtalo de nuevo.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un reto de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Volver a cargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espera.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación."
};
globalThis.$altcha.i18n.set("es-419", i18n$O);
const i18n$N = {
ariaLinkLabel: "Altcha (ametlik veebisait)",
enterCode: "Sisesta kood",
enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",
error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",
expired: "Kinnitamine aegus. Proovi uuesti.",
footer: 'Kaitstud <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ametlik veebisait)">ALTCHA</a> poolt',
getAudioChallenge: "Hangi heliülesanne",
label: "Ma ei ole robot",
loading: "Laadimine...",
reload: "Laadi uuesti",
verify: "Kinnita",
verificationRequired: "Kontroll on vajalik!",
verified: "Kinnitatud",
verifying: "Kinnitamine...",
waitAlert: "Kinnitamine... palun oota.",
cancel: "Tühista",
enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood."
};
globalThis.$altcha.i18n.set("et", i18n$N);
const i18n$M = {
ariaLinkLabel: "Altcha (webgune ofiziala)",
enterCode: "Sartu kodea",
enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",
error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.",
expired: "Egiaztatzea iraungi da. Saiatu berriro.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (webgune ofiziala)">ALTCHA</a>k babestuta',
getAudioChallenge: "Jaso audio-erronka bat",
label: "Ez naiz robot bat",
loading: "Kargatzen...",
reload: "Birkargatu",
verify: "Egiaztatu",
verificationRequired: "Egiaztatzea beharrezkoa da!",
verified: "Egiaztatuta",
verifying: "Egiaztatzen...",
waitAlert: "Egiaztatzen... itxaron mesedez.",
cancel: "Utzi",
enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea."
};
globalThis.$altcha.i18n.set("eu", i18n$M);
const i18n$L = {
ariaLinkLabel: "Altcha (وب‌سایت رسمی)",
enterCode: "کد را وارد کنید",
enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",
error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",
expired: "احراز هویت منقضی شد. دوباره تلاش کنید.",
footer: 'محافظت شده توسط <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (وب‌سایت رسمی)">ALTCHA</a>',
getAudioChallenge: "دریافت چالش صوتی",
label: "من ربات نیستم",
loading: "در حال بارگذاری...",
reload: "بارگذاری مجدد",
verify: "تایید",
verificationRequired: "احراز هویت لازم است!",
verified: "تایید شد",
verifying: "در حال تایید...",
waitAlert: "در حال تایید... لطفا منتظر بمانید.",
cancel: "لغو کردن",
enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید."
};
globalThis.$altcha.i18n.set("fa", i18n$L);
const i18n$K = {
ariaLinkLabel: "Altcha (offiziell Websäit)",
enterCode: "Code aginn",
enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",
error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",
expired: "Verifikatioun ofgelaf. Probéiert nach emol.",
footer: 'Geschützt vun <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offiziell Websäit)">ALTCHA</a>',
getAudioChallenge: "Kritt eng Audio-Herausfuerderung",
label: "Ech sinn keen Robot",
loading: "Lueden...",
reload: "Nei lueden",
verify: "Verifizéieren",
verificationRequired: "Verifikatioun néideg!",
verified: "Verifizéiert",
verifying: "Verifizéieren...",
waitAlert: "Verifizéieren... waart wgl.",
cancel: "Ofbriechen",
enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."
};
globalThis.$altcha.i18n.set("lb", i18n$K);
const i18n$J = {
ariaLinkLabel: "Altcha (virallinen verkkosivusto)",
enterCode: "Syötä koodi",
enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",
error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.",
expired: "Varmennus vanhentui. Yritä uudelleen.",
footer: 'Suojattu <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (virallinen verkkosivusto)">ALTCHA</a>:lla',
getAudioChallenge: "Hae äänitehtävä",
label: "En ole robotti",
loading: "Ladataan...",
reload: "Lataa uudelleen",
verify: "Vahvista",
verificationRequired: "Vahvistus vaaditaan!",
verified: "Vahvistettu",
verifying: "Vahvistetaan...",
waitAlert: "Vahvistetaan... odota hetki.",
cancel: "Peruuta",
enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi."
};
globalThis.$altcha.i18n.set("fi", i18n$J);
const i18n$I = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",
error: "Échec de la vérification. Réessayez plus tard.",
expired: "La vérification a expiré. Réessayez.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-ca", i18n$I);
const i18n$H = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",
error: "Échec de la vérification. Essayez à nouveau plus tard.",
expired: "La vérification a expiré. Essayez à nouveau.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-fr", i18n$H);
const i18n$G = {
ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)",
enterCode: "Iontráil cód",
enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",
error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.",
expired: "Tá an fíorú as feidhm. Bain triail eile as.",
footer: 'Cosanta ag <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (láithreán gréasáin oifigiúil)">ALTCHA</a>',
getAudioChallenge: "Faigh dúshlán fuaime",
label: "Níl mé i mo róbat",
loading: "Á luchtú...",
reload: "Athluchtaigh",
verify: "Fíoraigh",
verificationRequired: "Fíorú riachtanach!",
verified: "Fíoraithe",
verifying: "Fíorú ar siúl...",
waitAlert: "Fíorú ar siúl... fan go fóill.",
cancel: "Cealaigh",
enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."
};
globalThis.$altcha.i18n.set("ga", i18n$G);
const i18n$F = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",
error: "Provjera nije uspjela. Molimo pokušajte kasnije.",
expired: "Provjera je istekla. Molimo pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Audio provjera",
label: "Ja nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Provjeri",
verificationRequired: "Potrebna je provjera!",
verified: "Provjereno",
verifying: "Provjeravanje...",
waitAlert: "Provjera je u tijeku... molimo pričekajte.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("hr", i18n$F);
const i18n$E = {
ariaLinkLabel: "Altcha (hivatalos weboldal)",
enterCode: "Írja be a kódot",
enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",
error: "A hitelesítés nem sikerült. Próbáld meg később újra.",
expired: "A hitelesítés lejárt. Próbáld újra.",
footer: 'Védve a következő által: <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (hivatalos weboldal)">ALTCHA</a>',
getAudioChallenge: "Hangalapú kihívás kérése",
label: "Nem vagyok robot",
loading: "Betöltés...",
reload: "Újratöltés",
verify: "Ellenőrzés",
verificationRequired: "Ellenőrzés szükséges!",
verified: "Ellenőrizve",
verifying: "Ellenőrzés folyamatban...",
waitAlert: "Ellenőrzés folyamatban... kérlek várj.",
cancel: "Mégse",
enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját."
};
globalThis.$altcha.i18n.set("hu", i18n$E);
const i18n$D = {
ariaLinkLabel: "Altcha (opinber vefsíða)",
enterCode: "Sláðu inn kóða",
enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",
error: "Staðfesting mistókst. Reyndu aftur síðar.",
expired: "Staðfesting er útrunnin. Reyndu aftur.",
footer: 'Verndað af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (opinber vefsíða)">ALTCHA</a>',
getAudioChallenge: "Fá hljóðáskorun",
label: "Ég er ekki robot",
loading: "Hleður...",
reload: "Hleð aftur",
verify: "Staðfesta",
verificationRequired: "Staðfesting er nauðsynleg!",
verified: "Staðfest",
verifying: "Að staðfesta...",
waitAlert: "Að staðfesta... vinsamlegast bíða.",
cancel: "Hætta við",
enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."
};
globalThis.$altcha.i18n.set("is", i18n$D);
const i18n$C = {
ariaLinkLabel: "Altcha (sito ufficiale)",
enterCode: "Inserisci il codice",
enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",
error: "Verifica fallita. Riprova più tardi.",
expired: "Verifica scaduta. Riprova.",
footer: 'Protetto da <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sito ufficiale)">ALTCHA</a>',
getAudioChallenge: "Ottieni una sfida audio",
label: "Non sono un robot",
loading: "Caricamento...",
reload: "Ricarica",
verify: "Verifica",
verificationRequired: "Verifica richiesta!",
verified: "Verificato",
verifying: "Verifica in corso...",
waitAlert: "Verifica in corso... attendere.",
cancel: "Annulla",
enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante."
};
globalThis.$altcha.i18n.set("it", i18n$C);
const i18n$B = {
ariaLinkLabel: "Altcha (oficiali svetainė)",
enterCode: "Įveskite kodą",
enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",
error: "Patvirtinimas nepavyko. Bandykite vėliau.",
expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.",
footer: 'Apsaugota <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiali svetainė)">ALTCHA</a>',
getAudioChallenge: "Gauti garso užduotį",
label: "Aš nesu robotas",
loading: "Įkeliama...",
reload: "Įkelti iš naujo",
verify: "Patvirtinti",
verificationRequired: "Reikalingas patvirtinimas!",
verified: "Patvirtinta",
verifying: "Tikrinama...",
waitAlert: "Tikrinama... prašome palaukti.",
cancel: "Atšaukti",
enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."
};
globalThis.$altcha.i18n.set("lt", i18n$B);
const i18n$A = {
ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)",
enterCode: "Ievadiet kodu",
enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",
error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",
expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",
footer: 'Aizsargāts ar <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiālā tīmekļa vietne)">ALTCHA</a>',
getAudioChallenge: "Saņemt audio izaicinājumu",
label: "Es neesmu robots",
loading: "Notiek ielāde...",
reload: "Pārlādēt",
verify: "Verificēt",
verificationRequired: "Nepieciešama verifikācija!",
verified: "Verificēts",
verifying: "Notiek verifikācija...",
waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.",
cancel: "Atcelt",
enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."
};
globalThis.$altcha.i18n.set("lv", i18n$A);
const i18n$z = {
ariaLinkLabel: "Altcha (sit uffiċjali)",
enterCode: "Idħol il-kodiċi",
enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",
error: "Il-verifika falliet. Erġa’ pprova aktar tard.",
expired: "Il-verifika skadiet. Erġa’ pprova.",
footer: 'Protett minn <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sit uffiċjali)">ALTCHA</a>',
getAudioChallenge: "Ikseb sfida bl-awdjo",
label: "M’inix robot",
loading: "Qed jitgħabba...",
reload: "Ittella’ mill-ġdid",
verify: "Ivverifika",
verificationRequired: "Verifika meħtieġa!",
verified: "Ivverifikat",
verifying: "Verifika għaddejja...",
waitAlert: "Verifika għaddejja... stenna ftit.",
cancel: "Ikkanċella",
enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."
};
globalThis.$altcha.i18n.set("mt", i18n$z);
const i18n$y = {
ariaLinkLabel: "Altcha (offisiell nettside)",
enterCode: "Skriv inn kode",
enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.",
error: "Verifisering mislyktes. Prøv igjen senere.",
expired: "Verifiseringen utløp. Prøv igjen.",
footer: 'Beskyttet av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offisiell nettside)">ALTCHA</a>',
getAudioChallenge: "Få en lydutfordring",
label: "Jeg er ikke en robot",
loading: "Laster...",
reload: "Last på nytt",
verify: "Verifiser",
verificationRequired: "Verifisering kreves!",
verified: "Verifisert",
verifying: "Verifiserer...",
waitAlert: "Verifiserer... vennligst vent.",
cancel: "Avbryt",
enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor."
};
globalThis.$altcha.i18n.set("nb", i18n$y);
const i18n$x = {
ariaLinkLabel: "Altcha (officiële website)",
enterCode: "Voer code in",
enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",
error: "Verificatie mislukt. Probeer het later opnieuw.",
expired: "Verificatie verlopen. Probeer het opnieuw.",
footer: 'Beschermd door <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiële website)">ALTCHA</a>',
getAudioChallenge: "Audio-uitdaging ontvangen",
label: "Ik ben geen robot",
loading: "Laden...",
reload: "Herladen",
verify: "Verifiëren",
verificationRequired: "Verificatie vereist!",
verified: "Geverifieerd",
verifying: "Bezig met verifiëren...",
waitAlert: "Bezig met verifiëren... even geduld a.u.b.",
cancel: "Annuleren",
enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in."
};
globalThis.$altcha.i18n.set("nl", i18n$x);
const i18n$w = {
ariaLinkLabel: "Altcha (oficjalna strona internetowa)",
enterCode: "Wprowadź kod",
enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",
error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.",
expired: "Weryfikacja wygasła. Spróbuj ponownie.",
footer: 'Chronione przez <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficjalna strona internetowa)">ALTCHA</a>',
getAudioChallenge: "Pobierz zadanie dźwiękowe",
label: "Nie jestem robotem",
loading: "Ładowanie...",
reload: "Odśwież",
verify: "Zweryfikuj",
verificationRequired: "Wymagana weryfikacja!",
verified: "Zweryfikowano",
verifying: "Weryfikacja...",
waitAlert: "Trwa weryfikacja... proszę czekać.",
cancel: "Anuluj",
enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka."
};
globalThis.$altcha.i18n.set("pl", i18n$w);
const i18n$v = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduza o código",
enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",
error: "A verificação falhou. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Não sou um robô",
loading: "A carregar...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "A verificar...",
waitAlert: "A verificar... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-pt", i18n$v);
const i18n$u = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Digite o código",
enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",
error: "Falha na verificação. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Eu não sou um robô",
loading: "Carregando...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-br", i18n$u);
const i18n$t = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduceți codul",
enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",
error: "Verificarea a eșuat. Încearcă din nou mai târziu.",
expired: "Verificarea a expirat. Încearcă din nou.",
footer: 'Protejat de <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obține o provocare audio",
label: "Nu sunt un robot",
loading: "Se încarcă...",
reload: "Reîncarcă",
verify: "Verifică",
verificationRequired: "Verificare necesară!",
verified: "Verificat",
verifying: "Se verifică...",
waitAlert: "Se verifică... te rugăm să aștepți.",
cancel: "Anulare",
enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."
};
globalThis.$altcha.i18n.set("ro", i18n$t);
const i18n$s = {
ariaLinkLabel: "Altcha (официальный сайт)",
enterCode: "Введите код",
enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",
error: "Ошибка верификации. Попробуйте позже.",
expired: "Срок действия верификации истек. Попробуйте снова.",
footer: 'Защищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официальный сайт)">ALTCHA</a>',
getAudioChallenge: "Получить аудио задачу",
label: "Я не робот",
loading: "Загрузка...",
reload: "Перезагрузить",
verify: "Проверить",
verificationRequired: "Требуется проверка!",
verified: "Проверено",
verifying: "Идет проверка...",
waitAlert: "Идет проверка... Пожалуйста, подождите.",
cancel: "Отмена",
enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже."
};
globalThis.$altcha.i18n.set("ru", i18n$s);
const i18n$r = {
ariaLinkLabel: "Altcha (oficiálna webová stránka)",
enterCode: "Zadajte kód",
enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",
error: "Verifikácia zlyhala. Skúste to znova neskôr.",
expired: "Verifikácia vypršala. Skúste to znova.",
footer: 'Chránené <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiálna webová stránka)">ALTCHA</a>',
getAudioChallenge: "Získať audio výzvu",
label: "Nie som robot",
loading: "Načítava sa...",
reload: "Obnoviť",
verify: "Verifikovať",
verificationRequired: "Vyžaduje sa overenie!",
verified: "Verifikované",
verifying: "Prebieha verifikácia...",
waitAlert: "Prebieha verifikácia... prosím čakajte.",
cancel: "Zrušiť",
enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie."
};
globalThis.$altcha.i18n.set("sk", i18n$r);
const i18n$q = {
ariaLinkLabel: "Altcha (uradna spletna stran)",
enterCode: "Vnesite kodo",
enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",
error: "Preverjanje ni uspelo. Poskusite znova kasneje.",
expired: "Preverjanje je poteklo. Poskusite znova.",
footer: 'Zaščiteno z <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (uradna spletna stran)">ALTCHA</a>',
getAudioChallenge: "Pridobite zvočni izziv",
label: "Nisem robot",
loading: "Nalagam...",
reload: "Ponovno naloži",
verify: "Preveri",
verificationRequired: "Potrebna je preveritev!",
verified: "Preverjeno",
verifying: "Preverjanje...",
waitAlert: "Preverjanje... prosim počakajte.",
cancel: "Preklic",
enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."
};
globalThis.$altcha.i18n.set("sl", i18n$q);
const i18n$p = {
ariaLinkLabel: "Altcha (faqja zyrtare)",
enterCode: "Fut kodin",
enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",
error: "Verifikimi dështoi. Provoni përsëri më vonë.",
expired: "Verifikimi ka skaduar. Provoni përsëri.",
footer: 'I mbrojtur nga <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (faqja zyrtare)">ALTCHA</a>',
getAudioChallenge: "Merr një sfidë audio",
label: "Unë nuk jam një robot",
loading: "Duke u ngarkuar...",
reload: "Ringarko",
verify: "Verifiko",
verificationRequired: "Kërkohet verifikimi!",
verified: "I verifikuar",
verifying: "Duke verifikuar...",
waitAlert: "Duke verifikuar... ju lutem prisni.",
cancel: "Anuloje",
enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."
};
globalThis.$altcha.i18n.set("sq", i18n$p);
const i18n$o = {
ariaLinkLabel: "Altcha (zvanična web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (zvanična web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovo učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Откажи",
enterCodeFromImage: "Да бисте наставили, унесите код са слике испод."
};
globalThis.$altcha.i18n.set("sr", i18n$o);
const i18n$n = {
ariaLinkLabel: "Altcha (officiell webbplats)",
enterCode: "Ange kod",
enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
error: "Verifiering misslyckades. Försök igen senare.",
expired: "Verifieringen har gått ut. Försök igen.",
footer: 'Skyddad av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiell webbplats)">ALTCHA</a>',
getAudioChallenge: "Få ljudutmaning",
label: "Jag är inte en robot",
loading: "Laddar...",
reload: "Ladda om",
verify: "Verifiera",
verificationRequired: "Verifiering krävs!",
verified: "Verifierad",
verifying: "Verifierar...",
waitAlert: "Verifierar... vänligen vänta.",
cancel: "Avbryt",
enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan."
};
globalThis.$altcha.i18n.set("sv", i18n$n);
const i18n$m = {
ariaLinkLabel: "Altcha (resmi web sitesi)",
enterCode: "Kodu girin",
enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
footer: 'ALTCHA tarafından korunuyor <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (resmi web sitesi)">ALTCHA</a>',
getAudioChallenge: "Sesli doğrulama al",
label: "Ben robot değilim",
loading: "Yükleniyor...",
reload: "Yeniden yükle",
verify: "Doğrula",
verificationRequired: "Doğrulama gerekli!",
verified: "Doğrulandı",
verifying: "Doğrulama yapılıyor...",
waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.",
cancel: "İptal",
enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin."
};
globalThis.$altcha.i18n.set("tr", i18n$m);
const i18n$l = {
ariaLinkLabel: "Altcha (офіційний сайт)",
enterCode: "Введіть код",
enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
error: "Перевірка не вдалася. Спробуйте пізніше.",
expired: "Перевірка прострочена. Спробуйте знову.",
footer: 'Захищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (офіційний сайт)">ALTCHA</a>',
getAudioChallenge: "Отримати аудіо-челлендж",
label: "Я не робот",
loading: "Завантаження...",
reload: "Перезавантажити",
verify: "Перевірити",
verificationRequired: "Потрібна перевірка!",
verified: "Перевірено",
verifying: "Перевіряється...",
waitAlert: "Перевірка... будь ласка, зачекайте.",
cancel: "Скасувати",
enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче."
};
globalThis.$altcha.i18n.set("uk", i18n$l);
const i18n$k = {
ariaLinkLabel: "Altcha (amptelike webwerf)",
enterCode: "Voer kode in",
enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",
error: "Verifikasie het misluk. Probeer later weer.",
expired: "Verifikasie het verval. Probeer weer.",
footer: 'Beskerm deur <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (amptelike webwerf)">ALTCHA</a>',
getAudioChallenge: "Kry 'n klankuitdaging",
label: "Ek is nie 'n robot nie",
loading: "Laai...",
reload: "Laai weer",
verify: "Verifieer",
verificationRequired: "Verifikasie is vereis!",
verified: "Geverifieer",
verifying: "Verifieer...",
waitAlert: "Verifieer... wag asseblief.",
cancel: "Kanselleer",
enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."
};
globalThis.$altcha.i18n.set("af", i18n$k);
const i18n$j = {
ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)",
enterCode: "ኮድ አስገባ",
enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",
error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",
expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",
footer: 'በ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ዋናው ድህረ ገጽ)">ALTCHA</a> የተጠበቀ',
getAudioChallenge: "የድምጽ ፈተና ያግኙ",
label: "እኔ ሮቦት አይደለሁም",
loading: "በመጫን ላይ...",
reload: "እንደገና ጫን",
verify: "አረጋግጥ",
verificationRequired: "ማረጋገጫ ያስፈልጋል!",
verified: "ተረጋግጧል",
verifying: "በማረጋገጥ ላይ...",
waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",
cancel: "ይቅር",
enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"
};
globalThis.$altcha.i18n.set("am", i18n$j);
const i18n$i = {
ariaLinkLabel: "Altcha (tovuti rasmi)",
enterCode: "Weka nambari",
enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.",
error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.",
expired: "Uthibitishaji umeisha. Jaribu tena.",
footer: 'Imealindwa na <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (tovuti rasmi)">ALTCHA</a>',
getAudioChallenge: "Pata changamoto ya sauti",
label: "Mimi sio roboti",
loading: "Inapakia...",
reload: "Pakia tena",
verify: "Thibitisha",
verificationRequired: "Uthibitishaji unahitajika!",
verified: "Imethibitishwa",
verifying: "Inathibitisha...",
waitAlert: "Inathibitisha... tafadhali subiri.",
cancel: "Ghairi",
enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."
};
globalThis.$altcha.i18n.set("sw", i18n$i);
const i18n$h = {
ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)",
enterCode: "Tẹ koodu sii",
enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",
error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",
expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",
footer: 'Ti wa ni ààbò nipasẹ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oju opo wẹẹbu osise)">ALTCHA</a>',
getAudioChallenge: "Gba ìjàdú ohùn",
label: "Emi kii ṣe ẹrọ",
loading: "Ó ń gbé sílẹ̀...",
reload: "Tún gbé wọlé",
verify: "Ṣàdájọ́",
verificationRequired: "Ìdájọ́kòwò ni a nílò!",
verified: "A ti dájọ́",
verifying: "Ó ń ṣàdájọ́...",
waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",
cancel: "Fagbọsẹ",
enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."
};
globalThis.$altcha.i18n.set("yo", i18n$h);
const i18n$g = {
ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)",
enterCode: "কোড লিখুন",
enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",
error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",
expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",
footer: 'দ্বারা সুরক্ষিত <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (অফিসিয়াল ওয়েবসাইট)">ALTCHA</a>',
getAudioChallenge: "অডিও চ্যালেঞ্জ নিন",
label: "আমি রোবট নই",
loading: "লোড হচ্ছে...",
reload: "পুনরায় লোড করুন",
verify: "যাচাই করুন",
verificationRequired: "যাচাই প্রয়োজন!",
verified: "যাচাই করা হয়েছে",
verifying: "যাচাই করা হচ্ছে...",
waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",
cancel: "বাতিল করুন",
enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"
};
globalThis.$altcha.i18n.set("bn", i18n$g);
const i18n$f = {
ariaLinkLabel: "Altcha (אתר רשמי)",
enterCode: "הזן קוד",
enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",
error: "האימות נכשל. נסה שוב מאוחר יותר.",
expired: "תוקף האימות פג. נסה שוב.",
footer: 'מוגן על ידי <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (אתר רשמי)">ALTCHA</a>',
getAudioChallenge: "קבל אתגר שמע",
label: "אני לא רובוט",
loading: "טוען...",
reload: "טען מחדש",
verify: "אמת",
verificationRequired: "נדרש אימות!",
verified: "אומת",
verifying: "מאמת...",
waitAlert: "מבצע אימות... אנא המתן.",
cancel: "ביטול",
enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."
};
globalThis.$altcha.i18n.set("he", i18n$f);
const i18n$e = {
ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)",
enterCode: "कोड दर्ज करेंं",
enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",
error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",
expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",
footer: 'द्वारा संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (आधिकारिक वेबसाइट)">ALTCHA</a>',
getAudioChallenge: "ऑडियो चुनौती प्राप्त करें",
label: "मैं रोबोट नहीं हूँ",
loading: "लोड हो रहा है...",
reload: "पुनः लोड करें",
verify: "सत्यापित करें",
verificationRequired: "सत्यापन आवश्यक है!",
verified: "सत्यापित",
verifying: "सत्यापित कर रहे हैं...",
waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",
cancel: "रद्द करें",
enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"
};
globalThis.$altcha.i18n.set("hi", i18n$e);
const i18n$d = {
ariaLinkLabel: "Altcha (situs web resmi)",
enterCode: "Masukkan kode",
enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",
error: "Verifikasi gagal. Coba lagi nanti.",
expired: "Verifikasi telah kedaluwarsa. Coba lagi.",
footer: 'Dilindungi oleh <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (situs web resmi)">ALTCHA</a>',
getAudioChallenge: "Dapatkan tantangan audio",
label: "Saya bukan robot",
loading: "Memuat...",
reload: "Muat ulang",
verify: "Verifikasi",
verificationRequired: "Verifikasi diperlukan!",
verified: "Terverifikasi",
verifying: "Memverifikasi...",
waitAlert: "Memverifikasi... harap tunggu.",
cancel: "Batal",
enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."
};
globalThis.$altcha.i18n.set("id", i18n$d);
const i18n$c = {
ariaLinkLabel: "Altcha (公式ウェブサイト)",
enterCode: "コードを入力",
enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。",
error: "認証に失敗しました。後でもう一度試してください。",
expired: "認証が期限切れです。再試行してください。",
footer: '保護されています <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (公式ウェブサイト)">ALTCHA</a>',
getAudioChallenge: "音声チャレンジを取得",
label: "私はロボットではありません",
loading: "読み込み中...",
reload: "再読み込み",
verify: "確認",
verificationRequired: "認証が必要です!",
verified: "確認済み",
verifying: "確認中...",
waitAlert: "確認中...少々お待ちください。",
cancel: "キャンセル",
enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。"
};
globalThis.$altcha.i18n.set("ja", i18n$c);
const i18n$b = {
ariaLinkLabel: "Altcha (공식 웹사이트)",
enterCode: "코드 입력",
enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",
error: "인증 실패. 나중에 다시 시도해주세요.",
expired: "인증이 만료되었습니다. 다시 시도해주세요.",
footer: 'ALTCHA에서 보호됨 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (공식 웹사이트)">ALTCHA</a>',
getAudioChallenge: "오디오 챌린지 받기",
label: "저는 로봇이 아닙니다",
loading: "로딩 중...",
reload: "새로 고침",
verify: "확인",
verificationRequired: "인증이 필요합니다!",
verified: "확인됨",
verifying: "확인 중...",
waitAlert: "확인 중... 잠시만 기다려주세요.",
cancel: "취소",
enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요."
};
globalThis.$altcha.i18n.set("ko", i18n$b);
const i18n$a = {
ariaLinkLabel: "Altcha (ресми веб-сайт)",
enterCode: "Кодты енгізіңіз",
enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",
error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",
expired: "Тексеру мерзімі аяқталды. Қайталаңыз.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ресми веб-сайт)">ALTCHA</a> қорғайды',
getAudioChallenge: "Аудио сынақ алу",
label: "Мен робот емеспін",
loading: "Жүктелуде...",
reload: "Қайта жүктеу",
verify: "Тексеру",
verificationRequired: "Тексеру талап етіледі!",
verified: "Тексерілді",
verifying: "Тексеруде...",
waitAlert: "Тексерілуде... күте тұрыңыз.",
cancel: "Болдыру",
enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."
};
globalThis.$altcha.i18n.set("kk", i18n$a);
const i18n$9 = {
ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)",
enterCode: "कोड टाकाा",
enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",
error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",
expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",
footer: 'द्वारे संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (अधिकृत संकेतस्थळ)">ALTCHA</a>',
getAudioChallenge: "ऑडिओ चॅलेंज मिळवा",
label: "मी रोबोट नाही",
loading: "लोड होत आहे...",
reload: "पुन्हा लोड करा",
verify: "पुष्टीकरण करा",
verificationRequired: "पडताळणी आवश्यक आहे!",
verified: "पुष्टीकरण झाले",
verifying: "पुष्टीकरण करत आहे...",
waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",
cancel: "रद्द करा",
enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."
};
globalThis.$altcha.i18n.set("mr", i18n$9);
const i18n$8 = {
ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",
enterCode: "குறியீட்டை உள்ளிடவும்",
enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (அதிகாரப்பூர்வ வலைத்தளம்)">ALTCHA</a>',
getAudioChallenge: "ஒலி சவாலை பெறவும்",
label: "நான் ரோபோடான அல்ல",
loading: "செயலாக்கம்...",
reload: "மீண்டும் புதுப்பிக்கவும்",
verify: "சரிபார்க்கவும்",
verificationRequired: "சரிபார்ப்பு தேவை!",
verified: "சரிபார்க்கப்பட்டது",
verifying: "சரிபார்க்கப்படுகிறது...",
waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",
cancel: "ரத்துசெய்",
enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."
};
globalThis.$altcha.i18n.set("ta", i18n$8);
const i18n$7 = {
ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)",
enterCode: "కోడ్‌ని నమోదు చేయండి",
enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (అధికారిక వెబ్‌సైట్)">ALTCHA</a>',
getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
label: "నేను రోబోట్ కాదు",
loading: "లోడ్ అవుతోంది...",
reload: "మళ్ళీ లోడ్ చేయండి",
verify: "ధ్రువీకరించు",
verificationRequired: "ధృవీకరణ అవసరం!",
verified: "ధ్రువీకరించబడింది",
verifying: "ధ్రువీకరణ జరుగుతుంది...",
waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",
cancel: "రద్దు చేయండి",
enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."
};
globalThis.$altcha.i18n.set("te", i18n$7);
const i18n$6 = {
ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)",
enterCode: "ป้อนรหัส",
enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
footer: 'ป้องกันโดย <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (เว็บไซต์ทางการ)">ALTCHA</a>',
getAudioChallenge: "รับการท้าทายเสียง",
label: "ฉันไม่ใช่บอท",
loading: "กำลังโหลด...",
reload: "โหลดใหม่",
verify: "ตรวจสอบ",
verificationRequired: "จำเป็นต้องตรวจสอบ!",
verified: "ตรวจสอบแล้ว",
verifying: "กำลังตรวจสอบ...",
waitAlert: "กำลังตรวจสอบ... กรุณารอ",
cancel: "ยกเลิก",
enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"
};
globalThis.$altcha.i18n.set("th", i18n$6);
const i18n$5 = {
ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)",
enterCode: "کوڈ درج کریں",
enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (سرکاری ویب سائٹ)">ALTCHA</a>',
getAudioChallenge: "آڈیو چیلنج حاصل کریں",
label: "میں روبوٹ نہیں ہوں",
loading: "لوڈ ہو رہا ہے...",
reload: "دوبارہ لوڈ کریں",
verify: "توثیق کریں",
verificationRequired: "تصدیق ضروری ہے!",
verified: "توثیق شدہ",
verifying: "توثیق ہو رہی ہے...",
waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",
cancel: "منسوخ کریں",
enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"
};
globalThis.$altcha.i18n.set("ur", i18n$5);
const i18n$4 = {
ariaLinkLabel: "Altcha (rasmiy veb-sayt)",
enterCode: "Kodni kiriting",
enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",
error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",
expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (rasmiy veb-sayt)">ALTCHA</a> tomonidan himoyalangan',
getAudioChallenge: "Audio sinovni olish",
label: "Men robot emasman",
loading: "Yuklanmoqda...",
reload: "Qayta yuklash",
verify: "Tekshirish",
verificationRequired: "Tekshiruv talab qilinadi!",
verified: "Tekshirildi",
verifying: "Tekshirilmoqda...",
waitAlert: "Tekshirilmoqda... iltimos kuting.",
cancel: "Bekor qilish",
enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."
};
globalThis.$altcha.i18n.set("uz", i18n$4);
const i18n$3 = {
ariaLinkLabel: "Altcha (trang web chính thức)",
enterCode: "Nhập mã",
enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
error: "Xác minh thất bại. Vui lòng thử lại sau.",
expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
footer: 'Được bảo vệ bởi <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (trang web chính thức)">ALTCHA</a>',
getAudioChallenge: "Nhận thử thách âm thanh",
label: "Tôi không phải là robot",
loading: "Đang tải...",
reload: "Tải lại",
verify: "Xác minh",
verificationRequired: "Yêu cầu xác minh!",
verified: "Đã xác minh",
verifying: "Đang xác minh...",
waitAlert: "Đang xác minh... vui lòng chờ.",
cancel: "Hủy bỏ",
enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."
};
globalThis.$altcha.i18n.set("vi", i18n$3);
const i18n$2 = {
ariaLinkLabel: "Altcha (官方网站)",
enterCode: "输入代码",
enterCodeAria: "输入您听到的代码。按空格键播放音频。",
error: "验证失败。稍后再试。",
expired: "验证已过期。请重试。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方网站)">ALTCHA</a> 保护',
getAudioChallenge: "获取音频挑战",
label: "我不是机器人",
loading: "加载中...",
reload: "重新加载",
verify: "验证",
verificationRequired: "需要验证!",
verified: "已验证",
verifying: "正在验证...",
waitAlert: "正在验证... 请稍等。",
cancel: "取消",
enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。"
};
globalThis.$altcha.i18n.set("zh-cn", i18n$2);
const i18n$1 = {
ariaLinkLabel: "Altcha (官方網站)",
cancel: "取消",
enterCode: "輸入代碼",
enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。",
enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。",
error: "驗證失敗。請稍後再試。",
expired: "驗證已過期。請再試一次。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 提供保護',
getAudioChallenge: "取得音訊驗證",
label: "我唔係機械人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "驗證中...",
waitAlert: "驗證中... 請稍候。"
};
globalThis.$altcha.i18n.set("zh-hk", i18n$1);
const i18n = {
ariaLinkLabel: "Altcha (官方網站)",
enterCode: "輸入代碼",
enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
error: "驗證失敗。稍後再試。",
expired: "驗證已過期。請重試。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 保護',
getAudioChallenge: "獲取音頻挑戰",
label: "我不是機器人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "正在驗證...",
waitAlert: "正在驗證... 請稍等。",
cancel: "取消",
enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。"
};
globalThis.$altcha.i18n.set("zh-tw", i18n);
const noop = () => {
};
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function get(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let untracking = false;
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get(scope.store), {
[name]: value
});
} else {
Object.assign(get(scope.store), name);
}
scope.store.set(get(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n$Y = {
ariaLinkLabel: "Altcha (الموقع الرسمي)",
enterCode: "أدخل الرمز",
enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",
error: "فشل التحقق. حاول مرة أخرى لاحقاً.",
expired: "انتهت صلاحية التحقق. حاول مرة أخرى.",
footer: 'محمي بواسطة <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (الموقع الرسمي)">ALTCHA</a>',
getAudioChallenge: "احصل على تحدي صوتي",
label: "أنا لست روبوتاً",
loading: "جارٍ التحميل...",
reload: "إعادة تحميل",
verify: "تحقق",
verificationRequired: "مطلوب التحقق!",
verified: "تم التحقق",
verifying: "جارٍ التحقق...",
waitAlert: "جارٍ التحقق... يرجى الانتظار.",
cancel: "إلغاء",
enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه."
};
globalThis.$altcha.i18n.set("ar", i18n$Y);
const i18n$X = {
ariaLinkLabel: "Altcha (официален уебсайт)",
enterCode: "Въведете код",
enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",
error: "Проверката неуспешна. Моля, опитайте по-късно.",
expired: "Времето за проверка изтече. Моля, опитайте отново.",
footer: 'Защитено от <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официален уебсайт)">ALTCHA</a>',
getAudioChallenge: "Аудио проверка",
label: "Аз не съм робот",
loading: "Зареждане...",
reload: "Презареди",
verify: "Провери",
verificationRequired: "Изисква се проверка!",
verified: "Проверено",
verifying: "Проверява се...",
waitAlert: "Проверката е в процес... моля изчакайте.",
cancel: "Отказ",
enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу."
};
globalThis.$altcha.i18n.set("bg", i18n$X);
const i18n$W = {
ariaLinkLabel: "Altcha (афіцыйны сайт)",
enterCode: "Увядзіце код",
enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",
error: "Праверка не прайшла. Паспрабуйце пазней.",
expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.",
footer: 'Абаронена <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (афіцыйны сайт)">ALTCHA</a>',
getAudioChallenge: "Атрымаць аўдыё выклік",
label: "Я не робат",
loading: "Загрузка...",
reload: "Перазагрузіць",
verify: "Праверыць",
verificationRequired: "Патрабуецца праверка!",
verified: "Праверана",
verifying: "Правяраем...",
waitAlert: "Праверка... калі ласка, пачакайце.",
cancel: "Скасаваць",
enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй."
};
globalThis.$altcha.i18n.set("be", i18n$W);
const i18n$V = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("bs", i18n$V);
const i18n$U = {
ariaLinkLabel: "Altcha (lloc web oficial)",
enterCode: "Introdueix el codi",
enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",
error: "Verificació fallida. Torna-ho a provar més tard.",
expired: "Verificació expirada. Torna-ho a provar.",
footer: 'Protegit per <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (lloc web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtenir un desafiament d’àudio",
label: "No sóc un robot",
loading: "Carregant...",
reload: "Torna a carregar",
verify: "Verificar",
verificationRequired: "Es requereix verificació!",
verified: "Verificat",
verifying: "Verificant...",
waitAlert: "Verificant... si us plau, espera.",
cancel: "Cancel·la",
enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent."
};
globalThis.$altcha.i18n.set("ca", i18n$U);
const i18n$T = {
ariaLinkLabel: "Altcha (oficiální web)",
enterCode: "Zadejte kód",
enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",
error: "Ověření selhalo. Zkuste to prosím později.",
expired: "Ověření vypršelo. Zkuste to prosím znovu.",
footer: 'Chráněno pomocí <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiální web)">ALTCHA</a>',
getAudioChallenge: "Získat audio výzvu",
label: "Nejsem robot",
loading: "Načítání...",
reload: "Znovu načíst",
verify: "Ověřit",
verificationRequired: "Vyžaduje se ověření!",
verified: "Ověřeno",
verifying: "Ověřování...",
waitAlert: "Probíhá ověření... prosím počkejte.",
cancel: "Zrušit",
enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže."
};
globalThis.$altcha.i18n.set("cs", i18n$T);
const i18n$S = {
ariaLinkLabel: "Altcha (officiel hjemmeside)",
enterCode: "Indtast kode",
enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",
error: "Verificering mislykkedes. Prøv venligst igen senere.",
expired: "Verificering udløbet. Prøv venligst igen.",
footer: 'Beskyttet af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiel hjemmeside)">ALTCHA</a>',
getAudioChallenge: "Hent lydudfordring",
label: "Jeg er ikke en robot",
loading: "Indlæser...",
reload: "Genindlæs",
verify: "Verificer",
verificationRequired: "Verificering kræves!",
verified: "Verificeret",
verifying: "Verificerer...",
waitAlert: "Verificerer... vent venligst.",
cancel: "Annuller",
enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder."
};
globalThis.$altcha.i18n.set("da", i18n$S);
const i18n$R = {
ariaLinkLabel: "Altcha (offizielle Website)",
enterCode: "Code eingeben",
enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",
error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",
footer: 'Geschützt durch <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offizielle Website)">ALTCHA</a>',
getAudioChallenge: "Audio-Herausforderung anfordern",
label: "Ich bin kein Roboter",
loading: "Lade...",
reload: "Neu laden",
verify: "Überprüfen",
verificationRequired: "Überprüfung erforderlich!",
verified: "Überprüft",
verifying: "Wird überprüft...",
waitAlert: "Überprüfung läuft... bitte warten.",
cancel: "Abbrechen",
enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."
};
globalThis.$altcha.i18n.set("de", i18n$R);
const i18n$Q = {
ariaLinkLabel: "Altcha (επίσημος ιστότοπος)",
enterCode: "Εισαγάγετε κωδικό",
enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",
error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",
expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.",
footer: 'Προστατεύεται από το <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (επίσημος ιστότοπος)">ALTCHA</a>',
getAudioChallenge: "Λήψη ηχητικής δοκιμασίας",
label: "Δεν είμαι ρομπότ",
loading: "Φόρτωση...",
reload: "Επαναφόρτωση",
verify: "Επαλήθευση",
verificationRequired: "Απαιτείται έλεγχος!",
verified: "Επαληθεύτηκε",
verifying: "Γίνεται επαλήθευση...",
waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.",
cancel: "Ακύρωση",
enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."
};
globalThis.$altcha.i18n.set("el", i18n$Q);
const i18n$P = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Introduce el código",
enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor intente nuevamente más tarde.",
expired: "Verificación expirada. Por favor intente nuevamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un desafío de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Recargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espere.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo."
};
globalThis.$altcha.i18n.set("es-es", i18n$P);
const i18n$O = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Ingresa el código",
enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.",
expired: "La verificación expiró. Por favor inténtalo de nuevo.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un reto de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Volver a cargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espera.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación."
};
globalThis.$altcha.i18n.set("es-419", i18n$O);
const i18n$N = {
ariaLinkLabel: "Altcha (ametlik veebisait)",
enterCode: "Sisesta kood",
enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",
error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",
expired: "Kinnitamine aegus. Proovi uuesti.",
footer: 'Kaitstud <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ametlik veebisait)">ALTCHA</a> poolt',
getAudioChallenge: "Hangi heliülesanne",
label: "Ma ei ole robot",
loading: "Laadimine...",
reload: "Laadi uuesti",
verify: "Kinnita",
verificationRequired: "Kontroll on vajalik!",
verified: "Kinnitatud",
verifying: "Kinnitamine...",
waitAlert: "Kinnitamine... palun oota.",
cancel: "Tühista",
enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood."
};
globalThis.$altcha.i18n.set("et", i18n$N);
const i18n$M = {
ariaLinkLabel: "Altcha (webgune ofiziala)",
enterCode: "Sartu kodea",
enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",
error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.",
expired: "Egiaztatzea iraungi da. Saiatu berriro.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (webgune ofiziala)">ALTCHA</a>k babestuta',
getAudioChallenge: "Jaso audio-erronka bat",
label: "Ez naiz robot bat",
loading: "Kargatzen...",
reload: "Birkargatu",
verify: "Egiaztatu",
verificationRequired: "Egiaztatzea beharrezkoa da!",
verified: "Egiaztatuta",
verifying: "Egiaztatzen...",
waitAlert: "Egiaztatzen... itxaron mesedez.",
cancel: "Utzi",
enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea."
};
globalThis.$altcha.i18n.set("eu", i18n$M);
const i18n$L = {
ariaLinkLabel: "Altcha (وب‌سایت رسمی)",
enterCode: "کد را وارد کنید",
enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",
error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",
expired: "احراز هویت منقضی شد. دوباره تلاش کنید.",
footer: 'محافظت شده توسط <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (وب‌سایت رسمی)">ALTCHA</a>',
getAudioChallenge: "دریافت چالش صوتی",
label: "من ربات نیستم",
loading: "در حال بارگذاری...",
reload: "بارگذاری مجدد",
verify: "تایید",
verificationRequired: "احراز هویت لازم است!",
verified: "تایید شد",
verifying: "در حال تایید...",
waitAlert: "در حال تایید... لطفا منتظر بمانید.",
cancel: "لغو کردن",
enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید."
};
globalThis.$altcha.i18n.set("fa", i18n$L);
const i18n$K = {
ariaLinkLabel: "Altcha (offiziell Websäit)",
enterCode: "Code aginn",
enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",
error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",
expired: "Verifikatioun ofgelaf. Probéiert nach emol.",
footer: 'Geschützt vun <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offiziell Websäit)">ALTCHA</a>',
getAudioChallenge: "Kritt eng Audio-Herausfuerderung",
label: "Ech sinn keen Robot",
loading: "Lueden...",
reload: "Nei lueden",
verify: "Verifizéieren",
verificationRequired: "Verifikatioun néideg!",
verified: "Verifizéiert",
verifying: "Verifizéieren...",
waitAlert: "Verifizéieren... waart wgl.",
cancel: "Ofbriechen",
enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."
};
globalThis.$altcha.i18n.set("lb", i18n$K);
const i18n$J = {
ariaLinkLabel: "Altcha (virallinen verkkosivusto)",
enterCode: "Syötä koodi",
enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",
error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.",
expired: "Varmennus vanhentui. Yritä uudelleen.",
footer: 'Suojattu <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (virallinen verkkosivusto)">ALTCHA</a>:lla',
getAudioChallenge: "Hae äänitehtävä",
label: "En ole robotti",
loading: "Ladataan...",
reload: "Lataa uudelleen",
verify: "Vahvista",
verificationRequired: "Vahvistus vaaditaan!",
verified: "Vahvistettu",
verifying: "Vahvistetaan...",
waitAlert: "Vahvistetaan... odota hetki.",
cancel: "Peruuta",
enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi."
};
globalThis.$altcha.i18n.set("fi", i18n$J);
const i18n$I = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",
error: "Échec de la vérification. Réessayez plus tard.",
expired: "La vérification a expiré. Réessayez.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-ca", i18n$I);
const i18n$H = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",
error: "Échec de la vérification. Essayez à nouveau plus tard.",
expired: "La vérification a expiré. Essayez à nouveau.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-fr", i18n$H);
const i18n$G = {
ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)",
enterCode: "Iontráil cód",
enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",
error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.",
expired: "Tá an fíorú as feidhm. Bain triail eile as.",
footer: 'Cosanta ag <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (láithreán gréasáin oifigiúil)">ALTCHA</a>',
getAudioChallenge: "Faigh dúshlán fuaime",
label: "Níl mé i mo róbat",
loading: "Á luchtú...",
reload: "Athluchtaigh",
verify: "Fíoraigh",
verificationRequired: "Fíorú riachtanach!",
verified: "Fíoraithe",
verifying: "Fíorú ar siúl...",
waitAlert: "Fíorú ar siúl... fan go fóill.",
cancel: "Cealaigh",
enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."
};
globalThis.$altcha.i18n.set("ga", i18n$G);
const i18n$F = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",
error: "Provjera nije uspjela. Molimo pokušajte kasnije.",
expired: "Provjera je istekla. Molimo pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Audio provjera",
label: "Ja nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Provjeri",
verificationRequired: "Potrebna je provjera!",
verified: "Provjereno",
verifying: "Provjeravanje...",
waitAlert: "Provjera je u tijeku... molimo pričekajte.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("hr", i18n$F);
const i18n$E = {
ariaLinkLabel: "Altcha (hivatalos weboldal)",
enterCode: "Írja be a kódot",
enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",
error: "A hitelesítés nem sikerült. Próbáld meg később újra.",
expired: "A hitelesítés lejárt. Próbáld újra.",
footer: 'Védve a következő által: <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (hivatalos weboldal)">ALTCHA</a>',
getAudioChallenge: "Hangalapú kihívás kérése",
label: "Nem vagyok robot",
loading: "Betöltés...",
reload: "Újratöltés",
verify: "Ellenőrzés",
verificationRequired: "Ellenőrzés szükséges!",
verified: "Ellenőrizve",
verifying: "Ellenőrzés folyamatban...",
waitAlert: "Ellenőrzés folyamatban... kérlek várj.",
cancel: "Mégse",
enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját."
};
globalThis.$altcha.i18n.set("hu", i18n$E);
const i18n$D = {
ariaLinkLabel: "Altcha (opinber vefsíða)",
enterCode: "Sláðu inn kóða",
enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",
error: "Staðfesting mistókst. Reyndu aftur síðar.",
expired: "Staðfesting er útrunnin. Reyndu aftur.",
footer: 'Verndað af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (opinber vefsíða)">ALTCHA</a>',
getAudioChallenge: "Fá hljóðáskorun",
label: "Ég er ekki robot",
loading: "Hleður...",
reload: "Hleð aftur",
verify: "Staðfesta",
verificationRequired: "Staðfesting er nauðsynleg!",
verified: "Staðfest",
verifying: "Að staðfesta...",
waitAlert: "Að staðfesta... vinsamlegast bíða.",
cancel: "Hætta við",
enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."
};
globalThis.$altcha.i18n.set("is", i18n$D);
const i18n$C = {
ariaLinkLabel: "Altcha (sito ufficiale)",
enterCode: "Inserisci il codice",
enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",
error: "Verifica fallita. Riprova più tardi.",
expired: "Verifica scaduta. Riprova.",
footer: 'Protetto da <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sito ufficiale)">ALTCHA</a>',
getAudioChallenge: "Ottieni una sfida audio",
label: "Non sono un robot",
loading: "Caricamento...",
reload: "Ricarica",
verify: "Verifica",
verificationRequired: "Verifica richiesta!",
verified: "Verificato",
verifying: "Verifica in corso...",
waitAlert: "Verifica in corso... attendere.",
cancel: "Annulla",
enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante."
};
globalThis.$altcha.i18n.set("it", i18n$C);
const i18n$B = {
ariaLinkLabel: "Altcha (oficiali svetainė)",
enterCode: "Įveskite kodą",
enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",
error: "Patvirtinimas nepavyko. Bandykite vėliau.",
expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.",
footer: 'Apsaugota <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiali svetainė)">ALTCHA</a>',
getAudioChallenge: "Gauti garso užduotį",
label: "Aš nesu robotas",
loading: "Įkeliama...",
reload: "Įkelti iš naujo",
verify: "Patvirtinti",
verificationRequired: "Reikalingas patvirtinimas!",
verified: "Patvirtinta",
verifying: "Tikrinama...",
waitAlert: "Tikrinama... prašome palaukti.",
cancel: "Atšaukti",
enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."
};
globalThis.$altcha.i18n.set("lt", i18n$B);
const i18n$A = {
ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)",
enterCode: "Ievadiet kodu",
enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",
error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",
expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",
footer: 'Aizsargāts ar <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiālā tīmekļa vietne)">ALTCHA</a>',
getAudioChallenge: "Saņemt audio izaicinājumu",
label: "Es neesmu robots",
loading: "Notiek ielāde...",
reload: "Pārlādēt",
verify: "Verificēt",
verificationRequired: "Nepieciešama verifikācija!",
verified: "Verificēts",
verifying: "Notiek verifikācija...",
waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.",
cancel: "Atcelt",
enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."
};
globalThis.$altcha.i18n.set("lv", i18n$A);
const i18n$z = {
ariaLinkLabel: "Altcha (sit uffiċjali)",
enterCode: "Idħol il-kodiċi",
enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",
error: "Il-verifika falliet. Erġa’ pprova aktar tard.",
expired: "Il-verifika skadiet. Erġa’ pprova.",
footer: 'Protett minn <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sit uffiċjali)">ALTCHA</a>',
getAudioChallenge: "Ikseb sfida bl-awdjo",
label: "M’inix robot",
loading: "Qed jitgħabba...",
reload: "Ittella’ mill-ġdid",
verify: "Ivverifika",
verificationRequired: "Verifika meħtieġa!",
verified: "Ivverifikat",
verifying: "Verifika għaddejja...",
waitAlert: "Verifika għaddejja... stenna ftit.",
cancel: "Ikkanċella",
enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."
};
globalThis.$altcha.i18n.set("mt", i18n$z);
const i18n$y = {
ariaLinkLabel: "Altcha (offisiell nettside)",
enterCode: "Skriv inn kode",
enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.",
error: "Verifisering mislyktes. Prøv igjen senere.",
expired: "Verifiseringen utløp. Prøv igjen.",
footer: 'Beskyttet av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offisiell nettside)">ALTCHA</a>',
getAudioChallenge: "Få en lydutfordring",
label: "Jeg er ikke en robot",
loading: "Laster...",
reload: "Last på nytt",
verify: "Verifiser",
verificationRequired: "Verifisering kreves!",
verified: "Verifisert",
verifying: "Verifiserer...",
waitAlert: "Verifiserer... vennligst vent.",
cancel: "Avbryt",
enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor."
};
globalThis.$altcha.i18n.set("nb", i18n$y);
const i18n$x = {
ariaLinkLabel: "Altcha (officiële website)",
enterCode: "Voer code in",
enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",
error: "Verificatie mislukt. Probeer het later opnieuw.",
expired: "Verificatie verlopen. Probeer het opnieuw.",
footer: 'Beschermd door <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiële website)">ALTCHA</a>',
getAudioChallenge: "Audio-uitdaging ontvangen",
label: "Ik ben geen robot",
loading: "Laden...",
reload: "Herladen",
verify: "Verifiëren",
verificationRequired: "Verificatie vereist!",
verified: "Geverifieerd",
verifying: "Bezig met verifiëren...",
waitAlert: "Bezig met verifiëren... even geduld a.u.b.",
cancel: "Annuleren",
enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in."
};
globalThis.$altcha.i18n.set("nl", i18n$x);
const i18n$w = {
ariaLinkLabel: "Altcha (oficjalna strona internetowa)",
enterCode: "Wprowadź kod",
enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",
error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.",
expired: "Weryfikacja wygasła. Spróbuj ponownie.",
footer: 'Chronione przez <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficjalna strona internetowa)">ALTCHA</a>',
getAudioChallenge: "Pobierz zadanie dźwiękowe",
label: "Nie jestem robotem",
loading: "Ładowanie...",
reload: "Odśwież",
verify: "Zweryfikuj",
verificationRequired: "Wymagana weryfikacja!",
verified: "Zweryfikowano",
verifying: "Weryfikacja...",
waitAlert: "Trwa weryfikacja... proszę czekać.",
cancel: "Anuluj",
enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka."
};
globalThis.$altcha.i18n.set("pl", i18n$w);
const i18n$v = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduza o código",
enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",
error: "A verificação falhou. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Não sou um robô",
loading: "A carregar...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "A verificar...",
waitAlert: "A verificar... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-pt", i18n$v);
const i18n$u = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Digite o código",
enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",
error: "Falha na verificação. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Eu não sou um robô",
loading: "Carregando...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-br", i18n$u);
const i18n$t = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduceți codul",
enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",
error: "Verificarea a eșuat. Încearcă din nou mai târziu.",
expired: "Verificarea a expirat. Încearcă din nou.",
footer: 'Protejat de <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obține o provocare audio",
label: "Nu sunt un robot",
loading: "Se încarcă...",
reload: "Reîncarcă",
verify: "Verifică",
verificationRequired: "Verificare necesară!",
verified: "Verificat",
verifying: "Se verifică...",
waitAlert: "Se verifică... te rugăm să aștepți.",
cancel: "Anulare",
enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."
};
globalThis.$altcha.i18n.set("ro", i18n$t);
const i18n$s = {
ariaLinkLabel: "Altcha (официальный сайт)",
enterCode: "Введите код",
enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",
error: "Ошибка верификации. Попробуйте позже.",
expired: "Срок действия верификации истек. Попробуйте снова.",
footer: 'Защищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официальный сайт)">ALTCHA</a>',
getAudioChallenge: "Получить аудио задачу",
label: "Я не робот",
loading: "Загрузка...",
reload: "Перезагрузить",
verify: "Проверить",
verificationRequired: "Требуется проверка!",
verified: "Проверено",
verifying: "Идет проверка...",
waitAlert: "Идет проверка... Пожалуйста, подождите.",
cancel: "Отмена",
enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже."
};
globalThis.$altcha.i18n.set("ru", i18n$s);
const i18n$r = {
ariaLinkLabel: "Altcha (oficiálna webová stránka)",
enterCode: "Zadajte kód",
enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",
error: "Verifikácia zlyhala. Skúste to znova neskôr.",
expired: "Verifikácia vypršala. Skúste to znova.",
footer: 'Chránené <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiálna webová stránka)">ALTCHA</a>',
getAudioChallenge: "Získať audio výzvu",
label: "Nie som robot",
loading: "Načítava sa...",
reload: "Obnoviť",
verify: "Verifikovať",
verificationRequired: "Vyžaduje sa overenie!",
verified: "Verifikované",
verifying: "Prebieha verifikácia...",
waitAlert: "Prebieha verifikácia... prosím čakajte.",
cancel: "Zrušiť",
enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie."
};
globalThis.$altcha.i18n.set("sk", i18n$r);
const i18n$q = {
ariaLinkLabel: "Altcha (uradna spletna stran)",
enterCode: "Vnesite kodo",
enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",
error: "Preverjanje ni uspelo. Poskusite znova kasneje.",
expired: "Preverjanje je poteklo. Poskusite znova.",
footer: 'Zaščiteno z <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (uradna spletna stran)">ALTCHA</a>',
getAudioChallenge: "Pridobite zvočni izziv",
label: "Nisem robot",
loading: "Nalagam...",
reload: "Ponovno naloži",
verify: "Preveri",
verificationRequired: "Potrebna je preveritev!",
verified: "Preverjeno",
verifying: "Preverjanje...",
waitAlert: "Preverjanje... prosim počakajte.",
cancel: "Preklic",
enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."
};
globalThis.$altcha.i18n.set("sl", i18n$q);
const i18n$p = {
ariaLinkLabel: "Altcha (faqja zyrtare)",
enterCode: "Fut kodin",
enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",
error: "Verifikimi dështoi. Provoni përsëri më vonë.",
expired: "Verifikimi ka skaduar. Provoni përsëri.",
footer: 'I mbrojtur nga <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (faqja zyrtare)">ALTCHA</a>',
getAudioChallenge: "Merr një sfidë audio",
label: "Unë nuk jam një robot",
loading: "Duke u ngarkuar...",
reload: "Ringarko",
verify: "Verifiko",
verificationRequired: "Kërkohet verifikimi!",
verified: "I verifikuar",
verifying: "Duke verifikuar...",
waitAlert: "Duke verifikuar... ju lutem prisni.",
cancel: "Anuloje",
enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."
};
globalThis.$altcha.i18n.set("sq", i18n$p);
const i18n$o = {
ariaLinkLabel: "Altcha (zvanična web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (zvanična web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovo učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Откажи",
enterCodeFromImage: "Да бисте наставили, унесите код са слике испод."
};
globalThis.$altcha.i18n.set("sr", i18n$o);
const i18n$n = {
ariaLinkLabel: "Altcha (officiell webbplats)",
enterCode: "Ange kod",
enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
error: "Verifiering misslyckades. Försök igen senare.",
expired: "Verifieringen har gått ut. Försök igen.",
footer: 'Skyddad av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiell webbplats)">ALTCHA</a>',
getAudioChallenge: "Få ljudutmaning",
label: "Jag är inte en robot",
loading: "Laddar...",
reload: "Ladda om",
verify: "Verifiera",
verificationRequired: "Verifiering krävs!",
verified: "Verifierad",
verifying: "Verifierar...",
waitAlert: "Verifierar... vänligen vänta.",
cancel: "Avbryt",
enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan."
};
globalThis.$altcha.i18n.set("sv", i18n$n);
const i18n$m = {
ariaLinkLabel: "Altcha (resmi web sitesi)",
enterCode: "Kodu girin",
enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
footer: 'ALTCHA tarafından korunuyor <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (resmi web sitesi)">ALTCHA</a>',
getAudioChallenge: "Sesli doğrulama al",
label: "Ben robot değilim",
loading: "Yükleniyor...",
reload: "Yeniden yükle",
verify: "Doğrula",
verificationRequired: "Doğrulama gerekli!",
verified: "Doğrulandı",
verifying: "Doğrulama yapılıyor...",
waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.",
cancel: "İptal",
enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin."
};
globalThis.$altcha.i18n.set("tr", i18n$m);
const i18n$l = {
ariaLinkLabel: "Altcha (офіційний сайт)",
enterCode: "Введіть код",
enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
error: "Перевірка не вдалася. Спробуйте пізніше.",
expired: "Перевірка прострочена. Спробуйте знову.",
footer: 'Захищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (офіційний сайт)">ALTCHA</a>',
getAudioChallenge: "Отримати аудіо-челлендж",
label: "Я не робот",
loading: "Завантаження...",
reload: "Перезавантажити",
verify: "Перевірити",
verificationRequired: "Потрібна перевірка!",
verified: "Перевірено",
verifying: "Перевіряється...",
waitAlert: "Перевірка... будь ласка, зачекайте.",
cancel: "Скасувати",
enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче."
};
globalThis.$altcha.i18n.set("uk", i18n$l);
const i18n$k = {
ariaLinkLabel: "Altcha (amptelike webwerf)",
enterCode: "Voer kode in",
enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",
error: "Verifikasie het misluk. Probeer later weer.",
expired: "Verifikasie het verval. Probeer weer.",
footer: 'Beskerm deur <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (amptelike webwerf)">ALTCHA</a>',
getAudioChallenge: "Kry 'n klankuitdaging",
label: "Ek is nie 'n robot nie",
loading: "Laai...",
reload: "Laai weer",
verify: "Verifieer",
verificationRequired: "Verifikasie is vereis!",
verified: "Geverifieer",
verifying: "Verifieer...",
waitAlert: "Verifieer... wag asseblief.",
cancel: "Kanselleer",
enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."
};
globalThis.$altcha.i18n.set("af", i18n$k);
const i18n$j = {
ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)",
enterCode: "ኮድ አስገባ",
enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",
error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",
expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",
footer: 'በ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ዋናው ድህረ ገጽ)">ALTCHA</a> የተጠበቀ',
getAudioChallenge: "የድምጽ ፈተና ያግኙ",
label: "እኔ ሮቦት አይደለሁም",
loading: "በመጫን ላይ...",
reload: "እንደገና ጫን",
verify: "አረጋግጥ",
verificationRequired: "ማረጋገጫ ያስፈልጋል!",
verified: "ተረጋግጧል",
verifying: "በማረጋገጥ ላይ...",
waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",
cancel: "ይቅር",
enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"
};
globalThis.$altcha.i18n.set("am", i18n$j);
const i18n$i = {
ariaLinkLabel: "Altcha (tovuti rasmi)",
enterCode: "Weka nambari",
enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.",
error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.",
expired: "Uthibitishaji umeisha. Jaribu tena.",
footer: 'Imealindwa na <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (tovuti rasmi)">ALTCHA</a>',
getAudioChallenge: "Pata changamoto ya sauti",
label: "Mimi sio roboti",
loading: "Inapakia...",
reload: "Pakia tena",
verify: "Thibitisha",
verificationRequired: "Uthibitishaji unahitajika!",
verified: "Imethibitishwa",
verifying: "Inathibitisha...",
waitAlert: "Inathibitisha... tafadhali subiri.",
cancel: "Ghairi",
enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."
};
globalThis.$altcha.i18n.set("sw", i18n$i);
const i18n$h = {
ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)",
enterCode: "Tẹ koodu sii",
enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",
error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",
expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",
footer: 'Ti wa ni ààbò nipasẹ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oju opo wẹẹbu osise)">ALTCHA</a>',
getAudioChallenge: "Gba ìjàdú ohùn",
label: "Emi kii ṣe ẹrọ",
loading: "Ó ń gbé sílẹ̀...",
reload: "Tún gbé wọlé",
verify: "Ṣàdájọ́",
verificationRequired: "Ìdájọ́kòwò ni a nílò!",
verified: "A ti dájọ́",
verifying: "Ó ń ṣàdájọ́...",
waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",
cancel: "Fagbọsẹ",
enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."
};
globalThis.$altcha.i18n.set("yo", i18n$h);
const i18n$g = {
ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)",
enterCode: "কোড লিখুন",
enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",
error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",
expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",
footer: 'দ্বারা সুরক্ষিত <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (অফিসিয়াল ওয়েবসাইট)">ALTCHA</a>',
getAudioChallenge: "অডিও চ্যালেঞ্জ নিন",
label: "আমি রোবট নই",
loading: "লোড হচ্ছে...",
reload: "পুনরায় লোড করুন",
verify: "যাচাই করুন",
verificationRequired: "যাচাই প্রয়োজন!",
verified: "যাচাই করা হয়েছে",
verifying: "যাচাই করা হচ্ছে...",
waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",
cancel: "বাতিল করুন",
enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"
};
globalThis.$altcha.i18n.set("bn", i18n$g);
const i18n$f = {
ariaLinkLabel: "Altcha (אתר רשמי)",
enterCode: "הזן קוד",
enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",
error: "האימות נכשל. נסה שוב מאוחר יותר.",
expired: "תוקף האימות פג. נסה שוב.",
footer: 'מוגן על ידי <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (אתר רשמי)">ALTCHA</a>',
getAudioChallenge: "קבל אתגר שמע",
label: "אני לא רובוט",
loading: "טוען...",
reload: "טען מחדש",
verify: "אמת",
verificationRequired: "נדרש אימות!",
verified: "אומת",
verifying: "מאמת...",
waitAlert: "מבצע אימות... אנא המתן.",
cancel: "ביטול",
enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."
};
globalThis.$altcha.i18n.set("he", i18n$f);
const i18n$e = {
ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)",
enterCode: "कोड दर्ज करेंं",
enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",
error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",
expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",
footer: 'द्वारा संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (आधिकारिक वेबसाइट)">ALTCHA</a>',
getAudioChallenge: "ऑडियो चुनौती प्राप्त करें",
label: "मैं रोबोट नहीं हूँ",
loading: "लोड हो रहा है...",
reload: "पुनः लोड करें",
verify: "सत्यापित करें",
verificationRequired: "सत्यापन आवश्यक है!",
verified: "सत्यापित",
verifying: "सत्यापित कर रहे हैं...",
waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",
cancel: "रद्द करें",
enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"
};
globalThis.$altcha.i18n.set("hi", i18n$e);
const i18n$d = {
ariaLinkLabel: "Altcha (situs web resmi)",
enterCode: "Masukkan kode",
enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",
error: "Verifikasi gagal. Coba lagi nanti.",
expired: "Verifikasi telah kedaluwarsa. Coba lagi.",
footer: 'Dilindungi oleh <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (situs web resmi)">ALTCHA</a>',
getAudioChallenge: "Dapatkan tantangan audio",
label: "Saya bukan robot",
loading: "Memuat...",
reload: "Muat ulang",
verify: "Verifikasi",
verificationRequired: "Verifikasi diperlukan!",
verified: "Terverifikasi",
verifying: "Memverifikasi...",
waitAlert: "Memverifikasi... harap tunggu.",
cancel: "Batal",
enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."
};
globalThis.$altcha.i18n.set("id", i18n$d);
const i18n$c = {
ariaLinkLabel: "Altcha (公式ウェブサイト)",
enterCode: "コードを入力",
enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。",
error: "認証に失敗しました。後でもう一度試してください。",
expired: "認証が期限切れです。再試行してください。",
footer: '保護されています <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (公式ウェブサイト)">ALTCHA</a>',
getAudioChallenge: "音声チャレンジを取得",
label: "私はロボットではありません",
loading: "読み込み中...",
reload: "再読み込み",
verify: "確認",
verificationRequired: "認証が必要です!",
verified: "確認済み",
verifying: "確認中...",
waitAlert: "確認中...少々お待ちください。",
cancel: "キャンセル",
enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。"
};
globalThis.$altcha.i18n.set("ja", i18n$c);
const i18n$b = {
ariaLinkLabel: "Altcha (공식 웹사이트)",
enterCode: "코드 입력",
enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",
error: "인증 실패. 나중에 다시 시도해주세요.",
expired: "인증이 만료되었습니다. 다시 시도해주세요.",
footer: 'ALTCHA에서 보호됨 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (공식 웹사이트)">ALTCHA</a>',
getAudioChallenge: "오디오 챌린지 받기",
label: "저는 로봇이 아닙니다",
loading: "로딩 중...",
reload: "새로 고침",
verify: "확인",
verificationRequired: "인증이 필요합니다!",
verified: "확인됨",
verifying: "확인 중...",
waitAlert: "확인 중... 잠시만 기다려주세요.",
cancel: "취소",
enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요."
};
globalThis.$altcha.i18n.set("ko", i18n$b);
const i18n$a = {
ariaLinkLabel: "Altcha (ресми веб-сайт)",
enterCode: "Кодты енгізіңіз",
enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",
error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",
expired: "Тексеру мерзімі аяқталды. Қайталаңыз.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ресми веб-сайт)">ALTCHA</a> қорғайды',
getAudioChallenge: "Аудио сынақ алу",
label: "Мен робот емеспін",
loading: "Жүктелуде...",
reload: "Қайта жүктеу",
verify: "Тексеру",
verificationRequired: "Тексеру талап етіледі!",
verified: "Тексерілді",
verifying: "Тексеруде...",
waitAlert: "Тексерілуде... күте тұрыңыз.",
cancel: "Болдыру",
enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."
};
globalThis.$altcha.i18n.set("kk", i18n$a);
const i18n$9 = {
ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)",
enterCode: "कोड टाकाा",
enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",
error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",
expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",
footer: 'द्वारे संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (अधिकृत संकेतस्थळ)">ALTCHA</a>',
getAudioChallenge: "ऑडिओ चॅलेंज मिळवा",
label: "मी रोबोट नाही",
loading: "लोड होत आहे...",
reload: "पुन्हा लोड करा",
verify: "पुष्टीकरण करा",
verificationRequired: "पडताळणी आवश्यक आहे!",
verified: "पुष्टीकरण झाले",
verifying: "पुष्टीकरण करत आहे...",
waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",
cancel: "रद्द करा",
enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."
};
globalThis.$altcha.i18n.set("mr", i18n$9);
const i18n$8 = {
ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",
enterCode: "குறியீட்டை உள்ளிடவும்",
enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (அதிகாரப்பூர்வ வலைத்தளம்)">ALTCHA</a>',
getAudioChallenge: "ஒலி சவாலை பெறவும்",
label: "நான் ரோபோடான அல்ல",
loading: "செயலாக்கம்...",
reload: "மீண்டும் புதுப்பிக்கவும்",
verify: "சரிபார்க்கவும்",
verificationRequired: "சரிபார்ப்பு தேவை!",
verified: "சரிபார்க்கப்பட்டது",
verifying: "சரிபார்க்கப்படுகிறது...",
waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",
cancel: "ரத்துசெய்",
enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."
};
globalThis.$altcha.i18n.set("ta", i18n$8);
const i18n$7 = {
ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)",
enterCode: "కోడ్‌ని నమోదు చేయండి",
enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (అధికారిక వెబ్‌సైట్)">ALTCHA</a>',
getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
label: "నేను రోబోట్ కాదు",
loading: "లోడ్ అవుతోంది...",
reload: "మళ్ళీ లోడ్ చేయండి",
verify: "ధ్రువీకరించు",
verificationRequired: "ధృవీకరణ అవసరం!",
verified: "ధ్రువీకరించబడింది",
verifying: "ధ్రువీకరణ జరుగుతుంది...",
waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",
cancel: "రద్దు చేయండి",
enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."
};
globalThis.$altcha.i18n.set("te", i18n$7);
const i18n$6 = {
ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)",
enterCode: "ป้อนรหัส",
enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
footer: 'ป้องกันโดย <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (เว็บไซต์ทางการ)">ALTCHA</a>',
getAudioChallenge: "รับการท้าทายเสียง",
label: "ฉันไม่ใช่บอท",
loading: "กำลังโหลด...",
reload: "โหลดใหม่",
verify: "ตรวจสอบ",
verificationRequired: "จำเป็นต้องตรวจสอบ!",
verified: "ตรวจสอบแล้ว",
verifying: "กำลังตรวจสอบ...",
waitAlert: "กำลังตรวจสอบ... กรุณารอ",
cancel: "ยกเลิก",
enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"
};
globalThis.$altcha.i18n.set("th", i18n$6);
const i18n$5 = {
ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)",
enterCode: "کوڈ درج کریں",
enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (سرکاری ویب سائٹ)">ALTCHA</a>',
getAudioChallenge: "آڈیو چیلنج حاصل کریں",
label: "میں روبوٹ نہیں ہوں",
loading: "لوڈ ہو رہا ہے...",
reload: "دوبارہ لوڈ کریں",
verify: "توثیق کریں",
verificationRequired: "تصدیق ضروری ہے!",
verified: "توثیق شدہ",
verifying: "توثیق ہو رہی ہے...",
waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",
cancel: "منسوخ کریں",
enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"
};
globalThis.$altcha.i18n.set("ur", i18n$5);
const i18n$4 = {
ariaLinkLabel: "Altcha (rasmiy veb-sayt)",
enterCode: "Kodni kiriting",
enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",
error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",
expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (rasmiy veb-sayt)">ALTCHA</a> tomonidan himoyalangan',
getAudioChallenge: "Audio sinovni olish",
label: "Men robot emasman",
loading: "Yuklanmoqda...",
reload: "Qayta yuklash",
verify: "Tekshirish",
verificationRequired: "Tekshiruv talab qilinadi!",
verified: "Tekshirildi",
verifying: "Tekshirilmoqda...",
waitAlert: "Tekshirilmoqda... iltimos kuting.",
cancel: "Bekor qilish",
enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."
};
globalThis.$altcha.i18n.set("uz", i18n$4);
const i18n$3 = {
ariaLinkLabel: "Altcha (trang web chính thức)",
enterCode: "Nhập mã",
enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
error: "Xác minh thất bại. Vui lòng thử lại sau.",
expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
footer: 'Được bảo vệ bởi <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (trang web chính thức)">ALTCHA</a>',
getAudioChallenge: "Nhận thử thách âm thanh",
label: "Tôi không phải là robot",
loading: "Đang tải...",
reload: "Tải lại",
verify: "Xác minh",
verificationRequired: "Yêu cầu xác minh!",
verified: "Đã xác minh",
verifying: "Đang xác minh...",
waitAlert: "Đang xác minh... vui lòng chờ.",
cancel: "Hủy bỏ",
enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."
};
globalThis.$altcha.i18n.set("vi", i18n$3);
const i18n$2 = {
ariaLinkLabel: "Altcha (官方网站)",
enterCode: "输入代码",
enterCodeAria: "输入您听到的代码。按空格键播放音频。",
error: "验证失败。稍后再试。",
expired: "验证已过期。请重试。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方网站)">ALTCHA</a> 保护',
getAudioChallenge: "获取音频挑战",
label: "我不是机器人",
loading: "加载中...",
reload: "重新加载",
verify: "验证",
verificationRequired: "需要验证!",
verified: "已验证",
verifying: "正在验证...",
waitAlert: "正在验证... 请稍等。",
cancel: "取消",
enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。"
};
globalThis.$altcha.i18n.set("zh-cn", i18n$2);
const i18n$1 = {
ariaLinkLabel: "Altcha (官方網站)",
cancel: "取消",
enterCode: "輸入代碼",
enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。",
enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。",
error: "驗證失敗。請稍後再試。",
expired: "驗證已過期。請再試一次。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 提供保護',
getAudioChallenge: "取得音訊驗證",
label: "我唔係機械人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "驗證中...",
waitAlert: "驗證中... 請稍候。"
};
globalThis.$altcha.i18n.set("zh-hk", i18n$1);
const i18n = {
ariaLinkLabel: "Altcha (官方網站)",
enterCode: "輸入代碼",
enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
error: "驗證失敗。稍後再試。",
expired: "驗證已過期。請重試。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 保護',
getAudioChallenge: "獲取音頻挑戰",
label: "我不是機器人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "正在驗證...",
waitAlert: "正在驗證... 請稍等。",
cancel: "取消",
enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。"
};
globalThis.$altcha.i18n.set("zh-tw", i18n);
 
data/skin/mobile/moment/js/gd_board_view.js+72
변경 전gd_board_view.js
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
var gd_dom = function (bdId, sno, notice) {
if($.trim(notice) === ''){
var formWrite = $('.js_form_write');
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
var gd_dom = function (bdId, sno, notice) {
if($.trim(notice) === ''){
var formWrite = $('.js_form_write');
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
 
변경 후gd_board_view.js
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
 
var gd_dom = function (bdId, sno, notice) {
if($.trim(notice) === ''){
var formWrite = $('.js_form_write');
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
 
var gd_dom = function (bdId, sno, notice) {
if($.trim(notice) === ''){
var formWrite = $('.js_form_write');
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
 
data/skin/mobile/moment/js/gd_board_write.js+708-704
변경 전gd_board_write.js
function gd_captcha_reload() {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../board/captcha.php?ch=' + someDate);
}, 1);
}
/*
function gd_add_upload() {
uploadBoxCount = $('#uploadBox').find('.file-upload').length;
if (uploadBoxCount > 4) {
alert("업로드는 최대 5개만 지원합니다");
return;
}
var addUploadBox = _.template(
$("script.template").html()
);
$('#uploadBox:last').append(addUploadBox({idx: uploadBoxCount + 1}));
}
function uploadRemove(obj) {
obj.closest('.file-upload').remove();
}
*/
var boardSubmitFl = true;
$(document).ready(function () {
var params = {};
if(typeof bdId != 'undefined') {
params = {
bdId : bdId,
bdSno : bdSno,
};
}
$('.js_board_layer').bind('click',function(){
var type = $(this).data('type');
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_"+type+"_select.php",
success: function (data) {
$('#popupSelectGoods').empty().append(data);
$('#popupSelectGoods').show();
},
error: function (data) {
alert(data.message);
}
});
})
$('body').on('click','.js_layer_close',function(e){
e.stopPropagation();
$('.js_select_confirm').off('click');
$('#popupSelectGoods').empty();
$('#popupSelectGoods').hide();
})
$('body').on('click','.js_select_remove',function(){
$(this).closest('div.js_select_item').remove();
$('.itemselect_comment').show();
})
uploadBoxCount = $('#uploadBox').find('.file_upload').length;
$('.file_upload:last').find('label').attr('for', 'attach' + uploadBoxCount);
$('.file_upload:last').find('input[type=file]').attr('id', 'attach' + uploadBoxCount);
if (cfgUploadFl == 'y') {
$('#addUploadBtn').bind('click', function () {
gd_add_upload();
});
}
$("#frmWrite").validate({
submitHandler: function (form) {
if (boardSubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
if (cfgEditorFl == 'y') {
oEditors.getById["editor"].exec("UPDATE_CONTENTS_FIELD", []); // 에디터의 내용이 textarea에 적용됩니다.
}
boardSubmitFl = false;
form.submit();
$('iframe[name=ifrmProcess]').load(function(){
var doc = this.contentWindow ? this.contentWindow.document : (this.contentDocument ? this.contentDocument : this.document);
var root = doc.documentElement ? doc.documentElement : doc.body;
var result = root.textContent ? root.textContent : root.innerText;
result = result.replace(/(\s+)|(\s+$)|(\r)|(\n)/g, "");
if (result.indexOf(__('저장되었습니다')) < 0 && result.indexOf('/board/list.php') < 0) { //실패 시 버튼 활성화
boardSubmitFl = true;
}
});
},
rules: {
private: 'required',
contents: {
required: function (textarea) {
if (cfgEditorFl == 'y') {
var editorcontent = oEditors.getById[textarea.id].getIR(); // 에디터의 내용 가져오기.
editorcontent = editorcontent.replace(/<(?!img).*?>/ig, '').replace('&nbsp;', ''); //이미지테그제외한 테그제거
return editorcontent.length === 0;
}
else {
return textarea.value.length === 0;
}
}
},
writerNm: 'required',
writerPw: 'required',
subject: 'required',
captchaKey: 'required',
goodsPt: 'required',
writerEmail: {
required: true,
email: true
},
},
messages: {
writerNm: {
required: __('작성자를 입력해주세요.')
},
writerPw: {
required: __('비밀번호를 입력해주세요.')
},
subject: {
required: __('제목을 입력해주세요.')
},
contents: {
required: __('내용을 입력해주세요')
},
private: {
required: __('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.')
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
writerEmail: {
required: __('이메일을 입력해주세요.'),
email: __('메일 형식이 틀렸습니다.')
}
}
})
$("#category").on("change", function(){
var category = $(this).val();
var bdId = $('[name="bdId"]').val();
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'category', bdId: bdId, 'category': category},
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
$("#contents").val(result).focus();
}).error(function (e) {
alert(e.responseText);
});
});
});
function gd_init_file_upload() {
var maxUploadFile = maxFileNumber;
maxUploadFile = maxUploadFile ? maxUploadFile : 0;
if (mode == 'modify') {
for (var i = 0; i < prvFilePath.length; i++) {
prevImg = gd_get_prev_img(prvFileName[i], prvFilePath[i]);
$newItem = $("#boardAttach li.item.template").clone();
$("#boardAttach li.item.template").before($newItem);
$newItem.removeClass("template");
$prvFileFace = $newItem.find('.file_face');
prewFileFace = $prvFileFace[0];
$prvFileFace.addClass("preview").css({
"background-image": "url('" + prevImg + "')"
});
}
$("#boardAttach li.item:not(.template)").each(function (index) {
this.onclick = function () {
var delFilehtml = '';
if (confirm(__('첨부된 파일을 삭제하시겠습니까?'))) {
delFilehtml = '<input type="hidden" name="delFile[' + index + ']" value="y" />';
$('#frmWrite').append(delFilehtml);
this.remove();
}
};
});
}
$('#boardAttach li.item.template').off().on("click", 'button.file_face', function () {
var templateContainer = this.parentNode;
// templateContainer.remove('input');
var $container = $(templateContainer);
var $fileFace = $container.find("button.file_face"), fileFace = $fileFace[0];
var $fileHidden = $container.find("input.file_hidden"), fileHidden = $fileHidden[0];
var idx = $('input[name="' + fileHidden.name + '"]').index(this);
if ($("#boardAttach li.item:not(.template) input.file_hidden").length >= maxUploadFile) {
alert(__('첨부파일은 최대 %1$s개 까지 업로드 가능합니다.', maxUploadFile.toString()));
return false;
}
else {
fileHidden.onchange = function () {
var index = $("#boardAttach").find('li').index($(this).closest("li"));
//ajax업로드 처리
var uploadImages = [];
gdAjaxUpload.upload(
{
formObj: $("#frmWrite"),
thisObj: $(this),
actionUrl: '../board/board_ps.php',
params: {bdId: $('[name=bdId]').val(), 'mode': 'ajaxUpload'},
onbeforeunload: function () {
if (uploadImages.length == 0) {
return false;
}
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'deleteGarbageImage', bdId: $('[name=bdId]').val(), deleteImage: uploadImages.join('^|^')},
cache: false,
}).success(function (data) {
}).error(function (e) {
});
},
successAfter: function (data) {
uploadImages.push(data.saveFileNm);
},
failAfter : function(data) {
if (data.result == 'fail' && fileHidden.name == 'upfiles[]') {
$('input[name="' + fileHidden.name + '"]').eq(idx).val('');
}
}
}
)
if(gdAjaxUpload.isSuccess == false){
return false;
}
var fileReader = new FileReader();
fileName = this.files[0].name;
fileReader.readAsDataURL(this.files[0]);
fileReader.onload = function () {
previewUrl = gd_get_prev_img(fileName, this.result);
$(templateContainer).clone(true).appendTo($("#boardAttach"));
$container.removeClass("template");
$fileFace.addClass("preview").css({
"background-image": "url('" + previewUrl + "')",
"background-position": "center",
"background-size": "cover",
"background-repeat": "no-repeat",
"-webkit-background-size": "cover",
"-moz-background-size": "cover",
"-o-background-size": "cover"
});
fileFace.onclick = function (e) {
if (confirm(__("첨부된 파일을 삭제하시겠습니까?"))) {
$("input[name='uploadFileNm[" + index + "]']").remove();
$("input[name='saveFileNm[" + index + "]']").remove();
$container.remove();
} else {
e.stopPropagation();
}
};
};
fileReader.onerror = function () {
alert(__("이미지 로드 중 에러가 발생했습니다."));
};
};
$fileHidden.trigger("click");
}
});
}
function gd_get_prev_img(fileName, imgUrl) {
var fileExt = '';
if (fileName.indexOf('.') > 0) {
_fileExt = fileName.substring(fileName.lastIndexOf('.'), fileName.length).toLowerCase();
fileExt = _fileExt.replace('.', '');
}
switch (fileExt) {
case 'gif':
case 'jpg':
case 'bmp':
case 'png':
case 'jpeg':
return imgUrl;
break;
case 'doc':
case'docx':
fileName = 'icon_file_doc.png';
break;
case 'ppt':
case'pptx':
fileName = 'icon_file_ppt.png';
break;
case 'pdf':
fileName = 'icon_file_pdf.png';
break;
case 'xls':
case'xlsx':
fileName = 'icon_file_xls.png';
break;
case 'txt':
fileName = 'icon_file_txt.png';
break;
default :
fileName = 'icon_file_etc.png';
}
previewUrl = mobileSkinPath + '/img/new/' + fileName;
return previewUrl;
}
function gd_set_add_goods(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectGoodsTblTr').html());
var param = {goodsNo: val.goodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, goodsPrice: val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectGoodsBox").empty();
$("#selectGoodsBox").append(selecttblTrHtml);
$('.itemselect_comment').hide();
}
function gd_set_add_order(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectOrderTblTr').html());
var param = {orderNo: val.orderNo, orderGoodsNo: val.orderGoodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, optionName:val.optionName,goodsPrice:val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectOrderBox").empty();
$("#selectOrderBox").append(selecttblTrHtml);
$('.itemselect_comment').hide();
}
 
 
function gd_captcha_reload() {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../board/captcha.php?ch=' + someDate);
}, 1);
}
/*
function gd_add_upload() {
uploadBoxCount = $('#uploadBox').find('.file-upload').length;
if (uploadBoxCount > 4) {
alert("업로드는 최대 5개만 지원합니다");
return;
}
var addUploadBox = _.template(
$("script.template").html()
);
$('#uploadBox:last').append(addUploadBox({idx: uploadBoxCount + 1}));
}
function uploadRemove(obj) {
obj.closest('.file-upload').remove();
}
*/
var boardSubmitFl = true;
$(document).ready(function () {
var params = {};
if(typeof bdId != 'undefined') {
params = {
bdId : bdId,
bdSno : bdSno,
};
}
$('.js_board_layer').bind('click',function(){
var type = $(this).data('type');
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_"+type+"_select.php",
success: function (data) {
$('#popupSelectGoods').empty().append(data);
$('#popupSelectGoods').show();
},
error: function (data) {
alert(data.message);
}
});
})
$('body').on('click','.js_layer_close',function(e){
e.stopPropagation();
$('.js_select_confirm').off('click');
$('#popupSelectGoods').empty();
$('#popupSelectGoods').hide();
})
$('body').on('click','.js_select_remove',function(){
$(this).closest('div.js_select_item').remove();
$('.itemselect_comment').show();
})
uploadBoxCount = $('#uploadBox').find('.file_upload').length;
$('.file_upload:last').find('label').attr('for', 'attach' + uploadBoxCount);
$('.file_upload:last').find('input[type=file]').attr('id', 'attach' + uploadBoxCount);
if (cfgUploadFl == 'y') {
$('#addUploadBtn').bind('click', function () {
gd_add_upload();
});
}
$("#frmWrite").validate({
submitHandler: function (form) {
if (boardSubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
if (cfgEditorFl == 'y') {
oEditors.getById["editor"].exec("UPDATE_CONTENTS_FIELD", []); // 에디터의 내용이 textarea에 적용됩니다.
}
boardSubmitFl = false;
form.submit();
$('iframe[name=ifrmProcess]').load(function(){
var doc = this.contentWindow ? this.contentWindow.document : (this.contentDocument ? this.contentDocument : this.document);
var root = doc.documentElement ? doc.documentElement : doc.body;
var result = root.textContent ? root.textContent : root.innerText;
result = result.replace(/(\s+)|(\s+$)|(\r)|(\n)/g, "");
if (result.indexOf(__('저장되었습니다')) < 0 && result.indexOf('/board/list.php') < 0) { //실패 시 버튼 활성화
boardSubmitFl = true;
}
});
},
rules: {
private: 'required',
contents: {
required: function (textarea) {
if (cfgEditorFl == 'y') {
var editorcontent = oEditors.getById[textarea.id].getIR(); // 에디터의 내용 가져오기.
editorcontent = editorcontent.replace(/<(?!img).*?>/ig, '').replace('&nbsp;', ''); //이미지테그제외한 테그제거
return editorcontent.length === 0;
}
else {
return textarea.value.length === 0;
}
}
},
writerNm: 'required',
writerPw: 'required',
subject: 'required',
captchaKey: 'required',
goodsPt: 'required',
writerEmail: {
required: true,
email: true
},
},
messages: {
writerNm: {
required: __('작성자를 입력해주세요.')
},
writerPw: {
required: __('비밀번호를 입력해주세요.')
},
subject: {
required: __('제목을 입력해주세요.')
},
contents: {
required: __('내용을 입력해주세요')
},
private: {
required: __('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.')
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
writerEmail: {
required: __('이메일을 입력해주세요.'),
email: __('메일 형식이 틀렸습니다.')
}
}
})
$("#category").on("change", function(){
var category = $(this).val();
var bdId = $('[name="bdId"]').val();
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'category', bdId: bdId, 'category': category},
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
$("#contents").val(result).focus();
}).error(function (e) {
alert(e.responseText);
});
});
});
function gd_init_file_upload() {
var maxUploadFile = maxFileNumber;
maxUploadFile = maxUploadFile ? maxUploadFile : 0;
if (mode == 'modify') {
for (var i = 0; i < prvFilePath.length; i++) {
prevImg = gd_get_prev_img(prvFileName[i], prvFilePath[i]);
$newItem = $("#boardAttach li.item.template").clone();
$("#boardAttach li.item.template").before($newItem);
$newItem.removeClass("template");
$prvFileFace = $newItem.find('.file_face');
prewFileFace = $prvFileFace[0];
$prvFileFace.addClass("preview").css({
"background-image": "url('" + prevImg + "')"
});
}
$("#boardAttach li.item:not(.template)").each(function (index) {
this.onclick = function () {
var delFilehtml = '';
if (confirm(__('첨부된 파일을 삭제하시겠습니까?'))) {
delFilehtml = '<input type="hidden" name="delFile[' + index + ']" value="y" />';
$('#frmWrite').append(delFilehtml);
this.remove();
}
};
});
}
$('#boardAttach li.item.template').off().on("click", 'button.file_face', function () {
var templateContainer = this.parentNode;
// templateContainer.remove('input');
var $container = $(templateContainer);
var $fileFace = $container.find("button.file_face"), fileFace = $fileFace[0];
var $fileHidden = $container.find("input.file_hidden"), fileHidden = $fileHidden[0];
var idx = $('input[name="' + fileHidden.name + '"]').index(this);
if ($("#boardAttach li.item:not(.template) input.file_hidden").length >= maxUploadFile) {
alert(__('첨부파일은 최대 %1$s개 까지 업로드 가능합니다.', maxUploadFile.toString()));
return false;
}
else {
fileHidden.onchange = function () {
var index = $("#boardAttach").find('li').index($(this).closest("li"));
//ajax업로드 처리
var uploadImages = [];
gdAjaxUpload.upload(
{
formObj: $("#frmWrite"),
thisObj: $(this),
actionUrl: '../board/board_ps.php',
params: {bdId: $('[name=bdId]').val(), 'mode': 'ajaxUpload'},
onbeforeunload: function () {
if (uploadImages.length == 0) {
return false;
}
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'deleteGarbageImage', bdId: $('[name=bdId]').val(), deleteImage: uploadImages.join('^|^')},
cache: false,
}).success(function (data) {
}).error(function (e) {
});
},
successAfter: function (data) {
uploadImages.push(data.saveFileNm);
},
failAfter : function(data) {
if (data.result == 'fail' && fileHidden.name == 'upfiles[]') {
$('input[name="' + fileHidden.name + '"]').eq(idx).val('');
}
}
}
)
if(gdAjaxUpload.isSuccess == false){
return false;
}
var fileReader = new FileReader();
fileName = this.files[0].name;
fileReader.readAsDataURL(this.files[0]);
fileReader.onload = function () {
previewUrl = gd_get_prev_img(fileName, this.result);
$(templateContainer).clone(true).appendTo($("#boardAttach"));
$container.removeClass("template");
$fileFace.addClass("preview").css({
"background-image": "url('" + previewUrl + "')",
"background-position": "center",
"background-size": "cover",
"background-repeat": "no-repeat",
"-webkit-background-size": "cover",
"-moz-background-size": "cover",
"-o-background-size": "cover"
});
fileFace.onclick = function (e) {
if (confirm(__("첨부된 파일을 삭제하시겠습니까?"))) {
$("input[name='uploadFileNm[" + index + "]']").remove();
$("input[name='saveFileNm[" + index + "]']").remove();
$container.remove();
} else {
e.stopPropagation();
}
};
};
fileReader.onerror = function () {
alert(__("이미지 로드 중 에러가 발생했습니다."));
};
};
$fileHidden.trigger("click");
}
});
}
function gd_get_prev_img(fileName, imgUrl) {
var fileExt = '';
if (fileName.indexOf('.') > 0) {
_fileExt = fileName.substring(fileName.lastIndexOf('.'), fileName.length).toLowerCase();
fileExt = _fileExt.replace('.', '');
}
switch (fileExt) {
case 'gif':
case 'jpg':
case 'bmp':
case 'png':
case 'jpeg':
return imgUrl;
break;
case 'doc':
case'docx':
fileName = 'icon_file_doc.png';
break;
case 'ppt':
case'pptx':
fileName = 'icon_file_ppt.png';
break;
case 'pdf':
fileName = 'icon_file_pdf.png';
break;
case 'xls':
case'xlsx':
fileName = 'icon_file_xls.png';
break;
case 'txt':
fileName = 'icon_file_txt.png';
break;
default :
fileName = 'icon_file_etc.png';
}
previewUrl = mobileSkinPath + '/img/new/' + fileName;
return previewUrl;
}
function gd_set_add_goods(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectGoodsTblTr').html());
var param = {goodsNo: val.goodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, goodsPrice: val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectGoodsBox").empty();
$("#selectGoodsBox").append(selecttblTrHtml);
$('.itemselect_comment').hide();
}
function gd_set_add_order(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectOrderTblTr').html());
var param = {orderNo: val.orderNo, orderGoodsNo: val.orderGoodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, optionName:val.optionName,goodsPrice:val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectOrderBox").empty();
$("#selectOrderBox").append(selecttblTrHtml);
$('.itemselect_comment').hide();
}
 
 
 
변경 후gd_board_write.js
function gd_captcha_reload() {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../board/captcha.php?ch=' + someDate);
}, 1);
}
 
/*
function gd_add_upload() {
uploadBoxCount = $('#uploadBox').find('.file-upload').length;
if (uploadBoxCount > 4) {
alert("업로드는 최대 5개만 지원합니다");
return;
}
 
var addUploadBox = _.template(
$("script.template").html()
);
 
$('#uploadBox:last').append(addUploadBox({idx: uploadBoxCount + 1}));
}
 
function uploadRemove(obj) {
obj.closest('.file-upload').remove();
}
*/
 
var boardSubmitFl = true;
$(document).ready(function () {
var params = {};
if(typeof bdId != 'undefined') {
params = {
bdId : bdId,
bdSno : bdSno,
};
}
$('.js_board_layer').bind('click',function(){
var type = $(this).data('type');
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_"+type+"_select.php",
success: function (data) {
$('#popupSelectGoods').empty().append(data);
$('#popupSelectGoods').show();
},
error: function (data) {
alert(data.message);
}
});
})
 
$('body').on('click','.js_layer_close',function(e){
e.stopPropagation();
$('.js_select_confirm').off('click');
$('#popupSelectGoods').empty();
$('#popupSelectGoods').hide();
})
 
$('body').on('click','.js_select_remove',function(){
$(this).closest('div.js_select_item').remove();
$('.itemselect_comment').show();
})
 
uploadBoxCount = $('#uploadBox').find('.file_upload').length;
$('.file_upload:last').find('label').attr('for', 'attach' + uploadBoxCount);
$('.file_upload:last').find('input[type=file]').attr('id', 'attach' + uploadBoxCount);
 
if (cfgUploadFl == 'y') {
$('#addUploadBtn').bind('click', function () {
gd_add_upload();
});
}
 
$("#frmWrite").validate({
ignore: 'altcha-widget *',
submitHandler: function (form) {
if (boardSubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
if (cfgEditorFl == 'y') {
oEditors.getById["editor"].exec("UPDATE_CONTENTS_FIELD", []); // 에디터의 내용이 textarea에 적용됩니다.
}
boardSubmitFl = false;
form.submit();
$('iframe[name=ifrmProcess]').load(function(){
var doc = this.contentWindow ? this.contentWindow.document : (this.contentDocument ? this.contentDocument : this.document);
var root = doc.documentElement ? doc.documentElement : doc.body;
var result = root.textContent ? root.textContent : root.innerText;
result = result.replace(/(\s+)|(\s+$)|(\r)|(\n)/g, "");
if (result.indexOf(__('저장되었습니다')) < 0 && result.indexOf('/board/list.php') < 0) { //실패 시 버튼 활성화
boardSubmitFl = true;
}
});
},
rules: {
private: 'required',
contents: {
required: function (textarea) {
if (cfgEditorFl == 'y') {
var editorcontent = oEditors.getById[textarea.id].getIR(); // 에디터의 내용 가져오기.
editorcontent = editorcontent.replace(/<(?!img).*?>/ig, '').replace('&nbsp;', ''); //이미지테그제외한 테그제거
return editorcontent.length === 0;
}
else {
return textarea.value.length === 0;
}
}
},
writerNm: 'required',
writerPw: 'required',
subject: 'required',
goodsPt: 'required',
writerEmail: {
required: true,
email: true
},
},
messages: {
writerNm: {
required: __('작성자를 입력해주세요.')
},
writerPw: {
required: __('비밀번호를 입력해주세요.')
},
subject: {
required: __('제목을 입력해주세요.')
},
contents: {
required: __('내용을 입력해주세요')
},
private: {
required: __('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
writerEmail: {
required: __('이메일을 입력해주세요.'),
email: __('메일 형식이 틀렸습니다.')
}
}
})
 
$("#category").on("change", function(){
var category = $(this).val();
var bdId = $('[name="bdId"]').val();
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'category', bdId: bdId, 'category': category},
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
$("#contents").val(result).focus();
}).error(function (e) {
alert(e.responseText);
});
});
});
 
 
function gd_init_file_upload() {
var maxUploadFile = maxFileNumber;
maxUploadFile = maxUploadFile ? maxUploadFile : 0;
if (mode == 'modify') {
for (var i = 0; i < prvFilePath.length; i++) {
prevImg = gd_get_prev_img(prvFileName[i], prvFilePath[i]);
$newItem = $("#boardAttach li.item.template").clone();
$("#boardAttach li.item.template").before($newItem);
$newItem.removeClass("template");
$prvFileFace = $newItem.find('.file_face');
prewFileFace = $prvFileFace[0];
$prvFileFace.addClass("preview").css({
"background-image": "url('" + prevImg + "')"
});
}
 
$("#boardAttach li.item:not(.template)").each(function (index) {
this.onclick = function () {
var delFilehtml = '';
if (confirm(__('첨부된 파일을 삭제하시겠습니까?'))) {
delFilehtml = '<input type="hidden" name="delFile[' + index + ']" value="y" />';
$('#frmWrite').append(delFilehtml);
this.remove();
}
};
});
}
 
$('#boardAttach li.item.template').off().on("click", 'button.file_face', function () {
var templateContainer = this.parentNode;
 
// templateContainer.remove('input');
var $container = $(templateContainer);
var $fileFace = $container.find("button.file_face"), fileFace = $fileFace[0];
var $fileHidden = $container.find("input.file_hidden"), fileHidden = $fileHidden[0];
var idx = $('input[name="' + fileHidden.name + '"]').index(this);
if ($("#boardAttach li.item:not(.template) input.file_hidden").length >= maxUploadFile) {
alert(__('첨부파일은 최대 %1$s개 까지 업로드 가능합니다.', maxUploadFile.toString()));
return false;
}
else {
fileHidden.onchange = function () {
var index = $("#boardAttach").find('li').index($(this).closest("li"));
//ajax업로드 처리
var uploadImages = [];
gdAjaxUpload.upload(
{
formObj: $("#frmWrite"),
thisObj: $(this),
actionUrl: '../board/board_ps.php',
params: {bdId: $('[name=bdId]').val(), 'mode': 'ajaxUpload'},
onbeforeunload: function () {
if (uploadImages.length == 0) {
return false;
}
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'deleteGarbageImage', bdId: $('[name=bdId]').val(), deleteImage: uploadImages.join('^|^')},
cache: false,
}).success(function (data) {
}).error(function (e) {
});
},
successAfter: function (data) {
uploadImages.push(data.saveFileNm);
},
failAfter : function(data) {
if (data.result == 'fail' && fileHidden.name == 'upfiles[]') {
$('input[name="' + fileHidden.name + '"]').eq(idx).val('');
}
}
}
)
if(gdAjaxUpload.isSuccess == false){
return false;
}
 
var fileReader = new FileReader();
fileName = this.files[0].name;
 
fileReader.readAsDataURL(this.files[0]);
fileReader.onload = function () {
previewUrl = gd_get_prev_img(fileName, this.result);
$(templateContainer).clone(true).appendTo($("#boardAttach"));
$container.removeClass("template");
 
$fileFace.addClass("preview").css({
"background-image": "url('" + previewUrl + "')",
"background-position": "center",
"background-size": "cover",
"background-repeat": "no-repeat",
"-webkit-background-size": "cover",
"-moz-background-size": "cover",
"-o-background-size": "cover"
});
 
fileFace.onclick = function (e) {
if (confirm(__("첨부된 파일을 삭제하시겠습니까?"))) {
$("input[name='uploadFileNm[" + index + "]']").remove();
$("input[name='saveFileNm[" + index + "]']").remove();
$container.remove();
} else {
e.stopPropagation();
}
};
};
 
fileReader.onerror = function () {
alert(__("이미지 로드 중 에러가 발생했습니다."));
};
};
$fileHidden.trigger("click");
}
});
}
 
function gd_get_prev_img(fileName, imgUrl) {
var fileExt = '';
if (fileName.indexOf('.') > 0) {
_fileExt = fileName.substring(fileName.lastIndexOf('.'), fileName.length).toLowerCase();
fileExt = _fileExt.replace('.', '');
}
 
switch (fileExt) {
case 'gif':
case 'jpg':
case 'bmp':
case 'png':
case 'jpeg':
return imgUrl;
break;
case 'doc':
case'docx':
fileName = 'icon_file_doc.png';
break;
case 'ppt':
case'pptx':
fileName = 'icon_file_ppt.png';
break;
case 'pdf':
fileName = 'icon_file_pdf.png';
break;
case 'xls':
case'xlsx':
fileName = 'icon_file_xls.png';
break;
case 'txt':
fileName = 'icon_file_txt.png';
break;
default :
fileName = 'icon_file_etc.png';
}
previewUrl = mobileSkinPath + '/img/new/' + fileName;
 
return previewUrl;
}
 
function gd_set_add_goods(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectGoodsTblTr').html());
var param = {goodsNo: val.goodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, goodsPrice: val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectGoodsBox").empty();
$("#selectGoodsBox").append(selecttblTrHtml);
$('.itemselect_comment').hide();
}
 
function gd_set_add_order(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectOrderTblTr').html());
var param = {orderNo: val.orderNo, orderGoodsNo: val.orderGoodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, optionName:val.optionName,goodsPrice:val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectOrderBox").empty();
$("#selectOrderBox").append(selecttblTrHtml);
$('.itemselect_comment').hide();
}
function gd_captcha_reload() {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../board/captcha.php?ch=' + someDate);
}, 1);
}
 
/*
function gd_add_upload() {
uploadBoxCount = $('#uploadBox').find('.file-upload').length;
if (uploadBoxCount > 4) {
alert("업로드는 최대 5개만 지원합니다");
return;
}
 
var addUploadBox = _.template(
$("script.template").html()
);
 
$('#uploadBox:last').append(addUploadBox({idx: uploadBoxCount + 1}));
}
 
function uploadRemove(obj) {
obj.closest('.file-upload').remove();
}
*/
 
var boardSubmitFl = true;
$(document).ready(function () {
var params = {};
if(typeof bdId != 'undefined') {
params = {
bdId : bdId,
bdSno : bdSno,
};
}
$('.js_board_layer').bind('click',function(){
var type = $(this).data('type');
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_"+type+"_select.php",
success: function (data) {
$('#popupSelectGoods').empty().append(data);
$('#popupSelectGoods').show();
},
error: function (data) {
alert(data.message);
}
});
})
 
$('body').on('click','.js_layer_close',function(e){
e.stopPropagation();
$('.js_select_confirm').off('click');
$('#popupSelectGoods').empty();
$('#popupSelectGoods').hide();
})
 
$('body').on('click','.js_select_remove',function(){
$(this).closest('div.js_select_item').remove();
$('.itemselect_comment').show();
})
 
uploadBoxCount = $('#uploadBox').find('.file_upload').length;
$('.file_upload:last').find('label').attr('for', 'attach' + uploadBoxCount);
$('.file_upload:last').find('input[type=file]').attr('id', 'attach' + uploadBoxCount);
 
if (cfgUploadFl == 'y') {
$('#addUploadBtn').bind('click', function () {
gd_add_upload();
});
}
 
$("#frmWrite").validate({
ignore: 'altcha-widget *',
submitHandler: function (form) {
if (boardSubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
if (cfgEditorFl == 'y') {
oEditors.getById["editor"].exec("UPDATE_CONTENTS_FIELD", []); // 에디터의 내용이 textarea에 적용됩니다.
}
boardSubmitFl = false;
form.submit();
$('iframe[name=ifrmProcess]').load(function(){
var doc = this.contentWindow ? this.contentWindow.document : (this.contentDocument ? this.contentDocument : this.document);
var root = doc.documentElement ? doc.documentElement : doc.body;
var result = root.textContent ? root.textContent : root.innerText;
result = result.replace(/(\s+)|(\s+$)|(\r)|(\n)/g, "");
if (result.indexOf(__('저장되었습니다')) < 0 && result.indexOf('/board/list.php') < 0) { //실패 시 버튼 활성화
boardSubmitFl = true;
}
});
},
rules: {
private: 'required',
contents: {
required: function (textarea) {
if (cfgEditorFl == 'y') {
var editorcontent = oEditors.getById[textarea.id].getIR(); // 에디터의 내용 가져오기.
editorcontent = editorcontent.replace(/<(?!img).*?>/ig, '').replace('&nbsp;', ''); //이미지테그제외한 테그제거
return editorcontent.length === 0;
}
else {
return textarea.value.length === 0;
}
}
},
writerNm: 'required',
writerPw: 'required',
subject: 'required',
goodsPt: 'required',
writerEmail: {
required: true,
email: true
},
},
messages: {
writerNm: {
required: __('작성자를 입력해주세요.')
},
writerPw: {
required: __('비밀번호를 입력해주세요.')
},
subject: {
required: __('제목을 입력해주세요.')
},
contents: {
required: __('내용을 입력해주세요')
},
private: {
required: __('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
writerEmail: {
required: __('이메일을 입력해주세요.'),
email: __('메일 형식이 틀렸습니다.')
}
}
})
 
$("#category").on("change", function(){
var category = $(this).val();
var bdId = $('[name="bdId"]').val();
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'category', bdId: bdId, 'category': category},
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
$("#contents").val(result).focus();
}).error(function (e) {
alert(e.responseText);
});
});
});
 
 
function gd_init_file_upload() {
var maxUploadFile = maxFileNumber;
maxUploadFile = maxUploadFile ? maxUploadFile : 0;
if (mode == 'modify') {
for (var i = 0; i < prvFilePath.length; i++) {
prevImg = gd_get_prev_img(prvFileName[i], prvFilePath[i]);
$newItem = $("#boardAttach li.item.template").clone();
$("#boardAttach li.item.template").before($newItem);
$newItem.removeClass("template");
$prvFileFace = $newItem.find('.file_face');
prewFileFace = $prvFileFace[0];
$prvFileFace.addClass("preview").css({
"background-image": "url('" + prevImg + "')"
});
}
 
$("#boardAttach li.item:not(.template)").each(function (index) {
this.onclick = function () {
var delFilehtml = '';
if (confirm(__('첨부된 파일을 삭제하시겠습니까?'))) {
delFilehtml = '<input type="hidden" name="delFile[' + index + ']" value="y" />';
$('#frmWrite').append(delFilehtml);
this.remove();
}
};
});
}
 
$('#boardAttach li.item.template').off().on("click", 'button.file_face', function () {
var templateContainer = this.parentNode;
 
// templateContainer.remove('input');
var $container = $(templateContainer);
var $fileFace = $container.find("button.file_face"), fileFace = $fileFace[0];
var $fileHidden = $container.find("input.file_hidden"), fileHidden = $fileHidden[0];
var idx = $('input[name="' + fileHidden.name + '"]').index(this);
if ($("#boardAttach li.item:not(.template) input.file_hidden").length >= maxUploadFile) {
alert(__('첨부파일은 최대 %1$s개 까지 업로드 가능합니다.', maxUploadFile.toString()));
return false;
}
else {
fileHidden.onchange = function () {
var index = $("#boardAttach").find('li').index($(this).closest("li"));
//ajax업로드 처리
var uploadImages = [];
gdAjaxUpload.upload(
{
formObj: $("#frmWrite"),
thisObj: $(this),
actionUrl: '../board/board_ps.php',
params: {bdId: $('[name=bdId]').val(), 'mode': 'ajaxUpload'},
onbeforeunload: function () {
if (uploadImages.length == 0) {
return false;
}
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'deleteGarbageImage', bdId: $('[name=bdId]').val(), deleteImage: uploadImages.join('^|^')},
cache: false,
}).success(function (data) {
}).error(function (e) {
});
},
successAfter: function (data) {
uploadImages.push(data.saveFileNm);
},
failAfter : function(data) {
if (data.result == 'fail' && fileHidden.name == 'upfiles[]') {
$('input[name="' + fileHidden.name + '"]').eq(idx).val('');
}
}
}
)
if(gdAjaxUpload.isSuccess == false){
return false;
}
 
var fileReader = new FileReader();
fileName = this.files[0].name;
 
fileReader.readAsDataURL(this.files[0]);
fileReader.onload = function () {
previewUrl = gd_get_prev_img(fileName, this.result);
$(templateContainer).clone(true).appendTo($("#boardAttach"));
$container.removeClass("template");
 
$fileFace.addClass("preview").css({
"background-image": "url('" + previewUrl + "')",
"background-position": "center",
"background-size": "cover",
"background-repeat": "no-repeat",
"-webkit-background-size": "cover",
"-moz-background-size": "cover",
"-o-background-size": "cover"
});
 
fileFace.onclick = function (e) {
if (confirm(__("첨부된 파일을 삭제하시겠습니까?"))) {
$("input[name='uploadFileNm[" + index + "]']").remove();
$("input[name='saveFileNm[" + index + "]']").remove();
$container.remove();
} else {
e.stopPropagation();
}
};
};
 
fileReader.onerror = function () {
alert(__("이미지 로드 중 에러가 발생했습니다."));
};
};
$fileHidden.trigger("click");
}
});
}
 
function gd_get_prev_img(fileName, imgUrl) {
var fileExt = '';
if (fileName.indexOf('.') > 0) {
_fileExt = fileName.substring(fileName.lastIndexOf('.'), fileName.length).toLowerCase();
fileExt = _fileExt.replace('.', '');
}
 
switch (fileExt) {
case 'gif':
case 'jpg':
case 'bmp':
case 'png':
case 'jpeg':
return imgUrl;
break;
case 'doc':
case'docx':
fileName = 'icon_file_doc.png';
break;
case 'ppt':
case'pptx':
fileName = 'icon_file_ppt.png';
break;
case 'pdf':
fileName = 'icon_file_pdf.png';
break;
case 'xls':
case'xlsx':
fileName = 'icon_file_xls.png';
break;
case 'txt':
fileName = 'icon_file_txt.png';
break;
default :
fileName = 'icon_file_etc.png';
}
previewUrl = mobileSkinPath + '/img/new/' + fileName;
 
return previewUrl;
}
 
function gd_set_add_goods(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectGoodsTblTr').html());
var param = {goodsNo: val.goodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, goodsPrice: val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectGoodsBox").empty();
$("#selectGoodsBox").append(selecttblTrHtml);
$('.itemselect_comment').hide();
}
 
function gd_set_add_order(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectOrderTblTr').html());
var param = {orderNo: val.orderNo, orderGoodsNo: val.orderGoodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, optionName:val.optionName,goodsPrice:val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectOrderBox").empty();
$("#selectOrderBox").append(selecttblTrHtml);
$('.itemselect_comment').hide();
}
 
data/skin/mobile/moment/js/gd_common.js+46
변경 전gd_common.js
return formatted;
};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function gd_resize_frame(obj) {
var iframeHeight =
(obj).contentWindow.document.body.clientHeight;
 
변경 후gd_common.js
return formatted;
};
 
/* iframe(mypage 등)으로 board 목록이 실릴 때, onload 1회 측정(resize_frame/gd_resize_frame) 이후에도
댓글/답글 폼 토글, ALTCHA 위젯 지연 렌더, 댓글 등록/삭제 등으로 내용 높이가 바뀌면
부모 iframe 높이를 다시 맞춘다. body 높이가 실제로 변했을 때만 호출해 재측정 루프를 방지. */
(function () {
let parentResize;
try {
if (window.parent === window) {
return; // 최상위 문서 → 대상 아님
}
parentResize = window.parent.gd_resize_frame || window.parent.resize_frame;
} catch (e) {
return; // cross-origin 부모 → 접근 불가, 대상 아님
}
if (typeof parentResize !== 'function' || typeof window.ResizeObserver === 'undefined') {
return;
}
const startObserve = function () {
const frameEl = window.frameElement
|| (window.name ? window.parent.document.getElementsByName(window.name)[0] : null);
if (!frameEl || !document.body) {
return;
}
let timer = null;
let lastHeight = -1;
const observer = new ResizeObserver(function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function () {
const height = document.body.clientHeight;
if (height === lastHeight) {
return; // 실제 콘텐츠 높이 변화 없음 → 재측정 루프 방지
}
lastHeight = height;
parentResize.call(window.parent, frameEl);
}, 100);
});
observer.observe(document.body);
};
if (document.body) {
startObserve();
} else {
document.addEventListener('DOMContentLoaded', startObserve);
}
})();
 
function gd_resize_frame(obj) {
var iframeHeight =
(obj).contentWindow.document.body.clientHeight;
 
data/skin/mobile/moment/js/gd_member2.js+12-18
변경 전gd_member2.js
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore",
focusCleanup: true,
rules: {
memPwRe: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
},
captchaKey: {
required: true
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
},
captchaKey: {
required: function () {
return alert(__('자동등록방지 문자를 입력해주세요.'));
}
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
}
if (validate.form()) {
 
 
 
 
 
$(form).find('select').prop('disabled', false);
$('.join_ok_btn').attr("disabled", true);
 
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore",
focusCleanup: true,
rules: {
memPwRe: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
},
captchaKey: {
required: true
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
},
captchaKey: {
required: function () {
return alert(__('자동등록방지 문자를 입력해주세요.'));
}
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
}
if (validate.form()) {
 
 
 
 
 
$(form).find('select').prop('disabled', false);
$('.join_ok_btn').attr("disabled", true);
 
 
변경 후gd_member2.js
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore, altcha-widget *",
focusCleanup: true,
rules: {
memPwRe: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
 
 
 
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
 
 
 
 
 
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
}
if (validate.form()) {
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return;
}
$(form).find('select').prop('disabled', false);
$('.join_ok_btn').attr("disabled", true);
 
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore, altcha-widget *",
focusCleanup: true,
rules: {
memPwRe: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
 
 
 
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
 
 
 
 
 
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
}
if (validate.form()) {
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return;
}
$(form).find('select').prop('disabled', false);
$('.join_ok_btn').attr("disabled", true);
 
 
data/skin/mobile/moment/member/join.html+4-20
변경 전join.html
</form>
</div>
 
 
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
<!--{? joinField.captcha.use == 'y'}-->
$('#reload_captcha').click(function (e) {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../member/captcha.php?ch=' + someDate);
}, 1);
}).trigger('click');
<!--{/}-->
gd_select_email_domain('email');
</form>
</div>
 
 
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
<!--{? joinField.captcha.use == 'y'}-->
$('#reload_captcha').click(function (e) {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../member/captcha.php?ch=' + someDate);
}, 1);
}).trigger('click');
<!--{/}-->
gd_select_email_domain('email');
 
변경 후join.html
</form>
</div>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
 
 
 
 
 
 
 
 
 
gd_select_email_domain('email');
</form>
</div>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
 
 
 
 
 
 
 
 
 
gd_select_email_domain('email');
 
data/skin/mobile/moment/member/_join_view_captcha.html+2-20
변경 전_join_view_captcha.html
<div class="join_view_other">
<div class="tit">{=__('자동등록방지')}</div>
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="./captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" id="reload_captcha" class="captchareload_btn"><img src="../img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
</div>
<!--{/}-->
<div class="join_view_other">
<div class="tit">{=__('자동등록방지')}</div>
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="./captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" id="reload_captcha" class="captchareload_btn"><img src="../img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
</div>
<!--{/}-->
 
변경 후_join_view_captcha.html
<div class="join_view_other">
<div class="tit">{=__('자동등록방지')}</div>
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
</div>
<!--{/}-->
<div class="join_view_other">
<div class="tit">{=__('자동등록방지')}</div>
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
</div>
<!--{/}-->
 
data/skin/mobile/moment/share/_altcha.html+28
변경 전_altcha.html
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후_altcha.html
{*** [공통 위젯] 자동등록방지 ALTCHA | share/_altcha.html (Widget\Mobile\Share\AltchaWidget) ***}
{*** altchaChallenge : (필수) challenge 발급 스크립트 경로. 폼 위치에 따라 상대/절대 경로가 다르므로 호출부에서 지정 (mode 쿼리스트링은 위젯이 서버 사이드에서 부착) ***}
{*** altchaSrc : (옵션) 'y' 이면 data-altcha-src 부여 → AJAX 인라인 주입 폼에서 altcha.js 동적 로드 ***}
{*** altchaConfig : (옵션) altcha-widget configuration JSON 을 덮어씀. 미지정 시 {"hideLogo":true,"hideFooter":true} ***}
<div class="capcha capcha_altcha"<!--{? altchaSrc == 'y'}--> data-altcha-src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"<!--{/}-->>
<altcha-widget
challenge="{=altchaChallenge}?mode={=altchaMode}"
name="altcha"
auto="off"
language="{=gGlobal.locale}"
configuration='<!--{? altchaConfig}-->{=altchaConfig}<!--{:}-->{"hideLogo":true,"hideFooter":true}<!--{/}-->'
type="native"
></altcha-widget>
</div>
{*** [공통 위젯] 자동등록방지 ALTCHA | share/_altcha.html (Widget\Mobile\Share\AltchaWidget) ***}
{*** altchaChallenge : (필수) challenge 발급 스크립트 경로. 폼 위치에 따라 상대/절대 경로가 다르므로 호출부에서 지정 (mode 쿼리스트링은 위젯이 서버 사이드에서 부착) ***}
{*** altchaSrc : (옵션) 'y' 이면 data-altcha-src 부여 → AJAX 인라인 주입 폼에서 altcha.js 동적 로드 ***}
{*** altchaConfig : (옵션) altcha-widget configuration JSON 을 덮어씀. 미지정 시 {"hideLogo":true,"hideFooter":true} ***}
<div class="capcha capcha_altcha"<!--{? altchaSrc == 'y'}--> data-altcha-src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"<!--{/}-->>
<altcha-widget
challenge="{=altchaChallenge}?mode={=altchaMode}"
name="altcha"
auto="off"
language="{=gGlobal.locale}"
configuration='<!--{? altchaConfig}-->{=altchaConfig}<!--{:}-->{"hideLogo":true,"hideFooter":true}<!--{/}-->'
type="native"
></altcha-widget>
</div>
 
data/skin/mobile/mygreek/board/skin/default/view.html+12-44
변경 전view.html
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_action">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_write">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_action">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_write">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_action">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_write">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_action">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_write">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
 
data/skin/mobile/mygreek/board/skin/default/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/mygreek/board/skin/event/view.html+12-44
변경 전view.html
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_action">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_write">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_action">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_write">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_action">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_write">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_action">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_write">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
 
data/skin/mobile/mygreek/board/skin/event/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/mygreek/board/skin/gallery/view.html+12-44
변경 전view.html
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_action">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_write">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_action">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_write">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_action">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_write">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_action">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
<div class="comment_input"><textarea class="memo" name="memo" placeholder="{=__('댓글을 작성하세요.')}"></textarea></div>
<div class="comment_btn"><button type="button" class="view_comment_btn js_comment_btn_write">{=__('작성 완료')}</button></div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
 
data/skin/mobile/mygreek/board/skin/gallery/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/mygreek/board/skin/qa/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동방지등록 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동방지등록 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/mygreek/board/template/default/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_default">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/mygreek/board/template/event/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_event">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/mygreek/board/template/gallery/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_gallery">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/mygreek/board/template/qa/write.html+26-20
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_captcha_reload()" class="captchareload_btn"><img src="img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="write_qa">
<div class="ly_head">
<h1 class="h_tit">{=__('글쓰기')}</h1>
</dl>
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdPrivateYN == "y" }-->
 
data/skin/mobile/mygreek/goods/goods_board_qa_list.html+4
변경 전goods_board_qa_list.html
</div>
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<script type="text/javascript">
<!--
$(document).ready(function () {
</div>
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<script type="text/javascript">
<!--
$(document).ready(function () {
 
변경 후goods_board_qa_list.html
</div>
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
<!--
$(document).ready(function () {
</div>
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
<!--
$(document).ready(function () {
 
data/skin/mobile/mygreek/goods/goods_board_review_list.html+4
변경 전goods_board_review_list.html
 
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<script type="text/javascript">
<!--
$(document).ready(function () {
 
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
<script type="text/javascript">
<!--
$(document).ready(function () {
 
변경 후goods_board_review_list.html
 
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
<!--
$(document).ready(function () {
 
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
<!--
$(document).ready(function () {
 
data/skin/mobile/mygreek/goods/goods_board_view.html+8-44
변경 전goods_board_view.html
</div>
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="../img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="../img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="../img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
</div>
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl&2 }-->
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="../board/captcha.php" class="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" onclick="gd_reload_reply_captcha()" class="captchareload_btn"><img src="../img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
<!--{ / }-->
</div>
 
변경 후goods_board_view.html
</div>
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
</div>
</div>
</div>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
 
data/skin/mobile/mygreek/goods/goods_view.html+4
변경 전goods_view.html
<!--{ / }-->
<div id="layerDim" class="dn zidx310">&nbsp;</div>
<script type="text/javascript" src="../js/gd_board_goods.js" charset="utf-8"></script>
 
 
{=fbGoodsViewScript}
{#footer}
<!--{ / }-->
<div id="layerDim" class="dn zidx310">&nbsp;</div>
<script type="text/javascript" src="../js/gd_board_goods.js" charset="utf-8"></script>
 
 
{=fbGoodsViewScript}
{#footer}
 
변경 후goods_view.html
<!--{ / }-->
<div id="layerDim" class="dn zidx310">&nbsp;</div>
<script type="text/javascript" src="../js/gd_board_goods.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
{=fbGoodsViewScript}
{#footer}
<!--{ / }-->
<div id="layerDim" class="dn zidx310">&nbsp;</div>
<script type="text/javascript" src="../js/gd_board_goods.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
{=fbGoodsViewScript}
{#footer}
 
data/skin/mobile/mygreek/js/altcha/altcha.js+3780
변경 전altcha.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후altcha.js
const DEV = false;
var is_array = Array.isArray;
var index_of = Array.prototype.indexOf;
var includes = Array.prototype.includes;
var array_from = Array.from;
var object_keys = Object.keys;
var define_property = Object.defineProperty;
var get_descriptor = Object.getOwnPropertyDescriptor;
var get_descriptors = Object.getOwnPropertyDescriptors;
var object_prototype = Object.prototype;
var array_prototype = Array.prototype;
var get_prototype_of = Object.getPrototypeOf;
var is_extensible = Object.isExtensible;
const noop = () => {
};
function run_all(arr) {
for (var i = 0; i < arr.length; i++) {
arr[i]();
}
}
function deferred() {
var resolve;
var reject;
var promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
return { promise, resolve, reject };
}
const DERIVED = 1 << 1;
const EFFECT = 1 << 2;
const RENDER_EFFECT = 1 << 3;
const MANAGED_EFFECT = 1 << 24;
const BLOCK_EFFECT = 1 << 4;
const BRANCH_EFFECT = 1 << 5;
const ROOT_EFFECT = 1 << 6;
const BOUNDARY_EFFECT = 1 << 7;
const CONNECTED = 1 << 9;
const CLEAN = 1 << 10;
const DIRTY = 1 << 11;
const MAYBE_DIRTY = 1 << 12;
const INERT = 1 << 13;
const DESTROYED = 1 << 14;
const REACTION_RAN = 1 << 15;
const DESTROYING = 1 << 25;
const EFFECT_TRANSPARENT = 1 << 16;
const EAGER_EFFECT = 1 << 17;
const HEAD_EFFECT = 1 << 18;
const EFFECT_PRESERVED = 1 << 19;
const USER_EFFECT = 1 << 20;
const WAS_MARKED = 1 << 16;
const REACTION_IS_UPDATING = 1 << 21;
const ASYNC = 1 << 22;
const ERROR_VALUE = 1 << 23;
const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state");
const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props");
const LOADING_ATTR_SYMBOL = /* @__PURE__ */ Symbol("");
const ATTRIBUTES_CACHE = /* @__PURE__ */ Symbol("attributes");
const CLASS_CACHE = /* @__PURE__ */ Symbol("class");
const STYLE_CACHE = /* @__PURE__ */ Symbol("style");
const TEXT_CACHE = /* @__PURE__ */ Symbol("text");
const FORM_RESET_HANDLER = /* @__PURE__ */ Symbol("form reset");
const STALE_REACTION = new class StaleReactionError extends Error {
name = "StaleReactionError";
message = "The reaction that called `getAbortSignal()` was re-run or destroyed";
}();
const IS_XHTML = (
// We gotta write it like this because after downleveling the pure comment may end up in the wrong location
!!globalThis.document?.contentType && /* @__PURE__ */ globalThis.document.contentType.includes("xml")
);
const TEXT_NODE = 3;
const COMMENT_NODE = 8;
function equals(value) {
return value === this.v;
}
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function safe_equals(value) {
return !safe_not_equal(value, this.v);
}
function lifecycle_outside_component(name) {
{
throw new Error(`https://svelte.dev/e/lifecycle_outside_component`);
}
}
function async_derived_orphan() {
{
throw new Error(`https://svelte.dev/e/async_derived_orphan`);
}
}
function effect_in_teardown(rune) {
{
throw new Error(`https://svelte.dev/e/effect_in_teardown`);
}
}
function effect_in_unowned_derived() {
{
throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`);
}
}
function effect_orphan(rune) {
{
throw new Error(`https://svelte.dev/e/effect_orphan`);
}
}
function effect_update_depth_exceeded() {
{
throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);
}
}
function hydration_failed() {
{
throw new Error(`https://svelte.dev/e/hydration_failed`);
}
}
function state_descriptors_fixed() {
{
throw new Error(`https://svelte.dev/e/state_descriptors_fixed`);
}
}
function state_prototype_fixed() {
{
throw new Error(`https://svelte.dev/e/state_prototype_fixed`);
}
}
function state_unsafe_mutation() {
{
throw new Error(`https://svelte.dev/e/state_unsafe_mutation`);
}
}
function svelte_boundary_reset_onerror() {
{
throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);
}
}
let tracing_mode_flag = false;
const TEMPLATE_FRAGMENT = 1;
const TEMPLATE_USE_IMPORT_NODE = 1 << 1;
const HYDRATION_START = "[";
const HYDRATION_START_ELSE = "[!";
const HYDRATION_START_FAILED = "[?";
const HYDRATION_END = "]";
const HYDRATION_ERROR = {};
const UNINITIALIZED = /* @__PURE__ */ Symbol("uninitialized");
const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml";
const NAMESPACE_SVG = "http://www.w3.org/2000/svg";
const NAMESPACE_MATHML = "http://www.w3.org/1998/Math/MathML";
const ATTACHMENT_KEY = "@attach";
let component_context = null;
function set_component_context(context) {
component_context = context;
}
function push(props, runes = false, fn) {
component_context = {
p: component_context,
i: false,
c: null,
e: null,
s: props,
x: null,
r: (
/** @type {Effect} */
active_effect
),
l: null
};
}
function pop(component2) {
var context = (
/** @type {ComponentContext} */
component_context
);
var effects = context.e;
if (effects !== null) {
context.e = null;
for (var fn of effects) {
create_user_effect(fn);
}
}
if (component2 !== void 0) {
context.x = component2;
}
context.i = true;
component_context = context.p;
return component2 ?? /** @type {T} */
{};
}
function is_runes() {
return true;
}
let micro_tasks = [];
function run_micro_tasks() {
var tasks = micro_tasks;
micro_tasks = [];
run_all(tasks);
}
function queue_micro_task(fn) {
if (micro_tasks.length === 0 && !is_flushing_sync) {
var tasks = micro_tasks;
queueMicrotask(() => {
if (tasks === micro_tasks) run_micro_tasks();
});
}
micro_tasks.push(fn);
}
function flush_tasks() {
while (micro_tasks.length > 0) {
run_micro_tasks();
}
}
function derived_inert() {
{
console.warn(`https://svelte.dev/e/derived_inert`);
}
}
function hydration_mismatch(location2) {
{
console.warn(`https://svelte.dev/e/hydration_mismatch`);
}
}
function select_multiple_invalid_value() {
{
console.warn(`https://svelte.dev/e/select_multiple_invalid_value`);
}
}
function svelte_boundary_reset_noop() {
{
console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);
}
}
let hydrating = false;
function set_hydrating(value) {
hydrating = value;
}
let hydrate_node;
function set_hydrate_node(node) {
if (node === null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return hydrate_node = node;
}
function hydrate_next() {
return set_hydrate_node(/* @__PURE__ */ get_next_sibling(hydrate_node));
}
function reset(node) {
if (!hydrating) return;
if (/* @__PURE__ */ get_next_sibling(hydrate_node) !== null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
hydrate_node = node;
}
function next(count = 1) {
if (hydrating) {
var i = count;
var node = hydrate_node;
while (i--) {
node = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(node);
}
hydrate_node = node;
}
}
function skip_nodes(remove = true) {
var depth = 0;
var node = hydrate_node;
while (true) {
if (node.nodeType === COMMENT_NODE) {
var data = (
/** @type {Comment} */
node.data
);
if (data === HYDRATION_END) {
if (depth === 0) return node;
depth -= 1;
} else if (data === HYDRATION_START || data === HYDRATION_START_ELSE || // "[1", "[2", etc. for if blocks
data[0] === "[" && !isNaN(Number(data.slice(1)))) {
depth += 1;
}
}
var next2 = (
/** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(node)
);
if (remove) node.remove();
node = next2;
}
}
function read_hydration_instruction(node) {
if (!node || node.nodeType !== COMMENT_NODE) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return (
/** @type {Comment} */
node.data
);
}
function proxy(value) {
if (typeof value !== "object" || value === null || STATE_SYMBOL in value) {
return value;
}
const prototype = get_prototype_of(value);
if (prototype !== object_prototype && prototype !== array_prototype) {
return value;
}
var sources = /* @__PURE__ */ new Map();
var is_proxied_array = is_array(value);
var version = /* @__PURE__ */ state(0);
var parent_version = update_version;
var with_parent = (fn) => {
if (update_version === parent_version) {
return fn();
}
var reaction = active_reaction;
var version2 = update_version;
set_active_reaction(null);
set_update_version(parent_version);
var result = fn();
set_active_reaction(reaction);
set_update_version(version2);
return result;
};
if (is_proxied_array) {
sources.set("length", /* @__PURE__ */ state(
/** @type {any[]} */
value.length
));
}
return new Proxy(
/** @type {any} */
value,
{
defineProperty(_, prop2, descriptor) {
if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) {
state_descriptors_fixed();
}
var s = sources.get(prop2);
if (s === void 0) {
with_parent(() => {
var s2 = /* @__PURE__ */ state(descriptor.value);
sources.set(prop2, s2);
return s2;
});
} else {
set(s, descriptor.value, true);
}
return true;
},
deleteProperty(target, prop2) {
var s = sources.get(prop2);
if (s === void 0) {
if (prop2 in target) {
const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
sources.set(prop2, s2);
increment(version);
}
} else {
set(s, UNINITIALIZED);
increment(version);
}
return true;
},
get(target, prop2, receiver) {
if (prop2 === STATE_SYMBOL) {
return value;
}
var s = sources.get(prop2);
var exists = prop2 in target;
if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) {
s = with_parent(() => {
var p = proxy(exists ? target[prop2] : UNINITIALIZED);
var s2 = /* @__PURE__ */ state(p);
return s2;
});
sources.set(prop2, s);
}
if (s !== void 0) {
var v = get(s);
return v === UNINITIALIZED ? void 0 : v;
}
return Reflect.get(target, prop2, receiver);
},
getOwnPropertyDescriptor(target, prop2) {
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor && "value" in descriptor) {
var s = sources.get(prop2);
if (s) descriptor.value = get(s);
} else if (descriptor === void 0) {
var source2 = sources.get(prop2);
var value2 = source2?.v;
if (source2 !== void 0 && value2 !== UNINITIALIZED) {
return {
enumerable: true,
configurable: true,
value: value2,
writable: true
};
}
}
return descriptor;
},
has(target, prop2) {
if (prop2 === STATE_SYMBOL) {
return true;
}
var s = sources.get(prop2);
var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2);
if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) {
if (s === void 0) {
s = with_parent(() => {
var p = has ? proxy(target[prop2]) : UNINITIALIZED;
var s2 = /* @__PURE__ */ state(p);
return s2;
});
sources.set(prop2, s);
}
var value2 = get(s);
if (value2 === UNINITIALIZED) {
return false;
}
}
return has;
},
set(target, prop2, value2, receiver) {
var s = sources.get(prop2);
var has = prop2 in target;
if (is_proxied_array && prop2 === "length") {
for (var i = value2; i < /** @type {Source<number>} */
s.v; i += 1) {
var other_s = sources.get(i + "");
if (other_s !== void 0) {
set(other_s, UNINITIALIZED);
} else if (i in target) {
other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
sources.set(i + "", other_s);
}
}
}
if (s === void 0) {
if (!has || get_descriptor(target, prop2)?.writable) {
s = with_parent(() => /* @__PURE__ */ state(void 0));
set(s, proxy(value2));
sources.set(prop2, s);
}
} else {
has = s.v !== UNINITIALIZED;
var p = with_parent(() => proxy(value2));
set(s, p);
}
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor?.set) {
descriptor.set.call(receiver, value2);
}
if (!has) {
if (is_proxied_array && typeof prop2 === "string") {
var ls = (
/** @type {Source<number>} */
sources.get("length")
);
var n = Number(prop2);
if (Number.isInteger(n) && n >= ls.v) {
set(ls, n + 1);
}
}
increment(version);
}
return true;
},
ownKeys(target) {
get(version);
var own_keys = Reflect.ownKeys(target).filter((key3) => {
var source3 = sources.get(key3);
return source3 === void 0 || source3.v !== UNINITIALIZED;
});
for (var [key2, source2] of sources) {
if (source2.v !== UNINITIALIZED && !(key2 in target)) {
own_keys.push(key2);
}
}
return own_keys;
},
setPrototypeOf() {
state_prototype_fixed();
}
}
);
}
function get_proxied_value(value) {
try {
if (value !== null && typeof value === "object" && STATE_SYMBOL in value) {
return value[STATE_SYMBOL];
}
} catch {
}
return value;
}
function is(a, b) {
return Object.is(get_proxied_value(a), get_proxied_value(b));
}
var $window;
var $document;
var is_firefox;
var first_child_getter;
var next_sibling_getter;
function init_operations() {
if ($window !== void 0) {
return;
}
$window = window;
$document = document;
is_firefox = /Firefox/.test(navigator.userAgent);
var element_prototype = Element.prototype;
var node_prototype = Node.prototype;
var text_prototype = Text.prototype;
first_child_getter = get_descriptor(node_prototype, "firstChild").get;
next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get;
if (is_extensible(element_prototype)) {
element_prototype[CLASS_CACHE] = void 0;
element_prototype[ATTRIBUTES_CACHE] = null;
element_prototype[STYLE_CACHE] = void 0;
element_prototype.__e = void 0;
}
if (is_extensible(text_prototype)) {
text_prototype[TEXT_CACHE] = void 0;
}
}
function create_text(value = "") {
return document.createTextNode(value);
}
// @__NO_SIDE_EFFECTS__
function get_first_child(node) {
return (
/** @type {TemplateNode | null} */
first_child_getter.call(node)
);
}
// @__NO_SIDE_EFFECTS__
function get_next_sibling(node) {
return (
/** @type {TemplateNode | null} */
next_sibling_getter.call(node)
);
}
function child(node, is_text) {
if (!hydrating) {
return /* @__PURE__ */ get_first_child(node);
}
var child2 = /* @__PURE__ */ get_first_child(hydrate_node);
if (child2 === null) {
child2 = hydrate_node.appendChild(create_text());
} else if (is_text && child2.nodeType !== TEXT_NODE) {
var text2 = create_text();
child2?.before(text2);
set_hydrate_node(text2);
return text2;
}
if (is_text) {
merge_text_nodes(
/** @type {Text} */
child2
);
}
set_hydrate_node(child2);
return child2;
}
function first_child(node, is_text = false) {
if (!hydrating) {
var first = /* @__PURE__ */ get_first_child(node);
if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first);
return first;
}
if (is_text) {
if (hydrate_node?.nodeType !== TEXT_NODE) {
var text2 = create_text();
hydrate_node?.before(text2);
set_hydrate_node(text2);
return text2;
}
merge_text_nodes(
/** @type {Text} */
hydrate_node
);
}
return hydrate_node;
}
function sibling(node, count = 1, is_text = false) {
let next_sibling = hydrating ? hydrate_node : node;
var last_sibling;
while (count--) {
last_sibling = next_sibling;
next_sibling = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(next_sibling);
}
if (!hydrating) {
return next_sibling;
}
if (is_text) {
if (next_sibling?.nodeType !== TEXT_NODE) {
var text2 = create_text();
if (next_sibling === null) {
last_sibling?.after(text2);
} else {
next_sibling.before(text2);
}
set_hydrate_node(text2);
return text2;
}
merge_text_nodes(
/** @type {Text} */
next_sibling
);
}
set_hydrate_node(next_sibling);
return next_sibling;
}
function clear_text_content(node) {
node.textContent = "";
}
function should_defer_append() {
return false;
}
function create_element(tag, namespace, is2) {
let options = void 0;
return (
/** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */
document.createElementNS(namespace ?? NAMESPACE_HTML, tag, options)
);
}
function merge_text_nodes(text2) {
if (
/** @type {string} */
text2.nodeValue.length < 65536
) {
return;
}
let next2 = text2.nextSibling;
while (next2 !== null && next2.nodeType === TEXT_NODE) {
next2.remove();
text2.nodeValue += /** @type {string} */
next2.nodeValue;
next2 = text2.nextSibling;
}
}
function handle_error(error) {
var effect2 = active_effect;
if (effect2 === null) {
active_reaction.f |= ERROR_VALUE;
return error;
}
if ((effect2.f & REACTION_RAN) === 0 && (effect2.f & EFFECT) === 0) {
throw error;
}
invoke_error_boundary(error, effect2);
}
function invoke_error_boundary(error, effect2) {
while (effect2 !== null) {
if ((effect2.f & BOUNDARY_EFFECT) !== 0) {
if ((effect2.f & REACTION_RAN) === 0) {
throw error;
}
try {
effect2.b.error(error);
return;
} catch (e) {
error = e;
}
}
effect2 = effect2.parent;
}
throw error;
}
const STATUS_MASK = -7169;
function set_signal_status(signal, status) {
signal.f = signal.f & STATUS_MASK | status;
}
function update_derived_status(derived2) {
if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) {
set_signal_status(derived2, CLEAN);
} else {
set_signal_status(derived2, MAYBE_DIRTY);
}
}
function clear_marked(deps) {
if (deps === null) return;
for (const dep of deps) {
if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {
continue;
}
dep.f ^= WAS_MARKED;
clear_marked(
/** @type {Derived} */
dep.deps
);
}
}
function defer_effect(effect2, dirty_effects, maybe_dirty_effects) {
if ((effect2.f & DIRTY) !== 0) {
dirty_effects.add(effect2);
} else if ((effect2.f & MAYBE_DIRTY) !== 0) {
maybe_dirty_effects.add(effect2);
}
clear_marked(effect2.deps);
set_signal_status(effect2, CLEAN);
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set2(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set2(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set2, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set: set2, update, subscribe };
}
function get$1(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let IS_UNMOUNTED = /* @__PURE__ */ Symbol("unmounted");
function store_get(store2, store_name, stores) {
const entry = stores[store_name] ??= {
store: null,
source: /* @__PURE__ */ mutable_source(void 0),
unsubscribe: noop
};
if (entry.store !== store2 && !(IS_UNMOUNTED in stores)) {
entry.unsubscribe();
entry.store = store2 ?? null;
if (store2 == null) {
entry.source.v = void 0;
entry.unsubscribe = noop;
} else {
var is_synchronous_callback = true;
entry.unsubscribe = subscribe_to_store(store2, (v) => {
if (is_synchronous_callback) {
entry.source.v = v;
} else {
set(entry.source, v);
}
});
is_synchronous_callback = false;
}
}
if (store2 && IS_UNMOUNTED in stores) {
return get$1(store2);
}
return get(entry.source);
}
function setup_stores() {
const stores = {};
function cleanup() {
teardown(() => {
for (var store_name in stores) {
const ref = stores[store_name];
ref.unsubscribe();
}
define_property(stores, IS_UNMOUNTED, {
enumerable: false,
value: true
});
});
}
return [stores, cleanup];
}
let first_batch = null;
let last_batch = null;
let current_batch = null;
let previous_batch = null;
let batch_values = null;
let last_scheduled_effect = null;
let is_flushing_sync = false;
let is_processing = false;
let collected_effects = null;
let legacy_updates = null;
var flush_count = 0;
var source_stacks = /* @__PURE__ */ new Set();
let uid = 1;
class Batch {
id = uid++;
/** True as soon as `#process` was called */
#started = false;
linked = true;
/** @type {Batch | null} */
#prev = null;
/** @type {Batch | null} */
#next = null;
/** @type {Map<Effect, ReturnType<typeof deferred<any>>>} */
async_deriveds = /* @__PURE__ */ new Map();
/**
* The current values of any signals that are updated in this batch.
* Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)
* They keys of this map are identical to `this.#previous`
* @type {Map<Value, [any, boolean]>}
*/
current = /* @__PURE__ */ new Map();
/**
* The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place.
* They keys of this map are identical to `this.#current`
* @type {Map<Value, any>}
*/
previous = /* @__PURE__ */ new Map();
/**
* Async effects which this batch doesn't take into account anymore when calculating blockers,
* as it has a value for it already.
* @type {Set<Effect>}
*/
unblocked = /* @__PURE__ */ new Set();
/**
* When the batch is committed (and the DOM is updated), we need to remove old branches
* and append new ones by calling the functions added inside (if/each/key/etc) blocks
* @type {Set<(batch: Batch) => void>}
*/
#commit_callbacks = /* @__PURE__ */ new Set();
/**
* If a fork is discarded, we need to destroy any effects that are no longer needed
* @type {Set<(batch: Batch) => void>}
*/
#discard_callbacks = /* @__PURE__ */ new Set();
/**
* Callbacks that should run only when a fork is committed.
* @type {Set<(batch: Batch) => void>}
*/
#fork_commit_callbacks = /* @__PURE__ */ new Set();
/**
* The number of async effects that are currently in flight
*/
#pending = 0;
/**
* Async effects that are currently in flight, _not_ inside a pending boundary
* @type {Map<Effect, number>}
*/
#blocking_pending = /* @__PURE__ */ new Map();
/**
* A deferred that resolves when the batch is committed, used with `settled()`
* TODO replace with Promise.withResolvers once supported widely enough
* @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}
*/
#deferred = null;
/**
* The root effects that need to be flushed
* @type {Effect[]}
*/
#roots = [];
/**
* Effects created while this batch was active.
* @type {Effect[]}
*/
#new_effects = [];
/**
* Deferred effects (which run after async work has completed) that are DIRTY
* @type {Set<Effect>}
*/
#dirty_effects = /* @__PURE__ */ new Set();
/**
* Deferred effects that are MAYBE_DIRTY
* @type {Set<Effect>}
*/
#maybe_dirty_effects = /* @__PURE__ */ new Set();
/**
* A map of branches that still exist, but will be destroyed when this batch
* is committed — we skip over these during `process`.
* The value contains child effects that were dirty/maybe_dirty before being reset,
* so they can be rescheduled if the branch survives.
* @type {Map<Effect, { d: Effect[], m: Effect[] }>}
*/
#skipped_branches = /* @__PURE__ */ new Map();
/**
* Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing
* @type {Set<Effect>}
*/
#unskipped_branches = /* @__PURE__ */ new Set();
is_fork = false;
#decrement_queued = false;
#is_deferred() {
if (this.is_fork) return true;
for (const effect2 of this.#blocking_pending.keys()) {
var e = effect2;
var skipped = false;
while (e.parent !== null) {
if (this.#skipped_branches.has(e)) {
skipped = true;
break;
}
e = e.parent;
}
if (!skipped) {
return true;
}
}
return false;
}
/**
* Add an effect to the #skipped_branches map and reset its children
* @param {Effect} effect
*/
skip_effect(effect2) {
if (!this.#skipped_branches.has(effect2)) {
this.#skipped_branches.set(effect2, { d: [], m: [] });
}
this.#unskipped_branches.delete(effect2);
}
/**
* Remove an effect from the #skipped_branches map and reschedule
* any tracked dirty/maybe_dirty child effects
* @param {Effect} effect
* @param {(e: Effect) => void} callback
*/
unskip_effect(effect2, callback = (e) => this.schedule(e)) {
var tracked = this.#skipped_branches.get(effect2);
if (tracked) {
this.#skipped_branches.delete(effect2);
for (var e of tracked.d) {
set_signal_status(e, DIRTY);
callback(e);
}
for (e of tracked.m) {
set_signal_status(e, MAYBE_DIRTY);
callback(e);
}
}
this.#unskipped_branches.add(effect2);
}
#process() {
this.#started = true;
if (flush_count++ > 1e3) {
this.#unlink();
infinite_loop_guard();
}
if (!this.#is_deferred()) {
for (const e of this.#dirty_effects) {
this.#maybe_dirty_effects.delete(e);
set_signal_status(e, DIRTY);
this.schedule(e);
}
for (const e of this.#maybe_dirty_effects) {
set_signal_status(e, MAYBE_DIRTY);
this.schedule(e);
}
}
const roots = this.#roots;
this.#roots = [];
this.apply();
var effects = collected_effects = [];
var render_effects = [];
var updates = legacy_updates = [];
for (const root2 of roots) {
try {
this.#traverse(root2, effects, render_effects);
} catch (e) {
reset_all(root2);
throw e;
}
}
current_batch = null;
if (updates.length > 0) {
var batch = Batch.ensure();
for (const e of updates) {
batch.schedule(e);
}
}
collected_effects = null;
legacy_updates = null;
if (this.#is_deferred()) {
this.#defer_effects(render_effects);
this.#defer_effects(effects);
for (const [e, t] of this.#skipped_branches) {
reset_branch(e, t);
}
if (updates.length > 0) {
/** @type {unknown} */
current_batch.#process();
}
return;
}
const earlier_batch = this.#find_earlier_batch();
if (earlier_batch) {
earlier_batch.#merge(this);
return;
}
this.#dirty_effects.clear();
this.#maybe_dirty_effects.clear();
for (const fn of this.#commit_callbacks) fn(this);
this.#commit_callbacks.clear();
previous_batch = this;
flush_queued_effects(render_effects);
flush_queued_effects(effects);
previous_batch = null;
this.#deferred?.resolve();
var next_batch = (
/** @type {Batch | null} */
/** @type {unknown} */
current_batch
);
if (this.linked && this.#pending === 0) {
this.#unlink();
}
if (this.#roots.length > 0) {
if (next_batch === null) {
next_batch = this;
this.#link();
}
const batch2 = next_batch;
batch2.#roots.push(...this.#roots.filter((r2) => !batch2.#roots.includes(r2)));
}
if (next_batch !== null) {
next_batch.#process();
}
}
/**
* Traverse the effect tree, executing effects or stashing
* them for later execution as appropriate
* @param {Effect} root
* @param {Effect[]} effects
* @param {Effect[]} render_effects
*/
#traverse(root2, effects, render_effects) {
root2.f ^= CLEAN;
var effect2 = root2.first;
while (effect2 !== null) {
var flags2 = effect2.f;
var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;
var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0;
var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.#skipped_branches.has(effect2);
if (!skip && effect2.fn !== null) {
if (is_branch) {
effect2.f ^= CLEAN;
} else if ((flags2 & EFFECT) !== 0) {
effects.push(effect2);
} else if (is_dirty(effect2)) {
if ((flags2 & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect2);
update_effect(effect2);
}
var child2 = effect2.first;
if (child2 !== null) {
effect2 = child2;
continue;
}
}
while (effect2 !== null) {
var next2 = effect2.next;
if (next2 !== null) {
effect2 = next2;
break;
}
effect2 = effect2.parent;
}
}
}
#find_earlier_batch() {
var batch = this.#prev;
while (batch !== null) {
if (!batch.is_fork) {
for (const [value, [, is_derived]] of this.current) {
if (batch.current.has(value) && !is_derived) {
return batch;
}
}
}
batch = batch.#prev;
}
return null;
}
/**
* @param {Batch} batch
*/
#merge(batch) {
for (const [source2, value] of batch.current) {
if (!this.previous.has(source2) && batch.previous.has(source2)) {
this.previous.set(source2, batch.previous.get(source2));
}
this.current.set(source2, value);
}
for (const [effect2, deferred2] of batch.async_deriveds) {
const d = this.async_deriveds.get(effect2);
if (d) deferred2.promise.then(d.resolve);
}
const mark = (value) => {
var reactions = value.reactions;
if (reactions === null) return;
for (const reaction of reactions) {
var flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark(
/** @type {Derived} */
reaction
);
} else {
var effect2 = (
/** @type {Effect} */
reaction
);
if (flags2 & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect2)) {
this.#maybe_dirty_effects.delete(effect2);
set_signal_status(effect2, DIRTY);
this.schedule(effect2);
}
}
}
};
for (const source2 of this.current.keys()) {
mark(source2);
}
this.oncommit(() => batch.discard());
batch.#unlink();
current_batch = this;
this.#process();
}
/**
* @param {Effect[]} effects
*/
#defer_effects(effects) {
for (var i = 0; i < effects.length; i += 1) {
defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);
}
}
/**
* Associate a change to a given source with the current
* batch, noting its previous and current values
* @param {Value} source
* @param {any} value
* @param {boolean} [is_derived]
*/
capture(source2, value, is_derived = false) {
if (source2.v !== UNINITIALIZED && !this.previous.has(source2)) {
this.previous.set(source2, source2.v);
}
if ((source2.f & ERROR_VALUE) === 0) {
this.current.set(source2, [value, is_derived]);
batch_values?.set(source2, value);
}
if (!this.is_fork) {
source2.v = value;
}
}
activate() {
current_batch = this;
}
deactivate() {
current_batch = null;
batch_values = null;
}
flush() {
try {
if (DEV) ;
is_processing = true;
current_batch = this;
this.#process();
} finally {
flush_count = 0;
last_scheduled_effect = null;
collected_effects = null;
legacy_updates = null;
is_processing = false;
current_batch = null;
batch_values = null;
old_values.clear();
}
}
discard() {
for (const fn of this.#discard_callbacks) fn(this);
this.#discard_callbacks.clear();
this.#fork_commit_callbacks.clear();
this.#unlink();
}
/**
* @param {Effect} effect
*/
register_created_effect(effect2) {
this.#new_effects.push(effect2);
}
#commit() {
this.#unlink();
for (let batch = first_batch; batch !== null; batch = batch.#next) {
var is_earlier = batch.id < this.id;
var sources = [];
for (const [source3, [value, is_derived]] of this.current) {
if (batch.current.has(source3)) {
var batch_value = (
/** @type {[any, boolean]} */
batch.current.get(source3)[0]
);
if (is_earlier && value !== batch_value) {
batch.current.set(source3, [value, is_derived]);
} else {
continue;
}
}
sources.push(source3);
}
if (is_earlier) {
for (const [effect2, deferred2] of this.async_deriveds) {
const d = batch.async_deriveds.get(effect2);
if (d) deferred2.promise.then(d.resolve);
}
}
if (!batch.#started) continue;
var others = [...batch.current.keys()].filter((s) => !this.current.has(s));
if (others.length === 0) {
if (is_earlier) {
batch.discard();
}
} else if (sources.length > 0) {
if (is_earlier) {
for (const unskipped of this.#unskipped_branches) {
batch.unskip_effect(unskipped, (e) => {
if ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) {
batch.schedule(e);
} else {
batch.#defer_effects([e]);
}
});
}
}
batch.activate();
var marked = /* @__PURE__ */ new Set();
var checked = /* @__PURE__ */ new Map();
for (var source2 of sources) {
mark_effects(source2, others, marked, checked);
}
checked = /* @__PURE__ */ new Map();
var current_unequal = [...batch.current.keys()].filter(
(c) => this.current.has(c) ? (
/** @type {[any, boolean]} */
this.current.get(c)[0] !== c.v
) : true
);
if (current_unequal.length > 0) {
for (const effect2 of this.#new_effects) {
if ((effect2.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 && depends_on(effect2, current_unequal, checked)) {
if ((effect2.f & (ASYNC | BLOCK_EFFECT)) !== 0) {
set_signal_status(effect2, DIRTY);
batch.schedule(effect2);
} else {
batch.#dirty_effects.add(effect2);
}
}
}
}
if (batch.#roots.length > 0) {
batch.apply();
for (var root2 of batch.#roots) {
batch.#traverse(root2, [], []);
}
batch.#roots = [];
}
batch.deactivate();
}
}
}
/**
* @param {boolean} blocking
* @param {Effect} effect
*/
increment(blocking, effect2) {
this.#pending += 1;
if (blocking) {
let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0;
this.#blocking_pending.set(effect2, blocking_pending_count + 1);
}
}
/**
* @param {boolean} blocking
* @param {Effect} effect
*/
decrement(blocking, effect2) {
this.#pending -= 1;
if (blocking) {
let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0;
if (blocking_pending_count === 1) {
this.#blocking_pending.delete(effect2);
} else {
this.#blocking_pending.set(effect2, blocking_pending_count - 1);
}
}
if (this.#decrement_queued) return;
this.#decrement_queued = true;
queue_micro_task(() => {
this.#decrement_queued = false;
if (this.linked) {
this.flush();
}
});
}
/**
* @param {Set<Effect>} dirty_effects
* @param {Set<Effect>} maybe_dirty_effects
*/
transfer_effects(dirty_effects, maybe_dirty_effects) {
for (const e of dirty_effects) {
this.#dirty_effects.add(e);
}
for (const e of maybe_dirty_effects) {
this.#maybe_dirty_effects.add(e);
}
dirty_effects.clear();
maybe_dirty_effects.clear();
}
/** @param {(batch: Batch) => void} fn */
oncommit(fn) {
this.#commit_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
ondiscard(fn) {
this.#discard_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
on_fork_commit(fn) {
this.#fork_commit_callbacks.add(fn);
}
run_fork_commit_callbacks() {
for (const fn of this.#fork_commit_callbacks) fn(this);
this.#fork_commit_callbacks.clear();
}
settled() {
return (this.#deferred ??= deferred()).promise;
}
static ensure() {
if (current_batch === null) {
const batch = current_batch = new Batch();
batch.#link();
if (!is_processing && !is_flushing_sync) {
queue_micro_task(() => {
if (!batch.#started) {
batch.flush();
}
});
}
}
return current_batch;
}
apply() {
{
batch_values = null;
return;
}
}
/**
*
* @param {Effect} effect
*/
schedule(effect2) {
last_scheduled_effect = effect2;
if (effect2.b?.is_pending && (effect2.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect2.f & REACTION_RAN) === 0) {
effect2.b.defer_effect(effect2);
return;
}
var e = effect2;
while (e.parent !== null) {
e = e.parent;
var flags2 = e.f;
if (collected_effects !== null && e === active_effect) {
if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) {
return;
}
}
if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {
if ((flags2 & CLEAN) === 0) {
return;
}
e.f ^= CLEAN;
}
}
this.#roots.push(e);
}
#link() {
if (last_batch === null) {
first_batch = last_batch = this;
} else {
last_batch.#next = this;
this.#prev = last_batch;
}
last_batch = this;
}
#unlink() {
var prev = this.#prev;
var next2 = this.#next;
if (prev === null) {
first_batch = next2;
} else {
prev.#next = next2;
}
if (next2 === null) {
last_batch = prev;
} else {
next2.#prev = prev;
}
this.linked = false;
}
}
function flushSync(fn) {
var was_flushing_sync = is_flushing_sync;
is_flushing_sync = true;
try {
var result;
if (fn) ;
while (true) {
flush_tasks();
if (current_batch === null) {
return (
/** @type {T} */
result
);
}
current_batch.flush();
}
} finally {
is_flushing_sync = was_flushing_sync;
}
}
function infinite_loop_guard() {
try {
effect_update_depth_exceeded();
} catch (error) {
invoke_error_boundary(error, last_scheduled_effect);
}
}
let eager_block_effects = null;
function flush_queued_effects(effects) {
var length = effects.length;
if (length === 0) return;
var i = 0;
while (i < length) {
var effect2 = effects[i++];
if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) {
eager_block_effects = /* @__PURE__ */ new Set();
update_effect(effect2);
if (effect2.deps === null && effect2.first === null && effect2.nodes === null && effect2.teardown === null && effect2.ac === null) {
unlink_effect(effect2);
}
if (eager_block_effects?.size > 0) {
old_values.clear();
for (const e of eager_block_effects) {
if ((e.f & (DESTROYED | INERT)) !== 0) continue;
const ordered_effects = [e];
let ancestor = e.parent;
while (ancestor !== null) {
if (eager_block_effects.has(ancestor)) {
eager_block_effects.delete(ancestor);
ordered_effects.push(ancestor);
}
ancestor = ancestor.parent;
}
for (let j = ordered_effects.length - 1; j >= 0; j--) {
const e2 = ordered_effects[j];
if ((e2.f & (DESTROYED | INERT)) !== 0) continue;
update_effect(e2);
}
}
eager_block_effects.clear();
}
}
}
eager_block_effects = null;
}
function mark_effects(value, sources, marked, checked) {
if (marked.has(value)) return;
marked.add(value);
if (value.reactions !== null) {
for (const reaction of value.reactions) {
const flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark_effects(
/** @type {Derived} */
reaction,
sources,
marked,
checked
);
} else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) {
set_signal_status(reaction, DIRTY);
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
}
function depends_on(reaction, sources, checked) {
const depends = checked.get(reaction);
if (depends !== void 0) return depends;
if (reaction.deps !== null) {
for (const dep of reaction.deps) {
if (includes.call(sources, dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on(
/** @type {Derived} */
dep,
sources,
checked
)) {
checked.set(
/** @type {Derived} */
dep,
true
);
return true;
}
}
}
checked.set(reaction, false);
return false;
}
function schedule_effect(effect2) {
current_batch.schedule(effect2);
}
function reset_branch(effect2, tracked) {
if ((effect2.f & BRANCH_EFFECT) !== 0 && (effect2.f & CLEAN) !== 0) {
return;
}
if ((effect2.f & DIRTY) !== 0) {
tracked.d.push(effect2);
} else if ((effect2.f & MAYBE_DIRTY) !== 0) {
tracked.m.push(effect2);
}
set_signal_status(effect2, CLEAN);
var e = effect2.first;
while (e !== null) {
reset_branch(e, tracked);
e = e.next;
}
}
function reset_all(effect2) {
set_signal_status(effect2, CLEAN);
var e = effect2.first;
while (e !== null) {
reset_all(e);
e = e.next;
}
}
function createSubscriber(start) {
let subscribers = 0;
let version = source(0);
let stop;
return () => {
if (effect_tracking()) {
get(version);
render_effect(() => {
if (subscribers === 0) {
stop = untrack(() => start(() => increment(version)));
}
subscribers += 1;
return () => {
queue_micro_task(() => {
subscribers -= 1;
if (subscribers === 0) {
stop?.();
stop = void 0;
increment(version);
}
});
};
});
}
};
}
var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;
function boundary(node, props, children, transform_error) {
new Boundary(node, props, children, transform_error);
}
class Boundary {
/** @type {Boundary | null} */
parent;
is_pending = false;
/**
* API-level transformError transform function. Transforms errors before they reach the `failed` snippet.
* Inherited from parent boundary, or defaults to identity.
* @type {(error: unknown) => unknown}
*/
transform_error;
/** @type {TemplateNode} */
#anchor;
/** @type {TemplateNode | null} */
#hydrate_open = hydrating ? hydrate_node : null;
/** @type {BoundaryProps} */
#props;
/** @type {((anchor: Node) => void)} */
#children;
/** @type {Effect} */
#effect;
/** @type {Effect | null} */
#main_effect = null;
/** @type {Effect | null} */
#pending_effect = null;
/** @type {Effect | null} */
#failed_effect = null;
/** @type {DocumentFragment | null} */
#offscreen_fragment = null;
#local_pending_count = 0;
#pending_count = 0;
#pending_count_update_queued = false;
/** @type {Set<Effect>} */
#dirty_effects = /* @__PURE__ */ new Set();
/** @type {Set<Effect>} */
#maybe_dirty_effects = /* @__PURE__ */ new Set();
/**
* A source containing the number of pending async deriveds/expressions.
* Only created if `$effect.pending()` is used inside the boundary,
* otherwise updating the source results in needless `Batch.ensure()`
* calls followed by no-op flushes
* @type {Source<number> | null}
*/
#effect_pending = null;
#effect_pending_subscriber = createSubscriber(() => {
this.#effect_pending = source(this.#local_pending_count);
return () => {
this.#effect_pending = null;
};
});
/**
* @param {TemplateNode} node
* @param {BoundaryProps} props
* @param {((anchor: Node) => void)} children
* @param {((error: unknown) => unknown) | undefined} [transform_error]
*/
constructor(node, props, children, transform_error) {
this.#anchor = node;
this.#props = props;
this.#children = (anchor) => {
var effect2 = (
/** @type {Effect} */
active_effect
);
effect2.b = this;
effect2.f |= BOUNDARY_EFFECT;
children(anchor);
};
this.parent = /** @type {Effect} */
active_effect.b;
this.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e);
this.#effect = block(() => {
if (hydrating) {
const comment2 = (
/** @type {Comment} */
this.#hydrate_open
);
hydrate_next();
const server_rendered_pending = comment2.data === HYDRATION_START_ELSE;
const server_rendered_failed = comment2.data.startsWith(HYDRATION_START_FAILED);
if (server_rendered_failed) {
const serialized_error = JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length));
this.#hydrate_failed_content(serialized_error);
} else if (server_rendered_pending) {
this.#hydrate_pending_content();
} else {
this.#hydrate_resolved_content();
}
} else {
this.#render();
}
}, flags);
if (hydrating) {
this.#anchor = hydrate_node;
}
}
#hydrate_resolved_content() {
try {
this.#main_effect = branch(() => this.#children(this.#anchor));
} catch (error) {
this.error(error);
}
}
/**
* @param {unknown} error The deserialized error from the server's hydration comment
*/
#hydrate_failed_content(error) {
const failed = this.#props.failed;
if (!failed) return;
this.#failed_effect = branch(() => {
failed(
this.#anchor,
() => error,
() => () => {
}
);
});
}
#hydrate_pending_content() {
const pending = this.#props.pending;
if (!pending) return;
this.is_pending = true;
this.#pending_effect = branch(() => pending(this.#anchor));
queue_micro_task(() => {
var fragment = this.#offscreen_fragment = document.createDocumentFragment();
var anchor = create_text();
fragment.append(anchor);
this.#main_effect = this.#run(() => {
return branch(() => this.#children(anchor));
});
if (this.#pending_count === 0) {
this.#anchor.before(fragment);
this.#offscreen_fragment = null;
pause_effect(
/** @type {Effect} */
this.#pending_effect,
() => {
this.#pending_effect = null;
}
);
this.#resolve(
/** @type {Batch} */
current_batch
);
}
});
}
#render() {
try {
this.is_pending = this.has_pending_snippet();
this.#pending_count = 0;
this.#local_pending_count = 0;
this.#main_effect = branch(() => {
this.#children(this.#anchor);
});
if (this.#pending_count > 0) {
var fragment = this.#offscreen_fragment = document.createDocumentFragment();
move_effect(this.#main_effect, fragment);
const pending = (
/** @type {(anchor: Node) => void} */
this.#props.pending
);
this.#pending_effect = branch(() => pending(this.#anchor));
} else {
this.#resolve(
/** @type {Batch} */
current_batch
);
}
} catch (error) {
this.error(error);
}
}
/**
* @param {Batch} batch
*/
#resolve(batch) {
this.is_pending = false;
batch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects);
}
/**
* Defer an effect inside a pending boundary until the boundary resolves
* @param {Effect} effect
*/
defer_effect(effect2) {
defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects);
}
/**
* Returns `false` if the effect exists inside a boundary whose pending snippet is shown
* @returns {boolean}
*/
is_rendered() {
return !this.is_pending && (!this.parent || this.parent.is_rendered());
}
has_pending_snippet() {
return !!this.#props.pending;
}
/**
* @template T
* @param {() => T} fn
*/
#run(fn) {
var previous_effect = active_effect;
var previous_reaction = active_reaction;
var previous_ctx = component_context;
set_active_effect(this.#effect);
set_active_reaction(this.#effect);
set_component_context(this.#effect.ctx);
try {
Batch.ensure();
return fn();
} catch (e) {
handle_error(e);
return null;
} finally {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_ctx);
}
}
/**
* Updates the pending count associated with the currently visible pending snippet,
* if any, such that we can replace the snippet with content once work is done
* @param {1 | -1} d
* @param {Batch} batch
*/
#update_pending_count(d, batch) {
if (!this.has_pending_snippet()) {
if (this.parent) {
this.parent.#update_pending_count(d, batch);
}
return;
}
this.#pending_count += d;
if (this.#pending_count === 0) {
this.#resolve(batch);
if (this.#pending_effect) {
pause_effect(this.#pending_effect, () => {
this.#pending_effect = null;
});
}
if (this.#offscreen_fragment) {
this.#anchor.before(this.#offscreen_fragment);
this.#offscreen_fragment = null;
}
}
}
/**
* Update the source that powers `$effect.pending()` inside this boundary,
* and controls when the current `pending` snippet (if any) is removed.
* Do not call from inside the class
* @param {1 | -1} d
* @param {Batch} batch
*/
update_pending_count(d, batch) {
this.#update_pending_count(d, batch);
this.#local_pending_count += d;
if (!this.#effect_pending || this.#pending_count_update_queued) return;
this.#pending_count_update_queued = true;
queue_micro_task(() => {
this.#pending_count_update_queued = false;
if (this.#effect_pending) {
internal_set(this.#effect_pending, this.#local_pending_count);
}
});
}
get_effect_pending() {
this.#effect_pending_subscriber();
return get(
/** @type {Source<number>} */
this.#effect_pending
);
}
/** @param {unknown} error */
error(error) {
if (!this.#props.onerror && !this.#props.failed) {
throw error;
}
if (current_batch?.is_fork) {
if (this.#main_effect) current_batch.skip_effect(this.#main_effect);
if (this.#pending_effect) current_batch.skip_effect(this.#pending_effect);
if (this.#failed_effect) current_batch.skip_effect(this.#failed_effect);
current_batch.on_fork_commit(() => {
this.#handle_error(error);
});
} else {
this.#handle_error(error);
}
}
/**
* @param {unknown} error
*/
#handle_error(error) {
if (this.#main_effect) {
destroy_effect(this.#main_effect);
this.#main_effect = null;
}
if (this.#pending_effect) {
destroy_effect(this.#pending_effect);
this.#pending_effect = null;
}
if (this.#failed_effect) {
destroy_effect(this.#failed_effect);
this.#failed_effect = null;
}
if (hydrating) {
set_hydrate_node(
/** @type {TemplateNode} */
this.#hydrate_open
);
next();
set_hydrate_node(skip_nodes());
}
var onerror = this.#props.onerror;
let failed = this.#props.failed;
var did_reset = false;
var calling_on_error = false;
const reset2 = () => {
if (did_reset) {
svelte_boundary_reset_noop();
return;
}
did_reset = true;
if (calling_on_error) {
svelte_boundary_reset_onerror();
}
if (this.#failed_effect !== null) {
pause_effect(this.#failed_effect, () => {
this.#failed_effect = null;
});
}
this.#run(() => {
this.#render();
});
};
const handle_error_result = (transformed_error) => {
try {
calling_on_error = true;
onerror?.(transformed_error, reset2);
calling_on_error = false;
} catch (error2) {
invoke_error_boundary(error2, this.#effect && this.#effect.parent);
}
if (failed) {
this.#failed_effect = this.#run(() => {
try {
return branch(() => {
var effect2 = (
/** @type {Effect} */
active_effect
);
effect2.b = this;
effect2.f |= BOUNDARY_EFFECT;
failed(
this.#anchor,
() => transformed_error,
() => reset2
);
});
} catch (error2) {
invoke_error_boundary(
error2,
/** @type {Effect} */
this.#effect.parent
);
return null;
}
});
}
};
queue_micro_task(() => {
var result;
try {
result = this.transform_error(error);
} catch (e) {
invoke_error_boundary(e, this.#effect && this.#effect.parent);
return;
}
if (result !== null && typeof result === "object" && typeof /** @type {any} */
result.then === "function") {
result.then(
handle_error_result,
/** @param {unknown} e */
(e) => invoke_error_boundary(e, this.#effect && this.#effect.parent)
);
} else {
handle_error_result(result);
}
});
}
}
function flatten(blockers, sync, async, fn) {
const d = derived;
var pending = blockers.filter((b) => !b.settled);
if (async.length === 0 && pending.length === 0) {
fn(sync.map(d));
return;
}
var parent = (
/** @type {Effect} */
active_effect
);
var restore = capture();
var blocker_promise = pending.length === 1 ? pending[0].promise : pending.length > 1 ? Promise.all(pending.map((b) => b.promise)) : null;
function finish(values) {
if ((parent.f & DESTROYED) !== 0) {
return;
}
restore();
try {
fn(values);
} catch (error) {
invoke_error_boundary(error, parent);
}
unset_context();
}
var decrement_pending = increment_pending();
if (async.length === 0) {
blocker_promise.then(() => finish(sync.map(d))).finally(decrement_pending);
return;
}
function run() {
Promise.all(async.map((expression) => /* @__PURE__ */ async_derived(expression))).then((result) => finish([...sync.map(d), ...result])).catch((error) => invoke_error_boundary(error, parent)).finally(decrement_pending);
}
if (blocker_promise) {
blocker_promise.then(() => {
restore();
run();
unset_context();
});
} else {
run();
}
}
function capture() {
var previous_effect = (
/** @type {Effect} */
active_effect
);
var previous_reaction = active_reaction;
var previous_component_context = component_context;
var previous_batch2 = (
/** @type {Batch} */
current_batch
);
return function restore(activate_batch = true) {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_component_context);
if (activate_batch && (previous_effect.f & DESTROYED) === 0) {
previous_batch2?.activate();
previous_batch2?.apply();
}
};
}
function unset_context(deactivate_batch = true) {
set_active_effect(null);
set_active_reaction(null);
set_component_context(null);
if (deactivate_batch) current_batch?.deactivate();
}
function increment_pending() {
var effect2 = (
/** @type {Effect} */
active_effect
);
var boundary2 = (
/** @type {Boundary} */
effect2.b
);
var batch = (
/** @type {Batch} */
current_batch
);
var blocking = boundary2.is_rendered();
boundary2.update_pending_count(1, batch);
batch.increment(blocking, effect2);
return () => {
boundary2.update_pending_count(-1, batch);
batch.decrement(blocking, effect2);
};
}
// @__NO_SIDE_EFFECTS__
function derived(fn) {
var flags2 = DERIVED | DIRTY;
if (active_effect !== null) {
active_effect.f |= EFFECT_PRESERVED;
}
const signal = {
ctx: component_context,
deps: null,
effects: null,
equals,
f: flags2,
fn,
reactions: null,
rv: 0,
v: (
/** @type {V} */
UNINITIALIZED
),
wv: 0,
parent: active_effect,
ac: null
};
return signal;
}
const OBSOLETE = /* @__PURE__ */ Symbol("obsolete");
// @__NO_SIDE_EFFECTS__
function async_derived(fn, label, location2) {
let parent = (
/** @type {Effect | null} */
active_effect
);
if (parent === null) {
async_derived_orphan();
}
var promise = (
/** @type {Promise<V>} */
/** @type {unknown} */
void 0
);
var signal = source(
/** @type {V} */
UNINITIALIZED
);
var should_suspend = !active_reaction;
var deferreds = /* @__PURE__ */ new Set();
async_effect(() => {
var effect2 = (
/** @type {Effect} */
active_effect
);
var d = deferred();
promise = d.promise;
try {
Promise.resolve(fn()).then(d.resolve, (e) => {
if (e !== STALE_REACTION) d.reject(e);
}).finally(unset_context);
} catch (error) {
d.reject(error);
unset_context();
}
var batch = (
/** @type {Batch} */
current_batch
);
if (should_suspend) {
if ((effect2.f & REACTION_RAN) !== 0) {
var decrement_pending = increment_pending();
}
if (
/** @type {Boundary} */
parent.b.is_rendered()
) {
batch.async_deriveds.get(effect2)?.reject(OBSOLETE);
} else {
for (const d2 of deferreds.values()) {
d2.reject(OBSOLETE);
}
}
deferreds.add(d);
batch.async_deriveds.set(effect2, d);
}
const handler = (value, error = void 0) => {
decrement_pending?.();
deferreds.delete(d);
if (error === OBSOLETE) return;
batch.activate();
if (error) {
signal.f |= ERROR_VALUE;
internal_set(signal, error);
} else {
if ((signal.f & ERROR_VALUE) !== 0) {
signal.f ^= ERROR_VALUE;
}
internal_set(signal, value);
}
batch.deactivate();
};
d.promise.then(handler, (e) => handler(null, e || "unknown"));
});
teardown(() => {
for (const d of deferreds) {
d.reject(OBSOLETE);
}
});
return new Promise((fulfil) => {
function next2(p) {
function go() {
if (p === promise) {
fulfil(signal);
} else {
next2(promise);
}
}
p.then(go, go);
}
next2(promise);
});
}
// @__NO_SIDE_EFFECTS__
function user_derived(fn) {
const d = /* @__PURE__ */ derived(fn);
push_reaction_value(d);
return d;
}
function destroy_derived_effects(derived2) {
var effects = derived2.effects;
if (effects !== null) {
derived2.effects = null;
for (var i = 0; i < effects.length; i += 1) {
destroy_effect(
/** @type {Effect} */
effects[i]
);
}
}
}
function execute_derived(derived2) {
var value;
var prev_active_effect = active_effect;
var parent = derived2.parent;
if (!is_destroying_effect && parent !== null && derived2.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead
(parent.f & (DESTROYED | INERT)) !== 0) {
derived_inert();
return derived2.v;
}
set_active_effect(parent);
{
try {
derived2.f &= ~WAS_MARKED;
destroy_derived_effects(derived2);
value = update_reaction(derived2);
} finally {
set_active_effect(prev_active_effect);
}
}
return value;
}
function update_derived(derived2) {
var value = execute_derived(derived2);
if (!derived2.equals(value)) {
derived2.wv = increment_write_version();
if (!current_batch?.is_fork || derived2.deps === null) {
if (current_batch !== null) {
current_batch.capture(derived2, value, true);
previous_batch?.capture(derived2, value, true);
} else {
derived2.v = value;
}
if (derived2.deps === null) {
set_signal_status(derived2, CLEAN);
return;
}
}
}
if (is_destroying_effect) {
return;
}
if (batch_values !== null) {
if (effect_tracking() || current_batch?.is_fork) {
batch_values.set(derived2, value);
}
} else {
update_derived_status(derived2);
}
}
function freeze_derived_effects(derived2) {
if (derived2.effects === null) return;
for (const e of derived2.effects) {
if (e.teardown || e.ac) {
e.teardown?.();
e.ac?.abort(STALE_REACTION);
if (e.fn !== null) e.teardown = noop;
e.ac = null;
remove_reactions(e, 0);
destroy_effect_children(e);
}
}
}
function unfreeze_derived_effects(derived2) {
if (derived2.effects === null) return;
for (const e of derived2.effects) {
if (e.teardown && e.fn !== null) {
update_effect(e);
}
}
}
let eager_effects = /* @__PURE__ */ new Set();
const old_values = /* @__PURE__ */ new Map();
let eager_effects_deferred = false;
function source(v, stack) {
var signal = {
f: 0,
// TODO ideally we could skip this altogether, but it causes type errors
v,
reactions: null,
equals,
rv: 0,
wv: 0
};
return signal;
}
// @__NO_SIDE_EFFECTS__
function state(v, stack) {
const s = source(v);
push_reaction_value(s);
return s;
}
// @__NO_SIDE_EFFECTS__
function mutable_source(initial_value, immutable = false, trackable = true) {
const s = source(initial_value);
if (!immutable) {
s.equals = safe_equals;
}
return s;
}
function set(source2, value, should_proxy = false) {
if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check
// to ensure we error if state is set inside an inspect effect
(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) {
state_unsafe_mutation();
}
let new_value = should_proxy ? proxy(value) : value;
return internal_set(source2, new_value, legacy_updates);
}
function internal_set(source2, value, updated_during_traversal = null) {
if (!source2.equals(value)) {
old_values.set(source2, is_destroying_effect ? value : source2.v);
var batch = Batch.ensure();
batch.capture(source2, value);
if ((source2.f & DERIVED) !== 0) {
const derived2 = (
/** @type {Derived} */
source2
);
if ((source2.f & DIRTY) !== 0) {
execute_derived(derived2);
}
if (batch_values === null) {
update_derived_status(derived2);
}
}
source2.wv = increment_write_version();
mark_reactions(source2, DIRTY, updated_during_traversal);
if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) {
if (untracked_writes === null) {
set_untracked_writes([source2]);
} else {
untracked_writes.push(source2);
}
}
if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {
flush_eager_effects();
}
}
return value;
}
function flush_eager_effects() {
eager_effects_deferred = false;
for (const effect2 of eager_effects) {
if ((effect2.f & CLEAN) !== 0) {
set_signal_status(effect2, MAYBE_DIRTY);
}
let dirty;
try {
dirty = is_dirty(effect2);
} catch {
dirty = true;
}
if (dirty) {
update_effect(effect2);
}
}
eager_effects.clear();
}
function increment(source2) {
set(source2, source2.v + 1);
}
function mark_reactions(signal, status, updated_during_traversal) {
var reactions = signal.reactions;
if (reactions === null) return;
var length = reactions.length;
for (var i = 0; i < length; i++) {
var reaction = reactions[i];
var flags2 = reaction.f;
var not_dirty = (flags2 & DIRTY) === 0;
if (not_dirty) {
set_signal_status(reaction, status);
}
if ((flags2 & EAGER_EFFECT) !== 0) {
eager_effects.add(
/** @type {Effect} */
reaction
);
} else if ((flags2 & DERIVED) !== 0) {
var derived2 = (
/** @type {Derived} */
reaction
);
batch_values?.delete(derived2);
if ((flags2 & WAS_MARKED) === 0) {
if (flags2 & CONNECTED && (active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)) {
reaction.f |= WAS_MARKED;
}
mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal);
}
} else if (not_dirty) {
var effect2 = (
/** @type {Effect} */
reaction
);
if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {
eager_block_effects.add(effect2);
}
if (updated_during_traversal !== null) {
updated_during_traversal.push(effect2);
} else {
schedule_effect(effect2);
}
}
}
}
function autofocus(dom, value) {
if (value) {
const body = document.body;
dom.autofocus = true;
queue_micro_task(() => {
if (document.activeElement === body) {
dom.focus();
}
});
}
}
let listening_to_form_reset = false;
function add_form_reset_listener() {
if (!listening_to_form_reset) {
listening_to_form_reset = true;
document.addEventListener(
"reset",
(evt) => {
Promise.resolve().then(() => {
if (!evt.defaultPrevented) {
for (
const e of
/**@type {HTMLFormElement} */
evt.target.elements
) {
e[FORM_RESET_HANDLER]?.();
}
}
});
},
// In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation)
{ capture: true }
);
}
}
function without_reactive_context(fn) {
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
return fn();
} finally {
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) {
element.addEventListener(event2, () => without_reactive_context(handler));
const prev = (
/** @type {any} */
element[FORM_RESET_HANDLER]
);
if (prev) {
element[FORM_RESET_HANDLER] = () => {
prev();
on_reset(true);
};
} else {
element[FORM_RESET_HANDLER] = () => on_reset(true);
}
add_form_reset_listener();
}
let is_updating_effect = false;
let is_destroying_effect = false;
function set_is_destroying_effect(value) {
is_destroying_effect = value;
}
let active_reaction = null;
let untracking = false;
function set_active_reaction(reaction) {
active_reaction = reaction;
}
let active_effect = null;
function set_active_effect(effect2) {
active_effect = effect2;
}
let current_sources = null;
function push_reaction_value(value) {
if (active_reaction !== null && true) {
if (current_sources === null) {
current_sources = [value];
} else {
current_sources.push(value);
}
}
}
let new_deps = null;
let skipped_deps = 0;
let untracked_writes = null;
function set_untracked_writes(value) {
untracked_writes = value;
}
let write_version = 1;
let read_version = 0;
let update_version = read_version;
function set_update_version(value) {
update_version = value;
}
function increment_write_version() {
return ++write_version;
}
function is_dirty(reaction) {
var flags2 = reaction.f;
if ((flags2 & DIRTY) !== 0) {
return true;
}
if (flags2 & DERIVED) {
reaction.f &= ~WAS_MARKED;
}
if ((flags2 & MAYBE_DIRTY) !== 0) {
var dependencies = (
/** @type {Value[]} */
reaction.deps
);
var length = dependencies.length;
for (var i = 0; i < length; i++) {
var dependency = dependencies[i];
if (is_dirty(
/** @type {Derived} */
dependency
)) {
update_derived(
/** @type {Derived} */
dependency
);
}
if (dependency.wv > reaction.wv) {
return true;
}
}
if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that
// traversal of the graph in the other batches still happens
batch_values === null) {
set_signal_status(reaction, CLEAN);
}
}
return false;
}
function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) {
var reactions = signal.reactions;
if (reactions === null) return;
if (current_sources !== null && includes.call(current_sources, signal)) {
return;
}
for (var i = 0; i < reactions.length; i++) {
var reaction = reactions[i];
if ((reaction.f & DERIVED) !== 0) {
schedule_possible_effect_self_invalidation(
/** @type {Derived} */
reaction,
effect2,
false
);
} else if (effect2 === reaction) {
if (root2) {
set_signal_status(reaction, DIRTY);
} else if ((reaction.f & CLEAN) !== 0) {
set_signal_status(reaction, MAYBE_DIRTY);
}
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
function update_reaction(reaction) {
var previous_deps = new_deps;
var previous_skipped_deps = skipped_deps;
var previous_untracked_writes = untracked_writes;
var previous_reaction = active_reaction;
var previous_sources = current_sources;
var previous_component_context = component_context;
var previous_untracking = untracking;
var previous_update_version = update_version;
var flags2 = reaction.f;
new_deps = /** @type {null | Value[]} */
null;
skipped_deps = 0;
untracked_writes = null;
active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;
current_sources = null;
set_component_context(reaction.ctx);
untracking = false;
update_version = ++read_version;
if (reaction.ac !== null) {
without_reactive_context(() => {
reaction.ac.abort(STALE_REACTION);
});
reaction.ac = null;
}
try {
reaction.f |= REACTION_IS_UPDATING;
var fn = (
/** @type {Function} */
reaction.fn
);
var result = fn();
reaction.f |= REACTION_RAN;
var deps = reaction.deps;
var is_fork = current_batch?.is_fork;
if (new_deps !== null) {
var i;
if (!is_fork) {
remove_reactions(reaction, skipped_deps);
}
if (deps !== null && skipped_deps > 0) {
deps.length = skipped_deps + new_deps.length;
for (i = 0; i < new_deps.length; i++) {
deps[skipped_deps + i] = new_deps[i];
}
} else {
reaction.deps = deps = new_deps;
}
if (effect_tracking() && (reaction.f & CONNECTED) !== 0) {
for (i = skipped_deps; i < deps.length; i++) {
(deps[i].reactions ??= []).push(reaction);
}
}
} else if (!is_fork && deps !== null && skipped_deps < deps.length) {
remove_reactions(reaction, skipped_deps);
deps.length = skipped_deps;
}
if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) {
for (i = 0; i < /** @type {Source[]} */
untracked_writes.length; i++) {
schedule_possible_effect_self_invalidation(
untracked_writes[i],
/** @type {Effect} */
reaction
);
}
}
if (previous_reaction !== null && previous_reaction !== reaction) {
read_version++;
if (previous_reaction.deps !== null) {
for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) {
previous_reaction.deps[i2].rv = read_version;
}
}
if (previous_deps !== null) {
for (const dep of previous_deps) {
dep.rv = read_version;
}
}
if (untracked_writes !== null) {
if (previous_untracked_writes === null) {
previous_untracked_writes = untracked_writes;
} else {
previous_untracked_writes.push(.../** @type {Source[]} */
untracked_writes);
}
}
}
if ((reaction.f & ERROR_VALUE) !== 0) {
reaction.f ^= ERROR_VALUE;
}
return result;
} catch (error) {
return handle_error(error);
} finally {
reaction.f ^= REACTION_IS_UPDATING;
new_deps = previous_deps;
skipped_deps = previous_skipped_deps;
untracked_writes = previous_untracked_writes;
active_reaction = previous_reaction;
current_sources = previous_sources;
set_component_context(previous_component_context);
untracking = previous_untracking;
update_version = previous_update_version;
}
}
function remove_reaction(signal, dependency) {
let reactions = dependency.reactions;
if (reactions !== null) {
var index = index_of.call(reactions, signal);
if (index !== -1) {
var new_length = reactions.length - 1;
if (new_length === 0) {
reactions = dependency.reactions = null;
} else {
reactions[index] = reactions[new_length];
reactions.pop();
}
}
}
if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear
// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`
// allows us to skip the expensive work of disconnecting and immediately reconnecting it
(new_deps === null || !includes.call(new_deps, dependency))) {
var derived2 = (
/** @type {Derived} */
dependency
);
if ((derived2.f & CONNECTED) !== 0) {
derived2.f ^= CONNECTED;
derived2.f &= ~WAS_MARKED;
}
if (derived2.v !== UNINITIALIZED) {
update_derived_status(derived2);
}
freeze_derived_effects(derived2);
remove_reactions(derived2, 0);
}
}
function remove_reactions(signal, start_index) {
var dependencies = signal.deps;
if (dependencies === null) return;
for (var i = start_index; i < dependencies.length; i++) {
remove_reaction(signal, dependencies[i]);
}
}
function update_effect(effect2) {
var flags2 = effect2.f;
if ((flags2 & DESTROYED) !== 0) {
return;
}
set_signal_status(effect2, CLEAN);
var previous_effect = active_effect;
var was_updating_effect = is_updating_effect;
active_effect = effect2;
is_updating_effect = true;
try {
if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {
destroy_block_effect_children(effect2);
} else {
destroy_effect_children(effect2);
}
execute_effect_teardown(effect2);
var teardown2 = update_reaction(effect2);
effect2.teardown = typeof teardown2 === "function" ? teardown2 : null;
effect2.wv = write_version;
var dep;
if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ;
} finally {
is_updating_effect = was_updating_effect;
active_effect = previous_effect;
}
}
async function tick() {
await Promise.resolve();
flushSync();
}
function get(signal) {
var flags2 = signal.f;
var is_derived = (flags2 & DERIVED) !== 0;
if (active_reaction !== null && !untracking) {
var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;
if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) {
var deps = active_reaction.deps;
if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {
if (signal.rv < read_version) {
signal.rv = read_version;
if (new_deps === null && deps !== null && deps[skipped_deps] === signal) {
skipped_deps++;
} else if (new_deps === null) {
new_deps = [signal];
} else {
new_deps.push(signal);
}
}
} else {
(active_reaction.deps ??= []).push(signal);
var reactions = signal.reactions;
if (reactions === null) {
signal.reactions = [active_reaction];
} else if (!includes.call(reactions, active_reaction)) {
reactions.push(active_reaction);
}
}
}
}
if (is_destroying_effect && old_values.has(signal)) {
return old_values.get(signal);
}
if (is_derived) {
var derived2 = (
/** @type {Derived} */
signal
);
if (is_destroying_effect) {
var value = derived2.v;
if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) {
value = execute_derived(derived2);
}
old_values.set(derived2, value);
return value;
}
var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0);
var is_new = (derived2.f & REACTION_RAN) === 0;
if (is_dirty(derived2)) {
if (should_connect) {
derived2.f |= CONNECTED;
}
update_derived(derived2);
}
if (should_connect && !is_new) {
unfreeze_derived_effects(derived2);
reconnect(derived2);
}
}
if (batch_values?.has(signal)) {
return batch_values.get(signal);
}
if ((signal.f & ERROR_VALUE) !== 0) {
throw signal.v;
}
return signal.v;
}
function reconnect(derived2) {
derived2.f |= CONNECTED;
if (derived2.deps === null) return;
for (const dep of derived2.deps) {
(dep.reactions ??= []).push(derived2);
if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {
unfreeze_derived_effects(
/** @type {Derived} */
dep
);
reconnect(
/** @type {Derived} */
dep
);
}
}
}
function depends_on_old_values(derived2) {
if (derived2.v === UNINITIALIZED) return true;
if (derived2.deps === null) return false;
for (const dep of derived2.deps) {
if (old_values.has(dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on_old_values(
/** @type {Derived} */
dep
)) {
return true;
}
}
return false;
}
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function validate_effect(rune) {
if (active_effect === null) {
if (active_reaction === null) {
effect_orphan();
}
effect_in_unowned_derived();
}
if (is_destroying_effect) {
effect_in_teardown();
}
}
function push_effect(effect2, parent_effect) {
var parent_last = parent_effect.last;
if (parent_last === null) {
parent_effect.last = parent_effect.first = effect2;
} else {
parent_last.next = effect2;
effect2.prev = parent_last;
parent_effect.last = effect2;
}
}
function create_effect(type, fn) {
var parent = active_effect;
if (parent !== null && (parent.f & INERT) !== 0) {
type |= INERT;
}
var effect2 = {
ctx: component_context,
deps: null,
nodes: null,
f: type | DIRTY | CONNECTED,
first: null,
fn,
last: null,
next: null,
parent,
b: parent && parent.b,
prev: null,
teardown: null,
wv: 0,
ac: null
};
current_batch?.register_created_effect(effect2);
var e = effect2;
if ((type & EFFECT) !== 0) {
if (collected_effects !== null) {
collected_effects.push(effect2);
} else {
Batch.ensure().schedule(effect2);
}
} else if (fn !== null) {
try {
update_effect(effect2);
} catch (e2) {
destroy_effect(effect2);
throw e2;
}
if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child
(e.f & EFFECT_PRESERVED) === 0) {
e = e.first;
if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {
e.f |= EFFECT_TRANSPARENT;
}
}
}
if (e !== null) {
e.parent = parent;
if (parent !== null) {
push_effect(e, parent);
}
if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) {
var derived2 = (
/** @type {Derived} */
active_reaction
);
(derived2.effects ??= []).push(e);
}
}
return effect2;
}
function effect_tracking() {
return active_reaction !== null && !untracking;
}
function teardown(fn) {
const effect2 = create_effect(RENDER_EFFECT, null);
set_signal_status(effect2, CLEAN);
effect2.teardown = fn;
return effect2;
}
function user_effect(fn) {
validate_effect();
var flags2 = (
/** @type {Effect} */
active_effect.f
);
var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & REACTION_RAN) === 0;
if (defer) {
var context = (
/** @type {ComponentContext} */
component_context
);
(context.e ??= []).push(fn);
} else {
return create_user_effect(fn);
}
}
function create_user_effect(fn) {
return create_effect(EFFECT | USER_EFFECT, fn);
}
function effect_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
return () => {
destroy_effect(effect2);
};
}
function component_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
return (options = {}) => {
return new Promise((fulfil) => {
if (options.outro) {
pause_effect(effect2, () => {
destroy_effect(effect2);
fulfil(void 0);
});
} else {
destroy_effect(effect2);
fulfil(void 0);
}
});
};
}
function effect(fn) {
return create_effect(EFFECT, fn);
}
function async_effect(fn) {
return create_effect(ASYNC | EFFECT_PRESERVED, fn);
}
function render_effect(fn, flags2 = 0) {
return create_effect(RENDER_EFFECT | flags2, fn);
}
function template_effect(fn, sync = [], async = [], blockers = []) {
flatten(blockers, sync, async, (values) => {
create_effect(RENDER_EFFECT, () => fn(...values.map(get)));
});
}
function block(fn, flags2 = 0) {
var effect2 = create_effect(BLOCK_EFFECT | flags2, fn);
return effect2;
}
function managed(fn, flags2 = 0) {
var effect2 = create_effect(MANAGED_EFFECT | flags2, fn);
return effect2;
}
function branch(fn) {
return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn);
}
function execute_effect_teardown(effect2) {
var teardown2 = effect2.teardown;
if (teardown2 !== null) {
const previously_destroying_effect = is_destroying_effect;
const previous_reaction = active_reaction;
set_is_destroying_effect(true);
set_active_reaction(null);
try {
teardown2.call(null);
} finally {
set_is_destroying_effect(previously_destroying_effect);
set_active_reaction(previous_reaction);
}
}
}
function destroy_effect_children(signal, remove_dom = false) {
var effect2 = signal.first;
signal.first = signal.last = null;
while (effect2 !== null) {
const controller = effect2.ac;
if (controller !== null) {
without_reactive_context(() => {
controller.abort(STALE_REACTION);
});
}
var next2 = effect2.next;
if ((effect2.f & ROOT_EFFECT) !== 0) {
effect2.parent = null;
} else {
destroy_effect(effect2, remove_dom);
}
effect2 = next2;
}
}
function destroy_block_effect_children(signal) {
var effect2 = signal.first;
while (effect2 !== null) {
var next2 = effect2.next;
if ((effect2.f & BRANCH_EFFECT) === 0) {
destroy_effect(effect2);
}
effect2 = next2;
}
}
function destroy_effect(effect2, remove_dom = true) {
var removed = false;
if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) {
remove_effect_dom(
effect2.nodes.start,
/** @type {TemplateNode} */
effect2.nodes.end
);
removed = true;
}
set_signal_status(effect2, DESTROYING);
destroy_effect_children(effect2, remove_dom && !removed);
remove_reactions(effect2, 0);
var transitions = effect2.nodes && effect2.nodes.t;
if (transitions !== null) {
for (const transition of transitions) {
transition.stop();
}
}
execute_effect_teardown(effect2);
effect2.f ^= DESTROYING;
effect2.f |= DESTROYED;
var parent = effect2.parent;
if (parent !== null && parent.first !== null) {
unlink_effect(effect2);
}
effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = effect2.b = null;
}
function remove_effect_dom(node, end) {
while (node !== null) {
var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
node.remove();
node = next2;
}
}
function unlink_effect(effect2) {
var parent = effect2.parent;
var prev = effect2.prev;
var next2 = effect2.next;
if (prev !== null) prev.next = next2;
if (next2 !== null) next2.prev = prev;
if (parent !== null) {
if (parent.first === effect2) parent.first = next2;
if (parent.last === effect2) parent.last = prev;
}
}
function pause_effect(effect2, callback, destroy = true) {
var transitions = [];
pause_children(effect2, transitions, true);
var fn = () => {
if (destroy) destroy_effect(effect2);
if (callback) callback();
};
var remaining = transitions.length;
if (remaining > 0) {
var check = () => --remaining || fn();
for (var transition of transitions) {
transition.out(check);
}
} else {
fn();
}
}
function pause_children(effect2, transitions, local) {
if ((effect2.f & INERT) !== 0) return;
effect2.f ^= INERT;
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition of t) {
if (transition.is_global || local) {
transitions.push(transition);
}
}
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
if ((child2.f & ROOT_EFFECT) === 0) {
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent,
// it means the parent block effect was pruned. In that case,
// transparency information was transferred to the branch effect.
(child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0;
pause_children(child2, transitions, transparent ? local : false);
}
child2 = sibling2;
}
}
function resume_effect(effect2) {
resume_children(effect2, true);
}
function resume_children(effect2, local) {
if ((effect2.f & INERT) === 0) return;
effect2.f ^= INERT;
if ((effect2.f & CLEAN) === 0) {
set_signal_status(effect2, DIRTY);
Batch.ensure().schedule(effect2);
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0;
resume_children(child2, transparent ? local : false);
child2 = sibling2;
}
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition of t) {
if (transition.is_global || local) {
transition.in();
}
}
}
}
function move_effect(effect2, fragment) {
if (!effect2.nodes) return;
var node = effect2.nodes.start;
var end = effect2.nodes.end;
while (node !== null) {
var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
fragment.append(node);
node = next2;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get$1(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get$1(scope.store), {
[name]: value
});
} else {
Object.assign(get$1(scope.store), name);
}
scope.store.set(get$1(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n = {
ariaLinkLabel: "Altcha (official website)",
cancel: "Cancel",
enterCode: "Enter code",
enterCodeAria: "Enter code you hear. Press Space to play audio.",
enterCodeFromImage: "To proceed, please enter the code from the image below.",
error: "Verification failed. Try again later.",
expired: "Verification expired. Try again.",
footer: 'Protected by <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (official website)">ALTCHA</a>',
getAudioChallenge: "Get an audio challenge",
label: "I'm not a robot",
loading: "Loading...",
reload: "Reload",
verify: "Verify",
verificationRequired: "Verification required!",
verified: "Verified",
verifying: "Verifying...",
waitAlert: "Verifying... please wait."
};
globalThis.$altcha.i18n.set("en", i18n);
const PUBLIC_VERSION = "5";
if (typeof window !== "undefined") {
((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION);
}
const event_symbol = /* @__PURE__ */ Symbol("events");
const all_registered_events = /* @__PURE__ */ new Set();
const root_event_handles = /* @__PURE__ */ new Set();
function create_event(event_name, dom, handler, options = {}) {
function target_handler(event2) {
if (!options.capture) {
handle_event_propagation.call(dom, event2);
}
if (!event2.cancelBubble) {
return without_reactive_context(() => {
return handler?.call(this, event2);
});
}
}
if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") {
queue_micro_task(() => {
dom.addEventListener(event_name, target_handler, options);
});
} else {
dom.addEventListener(event_name, target_handler, options);
}
return target_handler;
}
function event(event_name, dom, handler, capture2, passive) {
var options = { capture: capture2, passive };
var target_handler = create_event(event_name, dom, handler, options);
if (dom === document.body || // @ts-ignore
dom === window || // @ts-ignore
dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed
dom instanceof HTMLMediaElement) {
teardown(() => {
dom.removeEventListener(event_name, target_handler, options);
});
}
}
function delegated(event_name, element, handler) {
(element[event_symbol] ??= {})[event_name] = handler;
}
function delegate(events) {
for (var i = 0; i < events.length; i++) {
all_registered_events.add(events[i]);
}
for (var fn of root_event_handles) {
fn(events);
}
}
let last_propagated_event = null;
function handle_event_propagation(event2) {
var handler_element = this;
var owner_document = (
/** @type {Node} */
handler_element.ownerDocument
);
var event_name = event2.type;
var path = event2.composedPath?.() || [];
var current_target = (
/** @type {null | Element} */
path[0] || event2.target
);
last_propagated_event = event2;
var path_idx = 0;
var handled_at = last_propagated_event === event2 && event2[event_symbol];
if (handled_at) {
var at_idx = path.indexOf(handled_at);
if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */
window)) {
event2[event_symbol] = handler_element;
return;
}
var handler_idx = path.indexOf(handler_element);
if (handler_idx === -1) {
return;
}
if (at_idx <= handler_idx) {
path_idx = at_idx;
}
}
current_target = /** @type {Element} */
path[path_idx] || event2.target;
if (current_target === handler_element) return;
define_property(event2, "currentTarget", {
configurable: true,
get() {
return current_target || owner_document;
}
});
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
var throw_error;
var other_errors = [];
while (current_target !== null) {
var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */
current_target.host || null;
try {
var delegated2 = current_target[event_symbol]?.[event_name];
if (delegated2 != null && (!/** @type {any} */
current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well
// -> the target could not have been disabled because it emits the event in the first place
event2.target === current_target)) {
delegated2.call(current_target, event2);
}
} catch (error) {
if (throw_error) {
other_errors.push(error);
} else {
throw_error = error;
}
}
if (event2.cancelBubble || parent_element === handler_element || parent_element === null) {
break;
}
current_target = parent_element;
}
if (throw_error) {
for (let error of other_errors) {
queueMicrotask(() => {
throw error;
});
}
throw throw_error;
}
} finally {
event2[event_symbol] = handler_element;
delete event2.currentTarget;
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
const policy = (
// We gotta write it like this because after downleveling the pure comment may end up in the wrong location
globalThis?.window?.trustedTypes && /* @__PURE__ */ globalThis.window.trustedTypes.createPolicy("svelte-trusted-html", {
/** @param {string} html */
createHTML: (html2) => {
return html2;
}
})
);
function create_trusted_html(html2) {
return (
/** @type {string} */
policy?.createHTML(html2) ?? html2
);
}
function create_fragment_from_html(html2) {
var elem = create_element("template");
elem.innerHTML = create_trusted_html(html2.replaceAll("<!>", "<!---->"));
return elem.content;
}
function assign_nodes(start, end) {
var effect2 = (
/** @type {Effect} */
active_effect
);
if (effect2.nodes === null) {
effect2.nodes = { start, end, a: null, t: null };
}
}
// @__NO_SIDE_EFFECTS__
function from_html(content, flags2) {
var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0;
var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0;
var node;
var has_start = !content.startsWith("<!>");
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (node === void 0) {
node = create_fragment_from_html(has_start ? content : "<!>" + content);
if (!is_fragment) node = /** @type {TemplateNode} */
/* @__PURE__ */ get_first_child(node);
}
var clone = (
/** @type {TemplateNode} */
use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)
);
if (is_fragment) {
var start = (
/** @type {TemplateNode} */
/* @__PURE__ */ get_first_child(clone)
);
var end = (
/** @type {TemplateNode} */
clone.lastChild
);
assign_nodes(start, end);
} else {
assign_nodes(clone, clone);
}
return clone;
};
}
// @__NO_SIDE_EFFECTS__
function from_namespace(content, flags2, ns = "svg") {
var has_start = !content.startsWith("<!>");
var wrapped = `<${ns}>${has_start ? content : "<!>" + content}</${ns}>`;
var node;
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (!node) {
var fragment = (
/** @type {DocumentFragment} */
create_fragment_from_html(wrapped)
);
var root2 = (
/** @type {Element} */
/* @__PURE__ */ get_first_child(fragment)
);
{
node = /** @type {Element} */
/* @__PURE__ */ get_first_child(root2);
}
}
var clone = (
/** @type {TemplateNode} */
node.cloneNode(true)
);
{
assign_nodes(clone, clone);
}
return clone;
};
}
// @__NO_SIDE_EFFECTS__
function from_svg(content, flags2) {
return /* @__PURE__ */ from_namespace(content, flags2, "svg");
}
function text(value = "") {
if (!hydrating) {
var t = create_text(value + "");
assign_nodes(t, t);
return t;
}
var node = hydrate_node;
if (node.nodeType !== TEXT_NODE) {
node.before(node = create_text());
set_hydrate_node(node);
} else {
merge_text_nodes(
/** @type {Text} */
node
);
}
assign_nodes(node, node);
return node;
}
function comment() {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
var frag = document.createDocumentFragment();
var start = document.createComment("");
var anchor = create_text();
frag.append(start, anchor);
assign_nodes(start, anchor);
return frag;
}
function append(anchor, dom) {
if (hydrating) {
var effect2 = (
/** @type {Effect & { nodes: EffectNodes }} */
active_effect
);
if ((effect2.f & REACTION_RAN) === 0 || effect2.nodes.end === null) {
effect2.nodes.end = hydrate_node;
}
hydrate_next();
return;
}
if (anchor === null) {
return;
}
anchor.before(
/** @type {Node} */
dom
);
}
function is_capture_event(name) {
return name.endsWith("capture") && name !== "gotpointercapture" && name !== "lostpointercapture";
}
const DELEGATED_EVENTS = [
"beforeinput",
"click",
"change",
"dblclick",
"contextmenu",
"focusin",
"focusout",
"input",
"keydown",
"keyup",
"mousedown",
"mousemove",
"mouseout",
"mouseover",
"mouseup",
"pointerdown",
"pointermove",
"pointerout",
"pointerover",
"pointerup",
"touchend",
"touchmove",
"touchstart"
];
function can_delegate_event(event_name) {
return DELEGATED_EVENTS.includes(event_name);
}
const ATTRIBUTE_ALIASES = {
// no `class: 'className'` because we handle that separately
formnovalidate: "formNoValidate",
ismap: "isMap",
nomodule: "noModule",
playsinline: "playsInline",
readonly: "readOnly",
defaultvalue: "defaultValue",
defaultchecked: "defaultChecked",
srcobject: "srcObject",
novalidate: "noValidate",
allowfullscreen: "allowFullscreen",
disablepictureinpicture: "disablePictureInPicture",
disableremoteplayback: "disableRemotePlayback"
};
function normalize_attribute(name) {
name = name.toLowerCase();
return ATTRIBUTE_ALIASES[name] ?? name;
}
const PASSIVE_EVENTS = ["touchstart", "touchmove"];
function is_passive_event(name) {
return PASSIVE_EVENTS.includes(name);
}
function set_text(text2, value) {
var str = value == null ? "" : typeof value === "object" ? `${value}` : value;
if (str !== /** @type {any} */
(text2[TEXT_CACHE] ??= text2.nodeValue)) {
text2[TEXT_CACHE] = str;
text2.nodeValue = `${str}`;
}
}
function mount(component2, options) {
return _mount(component2, options);
}
function hydrate(component2, options) {
init_operations();
options.intro = options.intro ?? false;
const target = options.target;
const was_hydrating = hydrating;
const previous_hydrate_node = hydrate_node;
try {
var anchor = /* @__PURE__ */ get_first_child(target);
while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */
anchor.data !== HYDRATION_START)) {
anchor = /* @__PURE__ */ get_next_sibling(anchor);
}
if (!anchor) {
throw HYDRATION_ERROR;
}
set_hydrating(true);
set_hydrate_node(
/** @type {Comment} */
anchor
);
const instance = _mount(component2, { ...options, anchor });
set_hydrating(false);
return (
/** @type {Exports} */
instance
);
} catch (error) {
if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) {
throw error;
}
if (error !== HYDRATION_ERROR) {
console.warn("Failed to hydrate: ", error);
}
if (options.recover === false) {
hydration_failed();
}
init_operations();
clear_text_content(target);
set_hydrating(false);
return mount(component2, options);
} finally {
set_hydrating(was_hydrating);
set_hydrate_node(previous_hydrate_node);
}
}
const listeners = /* @__PURE__ */ new Map();
function _mount(Component, { target, anchor, props = {}, events, context, intro = true, transformError }) {
init_operations();
var component2 = void 0;
var unmount2 = component_root(() => {
var anchor_node = anchor ?? target.appendChild(create_text());
boundary(
/** @type {TemplateNode} */
anchor_node,
{
pending: () => {
}
},
(anchor_node2) => {
push({});
var ctx = (
/** @type {ComponentContext} */
component_context
);
if (context) ctx.c = context;
if (events) {
props.$$events = events;
}
if (hydrating) {
assign_nodes(
/** @type {TemplateNode} */
anchor_node2,
null
);
}
component2 = Component(anchor_node2, props) || {};
if (hydrating) {
active_effect.nodes.end = hydrate_node;
if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */
hydrate_node.data !== HYDRATION_END) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
}
pop();
},
transformError
);
var registered_events = /* @__PURE__ */ new Set();
var event_handle = (events2) => {
for (var i = 0; i < events2.length; i++) {
var event_name = events2[i];
if (registered_events.has(event_name)) continue;
registered_events.add(event_name);
var passive = is_passive_event(event_name);
for (const node of [target, document]) {
var counts = listeners.get(node);
if (counts === void 0) {
counts = /* @__PURE__ */ new Map();
listeners.set(node, counts);
}
var count = counts.get(event_name);
if (count === void 0) {
node.addEventListener(event_name, handle_event_propagation, { passive });
counts.set(event_name, 1);
} else {
counts.set(event_name, count + 1);
}
}
}
};
event_handle(array_from(all_registered_events));
root_event_handles.add(event_handle);
return () => {
for (var event_name of registered_events) {
for (const node of [target, document]) {
var counts = (
/** @type {Map<string, number>} */
listeners.get(node)
);
var count = (
/** @type {number} */
counts.get(event_name)
);
if (--count == 0) {
node.removeEventListener(event_name, handle_event_propagation);
counts.delete(event_name);
if (counts.size === 0) {
listeners.delete(node);
}
} else {
counts.set(event_name, count);
}
}
}
root_event_handles.delete(event_handle);
if (anchor_node !== anchor) {
anchor_node.parentNode?.removeChild(anchor_node);
}
};
});
mounted_components.set(component2, unmount2);
return component2;
}
let mounted_components = /* @__PURE__ */ new WeakMap();
function unmount(component2, options) {
const fn = mounted_components.get(component2);
if (fn) {
mounted_components.delete(component2);
return fn(options);
}
return Promise.resolve();
}
class BranchManager {
/** @type {TemplateNode} */
anchor;
/** @type {Map<Batch, Key>} */
#batches = /* @__PURE__ */ new Map();
/**
* Map of keys to effects that are currently rendered in the DOM.
* These effects are visible and actively part of the document tree.
* Example:
*
data/skin/mobile/mygreek/js/altcha/i18n.js+2656
변경 전i18n.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후i18n.js
const noop = () => {
};
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function get(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let untracking = false;
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get(scope.store), {
[name]: value
});
} else {
Object.assign(get(scope.store), name);
}
scope.store.set(get(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n$Y = {
ariaLinkLabel: "Altcha (الموقع الرسمي)",
enterCode: "أدخل الرمز",
enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",
error: "فشل التحقق. حاول مرة أخرى لاحقاً.",
expired: "انتهت صلاحية التحقق. حاول مرة أخرى.",
footer: 'محمي بواسطة <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (الموقع الرسمي)">ALTCHA</a>',
getAudioChallenge: "احصل على تحدي صوتي",
label: "أنا لست روبوتاً",
loading: "جارٍ التحميل...",
reload: "إعادة تحميل",
verify: "تحقق",
verificationRequired: "مطلوب التحقق!",
verified: "تم التحقق",
verifying: "جارٍ التحقق...",
waitAlert: "جارٍ التحقق... يرجى الانتظار.",
cancel: "إلغاء",
enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه."
};
globalThis.$altcha.i18n.set("ar", i18n$Y);
const i18n$X = {
ariaLinkLabel: "Altcha (официален уебсайт)",
enterCode: "Въведете код",
enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",
error: "Проверката неуспешна. Моля, опитайте по-късно.",
expired: "Времето за проверка изтече. Моля, опитайте отново.",
footer: 'Защитено от <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официален уебсайт)">ALTCHA</a>',
getAudioChallenge: "Аудио проверка",
label: "Аз не съм робот",
loading: "Зареждане...",
reload: "Презареди",
verify: "Провери",
verificationRequired: "Изисква се проверка!",
verified: "Проверено",
verifying: "Проверява се...",
waitAlert: "Проверката е в процес... моля изчакайте.",
cancel: "Отказ",
enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу."
};
globalThis.$altcha.i18n.set("bg", i18n$X);
const i18n$W = {
ariaLinkLabel: "Altcha (афіцыйны сайт)",
enterCode: "Увядзіце код",
enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",
error: "Праверка не прайшла. Паспрабуйце пазней.",
expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.",
footer: 'Абаронена <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (афіцыйны сайт)">ALTCHA</a>',
getAudioChallenge: "Атрымаць аўдыё выклік",
label: "Я не робат",
loading: "Загрузка...",
reload: "Перазагрузіць",
verify: "Праверыць",
verificationRequired: "Патрабуецца праверка!",
verified: "Праверана",
verifying: "Правяраем...",
waitAlert: "Праверка... калі ласка, пачакайце.",
cancel: "Скасаваць",
enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй."
};
globalThis.$altcha.i18n.set("be", i18n$W);
const i18n$V = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("bs", i18n$V);
const i18n$U = {
ariaLinkLabel: "Altcha (lloc web oficial)",
enterCode: "Introdueix el codi",
enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",
error: "Verificació fallida. Torna-ho a provar més tard.",
expired: "Verificació expirada. Torna-ho a provar.",
footer: 'Protegit per <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (lloc web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtenir un desafiament d’àudio",
label: "No sóc un robot",
loading: "Carregant...",
reload: "Torna a carregar",
verify: "Verificar",
verificationRequired: "Es requereix verificació!",
verified: "Verificat",
verifying: "Verificant...",
waitAlert: "Verificant... si us plau, espera.",
cancel: "Cancel·la",
enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent."
};
globalThis.$altcha.i18n.set("ca", i18n$U);
const i18n$T = {
ariaLinkLabel: "Altcha (oficiální web)",
enterCode: "Zadejte kód",
enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",
error: "Ověření selhalo. Zkuste to prosím později.",
expired: "Ověření vypršelo. Zkuste to prosím znovu.",
footer: 'Chráněno pomocí <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiální web)">ALTCHA</a>',
getAudioChallenge: "Získat audio výzvu",
label: "Nejsem robot",
loading: "Načítání...",
reload: "Znovu načíst",
verify: "Ověřit",
verificationRequired: "Vyžaduje se ověření!",
verified: "Ověřeno",
verifying: "Ověřování...",
waitAlert: "Probíhá ověření... prosím počkejte.",
cancel: "Zrušit",
enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže."
};
globalThis.$altcha.i18n.set("cs", i18n$T);
const i18n$S = {
ariaLinkLabel: "Altcha (officiel hjemmeside)",
enterCode: "Indtast kode",
enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",
error: "Verificering mislykkedes. Prøv venligst igen senere.",
expired: "Verificering udløbet. Prøv venligst igen.",
footer: 'Beskyttet af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiel hjemmeside)">ALTCHA</a>',
getAudioChallenge: "Hent lydudfordring",
label: "Jeg er ikke en robot",
loading: "Indlæser...",
reload: "Genindlæs",
verify: "Verificer",
verificationRequired: "Verificering kræves!",
verified: "Verificeret",
verifying: "Verificerer...",
waitAlert: "Verificerer... vent venligst.",
cancel: "Annuller",
enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder."
};
globalThis.$altcha.i18n.set("da", i18n$S);
const i18n$R = {
ariaLinkLabel: "Altcha (offizielle Website)",
enterCode: "Code eingeben",
enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",
error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",
footer: 'Geschützt durch <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offizielle Website)">ALTCHA</a>',
getAudioChallenge: "Audio-Herausforderung anfordern",
label: "Ich bin kein Roboter",
loading: "Lade...",
reload: "Neu laden",
verify: "Überprüfen",
verificationRequired: "Überprüfung erforderlich!",
verified: "Überprüft",
verifying: "Wird überprüft...",
waitAlert: "Überprüfung läuft... bitte warten.",
cancel: "Abbrechen",
enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."
};
globalThis.$altcha.i18n.set("de", i18n$R);
const i18n$Q = {
ariaLinkLabel: "Altcha (επίσημος ιστότοπος)",
enterCode: "Εισαγάγετε κωδικό",
enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",
error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",
expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.",
footer: 'Προστατεύεται από το <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (επίσημος ιστότοπος)">ALTCHA</a>',
getAudioChallenge: "Λήψη ηχητικής δοκιμασίας",
label: "Δεν είμαι ρομπότ",
loading: "Φόρτωση...",
reload: "Επαναφόρτωση",
verify: "Επαλήθευση",
verificationRequired: "Απαιτείται έλεγχος!",
verified: "Επαληθεύτηκε",
verifying: "Γίνεται επαλήθευση...",
waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.",
cancel: "Ακύρωση",
enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."
};
globalThis.$altcha.i18n.set("el", i18n$Q);
const i18n$P = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Introduce el código",
enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor intente nuevamente más tarde.",
expired: "Verificación expirada. Por favor intente nuevamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un desafío de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Recargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espere.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo."
};
globalThis.$altcha.i18n.set("es-es", i18n$P);
const i18n$O = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Ingresa el código",
enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.",
expired: "La verificación expiró. Por favor inténtalo de nuevo.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un reto de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Volver a cargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espera.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación."
};
globalThis.$altcha.i18n.set("es-419", i18n$O);
const i18n$N = {
ariaLinkLabel: "Altcha (ametlik veebisait)",
enterCode: "Sisesta kood",
enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",
error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",
expired: "Kinnitamine aegus. Proovi uuesti.",
footer: 'Kaitstud <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ametlik veebisait)">ALTCHA</a> poolt',
getAudioChallenge: "Hangi heliülesanne",
label: "Ma ei ole robot",
loading: "Laadimine...",
reload: "Laadi uuesti",
verify: "Kinnita",
verificationRequired: "Kontroll on vajalik!",
verified: "Kinnitatud",
verifying: "Kinnitamine...",
waitAlert: "Kinnitamine... palun oota.",
cancel: "Tühista",
enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood."
};
globalThis.$altcha.i18n.set("et", i18n$N);
const i18n$M = {
ariaLinkLabel: "Altcha (webgune ofiziala)",
enterCode: "Sartu kodea",
enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",
error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.",
expired: "Egiaztatzea iraungi da. Saiatu berriro.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (webgune ofiziala)">ALTCHA</a>k babestuta',
getAudioChallenge: "Jaso audio-erronka bat",
label: "Ez naiz robot bat",
loading: "Kargatzen...",
reload: "Birkargatu",
verify: "Egiaztatu",
verificationRequired: "Egiaztatzea beharrezkoa da!",
verified: "Egiaztatuta",
verifying: "Egiaztatzen...",
waitAlert: "Egiaztatzen... itxaron mesedez.",
cancel: "Utzi",
enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea."
};
globalThis.$altcha.i18n.set("eu", i18n$M);
const i18n$L = {
ariaLinkLabel: "Altcha (وب‌سایت رسمی)",
enterCode: "کد را وارد کنید",
enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",
error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",
expired: "احراز هویت منقضی شد. دوباره تلاش کنید.",
footer: 'محافظت شده توسط <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (وب‌سایت رسمی)">ALTCHA</a>',
getAudioChallenge: "دریافت چالش صوتی",
label: "من ربات نیستم",
loading: "در حال بارگذاری...",
reload: "بارگذاری مجدد",
verify: "تایید",
verificationRequired: "احراز هویت لازم است!",
verified: "تایید شد",
verifying: "در حال تایید...",
waitAlert: "در حال تایید... لطفا منتظر بمانید.",
cancel: "لغو کردن",
enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید."
};
globalThis.$altcha.i18n.set("fa", i18n$L);
const i18n$K = {
ariaLinkLabel: "Altcha (offiziell Websäit)",
enterCode: "Code aginn",
enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",
error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",
expired: "Verifikatioun ofgelaf. Probéiert nach emol.",
footer: 'Geschützt vun <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offiziell Websäit)">ALTCHA</a>',
getAudioChallenge: "Kritt eng Audio-Herausfuerderung",
label: "Ech sinn keen Robot",
loading: "Lueden...",
reload: "Nei lueden",
verify: "Verifizéieren",
verificationRequired: "Verifikatioun néideg!",
verified: "Verifizéiert",
verifying: "Verifizéieren...",
waitAlert: "Verifizéieren... waart wgl.",
cancel: "Ofbriechen",
enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."
};
globalThis.$altcha.i18n.set("lb", i18n$K);
const i18n$J = {
ariaLinkLabel: "Altcha (virallinen verkkosivusto)",
enterCode: "Syötä koodi",
enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",
error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.",
expired: "Varmennus vanhentui. Yritä uudelleen.",
footer: 'Suojattu <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (virallinen verkkosivusto)">ALTCHA</a>:lla',
getAudioChallenge: "Hae äänitehtävä",
label: "En ole robotti",
loading: "Ladataan...",
reload: "Lataa uudelleen",
verify: "Vahvista",
verificationRequired: "Vahvistus vaaditaan!",
verified: "Vahvistettu",
verifying: "Vahvistetaan...",
waitAlert: "Vahvistetaan... odota hetki.",
cancel: "Peruuta",
enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi."
};
globalThis.$altcha.i18n.set("fi", i18n$J);
const i18n$I = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",
error: "Échec de la vérification. Réessayez plus tard.",
expired: "La vérification a expiré. Réessayez.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-ca", i18n$I);
const i18n$H = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",
error: "Échec de la vérification. Essayez à nouveau plus tard.",
expired: "La vérification a expiré. Essayez à nouveau.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-fr", i18n$H);
const i18n$G = {
ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)",
enterCode: "Iontráil cód",
enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",
error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.",
expired: "Tá an fíorú as feidhm. Bain triail eile as.",
footer: 'Cosanta ag <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (láithreán gréasáin oifigiúil)">ALTCHA</a>',
getAudioChallenge: "Faigh dúshlán fuaime",
label: "Níl mé i mo róbat",
loading: "Á luchtú...",
reload: "Athluchtaigh",
verify: "Fíoraigh",
verificationRequired: "Fíorú riachtanach!",
verified: "Fíoraithe",
verifying: "Fíorú ar siúl...",
waitAlert: "Fíorú ar siúl... fan go fóill.",
cancel: "Cealaigh",
enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."
};
globalThis.$altcha.i18n.set("ga", i18n$G);
const i18n$F = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",
error: "Provjera nije uspjela. Molimo pokušajte kasnije.",
expired: "Provjera je istekla. Molimo pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Audio provjera",
label: "Ja nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Provjeri",
verificationRequired: "Potrebna je provjera!",
verified: "Provjereno",
verifying: "Provjeravanje...",
waitAlert: "Provjera je u tijeku... molimo pričekajte.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("hr", i18n$F);
const i18n$E = {
ariaLinkLabel: "Altcha (hivatalos weboldal)",
enterCode: "Írja be a kódot",
enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",
error: "A hitelesítés nem sikerült. Próbáld meg később újra.",
expired: "A hitelesítés lejárt. Próbáld újra.",
footer: 'Védve a következő által: <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (hivatalos weboldal)">ALTCHA</a>',
getAudioChallenge: "Hangalapú kihívás kérése",
label: "Nem vagyok robot",
loading: "Betöltés...",
reload: "Újratöltés",
verify: "Ellenőrzés",
verificationRequired: "Ellenőrzés szükséges!",
verified: "Ellenőrizve",
verifying: "Ellenőrzés folyamatban...",
waitAlert: "Ellenőrzés folyamatban... kérlek várj.",
cancel: "Mégse",
enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját."
};
globalThis.$altcha.i18n.set("hu", i18n$E);
const i18n$D = {
ariaLinkLabel: "Altcha (opinber vefsíða)",
enterCode: "Sláðu inn kóða",
enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",
error: "Staðfesting mistókst. Reyndu aftur síðar.",
expired: "Staðfesting er útrunnin. Reyndu aftur.",
footer: 'Verndað af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (opinber vefsíða)">ALTCHA</a>',
getAudioChallenge: "Fá hljóðáskorun",
label: "Ég er ekki robot",
loading: "Hleður...",
reload: "Hleð aftur",
verify: "Staðfesta",
verificationRequired: "Staðfesting er nauðsynleg!",
verified: "Staðfest",
verifying: "Að staðfesta...",
waitAlert: "Að staðfesta... vinsamlegast bíða.",
cancel: "Hætta við",
enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."
};
globalThis.$altcha.i18n.set("is", i18n$D);
const i18n$C = {
ariaLinkLabel: "Altcha (sito ufficiale)",
enterCode: "Inserisci il codice",
enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",
error: "Verifica fallita. Riprova più tardi.",
expired: "Verifica scaduta. Riprova.",
footer: 'Protetto da <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sito ufficiale)">ALTCHA</a>',
getAudioChallenge: "Ottieni una sfida audio",
label: "Non sono un robot",
loading: "Caricamento...",
reload: "Ricarica",
verify: "Verifica",
verificationRequired: "Verifica richiesta!",
verified: "Verificato",
verifying: "Verifica in corso...",
waitAlert: "Verifica in corso... attendere.",
cancel: "Annulla",
enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante."
};
globalThis.$altcha.i18n.set("it", i18n$C);
const i18n$B = {
ariaLinkLabel: "Altcha (oficiali svetainė)",
enterCode: "Įveskite kodą",
enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",
error: "Patvirtinimas nepavyko. Bandykite vėliau.",
expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.",
footer: 'Apsaugota <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiali svetainė)">ALTCHA</a>',
getAudioChallenge: "Gauti garso užduotį",
label: "Aš nesu robotas",
loading: "Įkeliama...",
reload: "Įkelti iš naujo",
verify: "Patvirtinti",
verificationRequired: "Reikalingas patvirtinimas!",
verified: "Patvirtinta",
verifying: "Tikrinama...",
waitAlert: "Tikrinama... prašome palaukti.",
cancel: "Atšaukti",
enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."
};
globalThis.$altcha.i18n.set("lt", i18n$B);
const i18n$A = {
ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)",
enterCode: "Ievadiet kodu",
enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",
error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",
expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",
footer: 'Aizsargāts ar <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiālā tīmekļa vietne)">ALTCHA</a>',
getAudioChallenge: "Saņemt audio izaicinājumu",
label: "Es neesmu robots",
loading: "Notiek ielāde...",
reload: "Pārlādēt",
verify: "Verificēt",
verificationRequired: "Nepieciešama verifikācija!",
verified: "Verificēts",
verifying: "Notiek verifikācija...",
waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.",
cancel: "Atcelt",
enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."
};
globalThis.$altcha.i18n.set("lv", i18n$A);
const i18n$z = {
ariaLinkLabel: "Altcha (sit uffiċjali)",
enterCode: "Idħol il-kodiċi",
enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",
error: "Il-verifika falliet. Erġa’ pprova aktar tard.",
expired: "Il-verifika skadiet. Erġa’ pprova.",
footer: 'Protett minn <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sit uffiċjali)">ALTCHA</a>',
getAudioChallenge: "Ikseb sfida bl-awdjo",
label: "M’inix robot",
loading: "Qed jitgħabba...",
reload: "Ittella’ mill-ġdid",
verify: "Ivverifika",
verificationRequired: "Verifika meħtieġa!",
verified: "Ivverifikat",
verifying: "Verifika għaddejja...",
waitAlert: "Verifika għaddejja... stenna ftit.",
cancel: "Ikkanċella",
enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."
};
globalThis.$altcha.i18n.set("mt", i18n$z);
const i18n$y = {
ariaLinkLabel: "Altcha (offisiell nettside)",
enterCode: "Skriv inn kode",
enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.",
error: "Verifisering mislyktes. Prøv igjen senere.",
expired: "Verifiseringen utløp. Prøv igjen.",
footer: 'Beskyttet av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offisiell nettside)">ALTCHA</a>',
getAudioChallenge: "Få en lydutfordring",
label: "Jeg er ikke en robot",
loading: "Laster...",
reload: "Last på nytt",
verify: "Verifiser",
verificationRequired: "Verifisering kreves!",
verified: "Verifisert",
verifying: "Verifiserer...",
waitAlert: "Verifiserer... vennligst vent.",
cancel: "Avbryt",
enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor."
};
globalThis.$altcha.i18n.set("nb", i18n$y);
const i18n$x = {
ariaLinkLabel: "Altcha (officiële website)",
enterCode: "Voer code in",
enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",
error: "Verificatie mislukt. Probeer het later opnieuw.",
expired: "Verificatie verlopen. Probeer het opnieuw.",
footer: 'Beschermd door <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiële website)">ALTCHA</a>',
getAudioChallenge: "Audio-uitdaging ontvangen",
label: "Ik ben geen robot",
loading: "Laden...",
reload: "Herladen",
verify: "Verifiëren",
verificationRequired: "Verificatie vereist!",
verified: "Geverifieerd",
verifying: "Bezig met verifiëren...",
waitAlert: "Bezig met verifiëren... even geduld a.u.b.",
cancel: "Annuleren",
enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in."
};
globalThis.$altcha.i18n.set("nl", i18n$x);
const i18n$w = {
ariaLinkLabel: "Altcha (oficjalna strona internetowa)",
enterCode: "Wprowadź kod",
enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",
error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.",
expired: "Weryfikacja wygasła. Spróbuj ponownie.",
footer: 'Chronione przez <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficjalna strona internetowa)">ALTCHA</a>',
getAudioChallenge: "Pobierz zadanie dźwiękowe",
label: "Nie jestem robotem",
loading: "Ładowanie...",
reload: "Odśwież",
verify: "Zweryfikuj",
verificationRequired: "Wymagana weryfikacja!",
verified: "Zweryfikowano",
verifying: "Weryfikacja...",
waitAlert: "Trwa weryfikacja... proszę czekać.",
cancel: "Anuluj",
enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka."
};
globalThis.$altcha.i18n.set("pl", i18n$w);
const i18n$v = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduza o código",
enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",
error: "A verificação falhou. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Não sou um robô",
loading: "A carregar...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "A verificar...",
waitAlert: "A verificar... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-pt", i18n$v);
const i18n$u = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Digite o código",
enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",
error: "Falha na verificação. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Eu não sou um robô",
loading: "Carregando...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-br", i18n$u);
const i18n$t = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduceți codul",
enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",
error: "Verificarea a eșuat. Încearcă din nou mai târziu.",
expired: "Verificarea a expirat. Încearcă din nou.",
footer: 'Protejat de <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obține o provocare audio",
label: "Nu sunt un robot",
loading: "Se încarcă...",
reload: "Reîncarcă",
verify: "Verifică",
verificationRequired: "Verificare necesară!",
verified: "Verificat",
verifying: "Se verifică...",
waitAlert: "Se verifică... te rugăm să aștepți.",
cancel: "Anulare",
enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."
};
globalThis.$altcha.i18n.set("ro", i18n$t);
const i18n$s = {
ariaLinkLabel: "Altcha (официальный сайт)",
enterCode: "Введите код",
enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",
error: "Ошибка верификации. Попробуйте позже.",
expired: "Срок действия верификации истек. Попробуйте снова.",
footer: 'Защищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официальный сайт)">ALTCHA</a>',
getAudioChallenge: "Получить аудио задачу",
label: "Я не робот",
loading: "Загрузка...",
reload: "Перезагрузить",
verify: "Проверить",
verificationRequired: "Требуется проверка!",
verified: "Проверено",
verifying: "Идет проверка...",
waitAlert: "Идет проверка... Пожалуйста, подождите.",
cancel: "Отмена",
enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже."
};
globalThis.$altcha.i18n.set("ru", i18n$s);
const i18n$r = {
ariaLinkLabel: "Altcha (oficiálna webová stránka)",
enterCode: "Zadajte kód",
enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",
error: "Verifikácia zlyhala. Skúste to znova neskôr.",
expired: "Verifikácia vypršala. Skúste to znova.",
footer: 'Chránené <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiálna webová stránka)">ALTCHA</a>',
getAudioChallenge: "Získať audio výzvu",
label: "Nie som robot",
loading: "Načítava sa...",
reload: "Obnoviť",
verify: "Verifikovať",
verificationRequired: "Vyžaduje sa overenie!",
verified: "Verifikované",
verifying: "Prebieha verifikácia...",
waitAlert: "Prebieha verifikácia... prosím čakajte.",
cancel: "Zrušiť",
enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie."
};
globalThis.$altcha.i18n.set("sk", i18n$r);
const i18n$q = {
ariaLinkLabel: "Altcha (uradna spletna stran)",
enterCode: "Vnesite kodo",
enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",
error: "Preverjanje ni uspelo. Poskusite znova kasneje.",
expired: "Preverjanje je poteklo. Poskusite znova.",
footer: 'Zaščiteno z <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (uradna spletna stran)">ALTCHA</a>',
getAudioChallenge: "Pridobite zvočni izziv",
label: "Nisem robot",
loading: "Nalagam...",
reload: "Ponovno naloži",
verify: "Preveri",
verificationRequired: "Potrebna je preveritev!",
verified: "Preverjeno",
verifying: "Preverjanje...",
waitAlert: "Preverjanje... prosim počakajte.",
cancel: "Preklic",
enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."
};
globalThis.$altcha.i18n.set("sl", i18n$q);
const i18n$p = {
ariaLinkLabel: "Altcha (faqja zyrtare)",
enterCode: "Fut kodin",
enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",
error: "Verifikimi dështoi. Provoni përsëri më vonë.",
expired: "Verifikimi ka skaduar. Provoni përsëri.",
footer: 'I mbrojtur nga <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (faqja zyrtare)">ALTCHA</a>',
getAudioChallenge: "Merr një sfidë audio",
label: "Unë nuk jam një robot",
loading: "Duke u ngarkuar...",
reload: "Ringarko",
verify: "Verifiko",
verificationRequired: "Kërkohet verifikimi!",
verified: "I verifikuar",
verifying: "Duke verifikuar...",
waitAlert: "Duke verifikuar... ju lutem prisni.",
cancel: "Anuloje",
enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."
};
globalThis.$altcha.i18n.set("sq", i18n$p);
const i18n$o = {
ariaLinkLabel: "Altcha (zvanična web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (zvanična web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovo učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Откажи",
enterCodeFromImage: "Да бисте наставили, унесите код са слике испод."
};
globalThis.$altcha.i18n.set("sr", i18n$o);
const i18n$n = {
ariaLinkLabel: "Altcha (officiell webbplats)",
enterCode: "Ange kod",
enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
error: "Verifiering misslyckades. Försök igen senare.",
expired: "Verifieringen har gått ut. Försök igen.",
footer: 'Skyddad av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiell webbplats)">ALTCHA</a>',
getAudioChallenge: "Få ljudutmaning",
label: "Jag är inte en robot",
loading: "Laddar...",
reload: "Ladda om",
verify: "Verifiera",
verificationRequired: "Verifiering krävs!",
verified: "Verifierad",
verifying: "Verifierar...",
waitAlert: "Verifierar... vänligen vänta.",
cancel: "Avbryt",
enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan."
};
globalThis.$altcha.i18n.set("sv", i18n$n);
const i18n$m = {
ariaLinkLabel: "Altcha (resmi web sitesi)",
enterCode: "Kodu girin",
enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
footer: 'ALTCHA tarafından korunuyor <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (resmi web sitesi)">ALTCHA</a>',
getAudioChallenge: "Sesli doğrulama al",
label: "Ben robot değilim",
loading: "Yükleniyor...",
reload: "Yeniden yükle",
verify: "Doğrula",
verificationRequired: "Doğrulama gerekli!",
verified: "Doğrulandı",
verifying: "Doğrulama yapılıyor...",
waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.",
cancel: "İptal",
enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin."
};
globalThis.$altcha.i18n.set("tr", i18n$m);
const i18n$l = {
ariaLinkLabel: "Altcha (офіційний сайт)",
enterCode: "Введіть код",
enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
error: "Перевірка не вдалася. Спробуйте пізніше.",
expired: "Перевірка прострочена. Спробуйте знову.",
footer: 'Захищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (офіційний сайт)">ALTCHA</a>',
getAudioChallenge: "Отримати аудіо-челлендж",
label: "Я не робот",
loading: "Завантаження...",
reload: "Перезавантажити",
verify: "Перевірити",
verificationRequired: "Потрібна перевірка!",
verified: "Перевірено",
verifying: "Перевіряється...",
waitAlert: "Перевірка... будь ласка, зачекайте.",
cancel: "Скасувати",
enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче."
};
globalThis.$altcha.i18n.set("uk", i18n$l);
const i18n$k = {
ariaLinkLabel: "Altcha (amptelike webwerf)",
enterCode: "Voer kode in",
enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",
error: "Verifikasie het misluk. Probeer later weer.",
expired: "Verifikasie het verval. Probeer weer.",
footer: 'Beskerm deur <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (amptelike webwerf)">ALTCHA</a>',
getAudioChallenge: "Kry 'n klankuitdaging",
label: "Ek is nie 'n robot nie",
loading: "Laai...",
reload: "Laai weer",
verify: "Verifieer",
verificationRequired: "Verifikasie is vereis!",
verified: "Geverifieer",
verifying: "Verifieer...",
waitAlert: "Verifieer... wag asseblief.",
cancel: "Kanselleer",
enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."
};
globalThis.$altcha.i18n.set("af", i18n$k);
const i18n$j = {
ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)",
enterCode: "ኮድ አስገባ",
enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",
error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",
expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",
footer: 'በ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ዋናው ድህረ ገጽ)">ALTCHA</a> የተጠበቀ',
getAudioChallenge: "የድምጽ ፈተና ያግኙ",
label: "እኔ ሮቦት አይደለሁም",
loading: "በመጫን ላይ...",
reload: "እንደገና ጫን",
verify: "አረጋግጥ",
verificationRequired: "ማረጋገጫ ያስፈልጋል!",
verified: "ተረጋግጧል",
verifying: "በማረጋገጥ ላይ...",
waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",
cancel: "ይቅር",
enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"
};
globalThis.$altcha.i18n.set("am", i18n$j);
const i18n$i = {
ariaLinkLabel: "Altcha (tovuti rasmi)",
enterCode: "Weka nambari",
enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.",
error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.",
expired: "Uthibitishaji umeisha. Jaribu tena.",
footer: 'Imealindwa na <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (tovuti rasmi)">ALTCHA</a>',
getAudioChallenge: "Pata changamoto ya sauti",
label: "Mimi sio roboti",
loading: "Inapakia...",
reload: "Pakia tena",
verify: "Thibitisha",
verificationRequired: "Uthibitishaji unahitajika!",
verified: "Imethibitishwa",
verifying: "Inathibitisha...",
waitAlert: "Inathibitisha... tafadhali subiri.",
cancel: "Ghairi",
enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."
};
globalThis.$altcha.i18n.set("sw", i18n$i);
const i18n$h = {
ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)",
enterCode: "Tẹ koodu sii",
enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",
error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",
expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",
footer: 'Ti wa ni ààbò nipasẹ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oju opo wẹẹbu osise)">ALTCHA</a>',
getAudioChallenge: "Gba ìjàdú ohùn",
label: "Emi kii ṣe ẹrọ",
loading: "Ó ń gbé sílẹ̀...",
reload: "Tún gbé wọlé",
verify: "Ṣàdájọ́",
verificationRequired: "Ìdájọ́kòwò ni a nílò!",
verified: "A ti dájọ́",
verifying: "Ó ń ṣàdájọ́...",
waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",
cancel: "Fagbọsẹ",
enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."
};
globalThis.$altcha.i18n.set("yo", i18n$h);
const i18n$g = {
ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)",
enterCode: "কোড লিখুন",
enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",
error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",
expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",
footer: 'দ্বারা সুরক্ষিত <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (অফিসিয়াল ওয়েবসাইট)">ALTCHA</a>',
getAudioChallenge: "অডিও চ্যালেঞ্জ নিন",
label: "আমি রোবট নই",
loading: "লোড হচ্ছে...",
reload: "পুনরায় লোড করুন",
verify: "যাচাই করুন",
verificationRequired: "যাচাই প্রয়োজন!",
verified: "যাচাই করা হয়েছে",
verifying: "যাচাই করা হচ্ছে...",
waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",
cancel: "বাতিল করুন",
enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"
};
globalThis.$altcha.i18n.set("bn", i18n$g);
const i18n$f = {
ariaLinkLabel: "Altcha (אתר רשמי)",
enterCode: "הזן קוד",
enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",
error: "האימות נכשל. נסה שוב מאוחר יותר.",
expired: "תוקף האימות פג. נסה שוב.",
footer: 'מוגן על ידי <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (אתר רשמי)">ALTCHA</a>',
getAudioChallenge: "קבל אתגר שמע",
label: "אני לא רובוט",
loading: "טוען...",
reload: "טען מחדש",
verify: "אמת",
verificationRequired: "נדרש אימות!",
verified: "אומת",
verifying: "מאמת...",
waitAlert: "מבצע אימות... אנא המתן.",
cancel: "ביטול",
enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."
};
globalThis.$altcha.i18n.set("he", i18n$f);
const i18n$e = {
ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)",
enterCode: "कोड दर्ज करेंं",
enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",
error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",
expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",
footer: 'द्वारा संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (आधिकारिक वेबसाइट)">ALTCHA</a>',
getAudioChallenge: "ऑडियो चुनौती प्राप्त करें",
label: "मैं रोबोट नहीं हूँ",
loading: "लोड हो रहा है...",
reload: "पुनः लोड करें",
verify: "सत्यापित करें",
verificationRequired: "सत्यापन आवश्यक है!",
verified: "सत्यापित",
verifying: "सत्यापित कर रहे हैं...",
waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",
cancel: "रद्द करें",
enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"
};
globalThis.$altcha.i18n.set("hi", i18n$e);
const i18n$d = {
ariaLinkLabel: "Altcha (situs web resmi)",
enterCode: "Masukkan kode",
enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",
error: "Verifikasi gagal. Coba lagi nanti.",
expired: "Verifikasi telah kedaluwarsa. Coba lagi.",
footer: 'Dilindungi oleh <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (situs web resmi)">ALTCHA</a>',
getAudioChallenge: "Dapatkan tantangan audio",
label: "Saya bukan robot",
loading: "Memuat...",
reload: "Muat ulang",
verify: "Verifikasi",
verificationRequired: "Verifikasi diperlukan!",
verified: "Terverifikasi",
verifying: "Memverifikasi...",
waitAlert: "Memverifikasi... harap tunggu.",
cancel: "Batal",
enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."
};
globalThis.$altcha.i18n.set("id", i18n$d);
const i18n$c = {
ariaLinkLabel: "Altcha (公式ウェブサイト)",
enterCode: "コードを入力",
enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。",
error: "認証に失敗しました。後でもう一度試してください。",
expired: "認証が期限切れです。再試行してください。",
footer: '保護されています <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (公式ウェブサイト)">ALTCHA</a>',
getAudioChallenge: "音声チャレンジを取得",
label: "私はロボットではありません",
loading: "読み込み中...",
reload: "再読み込み",
verify: "確認",
verificationRequired: "認証が必要です!",
verified: "確認済み",
verifying: "確認中...",
waitAlert: "確認中...少々お待ちください。",
cancel: "キャンセル",
enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。"
};
globalThis.$altcha.i18n.set("ja", i18n$c);
const i18n$b = {
ariaLinkLabel: "Altcha (공식 웹사이트)",
enterCode: "코드 입력",
enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",
error: "인증 실패. 나중에 다시 시도해주세요.",
expired: "인증이 만료되었습니다. 다시 시도해주세요.",
footer: 'ALTCHA에서 보호됨 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (공식 웹사이트)">ALTCHA</a>',
getAudioChallenge: "오디오 챌린지 받기",
label: "저는 로봇이 아닙니다",
loading: "로딩 중...",
reload: "새로 고침",
verify: "확인",
verificationRequired: "인증이 필요합니다!",
verified: "확인됨",
verifying: "확인 중...",
waitAlert: "확인 중... 잠시만 기다려주세요.",
cancel: "취소",
enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요."
};
globalThis.$altcha.i18n.set("ko", i18n$b);
const i18n$a = {
ariaLinkLabel: "Altcha (ресми веб-сайт)",
enterCode: "Кодты енгізіңіз",
enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",
error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",
expired: "Тексеру мерзімі аяқталды. Қайталаңыз.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ресми веб-сайт)">ALTCHA</a> қорғайды',
getAudioChallenge: "Аудио сынақ алу",
label: "Мен робот емеспін",
loading: "Жүктелуде...",
reload: "Қайта жүктеу",
verify: "Тексеру",
verificationRequired: "Тексеру талап етіледі!",
verified: "Тексерілді",
verifying: "Тексеруде...",
waitAlert: "Тексерілуде... күте тұрыңыз.",
cancel: "Болдыру",
enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."
};
globalThis.$altcha.i18n.set("kk", i18n$a);
const i18n$9 = {
ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)",
enterCode: "कोड टाकाा",
enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",
error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",
expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",
footer: 'द्वारे संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (अधिकृत संकेतस्थळ)">ALTCHA</a>',
getAudioChallenge: "ऑडिओ चॅलेंज मिळवा",
label: "मी रोबोट नाही",
loading: "लोड होत आहे...",
reload: "पुन्हा लोड करा",
verify: "पुष्टीकरण करा",
verificationRequired: "पडताळणी आवश्यक आहे!",
verified: "पुष्टीकरण झाले",
verifying: "पुष्टीकरण करत आहे...",
waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",
cancel: "रद्द करा",
enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."
};
globalThis.$altcha.i18n.set("mr", i18n$9);
const i18n$8 = {
ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",
enterCode: "குறியீட்டை உள்ளிடவும்",
enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (அதிகாரப்பூர்வ வலைத்தளம்)">ALTCHA</a>',
getAudioChallenge: "ஒலி சவாலை பெறவும்",
label: "நான் ரோபோடான அல்ல",
loading: "செயலாக்கம்...",
reload: "மீண்டும் புதுப்பிக்கவும்",
verify: "சரிபார்க்கவும்",
verificationRequired: "சரிபார்ப்பு தேவை!",
verified: "சரிபார்க்கப்பட்டது",
verifying: "சரிபார்க்கப்படுகிறது...",
waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",
cancel: "ரத்துசெய்",
enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."
};
globalThis.$altcha.i18n.set("ta", i18n$8);
const i18n$7 = {
ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)",
enterCode: "కోడ్‌ని నమోదు చేయండి",
enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (అధికారిక వెబ్‌సైట్)">ALTCHA</a>',
getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
label: "నేను రోబోట్ కాదు",
loading: "లోడ్ అవుతోంది...",
reload: "మళ్ళీ లోడ్ చేయండి",
verify: "ధ్రువీకరించు",
verificationRequired: "ధృవీకరణ అవసరం!",
verified: "ధ్రువీకరించబడింది",
verifying: "ధ్రువీకరణ జరుగుతుంది...",
waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",
cancel: "రద్దు చేయండి",
enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."
};
globalThis.$altcha.i18n.set("te", i18n$7);
const i18n$6 = {
ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)",
enterCode: "ป้อนรหัส",
enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
footer: 'ป้องกันโดย <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (เว็บไซต์ทางการ)">ALTCHA</a>',
getAudioChallenge: "รับการท้าทายเสียง",
label: "ฉันไม่ใช่บอท",
loading: "กำลังโหลด...",
reload: "โหลดใหม่",
verify: "ตรวจสอบ",
verificationRequired: "จำเป็นต้องตรวจสอบ!",
verified: "ตรวจสอบแล้ว",
verifying: "กำลังตรวจสอบ...",
waitAlert: "กำลังตรวจสอบ... กรุณารอ",
cancel: "ยกเลิก",
enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"
};
globalThis.$altcha.i18n.set("th", i18n$6);
const i18n$5 = {
ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)",
enterCode: "کوڈ درج کریں",
enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (سرکاری ویب سائٹ)">ALTCHA</a>',
getAudioChallenge: "آڈیو چیلنج حاصل کریں",
label: "میں روبوٹ نہیں ہوں",
loading: "لوڈ ہو رہا ہے...",
reload: "دوبارہ لوڈ کریں",
verify: "توثیق کریں",
verificationRequired: "تصدیق ضروری ہے!",
verified: "توثیق شدہ",
verifying: "توثیق ہو رہی ہے...",
waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",
cancel: "منسوخ کریں",
enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"
};
globalThis.$altcha.i18n.set("ur", i18n$5);
const i18n$4 = {
ariaLinkLabel: "Altcha (rasmiy veb-sayt)",
enterCode: "Kodni kiriting",
enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",
error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",
expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (rasmiy veb-sayt)">ALTCHA</a> tomonidan himoyalangan',
getAudioChallenge: "Audio sinovni olish",
label: "Men robot emasman",
loading: "Yuklanmoqda...",
reload: "Qayta yuklash",
verify: "Tekshirish",
verificationRequired: "Tekshiruv talab qilinadi!",
verified: "Tekshirildi",
verifying: "Tekshirilmoqda...",
waitAlert: "Tekshirilmoqda... iltimos kuting.",
cancel: "Bekor qilish",
enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."
};
globalThis.$altcha.i18n.set("uz", i18n$4);
const i18n$3 = {
ariaLinkLabel: "Altcha (trang web chính thức)",
enterCode: "Nhập mã",
enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
error: "Xác minh thất bại. Vui lòng thử lại sau.",
expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
footer: 'Được bảo vệ bởi <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (trang web chính thức)">ALTCHA</a>',
getAudioChallenge: "Nhận thử thách âm thanh",
label: "Tôi không phải là robot",
loading: "Đang tải...",
reload: "Tải lại",
verify: "Xác minh",
verificationRequired: "Yêu cầu xác minh!",
verified: "Đã xác minh",
verifying: "Đang xác minh...",
waitAlert: "Đang xác minh... vui lòng chờ.",
cancel: "Hủy bỏ",
enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."
};
globalThis.$altcha.i18n.set("vi", i18n$3);
const i18n$2 = {
ariaLinkLabel: "Altcha (官方网站)",
enterCode: "输入代码",
enterCodeAria: "输入您听到的代码。按空格键播放音频。",
error: "验证失败。稍后再试。",
expired: "验证已过期。请重试。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方网站)">ALTCHA</a> 保护',
getAudioChallenge: "获取音频挑战",
label: "我不是机器人",
loading: "加载中...",
reload: "重新加载",
verify: "验证",
verificationRequired: "需要验证!",
verified: "已验证",
verifying: "正在验证...",
waitAlert: "正在验证... 请稍等。",
cancel: "取消",
enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。"
};
globalThis.$altcha.i18n.set("zh-cn", i18n$2);
const i18n$1 = {
ariaLinkLabel: "Altcha (官方網站)",
cancel: "取消",
enterCode: "輸入代碼",
enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。",
enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。",
error: "驗證失敗。請稍後再試。",
expired: "驗證已過期。請再試一次。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 提供保護',
getAudioChallenge: "取得音訊驗證",
label: "我唔係機械人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "驗證中...",
waitAlert: "驗證中... 請稍候。"
};
globalThis.$altcha.i18n.set("zh-hk", i18n$1);
const i18n = {
ariaLinkLabel: "Altcha (官方網站)",
enterCode: "輸入代碼",
enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
error: "驗證失敗。稍後再試。",
expired: "驗證已過期。請重試。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 保護',
getAudioChallenge: "獲取音頻挑戰",
label: "我不是機器人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "正在驗證...",
waitAlert: "正在驗證... 請稍等。",
cancel: "取消",
enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。"
};
globalThis.$altcha.i18n.set("zh-tw", i18n);
const noop = () => {
};
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function get(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let untracking = false;
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get(scope.store), {
[name]: value
});
} else {
Object.assign(get(scope.store), name);
}
scope.store.set(get(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n$Y = {
ariaLinkLabel: "Altcha (الموقع الرسمي)",
enterCode: "أدخل الرمز",
enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",
error: "فشل التحقق. حاول مرة أخرى لاحقاً.",
expired: "انتهت صلاحية التحقق. حاول مرة أخرى.",
footer: 'محمي بواسطة <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (الموقع الرسمي)">ALTCHA</a>',
getAudioChallenge: "احصل على تحدي صوتي",
label: "أنا لست روبوتاً",
loading: "جارٍ التحميل...",
reload: "إعادة تحميل",
verify: "تحقق",
verificationRequired: "مطلوب التحقق!",
verified: "تم التحقق",
verifying: "جارٍ التحقق...",
waitAlert: "جارٍ التحقق... يرجى الانتظار.",
cancel: "إلغاء",
enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه."
};
globalThis.$altcha.i18n.set("ar", i18n$Y);
const i18n$X = {
ariaLinkLabel: "Altcha (официален уебсайт)",
enterCode: "Въведете код",
enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",
error: "Проверката неуспешна. Моля, опитайте по-късно.",
expired: "Времето за проверка изтече. Моля, опитайте отново.",
footer: 'Защитено от <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официален уебсайт)">ALTCHA</a>',
getAudioChallenge: "Аудио проверка",
label: "Аз не съм робот",
loading: "Зареждане...",
reload: "Презареди",
verify: "Провери",
verificationRequired: "Изисква се проверка!",
verified: "Проверено",
verifying: "Проверява се...",
waitAlert: "Проверката е в процес... моля изчакайте.",
cancel: "Отказ",
enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу."
};
globalThis.$altcha.i18n.set("bg", i18n$X);
const i18n$W = {
ariaLinkLabel: "Altcha (афіцыйны сайт)",
enterCode: "Увядзіце код",
enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",
error: "Праверка не прайшла. Паспрабуйце пазней.",
expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.",
footer: 'Абаронена <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (афіцыйны сайт)">ALTCHA</a>',
getAudioChallenge: "Атрымаць аўдыё выклік",
label: "Я не робат",
loading: "Загрузка...",
reload: "Перазагрузіць",
verify: "Праверыць",
verificationRequired: "Патрабуецца праверка!",
verified: "Праверана",
verifying: "Правяраем...",
waitAlert: "Праверка... калі ласка, пачакайце.",
cancel: "Скасаваць",
enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй."
};
globalThis.$altcha.i18n.set("be", i18n$W);
const i18n$V = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("bs", i18n$V);
const i18n$U = {
ariaLinkLabel: "Altcha (lloc web oficial)",
enterCode: "Introdueix el codi",
enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",
error: "Verificació fallida. Torna-ho a provar més tard.",
expired: "Verificació expirada. Torna-ho a provar.",
footer: 'Protegit per <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (lloc web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtenir un desafiament d’àudio",
label: "No sóc un robot",
loading: "Carregant...",
reload: "Torna a carregar",
verify: "Verificar",
verificationRequired: "Es requereix verificació!",
verified: "Verificat",
verifying: "Verificant...",
waitAlert: "Verificant... si us plau, espera.",
cancel: "Cancel·la",
enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent."
};
globalThis.$altcha.i18n.set("ca", i18n$U);
const i18n$T = {
ariaLinkLabel: "Altcha (oficiální web)",
enterCode: "Zadejte kód",
enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",
error: "Ověření selhalo. Zkuste to prosím později.",
expired: "Ověření vypršelo. Zkuste to prosím znovu.",
footer: 'Chráněno pomocí <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiální web)">ALTCHA</a>',
getAudioChallenge: "Získat audio výzvu",
label: "Nejsem robot",
loading: "Načítání...",
reload: "Znovu načíst",
verify: "Ověřit",
verificationRequired: "Vyžaduje se ověření!",
verified: "Ověřeno",
verifying: "Ověřování...",
waitAlert: "Probíhá ověření... prosím počkejte.",
cancel: "Zrušit",
enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže."
};
globalThis.$altcha.i18n.set("cs", i18n$T);
const i18n$S = {
ariaLinkLabel: "Altcha (officiel hjemmeside)",
enterCode: "Indtast kode",
enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",
error: "Verificering mislykkedes. Prøv venligst igen senere.",
expired: "Verificering udløbet. Prøv venligst igen.",
footer: 'Beskyttet af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiel hjemmeside)">ALTCHA</a>',
getAudioChallenge: "Hent lydudfordring",
label: "Jeg er ikke en robot",
loading: "Indlæser...",
reload: "Genindlæs",
verify: "Verificer",
verificationRequired: "Verificering kræves!",
verified: "Verificeret",
verifying: "Verificerer...",
waitAlert: "Verificerer... vent venligst.",
cancel: "Annuller",
enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder."
};
globalThis.$altcha.i18n.set("da", i18n$S);
const i18n$R = {
ariaLinkLabel: "Altcha (offizielle Website)",
enterCode: "Code eingeben",
enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",
error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",
footer: 'Geschützt durch <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offizielle Website)">ALTCHA</a>',
getAudioChallenge: "Audio-Herausforderung anfordern",
label: "Ich bin kein Roboter",
loading: "Lade...",
reload: "Neu laden",
verify: "Überprüfen",
verificationRequired: "Überprüfung erforderlich!",
verified: "Überprüft",
verifying: "Wird überprüft...",
waitAlert: "Überprüfung läuft... bitte warten.",
cancel: "Abbrechen",
enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."
};
globalThis.$altcha.i18n.set("de", i18n$R);
const i18n$Q = {
ariaLinkLabel: "Altcha (επίσημος ιστότοπος)",
enterCode: "Εισαγάγετε κωδικό",
enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",
error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",
expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.",
footer: 'Προστατεύεται από το <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (επίσημος ιστότοπος)">ALTCHA</a>',
getAudioChallenge: "Λήψη ηχητικής δοκιμασίας",
label: "Δεν είμαι ρομπότ",
loading: "Φόρτωση...",
reload: "Επαναφόρτωση",
verify: "Επαλήθευση",
verificationRequired: "Απαιτείται έλεγχος!",
verified: "Επαληθεύτηκε",
verifying: "Γίνεται επαλήθευση...",
waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.",
cancel: "Ακύρωση",
enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."
};
globalThis.$altcha.i18n.set("el", i18n$Q);
const i18n$P = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Introduce el código",
enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor intente nuevamente más tarde.",
expired: "Verificación expirada. Por favor intente nuevamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un desafío de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Recargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espere.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo."
};
globalThis.$altcha.i18n.set("es-es", i18n$P);
const i18n$O = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Ingresa el código",
enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.",
expired: "La verificación expiró. Por favor inténtalo de nuevo.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un reto de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Volver a cargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espera.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación."
};
globalThis.$altcha.i18n.set("es-419", i18n$O);
const i18n$N = {
ariaLinkLabel: "Altcha (ametlik veebisait)",
enterCode: "Sisesta kood",
enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",
error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",
expired: "Kinnitamine aegus. Proovi uuesti.",
footer: 'Kaitstud <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ametlik veebisait)">ALTCHA</a> poolt',
getAudioChallenge: "Hangi heliülesanne",
label: "Ma ei ole robot",
loading: "Laadimine...",
reload: "Laadi uuesti",
verify: "Kinnita",
verificationRequired: "Kontroll on vajalik!",
verified: "Kinnitatud",
verifying: "Kinnitamine...",
waitAlert: "Kinnitamine... palun oota.",
cancel: "Tühista",
enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood."
};
globalThis.$altcha.i18n.set("et", i18n$N);
const i18n$M = {
ariaLinkLabel: "Altcha (webgune ofiziala)",
enterCode: "Sartu kodea",
enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",
error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.",
expired: "Egiaztatzea iraungi da. Saiatu berriro.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (webgune ofiziala)">ALTCHA</a>k babestuta',
getAudioChallenge: "Jaso audio-erronka bat",
label: "Ez naiz robot bat",
loading: "Kargatzen...",
reload: "Birkargatu",
verify: "Egiaztatu",
verificationRequired: "Egiaztatzea beharrezkoa da!",
verified: "Egiaztatuta",
verifying: "Egiaztatzen...",
waitAlert: "Egiaztatzen... itxaron mesedez.",
cancel: "Utzi",
enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea."
};
globalThis.$altcha.i18n.set("eu", i18n$M);
const i18n$L = {
ariaLinkLabel: "Altcha (وب‌سایت رسمی)",
enterCode: "کد را وارد کنید",
enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",
error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",
expired: "احراز هویت منقضی شد. دوباره تلاش کنید.",
footer: 'محافظت شده توسط <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (وب‌سایت رسمی)">ALTCHA</a>',
getAudioChallenge: "دریافت چالش صوتی",
label: "من ربات نیستم",
loading: "در حال بارگذاری...",
reload: "بارگذاری مجدد",
verify: "تایید",
verificationRequired: "احراز هویت لازم است!",
verified: "تایید شد",
verifying: "در حال تایید...",
waitAlert: "در حال تایید... لطفا منتظر بمانید.",
cancel: "لغو کردن",
enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید."
};
globalThis.$altcha.i18n.set("fa", i18n$L);
const i18n$K = {
ariaLinkLabel: "Altcha (offiziell Websäit)",
enterCode: "Code aginn",
enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",
error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",
expired: "Verifikatioun ofgelaf. Probéiert nach emol.",
footer: 'Geschützt vun <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offiziell Websäit)">ALTCHA</a>',
getAudioChallenge: "Kritt eng Audio-Herausfuerderung",
label: "Ech sinn keen Robot",
loading: "Lueden...",
reload: "Nei lueden",
verify: "Verifizéieren",
verificationRequired: "Verifikatioun néideg!",
verified: "Verifizéiert",
verifying: "Verifizéieren...",
waitAlert: "Verifizéieren... waart wgl.",
cancel: "Ofbriechen",
enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."
};
globalThis.$altcha.i18n.set("lb", i18n$K);
const i18n$J = {
ariaLinkLabel: "Altcha (virallinen verkkosivusto)",
enterCode: "Syötä koodi",
enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",
error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.",
expired: "Varmennus vanhentui. Yritä uudelleen.",
footer: 'Suojattu <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (virallinen verkkosivusto)">ALTCHA</a>:lla',
getAudioChallenge: "Hae äänitehtävä",
label: "En ole robotti",
loading: "Ladataan...",
reload: "Lataa uudelleen",
verify: "Vahvista",
verificationRequired: "Vahvistus vaaditaan!",
verified: "Vahvistettu",
verifying: "Vahvistetaan...",
waitAlert: "Vahvistetaan... odota hetki.",
cancel: "Peruuta",
enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi."
};
globalThis.$altcha.i18n.set("fi", i18n$J);
const i18n$I = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",
error: "Échec de la vérification. Réessayez plus tard.",
expired: "La vérification a expiré. Réessayez.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-ca", i18n$I);
const i18n$H = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",
error: "Échec de la vérification. Essayez à nouveau plus tard.",
expired: "La vérification a expiré. Essayez à nouveau.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-fr", i18n$H);
const i18n$G = {
ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)",
enterCode: "Iontráil cód",
enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",
error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.",
expired: "Tá an fíorú as feidhm. Bain triail eile as.",
footer: 'Cosanta ag <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (láithreán gréasáin oifigiúil)">ALTCHA</a>',
getAudioChallenge: "Faigh dúshlán fuaime",
label: "Níl mé i mo róbat",
loading: "Á luchtú...",
reload: "Athluchtaigh",
verify: "Fíoraigh",
verificationRequired: "Fíorú riachtanach!",
verified: "Fíoraithe",
verifying: "Fíorú ar siúl...",
waitAlert: "Fíorú ar siúl... fan go fóill.",
cancel: "Cealaigh",
enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."
};
globalThis.$altcha.i18n.set("ga", i18n$G);
const i18n$F = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",
error: "Provjera nije uspjela. Molimo pokušajte kasnije.",
expired: "Provjera je istekla. Molimo pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Audio provjera",
label: "Ja nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Provjeri",
verificationRequired: "Potrebna je provjera!",
verified: "Provjereno",
verifying: "Provjeravanje...",
waitAlert: "Provjera je u tijeku... molimo pričekajte.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("hr", i18n$F);
const i18n$E = {
ariaLinkLabel: "Altcha (hivatalos weboldal)",
enterCode: "Írja be a kódot",
enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",
error: "A hitelesítés nem sikerült. Próbáld meg később újra.",
expired: "A hitelesítés lejárt. Próbáld újra.",
footer: 'Védve a következő által: <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (hivatalos weboldal)">ALTCHA</a>',
getAudioChallenge: "Hangalapú kihívás kérése",
label: "Nem vagyok robot",
loading: "Betöltés...",
reload: "Újratöltés",
verify: "Ellenőrzés",
verificationRequired: "Ellenőrzés szükséges!",
verified: "Ellenőrizve",
verifying: "Ellenőrzés folyamatban...",
waitAlert: "Ellenőrzés folyamatban... kérlek várj.",
cancel: "Mégse",
enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját."
};
globalThis.$altcha.i18n.set("hu", i18n$E);
const i18n$D = {
ariaLinkLabel: "Altcha (opinber vefsíða)",
enterCode: "Sláðu inn kóða",
enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",
error: "Staðfesting mistókst. Reyndu aftur síðar.",
expired: "Staðfesting er útrunnin. Reyndu aftur.",
footer: 'Verndað af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (opinber vefsíða)">ALTCHA</a>',
getAudioChallenge: "Fá hljóðáskorun",
label: "Ég er ekki robot",
loading: "Hleður...",
reload: "Hleð aftur",
verify: "Staðfesta",
verificationRequired: "Staðfesting er nauðsynleg!",
verified: "Staðfest",
verifying: "Að staðfesta...",
waitAlert: "Að staðfesta... vinsamlegast bíða.",
cancel: "Hætta við",
enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."
};
globalThis.$altcha.i18n.set("is", i18n$D);
const i18n$C = {
ariaLinkLabel: "Altcha (sito ufficiale)",
enterCode: "Inserisci il codice",
enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",
error: "Verifica fallita. Riprova più tardi.",
expired: "Verifica scaduta. Riprova.",
footer: 'Protetto da <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sito ufficiale)">ALTCHA</a>',
getAudioChallenge: "Ottieni una sfida audio",
label: "Non sono un robot",
loading: "Caricamento...",
reload: "Ricarica",
verify: "Verifica",
verificationRequired: "Verifica richiesta!",
verified: "Verificato",
verifying: "Verifica in corso...",
waitAlert: "Verifica in corso... attendere.",
cancel: "Annulla",
enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante."
};
globalThis.$altcha.i18n.set("it", i18n$C);
const i18n$B = {
ariaLinkLabel: "Altcha (oficiali svetainė)",
enterCode: "Įveskite kodą",
enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",
error: "Patvirtinimas nepavyko. Bandykite vėliau.",
expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.",
footer: 'Apsaugota <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiali svetainė)">ALTCHA</a>',
getAudioChallenge: "Gauti garso užduotį",
label: "Aš nesu robotas",
loading: "Įkeliama...",
reload: "Įkelti iš naujo",
verify: "Patvirtinti",
verificationRequired: "Reikalingas patvirtinimas!",
verified: "Patvirtinta",
verifying: "Tikrinama...",
waitAlert: "Tikrinama... prašome palaukti.",
cancel: "Atšaukti",
enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."
};
globalThis.$altcha.i18n.set("lt", i18n$B);
const i18n$A = {
ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)",
enterCode: "Ievadiet kodu",
enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",
error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",
expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",
footer: 'Aizsargāts ar <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiālā tīmekļa vietne)">ALTCHA</a>',
getAudioChallenge: "Saņemt audio izaicinājumu",
label: "Es neesmu robots",
loading: "Notiek ielāde...",
reload: "Pārlādēt",
verify: "Verificēt",
verificationRequired: "Nepieciešama verifikācija!",
verified: "Verificēts",
verifying: "Notiek verifikācija...",
waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.",
cancel: "Atcelt",
enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."
};
globalThis.$altcha.i18n.set("lv", i18n$A);
const i18n$z = {
ariaLinkLabel: "Altcha (sit uffiċjali)",
enterCode: "Idħol il-kodiċi",
enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",
error: "Il-verifika falliet. Erġa’ pprova aktar tard.",
expired: "Il-verifika skadiet. Erġa’ pprova.",
footer: 'Protett minn <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sit uffiċjali)">ALTCHA</a>',
getAudioChallenge: "Ikseb sfida bl-awdjo",
label: "M’inix robot",
loading: "Qed jitgħabba...",
reload: "Ittella’ mill-ġdid",
verify: "Ivverifika",
verificationRequired: "Verifika meħtieġa!",
verified: "Ivverifikat",
verifying: "Verifika għaddejja...",
waitAlert: "Verifika għaddejja... stenna ftit.",
cancel: "Ikkanċella",
enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."
};
globalThis.$altcha.i18n.set("mt", i18n$z);
const i18n$y = {
ariaLinkLabel: "Altcha (offisiell nettside)",
enterCode: "Skriv inn kode",
enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.",
error: "Verifisering mislyktes. Prøv igjen senere.",
expired: "Verifiseringen utløp. Prøv igjen.",
footer: 'Beskyttet av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offisiell nettside)">ALTCHA</a>',
getAudioChallenge: "Få en lydutfordring",
label: "Jeg er ikke en robot",
loading: "Laster...",
reload: "Last på nytt",
verify: "Verifiser",
verificationRequired: "Verifisering kreves!",
verified: "Verifisert",
verifying: "Verifiserer...",
waitAlert: "Verifiserer... vennligst vent.",
cancel: "Avbryt",
enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor."
};
globalThis.$altcha.i18n.set("nb", i18n$y);
const i18n$x = {
ariaLinkLabel: "Altcha (officiële website)",
enterCode: "Voer code in",
enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",
error: "Verificatie mislukt. Probeer het later opnieuw.",
expired: "Verificatie verlopen. Probeer het opnieuw.",
footer: 'Beschermd door <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiële website)">ALTCHA</a>',
getAudioChallenge: "Audio-uitdaging ontvangen",
label: "Ik ben geen robot",
loading: "Laden...",
reload: "Herladen",
verify: "Verifiëren",
verificationRequired: "Verificatie vereist!",
verified: "Geverifieerd",
verifying: "Bezig met verifiëren...",
waitAlert: "Bezig met verifiëren... even geduld a.u.b.",
cancel: "Annuleren",
enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in."
};
globalThis.$altcha.i18n.set("nl", i18n$x);
const i18n$w = {
ariaLinkLabel: "Altcha (oficjalna strona internetowa)",
enterCode: "Wprowadź kod",
enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",
error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.",
expired: "Weryfikacja wygasła. Spróbuj ponownie.",
footer: 'Chronione przez <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficjalna strona internetowa)">ALTCHA</a>',
getAudioChallenge: "Pobierz zadanie dźwiękowe",
label: "Nie jestem robotem",
loading: "Ładowanie...",
reload: "Odśwież",
verify: "Zweryfikuj",
verificationRequired: "Wymagana weryfikacja!",
verified: "Zweryfikowano",
verifying: "Weryfikacja...",
waitAlert: "Trwa weryfikacja... proszę czekać.",
cancel: "Anuluj",
enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka."
};
globalThis.$altcha.i18n.set("pl", i18n$w);
const i18n$v = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduza o código",
enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",
error: "A verificação falhou. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Não sou um robô",
loading: "A carregar...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "A verificar...",
waitAlert: "A verificar... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-pt", i18n$v);
const i18n$u = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Digite o código",
enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",
error: "Falha na verificação. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Eu não sou um robô",
loading: "Carregando...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-br", i18n$u);
const i18n$t = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduceți codul",
enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",
error: "Verificarea a eșuat. Încearcă din nou mai târziu.",
expired: "Verificarea a expirat. Încearcă din nou.",
footer: 'Protejat de <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obține o provocare audio",
label: "Nu sunt un robot",
loading: "Se încarcă...",
reload: "Reîncarcă",
verify: "Verifică",
verificationRequired: "Verificare necesară!",
verified: "Verificat",
verifying: "Se verifică...",
waitAlert: "Se verifică... te rugăm să aștepți.",
cancel: "Anulare",
enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."
};
globalThis.$altcha.i18n.set("ro", i18n$t);
const i18n$s = {
ariaLinkLabel: "Altcha (официальный сайт)",
enterCode: "Введите код",
enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",
error: "Ошибка верификации. Попробуйте позже.",
expired: "Срок действия верификации истек. Попробуйте снова.",
footer: 'Защищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официальный сайт)">ALTCHA</a>',
getAudioChallenge: "Получить аудио задачу",
label: "Я не робот",
loading: "Загрузка...",
reload: "Перезагрузить",
verify: "Проверить",
verificationRequired: "Требуется проверка!",
verified: "Проверено",
verifying: "Идет проверка...",
waitAlert: "Идет проверка... Пожалуйста, подождите.",
cancel: "Отмена",
enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже."
};
globalThis.$altcha.i18n.set("ru", i18n$s);
const i18n$r = {
ariaLinkLabel: "Altcha (oficiálna webová stránka)",
enterCode: "Zadajte kód",
enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",
error: "Verifikácia zlyhala. Skúste to znova neskôr.",
expired: "Verifikácia vypršala. Skúste to znova.",
footer: 'Chránené <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiálna webová stránka)">ALTCHA</a>',
getAudioChallenge: "Získať audio výzvu",
label: "Nie som robot",
loading: "Načítava sa...",
reload: "Obnoviť",
verify: "Verifikovať",
verificationRequired: "Vyžaduje sa overenie!",
verified: "Verifikované",
verifying: "Prebieha verifikácia...",
waitAlert: "Prebieha verifikácia... prosím čakajte.",
cancel: "Zrušiť",
enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie."
};
globalThis.$altcha.i18n.set("sk", i18n$r);
const i18n$q = {
ariaLinkLabel: "Altcha (uradna spletna stran)",
enterCode: "Vnesite kodo",
enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",
error: "Preverjanje ni uspelo. Poskusite znova kasneje.",
expired: "Preverjanje je poteklo. Poskusite znova.",
footer: 'Zaščiteno z <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (uradna spletna stran)">ALTCHA</a>',
getAudioChallenge: "Pridobite zvočni izziv",
label: "Nisem robot",
loading: "Nalagam...",
reload: "Ponovno naloži",
verify: "Preveri",
verificationRequired: "Potrebna je preveritev!",
verified: "Preverjeno",
verifying: "Preverjanje...",
waitAlert: "Preverjanje... prosim počakajte.",
cancel: "Preklic",
enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."
};
globalThis.$altcha.i18n.set("sl", i18n$q);
const i18n$p = {
ariaLinkLabel: "Altcha (faqja zyrtare)",
enterCode: "Fut kodin",
enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",
error: "Verifikimi dështoi. Provoni përsëri më vonë.",
expired: "Verifikimi ka skaduar. Provoni përsëri.",
footer: 'I mbrojtur nga <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (faqja zyrtare)">ALTCHA</a>',
getAudioChallenge: "Merr një sfidë audio",
label: "Unë nuk jam një robot",
loading: "Duke u ngarkuar...",
reload: "Ringarko",
verify: "Verifiko",
verificationRequired: "Kërkohet verifikimi!",
verified: "I verifikuar",
verifying: "Duke verifikuar...",
waitAlert: "Duke verifikuar... ju lutem prisni.",
cancel: "Anuloje",
enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."
};
globalThis.$altcha.i18n.set("sq", i18n$p);
const i18n$o = {
ariaLinkLabel: "Altcha (zvanična web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (zvanična web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovo učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Откажи",
enterCodeFromImage: "Да бисте наставили, унесите код са слике испод."
};
globalThis.$altcha.i18n.set("sr", i18n$o);
const i18n$n = {
ariaLinkLabel: "Altcha (officiell webbplats)",
enterCode: "Ange kod",
enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
error: "Verifiering misslyckades. Försök igen senare.",
expired: "Verifieringen har gått ut. Försök igen.",
footer: 'Skyddad av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiell webbplats)">ALTCHA</a>',
getAudioChallenge: "Få ljudutmaning",
label: "Jag är inte en robot",
loading: "Laddar...",
reload: "Ladda om",
verify: "Verifiera",
verificationRequired: "Verifiering krävs!",
verified: "Verifierad",
verifying: "Verifierar...",
waitAlert: "Verifierar... vänligen vänta.",
cancel: "Avbryt",
enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan."
};
globalThis.$altcha.i18n.set("sv", i18n$n);
const i18n$m = {
ariaLinkLabel: "Altcha (resmi web sitesi)",
enterCode: "Kodu girin",
enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
footer: 'ALTCHA tarafından korunuyor <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (resmi web sitesi)">ALTCHA</a>',
getAudioChallenge: "Sesli doğrulama al",
label: "Ben robot değilim",
loading: "Yükleniyor...",
reload: "Yeniden yükle",
verify: "Doğrula",
verificationRequired: "Doğrulama gerekli!",
verified: "Doğrulandı",
verifying: "Doğrulama yapılıyor...",
waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.",
cancel: "İptal",
enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin."
};
globalThis.$altcha.i18n.set("tr", i18n$m);
const i18n$l = {
ariaLinkLabel: "Altcha (офіційний сайт)",
enterCode: "Введіть код",
enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
error: "Перевірка не вдалася. Спробуйте пізніше.",
expired: "Перевірка прострочена. Спробуйте знову.",
footer: 'Захищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (офіційний сайт)">ALTCHA</a>',
getAudioChallenge: "Отримати аудіо-челлендж",
label: "Я не робот",
loading: "Завантаження...",
reload: "Перезавантажити",
verify: "Перевірити",
verificationRequired: "Потрібна перевірка!",
verified: "Перевірено",
verifying: "Перевіряється...",
waitAlert: "Перевірка... будь ласка, зачекайте.",
cancel: "Скасувати",
enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче."
};
globalThis.$altcha.i18n.set("uk", i18n$l);
const i18n$k = {
ariaLinkLabel: "Altcha (amptelike webwerf)",
enterCode: "Voer kode in",
enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",
error: "Verifikasie het misluk. Probeer later weer.",
expired: "Verifikasie het verval. Probeer weer.",
footer: 'Beskerm deur <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (amptelike webwerf)">ALTCHA</a>',
getAudioChallenge: "Kry 'n klankuitdaging",
label: "Ek is nie 'n robot nie",
loading: "Laai...",
reload: "Laai weer",
verify: "Verifieer",
verificationRequired: "Verifikasie is vereis!",
verified: "Geverifieer",
verifying: "Verifieer...",
waitAlert: "Verifieer... wag asseblief.",
cancel: "Kanselleer",
enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."
};
globalThis.$altcha.i18n.set("af", i18n$k);
const i18n$j = {
ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)",
enterCode: "ኮድ አስገባ",
enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",
error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",
expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",
footer: 'በ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ዋናው ድህረ ገጽ)">ALTCHA</a> የተጠበቀ',
getAudioChallenge: "የድምጽ ፈተና ያግኙ",
label: "እኔ ሮቦት አይደለሁም",
loading: "በመጫን ላይ...",
reload: "እንደገና ጫን",
verify: "አረጋግጥ",
verificationRequired: "ማረጋገጫ ያስፈልጋል!",
verified: "ተረጋግጧል",
verifying: "በማረጋገጥ ላይ...",
waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",
cancel: "ይቅር",
enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"
};
globalThis.$altcha.i18n.set("am", i18n$j);
const i18n$i = {
ariaLinkLabel: "Altcha (tovuti rasmi)",
enterCode: "Weka nambari",
enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.",
error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.",
expired: "Uthibitishaji umeisha. Jaribu tena.",
footer: 'Imealindwa na <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (tovuti rasmi)">ALTCHA</a>',
getAudioChallenge: "Pata changamoto ya sauti",
label: "Mimi sio roboti",
loading: "Inapakia...",
reload: "Pakia tena",
verify: "Thibitisha",
verificationRequired: "Uthibitishaji unahitajika!",
verified: "Imethibitishwa",
verifying: "Inathibitisha...",
waitAlert: "Inathibitisha... tafadhali subiri.",
cancel: "Ghairi",
enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."
};
globalThis.$altcha.i18n.set("sw", i18n$i);
const i18n$h = {
ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)",
enterCode: "Tẹ koodu sii",
enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",
error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",
expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",
footer: 'Ti wa ni ààbò nipasẹ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oju opo wẹẹbu osise)">ALTCHA</a>',
getAudioChallenge: "Gba ìjàdú ohùn",
label: "Emi kii ṣe ẹrọ",
loading: "Ó ń gbé sílẹ̀...",
reload: "Tún gbé wọlé",
verify: "Ṣàdájọ́",
verificationRequired: "Ìdájọ́kòwò ni a nílò!",
verified: "A ti dájọ́",
verifying: "Ó ń ṣàdájọ́...",
waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",
cancel: "Fagbọsẹ",
enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."
};
globalThis.$altcha.i18n.set("yo", i18n$h);
const i18n$g = {
ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)",
enterCode: "কোড লিখুন",
enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",
error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",
expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",
footer: 'দ্বারা সুরক্ষিত <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (অফিসিয়াল ওয়েবসাইট)">ALTCHA</a>',
getAudioChallenge: "অডিও চ্যালেঞ্জ নিন",
label: "আমি রোবট নই",
loading: "লোড হচ্ছে...",
reload: "পুনরায় লোড করুন",
verify: "যাচাই করুন",
verificationRequired: "যাচাই প্রয়োজন!",
verified: "যাচাই করা হয়েছে",
verifying: "যাচাই করা হচ্ছে...",
waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",
cancel: "বাতিল করুন",
enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"
};
globalThis.$altcha.i18n.set("bn", i18n$g);
const i18n$f = {
ariaLinkLabel: "Altcha (אתר רשמי)",
enterCode: "הזן קוד",
enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",
error: "האימות נכשל. נסה שוב מאוחר יותר.",
expired: "תוקף האימות פג. נסה שוב.",
footer: 'מוגן על ידי <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (אתר רשמי)">ALTCHA</a>',
getAudioChallenge: "קבל אתגר שמע",
label: "אני לא רובוט",
loading: "טוען...",
reload: "טען מחדש",
verify: "אמת",
verificationRequired: "נדרש אימות!",
verified: "אומת",
verifying: "מאמת...",
waitAlert: "מבצע אימות... אנא המתן.",
cancel: "ביטול",
enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."
};
globalThis.$altcha.i18n.set("he", i18n$f);
const i18n$e = {
ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)",
enterCode: "कोड दर्ज करेंं",
enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",
error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",
expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",
footer: 'द्वारा संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (आधिकारिक वेबसाइट)">ALTCHA</a>',
getAudioChallenge: "ऑडियो चुनौती प्राप्त करें",
label: "मैं रोबोट नहीं हूँ",
loading: "लोड हो रहा है...",
reload: "पुनः लोड करें",
verify: "सत्यापित करें",
verificationRequired: "सत्यापन आवश्यक है!",
verified: "सत्यापित",
verifying: "सत्यापित कर रहे हैं...",
waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",
cancel: "रद्द करें",
enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"
};
globalThis.$altcha.i18n.set("hi", i18n$e);
const i18n$d = {
ariaLinkLabel: "Altcha (situs web resmi)",
enterCode: "Masukkan kode",
enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",
error: "Verifikasi gagal. Coba lagi nanti.",
expired: "Verifikasi telah kedaluwarsa. Coba lagi.",
footer: 'Dilindungi oleh <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (situs web resmi)">ALTCHA</a>',
getAudioChallenge: "Dapatkan tantangan audio",
label: "Saya bukan robot",
loading: "Memuat...",
reload: "Muat ulang",
verify: "Verifikasi",
verificationRequired: "Verifikasi diperlukan!",
verified: "Terverifikasi",
verifying: "Memverifikasi...",
waitAlert: "Memverifikasi... harap tunggu.",
cancel: "Batal",
enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."
};
globalThis.$altcha.i18n.set("id", i18n$d);
const i18n$c = {
ariaLinkLabel: "Altcha (公式ウェブサイト)",
enterCode: "コードを入力",
enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。",
error: "認証に失敗しました。後でもう一度試してください。",
expired: "認証が期限切れです。再試行してください。",
footer: '保護されています <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (公式ウェブサイト)">ALTCHA</a>',
getAudioChallenge: "音声チャレンジを取得",
label: "私はロボットではありません",
loading: "読み込み中...",
reload: "再読み込み",
verify: "確認",
verificationRequired: "認証が必要です!",
verified: "確認済み",
verifying: "確認中...",
waitAlert: "確認中...少々お待ちください。",
cancel: "キャンセル",
enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。"
};
globalThis.$altcha.i18n.set("ja", i18n$c);
const i18n$b = {
ariaLinkLabel: "Altcha (공식 웹사이트)",
enterCode: "코드 입력",
enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",
error: "인증 실패. 나중에 다시 시도해주세요.",
expired: "인증이 만료되었습니다. 다시 시도해주세요.",
footer: 'ALTCHA에서 보호됨 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (공식 웹사이트)">ALTCHA</a>',
getAudioChallenge: "오디오 챌린지 받기",
label: "저는 로봇이 아닙니다",
loading: "로딩 중...",
reload: "새로 고침",
verify: "확인",
verificationRequired: "인증이 필요합니다!",
verified: "확인됨",
verifying: "확인 중...",
waitAlert: "확인 중... 잠시만 기다려주세요.",
cancel: "취소",
enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요."
};
globalThis.$altcha.i18n.set("ko", i18n$b);
const i18n$a = {
ariaLinkLabel: "Altcha (ресми веб-сайт)",
enterCode: "Кодты енгізіңіз",
enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",
error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",
expired: "Тексеру мерзімі аяқталды. Қайталаңыз.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ресми веб-сайт)">ALTCHA</a> қорғайды',
getAudioChallenge: "Аудио сынақ алу",
label: "Мен робот емеспін",
loading: "Жүктелуде...",
reload: "Қайта жүктеу",
verify: "Тексеру",
verificationRequired: "Тексеру талап етіледі!",
verified: "Тексерілді",
verifying: "Тексеруде...",
waitAlert: "Тексерілуде... күте тұрыңыз.",
cancel: "Болдыру",
enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."
};
globalThis.$altcha.i18n.set("kk", i18n$a);
const i18n$9 = {
ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)",
enterCode: "कोड टाकाा",
enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",
error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",
expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",
footer: 'द्वारे संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (अधिकृत संकेतस्थळ)">ALTCHA</a>',
getAudioChallenge: "ऑडिओ चॅलेंज मिळवा",
label: "मी रोबोट नाही",
loading: "लोड होत आहे...",
reload: "पुन्हा लोड करा",
verify: "पुष्टीकरण करा",
verificationRequired: "पडताळणी आवश्यक आहे!",
verified: "पुष्टीकरण झाले",
verifying: "पुष्टीकरण करत आहे...",
waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",
cancel: "रद्द करा",
enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."
};
globalThis.$altcha.i18n.set("mr", i18n$9);
const i18n$8 = {
ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",
enterCode: "குறியீட்டை உள்ளிடவும்",
enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (அதிகாரப்பூர்வ வலைத்தளம்)">ALTCHA</a>',
getAudioChallenge: "ஒலி சவாலை பெறவும்",
label: "நான் ரோபோடான அல்ல",
loading: "செயலாக்கம்...",
reload: "மீண்டும் புதுப்பிக்கவும்",
verify: "சரிபார்க்கவும்",
verificationRequired: "சரிபார்ப்பு தேவை!",
verified: "சரிபார்க்கப்பட்டது",
verifying: "சரிபார்க்கப்படுகிறது...",
waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",
cancel: "ரத்துசெய்",
enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."
};
globalThis.$altcha.i18n.set("ta", i18n$8);
const i18n$7 = {
ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)",
enterCode: "కోడ్‌ని నమోదు చేయండి",
enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (అధికారిక వెబ్‌సైట్)">ALTCHA</a>',
getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
label: "నేను రోబోట్ కాదు",
loading: "లోడ్ అవుతోంది...",
reload: "మళ్ళీ లోడ్ చేయండి",
verify: "ధ్రువీకరించు",
verificationRequired: "ధృవీకరణ అవసరం!",
verified: "ధ్రువీకరించబడింది",
verifying: "ధ్రువీకరణ జరుగుతుంది...",
waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",
cancel: "రద్దు చేయండి",
enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."
};
globalThis.$altcha.i18n.set("te", i18n$7);
const i18n$6 = {
ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)",
enterCode: "ป้อนรหัส",
enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
footer: 'ป้องกันโดย <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (เว็บไซต์ทางการ)">ALTCHA</a>',
getAudioChallenge: "รับการท้าทายเสียง",
label: "ฉันไม่ใช่บอท",
loading: "กำลังโหลด...",
reload: "โหลดใหม่",
verify: "ตรวจสอบ",
verificationRequired: "จำเป็นต้องตรวจสอบ!",
verified: "ตรวจสอบแล้ว",
verifying: "กำลังตรวจสอบ...",
waitAlert: "กำลังตรวจสอบ... กรุณารอ",
cancel: "ยกเลิก",
enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"
};
globalThis.$altcha.i18n.set("th", i18n$6);
const i18n$5 = {
ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)",
enterCode: "کوڈ درج کریں",
enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (سرکاری ویب سائٹ)">ALTCHA</a>',
getAudioChallenge: "آڈیو چیلنج حاصل کریں",
label: "میں روبوٹ نہیں ہوں",
loading: "لوڈ ہو رہا ہے...",
reload: "دوبارہ لوڈ کریں",
verify: "توثیق کریں",
verificationRequired: "تصدیق ضروری ہے!",
verified: "توثیق شدہ",
verifying: "توثیق ہو رہی ہے...",
waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",
cancel: "منسوخ کریں",
enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"
};
globalThis.$altcha.i18n.set("ur", i18n$5);
const i18n$4 = {
ariaLinkLabel: "Altcha (rasmiy veb-sayt)",
enterCode: "Kodni kiriting",
enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",
error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",
expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (rasmiy veb-sayt)">ALTCHA</a> tomonidan himoyalangan',
getAudioChallenge: "Audio sinovni olish",
label: "Men robot emasman",
loading: "Yuklanmoqda...",
reload: "Qayta yuklash",
verify: "Tekshirish",
verificationRequired: "Tekshiruv talab qilinadi!",
verified: "Tekshirildi",
verifying: "Tekshirilmoqda...",
waitAlert: "Tekshirilmoqda... iltimos kuting.",
cancel: "Bekor qilish",
enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."
};
globalThis.$altcha.i18n.set("uz", i18n$4);
const i18n$3 = {
ariaLinkLabel: "Altcha (trang web chính thức)",
enterCode: "Nhập mã",
enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
error: "Xác minh thất bại. Vui lòng thử lại sau.",
expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
footer: 'Được bảo vệ bởi <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (trang web chính thức)">ALTCHA</a>',
getAudioChallenge: "Nhận thử thách âm thanh",
label: "Tôi không phải là robot",
loading: "Đang tải...",
reload: "Tải lại",
verify: "Xác minh",
verificationRequired: "Yêu cầu xác minh!",
verified: "Đã xác minh",
verifying: "Đang xác minh...",
waitAlert: "Đang xác minh... vui lòng chờ.",
cancel: "Hủy bỏ",
enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."
};
globalThis.$altcha.i18n.set("vi", i18n$3);
const i18n$2 = {
ariaLinkLabel: "Altcha (官方网站)",
enterCode: "输入代码",
enterCodeAria: "输入您听到的代码。按空格键播放音频。",
error: "验证失败。稍后再试。",
expired: "验证已过期。请重试。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方网站)">ALTCHA</a> 保护',
getAudioChallenge: "获取音频挑战",
label: "我不是机器人",
loading: "加载中...",
reload: "重新加载",
verify: "验证",
verificationRequired: "需要验证!",
verified: "已验证",
verifying: "正在验证...",
waitAlert: "正在验证... 请稍等。",
cancel: "取消",
enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。"
};
globalThis.$altcha.i18n.set("zh-cn", i18n$2);
const i18n$1 = {
ariaLinkLabel: "Altcha (官方網站)",
cancel: "取消",
enterCode: "輸入代碼",
enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。",
enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。",
error: "驗證失敗。請稍後再試。",
expired: "驗證已過期。請再試一次。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 提供保護',
getAudioChallenge: "取得音訊驗證",
label: "我唔係機械人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "驗證中...",
waitAlert: "驗證中... 請稍候。"
};
globalThis.$altcha.i18n.set("zh-hk", i18n$1);
const i18n = {
ariaLinkLabel: "Altcha (官方網站)",
enterCode: "輸入代碼",
enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
error: "驗證失敗。稍後再試。",
expired: "驗證已過期。請重試。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 保護',
getAudioChallenge: "獲取音頻挑戰",
label: "我不是機器人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "正在驗證...",
waitAlert: "正在驗證... 請稍等。",
cancel: "取消",
enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。"
};
globalThis.$altcha.i18n.set("zh-tw", i18n);
 
data/skin/mobile/mygreek/js/gd_board_view.js+72
변경 전gd_board_view.js
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
var gd_dom = function (bdId, sno, notice) {
if($.trim(notice) === ''){
var formWrite = $('.js_form_write');
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
var gd_dom = function (bdId, sno, notice) {
if($.trim(notice) === ''){
var formWrite = $('.js_form_write');
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
 
변경 후gd_board_view.js
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
 
var gd_dom = function (bdId, sno, notice) {
if($.trim(notice) === ''){
var formWrite = $('.js_form_write');
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
 
var gd_dom = function (bdId, sno, notice) {
if($.trim(notice) === ''){
var formWrite = $('.js_form_write');
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
 
data/skin/mobile/mygreek/js/gd_board_write.js+12-8
변경 전gd_board_write.js
}
 
$("#frmWrite").validate({
 
submitHandler: function (form) {
if (boardSubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
 
 
 
 
 
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
writerNm: 'required',
writerPw: 'required',
subject: 'required',
captchaKey: 'required',
goodsPt: 'required',
writerEmail: {
required: true,
private: {
required: __('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.')
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
}
 
$("#frmWrite").validate({
 
submitHandler: function (form) {
if (boardSubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
 
 
 
 
 
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
writerNm: 'required',
writerPw: 'required',
subject: 'required',
captchaKey: 'required',
goodsPt: 'required',
writerEmail: {
required: true,
private: {
required: __('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.')
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
 
변경 후gd_board_write.js
}
 
$("#frmWrite").validate({
ignore: 'altcha-widget *',
submitHandler: function (form) {
if (boardSubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
writerNm: 'required',
writerPw: 'required',
subject: 'required',
 
goodsPt: 'required',
writerEmail: {
required: true,
private: {
required: __('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')
},
 
 
 
goodsPt: {
required: __('평가를 체크해주세요.')
},
}
 
$("#frmWrite").validate({
ignore: 'altcha-widget *',
submitHandler: function (form) {
if (boardSubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
writerNm: 'required',
writerPw: 'required',
subject: 'required',
 
goodsPt: 'required',
writerEmail: {
required: true,
private: {
required: __('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')
},
 
 
 
goodsPt: {
required: __('평가를 체크해주세요.')
},
 
data/skin/mobile/mygreek/js/gd_common.js+46
변경 전gd_common.js
return formatted;
};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function gd_resize_frame(obj) {
var iframeHeight =
(obj).contentWindow.document.body.clientHeight;
 
변경 후gd_common.js
return formatted;
};
 
/* iframe(mypage 등)으로 board 목록이 실릴 때, onload 1회 측정(resize_frame/gd_resize_frame) 이후에도
댓글/답글 폼 토글, ALTCHA 위젯 지연 렌더, 댓글 등록/삭제 등으로 내용 높이가 바뀌면
부모 iframe 높이를 다시 맞춘다. body 높이가 실제로 변했을 때만 호출해 재측정 루프를 방지. */
(function () {
let parentResize;
try {
if (window.parent === window) {
return; // 최상위 문서 → 대상 아님
}
parentResize = window.parent.gd_resize_frame || window.parent.resize_frame;
} catch (e) {
return; // cross-origin 부모 → 접근 불가, 대상 아님
}
if (typeof parentResize !== 'function' || typeof window.ResizeObserver === 'undefined') {
return;
}
const startObserve = function () {
const frameEl = window.frameElement
|| (window.name ? window.parent.document.getElementsByName(window.name)[0] : null);
if (!frameEl || !document.body) {
return;
}
let timer = null;
let lastHeight = -1;
const observer = new ResizeObserver(function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function () {
const height = document.body.clientHeight;
if (height === lastHeight) {
return; // 실제 콘텐츠 높이 변화 없음 → 재측정 루프 방지
}
lastHeight = height;
parentResize.call(window.parent, frameEl);
}, 100);
});
observer.observe(document.body);
};
if (document.body) {
startObserve();
} else {
document.addEventListener('DOMContentLoaded', startObserve);
}
})();
 
function gd_resize_frame(obj) {
var iframeHeight =
(obj).contentWindow.document.body.clientHeight;
 
data/skin/mobile/mygreek/js/gd_member2.js+12-18
변경 전gd_member2.js
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore",
focusCleanup: true,
rules: {
memPwRe: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
},
captchaKey: {
required: true
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
},
captchaKey: {
required: function () {
return alert(__('자동등록방지 문자를 입력해주세요.'));
}
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
}
if (validate.form()) {
 
 
 
 
 
$(form).find('select').prop('disabled',false);
$('.join_ok_btn').attr("disabled", true);
 
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore",
focusCleanup: true,
rules: {
memPwRe: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
},
captchaKey: {
required: true
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
},
captchaKey: {
required: function () {
return alert(__('자동등록방지 문자를 입력해주세요.'));
}
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
}
if (validate.form()) {
 
 
 
 
 
$(form).find('select').prop('disabled',false);
$('.join_ok_btn').attr("disabled", true);
 
 
변경 후gd_member2.js
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore, altcha-widget *",
focusCleanup: true,
rules: {
memPwRe: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
 
 
 
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
 
 
 
 
 
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
}
if (validate.form()) {
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return;
}
$(form).find('select').prop('disabled',false);
$('.join_ok_btn').attr("disabled", true);
 
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore, altcha-widget *",
focusCleanup: true,
rules: {
memPwRe: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
 
 
 
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
 
 
 
 
 
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
}
if (validate.form()) {
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return;
}
$(form).find('select').prop('disabled',false);
$('.join_ok_btn').attr("disabled", true);
 
 
data/skin/mobile/mygreek/member/join.html+4-20
변경 전join.html
</form>
</div>
 
 
 
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
<!--{? joinField.captcha.use == 'y'}-->
$('#reload_captcha').click(function (e) {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../member/captcha.php?ch=' + someDate);
}, 1);
}).trigger('click');
<!--{/}-->
 
gd_select_email_domain('email');
 
</form>
</div>
 
 
 
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
<!--{? joinField.captcha.use == 'y'}-->
$('#reload_captcha').click(function (e) {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../member/captcha.php?ch=' + someDate);
}, 1);
}).trigger('click');
<!--{/}-->
 
gd_select_email_domain('email');
 
 
변경 후join.html
</form>
</div>
 
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
 
 
 
 
 
 
 
 
 
 
 
gd_select_email_domain('email');
 
</form>
</div>
 
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
 
 
 
 
 
 
 
 
 
 
 
gd_select_email_domain('email');
 
 
data/skin/mobile/mygreek/member/_join_view_captcha.html+2-20
변경 전_join_view_captcha.html
<div class="join_view_other">
<div class="tit">{=__('자동등록방지')}</div>
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="./captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" id="reload_captcha" class="captchareload_btn"><img src="../img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
</div>
<!--{/}-->
<div class="join_view_other">
<div class="tit">{=__('자동등록방지')}</div>
<div class="input_wrap">
<div class="capcha">
<div class="capcha_img"><span><img src="./captcha.php" id="captchaImg" alt="{=__('자동등록방지 이미지')}"/></span></div>
<div class="capcha_body">
<p class="capcha_text">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
<div class="capcha_input">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="captcha"/>
</div>
<div class="capcha_button"><button type="button" id="reload_captcha" class="captchareload_btn"><img src="../img/etc/icon-reset.png" alt="{=__('이미지 새로고침')}"> {=__('이미지 새로고침')}</button></div>
</div>
</div>
</div>
</div>
<!--{/}-->
 
변경 후_join_view_captcha.html
<div class="join_view_other">
<div class="tit">{=__('자동등록방지')}</div>
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
</div>
<!--{/}-->
<div class="join_view_other">
<div class="tit">{=__('자동등록방지')}</div>
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
</div>
</div>
<!--{/}-->
 
data/skin/mobile/mygreek/share/_altcha.html+28
변경 전_altcha.html
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후_altcha.html
{*** [공통 위젯] 자동등록방지 ALTCHA | share/_altcha.html (Widget\Mobile\Share\AltchaWidget) ***}
{*** altchaChallenge : (필수) challenge 발급 스크립트 경로. 폼 위치에 따라 상대/절대 경로가 다르므로 호출부에서 지정 (mode 쿼리스트링은 위젯이 서버 사이드에서 부착) ***}
{*** altchaSrc : (옵션) 'y' 이면 data-altcha-src 부여 → AJAX 인라인 주입 폼에서 altcha.js 동적 로드 ***}
{*** altchaConfig : (옵션) altcha-widget configuration JSON 을 덮어씀. 미지정 시 {"hideLogo":true,"hideFooter":true} ***}
<div class="capcha capcha_altcha"<!--{? altchaSrc == 'y'}--> data-altcha-src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"<!--{/}-->>
<altcha-widget
challenge="{=altchaChallenge}?mode={=altchaMode}"
name="altcha"
auto="off"
language="{=gGlobal.locale}"
configuration='<!--{? altchaConfig}-->{=altchaConfig}<!--{:}-->{"hideLogo":true,"hideFooter":true}<!--{/}-->'
type="native"
></altcha-widget>
</div>
{*** [공통 위젯] 자동등록방지 ALTCHA | share/_altcha.html (Widget\Mobile\Share\AltchaWidget) ***}
{*** altchaChallenge : (필수) challenge 발급 스크립트 경로. 폼 위치에 따라 상대/절대 경로가 다르므로 호출부에서 지정 (mode 쿼리스트링은 위젯이 서버 사이드에서 부착) ***}
{*** altchaSrc : (옵션) 'y' 이면 data-altcha-src 부여 → AJAX 인라인 주입 폼에서 altcha.js 동적 로드 ***}
{*** altchaConfig : (옵션) altcha-widget configuration JSON 을 덮어씀. 미지정 시 {"hideLogo":true,"hideFooter":true} ***}
<div class="capcha capcha_altcha"<!--{? altchaSrc == 'y'}--> data-altcha-src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"<!--{/}-->>
<altcha-widget
challenge="{=altchaChallenge}?mode={=altchaMode}"
name="altcha"
auto="off"
language="{=gGlobal.locale}"
configuration='<!--{? altchaConfig}-->{=altchaConfig}<!--{:}-->{"hideLogo":true,"hideFooter":true}<!--{/}-->'
type="native"
></altcha-widget>
</div>
 
data/skin/mobile/story_g/board/skin/default/view.html+14-66
변경 전view.html
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</tbody>
</table>
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</tbody>
</table>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha capcha_altcha">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha capcha_altcha">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<!--{ / }-->
</tbody>
</table>
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<!--{ / }-->
</tbody>
</table>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
 
data/skin/mobile/story_g/board/skin/default/write.html+26-34
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
 
data/skin/mobile/story_g/board/skin/event/view.html+14-66
변경 전view.html
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</tbody>
</table>
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</tbody>
</table>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha capcha_altcha">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha capcha_altcha">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<!--{ / }-->
</tbody>
</table>
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<!--{ / }-->
</tbody>
</table>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
 
data/skin/mobile/story_g/board/skin/event/write.html+26-34
변경 전write.html
<!--{ / }-->
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
<!--{ / }-->
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
 
변경 후write.html
<!--{ / }-->
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
<!--{ / }-->
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
 
data/skin/mobile/story_g/board/skin/gallery/view.html+14-66
변경 전view.html
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</tbody>
</table>
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</tbody>
</table>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
 
 
 
변경 후view.html
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha capcha_altcha">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap ty3">
<td class="capcha capcha_altcha">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<!--{ / }-->
</tbody>
</table>
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<!--{ / }-->
</tbody>
</table>
</div>
</div>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
 
data/skin/mobile/story_g/board/skin/gallery/write.html+26-34
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
 
data/skin/mobile/story_g/board/skin/qa/write.html+26-34
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
 
data/skin/mobile/story_g/board/template/default/write.html+26-34
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
 
data/skin/mobile/story_g/board/template/event/write.html+26-34
변경 전write.html
<!--{ / }-->
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
<!--{ / }-->
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
 
변경 후write.html
<!--{ / }-->
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
<!--{ / }-->
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
 
data/skin/mobile/story_g/board/template/gallery/write.html+26-34
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
 
data/skin/mobile/story_g/board/template/qa/write.html+26-34
변경 전write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5"
onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" onclick="captchaReload()" class="normal-btn small1 captchareload">
<em><img src="img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
<!--{ / }-->
</div>
 
변경 후write.html
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
var bdSno = '{=gd_isset(req.sno)}';
</script>
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_write.js" charset="utf-8"></script>
<script type="text/javascript">
// type="module" 스크립트는 팝업(AJAX append) 시 실행되지 않으므로,
// 일반 인라인 스크립트에서 module 을 동적 주입해 직접진입/팝업 모두 커버한다.
if (!customElements.get('altcha-widget')) {
['\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js', '\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js'].forEach(function (src) {
const s = document.createElement('script');
s.type = 'module';
s.src = src;
document.head.appendChild(s);
});
}
</script>
<div class="ly_head">
<h1 class="h_tit elp">{=__('글쓰기')}</h1>
</div>
<!--{ / }-->
<!--{ ? bdWrite.cfg.bdSpamBoardFl&2 }-->
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
<!--{ / }-->
</div>
 
data/skin/mobile/story_g/goods/goods_board_qa_list.html+178-174
변경 전goods_board_qa_list.html
{*** 상품상세 - 상품 문의 목록 | goods/goods_board_qa_list.php ***}
<div class="detail_review prd_inquiry" style="display:block">
<ul>
<!--{? bdList.list }-->
<!--{ @ bdList.list }-->
<!--{ ? .blockFl =='y' }-->
<li class="noclick">
<!--{ : }-->
<li class="private <!--{? .replyComplete }-->done<!--{/}-->">
<!--{ / }-->
<div class="item-list-summary">
<strong class="title">
<em class="ico_ans">{.replyStatusText}</em>
{.gapReply}
<span <!--{ ? .groupThread }-->class="reply" <!--{/}-->>
<!--{ ? .isSecret == 'y' }-->
<!-- <img src="{bdList.cfg.iconImage.secret.url}" align=absmiddle> -->
<!--{ / }-->
<a class="js-board-qa-detail js-{req.bdId}-detail-{.sno}" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}"><!--{ ? .blockFl =='y'}-->차단 한 회원이 작성한 게시물입니다.<!--{ : }-->{.subject}<!--{ / }--></a>
<!--{ ? .isFile == 'y' }-->
<!-- <img src="{bdList.cfg.iconImage.attach_file.url}" alt="{=__('파일첨부 있음')}"/> -->
<!--{/}-->
<!--{ ? .isImage == 'y' }-->
<!-- <img src="{bdList.cfg.iconImage.attach_img.url}" alt="{=__('이미지첨부 있음')}"/> -->
<!--{/}-->
<!--{ ? .isNew == 'y' }-->
<img src="{bdList.cfg.iconImage.new.url}" alt="{=__('신규 등록글')}"/>
<!--{/}-->
</span>
</strong>
<div class="author-box">
<span class="name">{.writer}</span><span class="bar"></span><span class="date"> {.regDate}</span>
</div>
<button type="button" class="btn_more js-board-qa-detail" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}">{=__('상품평 더보기')}</button>
</div>
<div class="js-goodsqa-{.sno}">
</div>
</li>
<!--{/}-->
<!--{/}-->
</ul>
</div>
<div class="js-board-goodsqa-more review_more">
<button type="button" data-next-page="{pageData.next}">{=__('상품평 더보기')} {pageData.listCount}<span>/</span>{pageData.total}</button>
</div>
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="text/javascript">
<!--
$(document).ready(function () {
$('.js-board-goodsqa-view').off().on('touchstart', '.js-board-qa-detail', function (e) {
e.stopPropagation();
e.preventDefault();
if($(".js-goodsqa-"+$(this).data('sno')).html().trim() !='') {
$(".js-goodsqa-"+$(this).data('sno')).html('');
$(this).closest("li").removeClass("selected");
} else {
viewGoodsBoard($(this).data('bdid'),$(this).data('sno'),$(this).data('auth'),$(this).data('goodsno'),'');
}
});
$('.js-board-goodsqa-view').on('click', '.js-board-goodsqa-more button', function (e) {
if($(this).data('next-page') > 0 ) {
loadGoodsBoardList('{req.bdId}','{req.goodsNo}',$(this).data('next-page'));
}
});
$('.js-board-goodsqa-view').on("DOMSubtreeModified", '.detail_review ul > li > div:last-child',function() {
if ($(this).children('#boardContent').length > 0) {
if ($(this).data('auth') != 'n') $(this).closest("li").addClass("selected");
}
});
});
//-->
</script>
<!--{/}-->
 
 
{*** 상품상세 - 상품 문의 목록 | goods/goods_board_qa_list.php ***}
<div class="detail_review prd_inquiry" style="display:block">
<ul>
<!--{? bdList.list }-->
<!--{ @ bdList.list }-->
<!--{ ? .blockFl =='y' }-->
<li class="noclick">
<!--{ : }-->
<li class="private <!--{? .replyComplete }-->done<!--{/}-->">
<!--{ / }-->
<div class="item-list-summary">
<strong class="title">
<em class="ico_ans">{.replyStatusText}</em>
{.gapReply}
<span <!--{ ? .groupThread }-->class="reply" <!--{/}-->>
<!--{ ? .isSecret == 'y' }-->
<!-- <img src="{bdList.cfg.iconImage.secret.url}" align=absmiddle> -->
<!--{ / }-->
<a class="js-board-qa-detail js-{req.bdId}-detail-{.sno}" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}"><!--{ ? .blockFl =='y'}-->차단 한 회원이 작성한 게시물입니다.<!--{ : }-->{.subject}<!--{ / }--></a>
<!--{ ? .isFile == 'y' }-->
<!-- <img src="{bdList.cfg.iconImage.attach_file.url}" alt="{=__('파일첨부 있음')}"/> -->
<!--{/}-->
<!--{ ? .isImage == 'y' }-->
<!-- <img src="{bdList.cfg.iconImage.attach_img.url}" alt="{=__('이미지첨부 있음')}"/> -->
<!--{/}-->
<!--{ ? .isNew == 'y' }-->
<img src="{bdList.cfg.iconImage.new.url}" alt="{=__('신규 등록글')}"/>
<!--{/}-->
</span>
</strong>
<div class="author-box">
<span class="name">{.writer}</span><span class="bar"></span><span class="date"> {.regDate}</span>
</div>
<button type="button" class="btn_more js-board-qa-detail" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}">{=__('상품평 더보기')}</button>
</div>
<div class="js-goodsqa-{.sno}">
</div>
</li>
<!--{/}-->
<!--{/}-->
</ul>
</div>
<div class="js-board-goodsqa-more review_more">
<button type="button" data-next-page="{pageData.next}">{=__('상품평 더보기')} {pageData.listCount}<span>/</span>{pageData.total}</button>
</div>
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="text/javascript">
<!--
$(document).ready(function () {
$('.js-board-goodsqa-view').off().on('touchstart', '.js-board-qa-detail', function (e) {
e.stopPropagation();
e.preventDefault();
if($(".js-goodsqa-"+$(this).data('sno')).html().trim() !='') {
$(".js-goodsqa-"+$(this).data('sno')).html('');
$(this).closest("li").removeClass("selected");
} else {
viewGoodsBoard($(this).data('bdid'),$(this).data('sno'),$(this).data('auth'),$(this).data('goodsno'),'');
}
});
$('.js-board-goodsqa-view').on('click', '.js-board-goodsqa-more button', function (e) {
if($(this).data('next-page') > 0 ) {
loadGoodsBoardList('{req.bdId}','{req.goodsNo}',$(this).data('next-page'));
}
});
$('.js-board-goodsqa-view').on("DOMSubtreeModified", '.detail_review ul > li > div:last-child',function() {
if ($(this).children('#boardContent').length > 0) {
if ($(this).data('auth') != 'n') $(this).closest("li").addClass("selected");
}
});
});
//-->
</script>
<!--{/}-->
 
 
 
변경 후goods_board_qa_list.html
{*** 상품상세 - 상품 문의 목록 | goods/goods_board_qa_list.php ***}
<div class="detail_review prd_inquiry" style="display:block">
<ul>
<!--{? bdList.list }-->
<!--{ @ bdList.list }-->
<!--{ ? .blockFl =='y' }-->
<li class="noclick">
<!--{ : }-->
<li class="private <!--{? .replyComplete }-->done<!--{/}-->">
<!--{ / }-->
<div class="item-list-summary">
<strong class="title">
<em class="ico_ans">{.replyStatusText}</em>
{.gapReply}
<span <!--{ ? .groupThread }-->class="reply" <!--{/}-->>
<!--{ ? .isSecret == 'y' }-->
<!-- <img src="{bdList.cfg.iconImage.secret.url}" align=absmiddle> -->
<!--{ / }-->
<a class="js-board-qa-detail js-{req.bdId}-detail-{.sno}" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}"><!--{ ? .blockFl =='y'}-->차단 한 회원이 작성한 게시물입니다.<!--{ : }-->{.subject}<!--{ / }--></a>
<!--{ ? .isFile == 'y' }-->
<!-- <img src="{bdList.cfg.iconImage.attach_file.url}" alt="{=__('파일첨부 있음')}"/> -->
<!--{/}-->
<!--{ ? .isImage == 'y' }-->
<!-- <img src="{bdList.cfg.iconImage.attach_img.url}" alt="{=__('이미지첨부 있음')}"/> -->
<!--{/}-->
<!--{ ? .isNew == 'y' }-->
<img src="{bdList.cfg.iconImage.new.url}" alt="{=__('신규 등록글')}"/>
<!--{/}-->
</span>
</strong>
<div class="author-box">
<span class="name">{.writer}</span><span class="bar"></span><span class="date"> {.regDate}</span>
</div>
<button type="button" class="btn_more js-board-qa-detail" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}">{=__('상품평 더보기')}</button>
</div>
<div class="js-goodsqa-{.sno}">
 
</div>
</li>
<!--{/}-->
<!--{/}-->
</ul>
</div>
 
<div class="js-board-goodsqa-more review_more">
<button type="button" data-next-page="{pageData.next}">{=__('상품평 더보기')} {pageData.listCount}<span>/</span>{pageData.total}</button>
</div>
 
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
<!--
 
$(document).ready(function () {
 
$('.js-board-goodsqa-view').off().on('touchstart', '.js-board-qa-detail', function (e) {
e.stopPropagation();
e.preventDefault();
 
if($(".js-goodsqa-"+$(this).data('sno')).html().trim() !='') {
$(".js-goodsqa-"+$(this).data('sno')).html('');
$(this).closest("li").removeClass("selected");
} else {
viewGoodsBoard($(this).data('bdid'),$(this).data('sno'),$(this).data('auth'),$(this).data('goodsno'),'');
}
 
});
 
$('.js-board-goodsqa-view').on('click', '.js-board-goodsqa-more button', function (e) {
 
if($(this).data('next-page') > 0 ) {
loadGoodsBoardList('{req.bdId}','{req.goodsNo}',$(this).data('next-page'));
}
 
});
 
$('.js-board-goodsqa-view').on("DOMSubtreeModified", '.detail_review ul > li > div:last-child',function() {
if ($(this).children('#boardContent').length > 0) {
if ($(this).data('auth') != 'n') $(this).closest("li").addClass("selected");
}
});
});
 
 
//-->
</script>
<!--{/}-->
{*** 상품상세 - 상품 문의 목록 | goods/goods_board_qa_list.php ***}
<div class="detail_review prd_inquiry" style="display:block">
<ul>
<!--{? bdList.list }-->
<!--{ @ bdList.list }-->
<!--{ ? .blockFl =='y' }-->
<li class="noclick">
<!--{ : }-->
<li class="private <!--{? .replyComplete }-->done<!--{/}-->">
<!--{ / }-->
<div class="item-list-summary">
<strong class="title">
<em class="ico_ans">{.replyStatusText}</em>
{.gapReply}
<span <!--{ ? .groupThread }-->class="reply" <!--{/}-->>
<!--{ ? .isSecret == 'y' }-->
<!-- <img src="{bdList.cfg.iconImage.secret.url}" align=absmiddle> -->
<!--{ / }-->
<a class="js-board-qa-detail js-{req.bdId}-detail-{.sno}" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}"><!--{ ? .blockFl =='y'}-->차단 한 회원이 작성한 게시물입니다.<!--{ : }-->{.subject}<!--{ / }--></a>
<!--{ ? .isFile == 'y' }-->
<!-- <img src="{bdList.cfg.iconImage.attach_file.url}" alt="{=__('파일첨부 있음')}"/> -->
<!--{/}-->
<!--{ ? .isImage == 'y' }-->
<!-- <img src="{bdList.cfg.iconImage.attach_img.url}" alt="{=__('이미지첨부 있음')}"/> -->
<!--{/}-->
<!--{ ? .isNew == 'y' }-->
<img src="{bdList.cfg.iconImage.new.url}" alt="{=__('신규 등록글')}"/>
<!--{/}-->
</span>
</strong>
<div class="author-box">
<span class="name">{.writer}</span><span class="bar"></span><span class="date"> {.regDate}</span>
</div>
<button type="button" class="btn_more js-board-qa-detail" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}">{=__('상품평 더보기')}</button>
</div>
<div class="js-goodsqa-{.sno}">
 
</div>
</li>
<!--{/}-->
<!--{/}-->
</ul>
</div>
 
<div class="js-board-goodsqa-more review_more">
<button type="button" data-next-page="{pageData.next}">{=__('상품평 더보기')} {pageData.listCount}<span>/</span>{pageData.total}</button>
</div>
 
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
<!--
 
$(document).ready(function () {
 
$('.js-board-goodsqa-view').off().on('touchstart', '.js-board-qa-detail', function (e) {
e.stopPropagation();
e.preventDefault();
 
if($(".js-goodsqa-"+$(this).data('sno')).html().trim() !='') {
$(".js-goodsqa-"+$(this).data('sno')).html('');
$(this).closest("li").removeClass("selected");
} else {
viewGoodsBoard($(this).data('bdid'),$(this).data('sno'),$(this).data('auth'),$(this).data('goodsno'),'');
}
 
});
 
$('.js-board-goodsqa-view').on('click', '.js-board-goodsqa-more button', function (e) {
 
if($(this).data('next-page') > 0 ) {
loadGoodsBoardList('{req.bdId}','{req.goodsNo}',$(this).data('next-page'));
}
 
});
 
$('.js-board-goodsqa-view').on("DOMSubtreeModified", '.detail_review ul > li > div:last-child',function() {
if ($(this).children('#boardContent').length > 0) {
if ($(this).data('auth') != 'n') $(this).closest("li").addClass("selected");
}
});
});
 
 
//-->
</script>
<!--{/}-->
 
data/skin/mobile/story_g/goods/goods_board_review_list.html+230-226
변경 전goods_board_review_list.html
{*** 상품상세 - 상품 문의/후기 목록 | goods/goods_board_review_list.php ***}
<div class="detail_review" style="display:block">
<!--{? bdList.noticeList }-->
<!--{ @ bdList.noticeList }-->
<ul>
<li>
<div class="item-list-summary">
<img src="{bdList.cfg.iconImage.notice.url}" />
<strong class="title">
<a class="js-board-review-detail js-{req.bdId}-detail-{.sno}" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="y"><strong>{.subject}</strong></a>
</strong>
<div class="author-box">
<span class="name">{.writer}</span>
<span class="date"> {.regDate}</span>
</div>
<button type="button" class="btn_more js-board-review-detail" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="y">상품평 더보기</button>
</div>
<div class="js-goodsreview-{.sno}" data-notice="y">
</div>
</li>
</ul>
<!--{/}-->
<!--{/}-->
<!--{? bdList.list }-->
<!--{ @ bdList.list }-->
<ul>
<li class="<!--{ ? .blockFl =='y'}--> noclick<!--{ / }-->">
<div class="item-list-summary">
<strong class="title">
{.gapReply}
<span <!--{ ? .groupThread }-->class="reply" style="padding-left:15px;" <!--{/}-->>
<!--{ ? .isSecret == 'y' }-->
<img src="{bdList.cfg.iconImage.secret.url}" align=absmiddle>
<!--{ / }-->
<a class="js-board-review-detail js-{req.bdId}-detail-{.sno}" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="n"><!--{ ? .blockFl =='y'}-->차단 한 회원이 작성한 게시물입니다.<!--{ : }-->{.subject}<!--{ / }--></a>
<!--{ ? .isFile == 'y' }-->
<img src="{bdList.cfg.iconImage.attach_file.url}" alt="{=__('파일첨부 있음')}"/>
<!--{/}-->
<!--{ ? .isImage == 'y' }-->
<img src="{bdList.cfg.iconImage.attach_img.url}" alt="{=__('이미지첨부 있음')}"/>
<!--{/}-->
<!--{ ? .isNew == 'y' }-->
<img src="{bdList.cfg.iconImage.new.url}" alt="{=__('신규 등록글')}"/>
<!--{/}-->
</span>
</strong>
<span class="star_box"><span class="star_li" style="width:{.goodsPt*20}%;">{=__('별점')} {=.goodsPt}</span></span>
<div class="author-box">
<span class="name">{.writer}</span>
<span class="date"> {.regDate}</span>
</div>
<button type="button" class="btn_more js-board-review-detail" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="n">상품평 더보기</button>
</div>
<div class="js-goodsreview-{.sno}" data-notice="n">
</div>
</li>
</ul>
<!--{/}-->
<!--{:}-->
<ul class="not-record">
<li class="no-data">{=__('등록된 상품후기가 없습니다.')}</li>
</ul>
<!--{/}-->
</div>
<div class="js-board-goodsreview-more review_more">
<button type="button" data-next-page="{pageData.next}">{=__('상품평 더보기')} {pageData.listCount}<span>/</span>{pageData.total}</button>
</div>
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="text/javascript">
<!--
$(document).ready(function () {
$('.js-board-goodsreview-view').off().on('touchstart', '.js-board-review-detail', function (e) {
e.stopPropagation();
e.preventDefault();
var notice = $(this).data('notice');
if($(".js-goodsreview-"+$(this).data('sno')+"[data-notice="+notice+"]").html().trim() !='') {
$(".js-goodsreview-"+$(this).data('sno')+"[data-notice="+notice+"]").html('');
$(this).closest("li").removeClass("selected");
} else {
viewGoodsBoard($(this).data('bdid'),$(this).data('sno'),$(this).data('auth'),$(this).data('goodsno'),notice);
}
});
$('.js-board-goodsreview-view').on('click', '.js-board-goodsreview-more button', function (e) {
if($(this).data('next-page') > 0 ) {
loadGoodsBoardList('{req.bdId}','{req.goodsNo}',$(this).data('next-page'));
}
});
$('.js-board-goodsreview-view').on("DOMSubtreeModified", '.detail_review ul > li > div:last-child',function() {
if ($(this).children('#boardContent').length > 0) {
if ($(this).data('auth') != 'n') $(this).closest("li").addClass("selected");
}
});
});
//-->
</script>
<!--{/}-->
 
 
{*** 상품상세 - 상품 문의/후기 목록 | goods/goods_board_review_list.php ***}
<div class="detail_review" style="display:block">
<!--{? bdList.noticeList }-->
<!--{ @ bdList.noticeList }-->
<ul>
<li>
<div class="item-list-summary">
<img src="{bdList.cfg.iconImage.notice.url}" />
<strong class="title">
<a class="js-board-review-detail js-{req.bdId}-detail-{.sno}" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="y"><strong>{.subject}</strong></a>
</strong>
<div class="author-box">
<span class="name">{.writer}</span>
<span class="date"> {.regDate}</span>
</div>
<button type="button" class="btn_more js-board-review-detail" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="y">상품평 더보기</button>
</div>
<div class="js-goodsreview-{.sno}" data-notice="y">
</div>
</li>
</ul>
<!--{/}-->
<!--{/}-->
<!--{? bdList.list }-->
<!--{ @ bdList.list }-->
<ul>
<li class="<!--{ ? .blockFl =='y'}--> noclick<!--{ / }-->">
<div class="item-list-summary">
<strong class="title">
{.gapReply}
<span <!--{ ? .groupThread }-->class="reply" style="padding-left:15px;" <!--{/}-->>
<!--{ ? .isSecret == 'y' }-->
<img src="{bdList.cfg.iconImage.secret.url}" align=absmiddle>
<!--{ / }-->
<a class="js-board-review-detail js-{req.bdId}-detail-{.sno}" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="n"><!--{ ? .blockFl =='y'}-->차단 한 회원이 작성한 게시물입니다.<!--{ : }-->{.subject}<!--{ / }--></a>
<!--{ ? .isFile == 'y' }-->
<img src="{bdList.cfg.iconImage.attach_file.url}" alt="{=__('파일첨부 있음')}"/>
<!--{/}-->
<!--{ ? .isImage == 'y' }-->
<img src="{bdList.cfg.iconImage.attach_img.url}" alt="{=__('이미지첨부 있음')}"/>
<!--{/}-->
<!--{ ? .isNew == 'y' }-->
<img src="{bdList.cfg.iconImage.new.url}" alt="{=__('신규 등록글')}"/>
<!--{/}-->
</span>
</strong>
<span class="star_box"><span class="star_li" style="width:{.goodsPt*20}%;">{=__('별점')} {=.goodsPt}</span></span>
<div class="author-box">
<span class="name">{.writer}</span>
<span class="date"> {.regDate}</span>
</div>
<button type="button" class="btn_more js-board-review-detail" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="n">상품평 더보기</button>
</div>
<div class="js-goodsreview-{.sno}" data-notice="n">
</div>
</li>
</ul>
<!--{/}-->
<!--{:}-->
<ul class="not-record">
<li class="no-data">{=__('등록된 상품후기가 없습니다.')}</li>
</ul>
<!--{/}-->
</div>
<div class="js-board-goodsreview-more review_more">
<button type="button" data-next-page="{pageData.next}">{=__('상품평 더보기')} {pageData.listCount}<span>/</span>{pageData.total}</button>
</div>
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="text/javascript">
<!--
$(document).ready(function () {
$('.js-board-goodsreview-view').off().on('touchstart', '.js-board-review-detail', function (e) {
e.stopPropagation();
e.preventDefault();
var notice = $(this).data('notice');
if($(".js-goodsreview-"+$(this).data('sno')+"[data-notice="+notice+"]").html().trim() !='') {
$(".js-goodsreview-"+$(this).data('sno')+"[data-notice="+notice+"]").html('');
$(this).closest("li").removeClass("selected");
} else {
viewGoodsBoard($(this).data('bdid'),$(this).data('sno'),$(this).data('auth'),$(this).data('goodsno'),notice);
}
});
$('.js-board-goodsreview-view').on('click', '.js-board-goodsreview-more button', function (e) {
if($(this).data('next-page') > 0 ) {
loadGoodsBoardList('{req.bdId}','{req.goodsNo}',$(this).data('next-page'));
}
});
$('.js-board-goodsreview-view').on("DOMSubtreeModified", '.detail_review ul > li > div:last-child',function() {
if ($(this).children('#boardContent').length > 0) {
if ($(this).data('auth') != 'n') $(this).closest("li").addClass("selected");
}
});
});
//-->
</script>
<!--{/}-->
 
 
 
변경 후goods_board_review_list.html
{*** 상품상세 - 상품 문의/후기 목록 | goods/goods_board_review_list.php ***}
<div class="detail_review" style="display:block">
 
<!--{? bdList.noticeList }-->
<!--{ @ bdList.noticeList }-->
<ul>
<li>
<div class="item-list-summary">
<img src="{bdList.cfg.iconImage.notice.url}" />
<strong class="title">
<a class="js-board-review-detail js-{req.bdId}-detail-{.sno}" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="y"><strong>{.subject}</strong></a>
</strong>
<div class="author-box">
<span class="name">{.writer}</span>
<span class="date"> {.regDate}</span>
</div>
<button type="button" class="btn_more js-board-review-detail" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="y">상품평 더보기</button>
</div>
<div class="js-goodsreview-{.sno}" data-notice="y">
 
</div>
</li>
</ul>
<!--{/}-->
<!--{/}-->
 
<!--{? bdList.list }-->
<!--{ @ bdList.list }-->
<ul>
<li class="<!--{ ? .blockFl =='y'}--> noclick<!--{ / }-->">
<div class="item-list-summary">
<strong class="title">
{.gapReply}
<span <!--{ ? .groupThread }-->class="reply" style="padding-left:15px;" <!--{/}-->>
<!--{ ? .isSecret == 'y' }-->
<img src="{bdList.cfg.iconImage.secret.url}" align=absmiddle>
<!--{ / }-->
<a class="js-board-review-detail js-{req.bdId}-detail-{.sno}" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="n"><!--{ ? .blockFl =='y'}-->차단 한 회원이 작성한 게시물입니다.<!--{ : }-->{.subject}<!--{ / }--></a>
<!--{ ? .isFile == 'y' }-->
<img src="{bdList.cfg.iconImage.attach_file.url}" alt="{=__('파일첨부 있음')}"/>
<!--{/}-->
<!--{ ? .isImage == 'y' }-->
<img src="{bdList.cfg.iconImage.attach_img.url}" alt="{=__('이미지첨부 있음')}"/>
<!--{/}-->
<!--{ ? .isNew == 'y' }-->
<img src="{bdList.cfg.iconImage.new.url}" alt="{=__('신규 등록글')}"/>
<!--{/}-->
</span>
</strong>
<span class="star_box"><span class="star_li" style="width:{.goodsPt*20}%;">{=__('별점')} {=.goodsPt}</span></span>
<div class="author-box">
<span class="name">{.writer}</span>
<span class="date"> {.regDate}</span>
</div>
<button type="button" class="btn_more js-board-review-detail" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="n">상품평 더보기</button>
</div>
<div class="js-goodsreview-{.sno}" data-notice="n">
 
</div>
</li>
</ul>
<!--{/}-->
<!--{:}-->
<ul class="not-record">
<li class="no-data">{=__('등록된 상품후기가 없습니다.')}</li>
</ul>
<!--{/}-->
</div>
 
<div class="js-board-goodsreview-more review_more">
<button type="button" data-next-page="{pageData.next}">{=__('상품평 더보기')} {pageData.listCount}<span>/</span>{pageData.total}</button>
</div>
 
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
<!--
 
$(document).ready(function () {
 
$('.js-board-goodsreview-view').off().on('touchstart', '.js-board-review-detail', function (e) {
e.stopPropagation();
e.preventDefault();
 
var notice = $(this).data('notice');
if($(".js-goodsreview-"+$(this).data('sno')+"[data-notice="+notice+"]").html().trim() !='') {
$(".js-goodsreview-"+$(this).data('sno')+"[data-notice="+notice+"]").html('');
$(this).closest("li").removeClass("selected");
} else {
viewGoodsBoard($(this).data('bdid'),$(this).data('sno'),$(this).data('auth'),$(this).data('goodsno'),notice);
}
 
});
 
$('.js-board-goodsreview-view').on('click', '.js-board-goodsreview-more button', function (e) {
 
if($(this).data('next-page') > 0 ) {
loadGoodsBoardList('{req.bdId}','{req.goodsNo}',$(this).data('next-page'));
}
 
});
 
$('.js-board-goodsreview-view').on("DOMSubtreeModified", '.detail_review ul > li > div:last-child',function() {
if ($(this).children('#boardContent').length > 0) {
if ($(this).data('auth') != 'n') $(this).closest("li").addClass("selected");
}
});
});
 
 
//-->
</script>
<!--{/}-->
{*** 상품상세 - 상품 문의/후기 목록 | goods/goods_board_review_list.php ***}
<div class="detail_review" style="display:block">
 
<!--{? bdList.noticeList }-->
<!--{ @ bdList.noticeList }-->
<ul>
<li>
<div class="item-list-summary">
<img src="{bdList.cfg.iconImage.notice.url}" />
<strong class="title">
<a class="js-board-review-detail js-{req.bdId}-detail-{.sno}" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="y"><strong>{.subject}</strong></a>
</strong>
<div class="author-box">
<span class="name">{.writer}</span>
<span class="date"> {.regDate}</span>
</div>
<button type="button" class="btn_more js-board-review-detail" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="y">상품평 더보기</button>
</div>
<div class="js-goodsreview-{.sno}" data-notice="y">
 
</div>
</li>
</ul>
<!--{/}-->
<!--{/}-->
 
<!--{? bdList.list }-->
<!--{ @ bdList.list }-->
<ul>
<li class="<!--{ ? .blockFl =='y'}--> noclick<!--{ / }-->">
<div class="item-list-summary">
<strong class="title">
{.gapReply}
<span <!--{ ? .groupThread }-->class="reply" style="padding-left:15px;" <!--{/}-->>
<!--{ ? .isSecret == 'y' }-->
<img src="{bdList.cfg.iconImage.secret.url}" align=absmiddle>
<!--{ / }-->
<a class="js-board-review-detail js-{req.bdId}-detail-{.sno}" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="n"><!--{ ? .blockFl =='y'}-->차단 한 회원이 작성한 게시물입니다.<!--{ : }-->{.subject}<!--{ / }--></a>
<!--{ ? .isFile == 'y' }-->
<img src="{bdList.cfg.iconImage.attach_file.url}" alt="{=__('파일첨부 있음')}"/>
<!--{/}-->
<!--{ ? .isImage == 'y' }-->
<img src="{bdList.cfg.iconImage.attach_img.url}" alt="{=__('이미지첨부 있음')}"/>
<!--{/}-->
<!--{ ? .isNew == 'y' }-->
<img src="{bdList.cfg.iconImage.new.url}" alt="{=__('신규 등록글')}"/>
<!--{/}-->
</span>
</strong>
<span class="star_box"><span class="star_li" style="width:{.goodsPt*20}%;">{=__('별점')} {=.goodsPt}</span></span>
<div class="author-box">
<span class="name">{.writer}</span>
<span class="date"> {.regDate}</span>
</div>
<button type="button" class="btn_more js-board-review-detail" data-bdid="{req.bdId}" data-sno="{.sno}" data-auth="{.auth.view}" data-goodsno="{.goodsNo}" data-notice="n">상품평 더보기</button>
</div>
<div class="js-goodsreview-{.sno}" data-notice="n">
 
</div>
</li>
</ul>
<!--{/}-->
<!--{:}-->
<ul class="not-record">
<li class="no-data">{=__('등록된 상품후기가 없습니다.')}</li>
</ul>
<!--{/}-->
</div>
 
<div class="js-board-goodsreview-more review_more">
<button type="button" data-next-page="{pageData.next}">{=__('상품평 더보기')} {pageData.listCount}<span>/</span>{pageData.total}</button>
</div>
 
<!--{? pageData.now =='1' }-->
<script type="text/javascript" src="\{=c.PATH_MOBILE_SKIN}js/gd_board_view.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
<!--
 
$(document).ready(function () {
 
$('.js-board-goodsreview-view').off().on('touchstart', '.js-board-review-detail', function (e) {
e.stopPropagation();
e.preventDefault();
 
var notice = $(this).data('notice');
if($(".js-goodsreview-"+$(this).data('sno')+"[data-notice="+notice+"]").html().trim() !='') {
$(".js-goodsreview-"+$(this).data('sno')+"[data-notice="+notice+"]").html('');
$(this).closest("li").removeClass("selected");
} else {
viewGoodsBoard($(this).data('bdid'),$(this).data('sno'),$(this).data('auth'),$(this).data('goodsno'),notice);
}
 
});
 
$('.js-board-goodsreview-view').on('click', '.js-board-goodsreview-more button', function (e) {
 
if($(this).data('next-page') > 0 ) {
loadGoodsBoardList('{req.bdId}','{req.goodsNo}',$(this).data('next-page'));
}
 
});
 
$('.js-board-goodsreview-view').on("DOMSubtreeModified", '.detail_review ul > li > div:last-child',function() {
if ($(this).children('#boardContent').length > 0) {
if ($(this).data('auth') != 'n') $(this).closest("li").addClass("selected");
}
});
});
 
 
//-->
</script>
<!--{/}-->
 
data/skin/mobile/story_g/goods/goods_board_view.html+11-67
변경 전goods_board_view.html
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap" style="margin-top: 10px;">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="../img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap" style="margin-top: 10px;">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="../img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap" style="margin-top: 10px;">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="../img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</table>
</div>
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap" style="margin-top: 10px;">
<td class="capcha">
<div class="capcha-img">
<img src="../board/captcha.php" align="absmiddle" class="captchaImg">
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">보이는 순서대로 <br>숫자 및 문자를 모두 입력해 주세요.</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onkeyup="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="문자를 입력해주세요." class="text captcha">
</div>
<button type="button" onclick="gd_reload_reply_captcha()" class="normal-btn small1 captchareload">
<em><img src="../img/etc/icon-reset.png" alt="" class="va-m"> 이미지 새로고침</em>
</button>
</div>
</td>
</tr>
<!--{ / }-->
</table>
</div>
 
변경 후goods_board_view.html
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap">
<td class="capcha capcha_altcha">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<tr class="input_wrap" style="margin-top: 10px;">
<td class="capcha capcha_altcha">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
</td>
</tr>
<!--{ / }-->
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<!--{ / }-->
</table>
</div>
</td>
</tr>
<!--{ ? bdView.cfg.bdSpamMemoFl & 2 }-->
<div class="input_wrap">
{=includeWidget('share/_altcha.html', 'altchaChallenge', '../board/captcha.php')}
</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<!--{ / }-->
</table>
</div>
 
data/skin/mobile/story_g/goods/goods_view.html+4
변경 전goods_view.html
<!--{ / }-->
<div id="layerDim" class="dn zidx110">&nbsp;</div>
<script type="text/javascript" src="../js/gd_board_goods.js" charset="utf-8"></script>
 
 
 
{=fbGoodsViewScript}
{#footer}
<!--{ / }-->
<div id="layerDim" class="dn zidx110">&nbsp;</div>
<script type="text/javascript" src="../js/gd_board_goods.js" charset="utf-8"></script>
 
 
 
{=fbGoodsViewScript}
{#footer}
 
변경 후goods_view.html
<!--{ / }-->
<div id="layerDim" class="dn zidx110">&nbsp;</div>
<script type="text/javascript" src="../js/gd_board_goods.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
 
{=fbGoodsViewScript}
{#footer}
<!--{ / }-->
<div id="layerDim" class="dn zidx110">&nbsp;</div>
<script type="text/javascript" src="../js/gd_board_goods.js" charset="utf-8"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
 
{=fbGoodsViewScript}
{#footer}
 
data/skin/mobile/story_g/js/altcha/altcha.js+3780
변경 전altcha.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후altcha.js
const DEV = false;
var is_array = Array.isArray;
var index_of = Array.prototype.indexOf;
var includes = Array.prototype.includes;
var array_from = Array.from;
var object_keys = Object.keys;
var define_property = Object.defineProperty;
var get_descriptor = Object.getOwnPropertyDescriptor;
var get_descriptors = Object.getOwnPropertyDescriptors;
var object_prototype = Object.prototype;
var array_prototype = Array.prototype;
var get_prototype_of = Object.getPrototypeOf;
var is_extensible = Object.isExtensible;
const noop = () => {
};
function run_all(arr) {
for (var i = 0; i < arr.length; i++) {
arr[i]();
}
}
function deferred() {
var resolve;
var reject;
var promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
return { promise, resolve, reject };
}
const DERIVED = 1 << 1;
const EFFECT = 1 << 2;
const RENDER_EFFECT = 1 << 3;
const MANAGED_EFFECT = 1 << 24;
const BLOCK_EFFECT = 1 << 4;
const BRANCH_EFFECT = 1 << 5;
const ROOT_EFFECT = 1 << 6;
const BOUNDARY_EFFECT = 1 << 7;
const CONNECTED = 1 << 9;
const CLEAN = 1 << 10;
const DIRTY = 1 << 11;
const MAYBE_DIRTY = 1 << 12;
const INERT = 1 << 13;
const DESTROYED = 1 << 14;
const REACTION_RAN = 1 << 15;
const DESTROYING = 1 << 25;
const EFFECT_TRANSPARENT = 1 << 16;
const EAGER_EFFECT = 1 << 17;
const HEAD_EFFECT = 1 << 18;
const EFFECT_PRESERVED = 1 << 19;
const USER_EFFECT = 1 << 20;
const WAS_MARKED = 1 << 16;
const REACTION_IS_UPDATING = 1 << 21;
const ASYNC = 1 << 22;
const ERROR_VALUE = 1 << 23;
const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state");
const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props");
const LOADING_ATTR_SYMBOL = /* @__PURE__ */ Symbol("");
const ATTRIBUTES_CACHE = /* @__PURE__ */ Symbol("attributes");
const CLASS_CACHE = /* @__PURE__ */ Symbol("class");
const STYLE_CACHE = /* @__PURE__ */ Symbol("style");
const TEXT_CACHE = /* @__PURE__ */ Symbol("text");
const FORM_RESET_HANDLER = /* @__PURE__ */ Symbol("form reset");
const STALE_REACTION = new class StaleReactionError extends Error {
name = "StaleReactionError";
message = "The reaction that called `getAbortSignal()` was re-run or destroyed";
}();
const IS_XHTML = (
// We gotta write it like this because after downleveling the pure comment may end up in the wrong location
!!globalThis.document?.contentType && /* @__PURE__ */ globalThis.document.contentType.includes("xml")
);
const TEXT_NODE = 3;
const COMMENT_NODE = 8;
function equals(value) {
return value === this.v;
}
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function safe_equals(value) {
return !safe_not_equal(value, this.v);
}
function lifecycle_outside_component(name) {
{
throw new Error(`https://svelte.dev/e/lifecycle_outside_component`);
}
}
function async_derived_orphan() {
{
throw new Error(`https://svelte.dev/e/async_derived_orphan`);
}
}
function effect_in_teardown(rune) {
{
throw new Error(`https://svelte.dev/e/effect_in_teardown`);
}
}
function effect_in_unowned_derived() {
{
throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`);
}
}
function effect_orphan(rune) {
{
throw new Error(`https://svelte.dev/e/effect_orphan`);
}
}
function effect_update_depth_exceeded() {
{
throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);
}
}
function hydration_failed() {
{
throw new Error(`https://svelte.dev/e/hydration_failed`);
}
}
function state_descriptors_fixed() {
{
throw new Error(`https://svelte.dev/e/state_descriptors_fixed`);
}
}
function state_prototype_fixed() {
{
throw new Error(`https://svelte.dev/e/state_prototype_fixed`);
}
}
function state_unsafe_mutation() {
{
throw new Error(`https://svelte.dev/e/state_unsafe_mutation`);
}
}
function svelte_boundary_reset_onerror() {
{
throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);
}
}
let tracing_mode_flag = false;
const TEMPLATE_FRAGMENT = 1;
const TEMPLATE_USE_IMPORT_NODE = 1 << 1;
const HYDRATION_START = "[";
const HYDRATION_START_ELSE = "[!";
const HYDRATION_START_FAILED = "[?";
const HYDRATION_END = "]";
const HYDRATION_ERROR = {};
const UNINITIALIZED = /* @__PURE__ */ Symbol("uninitialized");
const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml";
const NAMESPACE_SVG = "http://www.w3.org/2000/svg";
const NAMESPACE_MATHML = "http://www.w3.org/1998/Math/MathML";
const ATTACHMENT_KEY = "@attach";
let component_context = null;
function set_component_context(context) {
component_context = context;
}
function push(props, runes = false, fn) {
component_context = {
p: component_context,
i: false,
c: null,
e: null,
s: props,
x: null,
r: (
/** @type {Effect} */
active_effect
),
l: null
};
}
function pop(component2) {
var context = (
/** @type {ComponentContext} */
component_context
);
var effects = context.e;
if (effects !== null) {
context.e = null;
for (var fn of effects) {
create_user_effect(fn);
}
}
if (component2 !== void 0) {
context.x = component2;
}
context.i = true;
component_context = context.p;
return component2 ?? /** @type {T} */
{};
}
function is_runes() {
return true;
}
let micro_tasks = [];
function run_micro_tasks() {
var tasks = micro_tasks;
micro_tasks = [];
run_all(tasks);
}
function queue_micro_task(fn) {
if (micro_tasks.length === 0 && !is_flushing_sync) {
var tasks = micro_tasks;
queueMicrotask(() => {
if (tasks === micro_tasks) run_micro_tasks();
});
}
micro_tasks.push(fn);
}
function flush_tasks() {
while (micro_tasks.length > 0) {
run_micro_tasks();
}
}
function derived_inert() {
{
console.warn(`https://svelte.dev/e/derived_inert`);
}
}
function hydration_mismatch(location2) {
{
console.warn(`https://svelte.dev/e/hydration_mismatch`);
}
}
function select_multiple_invalid_value() {
{
console.warn(`https://svelte.dev/e/select_multiple_invalid_value`);
}
}
function svelte_boundary_reset_noop() {
{
console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);
}
}
let hydrating = false;
function set_hydrating(value) {
hydrating = value;
}
let hydrate_node;
function set_hydrate_node(node) {
if (node === null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return hydrate_node = node;
}
function hydrate_next() {
return set_hydrate_node(/* @__PURE__ */ get_next_sibling(hydrate_node));
}
function reset(node) {
if (!hydrating) return;
if (/* @__PURE__ */ get_next_sibling(hydrate_node) !== null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
hydrate_node = node;
}
function next(count = 1) {
if (hydrating) {
var i = count;
var node = hydrate_node;
while (i--) {
node = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(node);
}
hydrate_node = node;
}
}
function skip_nodes(remove = true) {
var depth = 0;
var node = hydrate_node;
while (true) {
if (node.nodeType === COMMENT_NODE) {
var data = (
/** @type {Comment} */
node.data
);
if (data === HYDRATION_END) {
if (depth === 0) return node;
depth -= 1;
} else if (data === HYDRATION_START || data === HYDRATION_START_ELSE || // "[1", "[2", etc. for if blocks
data[0] === "[" && !isNaN(Number(data.slice(1)))) {
depth += 1;
}
}
var next2 = (
/** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(node)
);
if (remove) node.remove();
node = next2;
}
}
function read_hydration_instruction(node) {
if (!node || node.nodeType !== COMMENT_NODE) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return (
/** @type {Comment} */
node.data
);
}
function proxy(value) {
if (typeof value !== "object" || value === null || STATE_SYMBOL in value) {
return value;
}
const prototype = get_prototype_of(value);
if (prototype !== object_prototype && prototype !== array_prototype) {
return value;
}
var sources = /* @__PURE__ */ new Map();
var is_proxied_array = is_array(value);
var version = /* @__PURE__ */ state(0);
var parent_version = update_version;
var with_parent = (fn) => {
if (update_version === parent_version) {
return fn();
}
var reaction = active_reaction;
var version2 = update_version;
set_active_reaction(null);
set_update_version(parent_version);
var result = fn();
set_active_reaction(reaction);
set_update_version(version2);
return result;
};
if (is_proxied_array) {
sources.set("length", /* @__PURE__ */ state(
/** @type {any[]} */
value.length
));
}
return new Proxy(
/** @type {any} */
value,
{
defineProperty(_, prop2, descriptor) {
if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) {
state_descriptors_fixed();
}
var s = sources.get(prop2);
if (s === void 0) {
with_parent(() => {
var s2 = /* @__PURE__ */ state(descriptor.value);
sources.set(prop2, s2);
return s2;
});
} else {
set(s, descriptor.value, true);
}
return true;
},
deleteProperty(target, prop2) {
var s = sources.get(prop2);
if (s === void 0) {
if (prop2 in target) {
const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
sources.set(prop2, s2);
increment(version);
}
} else {
set(s, UNINITIALIZED);
increment(version);
}
return true;
},
get(target, prop2, receiver) {
if (prop2 === STATE_SYMBOL) {
return value;
}
var s = sources.get(prop2);
var exists = prop2 in target;
if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) {
s = with_parent(() => {
var p = proxy(exists ? target[prop2] : UNINITIALIZED);
var s2 = /* @__PURE__ */ state(p);
return s2;
});
sources.set(prop2, s);
}
if (s !== void 0) {
var v = get(s);
return v === UNINITIALIZED ? void 0 : v;
}
return Reflect.get(target, prop2, receiver);
},
getOwnPropertyDescriptor(target, prop2) {
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor && "value" in descriptor) {
var s = sources.get(prop2);
if (s) descriptor.value = get(s);
} else if (descriptor === void 0) {
var source2 = sources.get(prop2);
var value2 = source2?.v;
if (source2 !== void 0 && value2 !== UNINITIALIZED) {
return {
enumerable: true,
configurable: true,
value: value2,
writable: true
};
}
}
return descriptor;
},
has(target, prop2) {
if (prop2 === STATE_SYMBOL) {
return true;
}
var s = sources.get(prop2);
var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2);
if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) {
if (s === void 0) {
s = with_parent(() => {
var p = has ? proxy(target[prop2]) : UNINITIALIZED;
var s2 = /* @__PURE__ */ state(p);
return s2;
});
sources.set(prop2, s);
}
var value2 = get(s);
if (value2 === UNINITIALIZED) {
return false;
}
}
return has;
},
set(target, prop2, value2, receiver) {
var s = sources.get(prop2);
var has = prop2 in target;
if (is_proxied_array && prop2 === "length") {
for (var i = value2; i < /** @type {Source<number>} */
s.v; i += 1) {
var other_s = sources.get(i + "");
if (other_s !== void 0) {
set(other_s, UNINITIALIZED);
} else if (i in target) {
other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
sources.set(i + "", other_s);
}
}
}
if (s === void 0) {
if (!has || get_descriptor(target, prop2)?.writable) {
s = with_parent(() => /* @__PURE__ */ state(void 0));
set(s, proxy(value2));
sources.set(prop2, s);
}
} else {
has = s.v !== UNINITIALIZED;
var p = with_parent(() => proxy(value2));
set(s, p);
}
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor?.set) {
descriptor.set.call(receiver, value2);
}
if (!has) {
if (is_proxied_array && typeof prop2 === "string") {
var ls = (
/** @type {Source<number>} */
sources.get("length")
);
var n = Number(prop2);
if (Number.isInteger(n) && n >= ls.v) {
set(ls, n + 1);
}
}
increment(version);
}
return true;
},
ownKeys(target) {
get(version);
var own_keys = Reflect.ownKeys(target).filter((key3) => {
var source3 = sources.get(key3);
return source3 === void 0 || source3.v !== UNINITIALIZED;
});
for (var [key2, source2] of sources) {
if (source2.v !== UNINITIALIZED && !(key2 in target)) {
own_keys.push(key2);
}
}
return own_keys;
},
setPrototypeOf() {
state_prototype_fixed();
}
}
);
}
function get_proxied_value(value) {
try {
if (value !== null && typeof value === "object" && STATE_SYMBOL in value) {
return value[STATE_SYMBOL];
}
} catch {
}
return value;
}
function is(a, b) {
return Object.is(get_proxied_value(a), get_proxied_value(b));
}
var $window;
var $document;
var is_firefox;
var first_child_getter;
var next_sibling_getter;
function init_operations() {
if ($window !== void 0) {
return;
}
$window = window;
$document = document;
is_firefox = /Firefox/.test(navigator.userAgent);
var element_prototype = Element.prototype;
var node_prototype = Node.prototype;
var text_prototype = Text.prototype;
first_child_getter = get_descriptor(node_prototype, "firstChild").get;
next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get;
if (is_extensible(element_prototype)) {
element_prototype[CLASS_CACHE] = void 0;
element_prototype[ATTRIBUTES_CACHE] = null;
element_prototype[STYLE_CACHE] = void 0;
element_prototype.__e = void 0;
}
if (is_extensible(text_prototype)) {
text_prototype[TEXT_CACHE] = void 0;
}
}
function create_text(value = "") {
return document.createTextNode(value);
}
// @__NO_SIDE_EFFECTS__
function get_first_child(node) {
return (
/** @type {TemplateNode | null} */
first_child_getter.call(node)
);
}
// @__NO_SIDE_EFFECTS__
function get_next_sibling(node) {
return (
/** @type {TemplateNode | null} */
next_sibling_getter.call(node)
);
}
function child(node, is_text) {
if (!hydrating) {
return /* @__PURE__ */ get_first_child(node);
}
var child2 = /* @__PURE__ */ get_first_child(hydrate_node);
if (child2 === null) {
child2 = hydrate_node.appendChild(create_text());
} else if (is_text && child2.nodeType !== TEXT_NODE) {
var text2 = create_text();
child2?.before(text2);
set_hydrate_node(text2);
return text2;
}
if (is_text) {
merge_text_nodes(
/** @type {Text} */
child2
);
}
set_hydrate_node(child2);
return child2;
}
function first_child(node, is_text = false) {
if (!hydrating) {
var first = /* @__PURE__ */ get_first_child(node);
if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first);
return first;
}
if (is_text) {
if (hydrate_node?.nodeType !== TEXT_NODE) {
var text2 = create_text();
hydrate_node?.before(text2);
set_hydrate_node(text2);
return text2;
}
merge_text_nodes(
/** @type {Text} */
hydrate_node
);
}
return hydrate_node;
}
function sibling(node, count = 1, is_text = false) {
let next_sibling = hydrating ? hydrate_node : node;
var last_sibling;
while (count--) {
last_sibling = next_sibling;
next_sibling = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(next_sibling);
}
if (!hydrating) {
return next_sibling;
}
if (is_text) {
if (next_sibling?.nodeType !== TEXT_NODE) {
var text2 = create_text();
if (next_sibling === null) {
last_sibling?.after(text2);
} else {
next_sibling.before(text2);
}
set_hydrate_node(text2);
return text2;
}
merge_text_nodes(
/** @type {Text} */
next_sibling
);
}
set_hydrate_node(next_sibling);
return next_sibling;
}
function clear_text_content(node) {
node.textContent = "";
}
function should_defer_append() {
return false;
}
function create_element(tag, namespace, is2) {
let options = void 0;
return (
/** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */
document.createElementNS(namespace ?? NAMESPACE_HTML, tag, options)
);
}
function merge_text_nodes(text2) {
if (
/** @type {string} */
text2.nodeValue.length < 65536
) {
return;
}
let next2 = text2.nextSibling;
while (next2 !== null && next2.nodeType === TEXT_NODE) {
next2.remove();
text2.nodeValue += /** @type {string} */
next2.nodeValue;
next2 = text2.nextSibling;
}
}
function handle_error(error) {
var effect2 = active_effect;
if (effect2 === null) {
active_reaction.f |= ERROR_VALUE;
return error;
}
if ((effect2.f & REACTION_RAN) === 0 && (effect2.f & EFFECT) === 0) {
throw error;
}
invoke_error_boundary(error, effect2);
}
function invoke_error_boundary(error, effect2) {
while (effect2 !== null) {
if ((effect2.f & BOUNDARY_EFFECT) !== 0) {
if ((effect2.f & REACTION_RAN) === 0) {
throw error;
}
try {
effect2.b.error(error);
return;
} catch (e) {
error = e;
}
}
effect2 = effect2.parent;
}
throw error;
}
const STATUS_MASK = -7169;
function set_signal_status(signal, status) {
signal.f = signal.f & STATUS_MASK | status;
}
function update_derived_status(derived2) {
if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) {
set_signal_status(derived2, CLEAN);
} else {
set_signal_status(derived2, MAYBE_DIRTY);
}
}
function clear_marked(deps) {
if (deps === null) return;
for (const dep of deps) {
if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {
continue;
}
dep.f ^= WAS_MARKED;
clear_marked(
/** @type {Derived} */
dep.deps
);
}
}
function defer_effect(effect2, dirty_effects, maybe_dirty_effects) {
if ((effect2.f & DIRTY) !== 0) {
dirty_effects.add(effect2);
} else if ((effect2.f & MAYBE_DIRTY) !== 0) {
maybe_dirty_effects.add(effect2);
}
clear_marked(effect2.deps);
set_signal_status(effect2, CLEAN);
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set2(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set2(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set2, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set: set2, update, subscribe };
}
function get$1(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let IS_UNMOUNTED = /* @__PURE__ */ Symbol("unmounted");
function store_get(store2, store_name, stores) {
const entry = stores[store_name] ??= {
store: null,
source: /* @__PURE__ */ mutable_source(void 0),
unsubscribe: noop
};
if (entry.store !== store2 && !(IS_UNMOUNTED in stores)) {
entry.unsubscribe();
entry.store = store2 ?? null;
if (store2 == null) {
entry.source.v = void 0;
entry.unsubscribe = noop;
} else {
var is_synchronous_callback = true;
entry.unsubscribe = subscribe_to_store(store2, (v) => {
if (is_synchronous_callback) {
entry.source.v = v;
} else {
set(entry.source, v);
}
});
is_synchronous_callback = false;
}
}
if (store2 && IS_UNMOUNTED in stores) {
return get$1(store2);
}
return get(entry.source);
}
function setup_stores() {
const stores = {};
function cleanup() {
teardown(() => {
for (var store_name in stores) {
const ref = stores[store_name];
ref.unsubscribe();
}
define_property(stores, IS_UNMOUNTED, {
enumerable: false,
value: true
});
});
}
return [stores, cleanup];
}
let first_batch = null;
let last_batch = null;
let current_batch = null;
let previous_batch = null;
let batch_values = null;
let last_scheduled_effect = null;
let is_flushing_sync = false;
let is_processing = false;
let collected_effects = null;
let legacy_updates = null;
var flush_count = 0;
var source_stacks = /* @__PURE__ */ new Set();
let uid = 1;
class Batch {
id = uid++;
/** True as soon as `#process` was called */
#started = false;
linked = true;
/** @type {Batch | null} */
#prev = null;
/** @type {Batch | null} */
#next = null;
/** @type {Map<Effect, ReturnType<typeof deferred<any>>>} */
async_deriveds = /* @__PURE__ */ new Map();
/**
* The current values of any signals that are updated in this batch.
* Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)
* They keys of this map are identical to `this.#previous`
* @type {Map<Value, [any, boolean]>}
*/
current = /* @__PURE__ */ new Map();
/**
* The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place.
* They keys of this map are identical to `this.#current`
* @type {Map<Value, any>}
*/
previous = /* @__PURE__ */ new Map();
/**
* Async effects which this batch doesn't take into account anymore when calculating blockers,
* as it has a value for it already.
* @type {Set<Effect>}
*/
unblocked = /* @__PURE__ */ new Set();
/**
* When the batch is committed (and the DOM is updated), we need to remove old branches
* and append new ones by calling the functions added inside (if/each/key/etc) blocks
* @type {Set<(batch: Batch) => void>}
*/
#commit_callbacks = /* @__PURE__ */ new Set();
/**
* If a fork is discarded, we need to destroy any effects that are no longer needed
* @type {Set<(batch: Batch) => void>}
*/
#discard_callbacks = /* @__PURE__ */ new Set();
/**
* Callbacks that should run only when a fork is committed.
* @type {Set<(batch: Batch) => void>}
*/
#fork_commit_callbacks = /* @__PURE__ */ new Set();
/**
* The number of async effects that are currently in flight
*/
#pending = 0;
/**
* Async effects that are currently in flight, _not_ inside a pending boundary
* @type {Map<Effect, number>}
*/
#blocking_pending = /* @__PURE__ */ new Map();
/**
* A deferred that resolves when the batch is committed, used with `settled()`
* TODO replace with Promise.withResolvers once supported widely enough
* @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}
*/
#deferred = null;
/**
* The root effects that need to be flushed
* @type {Effect[]}
*/
#roots = [];
/**
* Effects created while this batch was active.
* @type {Effect[]}
*/
#new_effects = [];
/**
* Deferred effects (which run after async work has completed) that are DIRTY
* @type {Set<Effect>}
*/
#dirty_effects = /* @__PURE__ */ new Set();
/**
* Deferred effects that are MAYBE_DIRTY
* @type {Set<Effect>}
*/
#maybe_dirty_effects = /* @__PURE__ */ new Set();
/**
* A map of branches that still exist, but will be destroyed when this batch
* is committed — we skip over these during `process`.
* The value contains child effects that were dirty/maybe_dirty before being reset,
* so they can be rescheduled if the branch survives.
* @type {Map<Effect, { d: Effect[], m: Effect[] }>}
*/
#skipped_branches = /* @__PURE__ */ new Map();
/**
* Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing
* @type {Set<Effect>}
*/
#unskipped_branches = /* @__PURE__ */ new Set();
is_fork = false;
#decrement_queued = false;
#is_deferred() {
if (this.is_fork) return true;
for (const effect2 of this.#blocking_pending.keys()) {
var e = effect2;
var skipped = false;
while (e.parent !== null) {
if (this.#skipped_branches.has(e)) {
skipped = true;
break;
}
e = e.parent;
}
if (!skipped) {
return true;
}
}
return false;
}
/**
* Add an effect to the #skipped_branches map and reset its children
* @param {Effect} effect
*/
skip_effect(effect2) {
if (!this.#skipped_branches.has(effect2)) {
this.#skipped_branches.set(effect2, { d: [], m: [] });
}
this.#unskipped_branches.delete(effect2);
}
/**
* Remove an effect from the #skipped_branches map and reschedule
* any tracked dirty/maybe_dirty child effects
* @param {Effect} effect
* @param {(e: Effect) => void} callback
*/
unskip_effect(effect2, callback = (e) => this.schedule(e)) {
var tracked = this.#skipped_branches.get(effect2);
if (tracked) {
this.#skipped_branches.delete(effect2);
for (var e of tracked.d) {
set_signal_status(e, DIRTY);
callback(e);
}
for (e of tracked.m) {
set_signal_status(e, MAYBE_DIRTY);
callback(e);
}
}
this.#unskipped_branches.add(effect2);
}
#process() {
this.#started = true;
if (flush_count++ > 1e3) {
this.#unlink();
infinite_loop_guard();
}
if (!this.#is_deferred()) {
for (const e of this.#dirty_effects) {
this.#maybe_dirty_effects.delete(e);
set_signal_status(e, DIRTY);
this.schedule(e);
}
for (const e of this.#maybe_dirty_effects) {
set_signal_status(e, MAYBE_DIRTY);
this.schedule(e);
}
}
const roots = this.#roots;
this.#roots = [];
this.apply();
var effects = collected_effects = [];
var render_effects = [];
var updates = legacy_updates = [];
for (const root2 of roots) {
try {
this.#traverse(root2, effects, render_effects);
} catch (e) {
reset_all(root2);
throw e;
}
}
current_batch = null;
if (updates.length > 0) {
var batch = Batch.ensure();
for (const e of updates) {
batch.schedule(e);
}
}
collected_effects = null;
legacy_updates = null;
if (this.#is_deferred()) {
this.#defer_effects(render_effects);
this.#defer_effects(effects);
for (const [e, t] of this.#skipped_branches) {
reset_branch(e, t);
}
if (updates.length > 0) {
/** @type {unknown} */
current_batch.#process();
}
return;
}
const earlier_batch = this.#find_earlier_batch();
if (earlier_batch) {
earlier_batch.#merge(this);
return;
}
this.#dirty_effects.clear();
this.#maybe_dirty_effects.clear();
for (const fn of this.#commit_callbacks) fn(this);
this.#commit_callbacks.clear();
previous_batch = this;
flush_queued_effects(render_effects);
flush_queued_effects(effects);
previous_batch = null;
this.#deferred?.resolve();
var next_batch = (
/** @type {Batch | null} */
/** @type {unknown} */
current_batch
);
if (this.linked && this.#pending === 0) {
this.#unlink();
}
if (this.#roots.length > 0) {
if (next_batch === null) {
next_batch = this;
this.#link();
}
const batch2 = next_batch;
batch2.#roots.push(...this.#roots.filter((r2) => !batch2.#roots.includes(r2)));
}
if (next_batch !== null) {
next_batch.#process();
}
}
/**
* Traverse the effect tree, executing effects or stashing
* them for later execution as appropriate
* @param {Effect} root
* @param {Effect[]} effects
* @param {Effect[]} render_effects
*/
#traverse(root2, effects, render_effects) {
root2.f ^= CLEAN;
var effect2 = root2.first;
while (effect2 !== null) {
var flags2 = effect2.f;
var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;
var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0;
var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.#skipped_branches.has(effect2);
if (!skip && effect2.fn !== null) {
if (is_branch) {
effect2.f ^= CLEAN;
} else if ((flags2 & EFFECT) !== 0) {
effects.push(effect2);
} else if (is_dirty(effect2)) {
if ((flags2 & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect2);
update_effect(effect2);
}
var child2 = effect2.first;
if (child2 !== null) {
effect2 = child2;
continue;
}
}
while (effect2 !== null) {
var next2 = effect2.next;
if (next2 !== null) {
effect2 = next2;
break;
}
effect2 = effect2.parent;
}
}
}
#find_earlier_batch() {
var batch = this.#prev;
while (batch !== null) {
if (!batch.is_fork) {
for (const [value, [, is_derived]] of this.current) {
if (batch.current.has(value) && !is_derived) {
return batch;
}
}
}
batch = batch.#prev;
}
return null;
}
/**
* @param {Batch} batch
*/
#merge(batch) {
for (const [source2, value] of batch.current) {
if (!this.previous.has(source2) && batch.previous.has(source2)) {
this.previous.set(source2, batch.previous.get(source2));
}
this.current.set(source2, value);
}
for (const [effect2, deferred2] of batch.async_deriveds) {
const d = this.async_deriveds.get(effect2);
if (d) deferred2.promise.then(d.resolve);
}
const mark = (value) => {
var reactions = value.reactions;
if (reactions === null) return;
for (const reaction of reactions) {
var flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark(
/** @type {Derived} */
reaction
);
} else {
var effect2 = (
/** @type {Effect} */
reaction
);
if (flags2 & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect2)) {
this.#maybe_dirty_effects.delete(effect2);
set_signal_status(effect2, DIRTY);
this.schedule(effect2);
}
}
}
};
for (const source2 of this.current.keys()) {
mark(source2);
}
this.oncommit(() => batch.discard());
batch.#unlink();
current_batch = this;
this.#process();
}
/**
* @param {Effect[]} effects
*/
#defer_effects(effects) {
for (var i = 0; i < effects.length; i += 1) {
defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);
}
}
/**
* Associate a change to a given source with the current
* batch, noting its previous and current values
* @param {Value} source
* @param {any} value
* @param {boolean} [is_derived]
*/
capture(source2, value, is_derived = false) {
if (source2.v !== UNINITIALIZED && !this.previous.has(source2)) {
this.previous.set(source2, source2.v);
}
if ((source2.f & ERROR_VALUE) === 0) {
this.current.set(source2, [value, is_derived]);
batch_values?.set(source2, value);
}
if (!this.is_fork) {
source2.v = value;
}
}
activate() {
current_batch = this;
}
deactivate() {
current_batch = null;
batch_values = null;
}
flush() {
try {
if (DEV) ;
is_processing = true;
current_batch = this;
this.#process();
} finally {
flush_count = 0;
last_scheduled_effect = null;
collected_effects = null;
legacy_updates = null;
is_processing = false;
current_batch = null;
batch_values = null;
old_values.clear();
}
}
discard() {
for (const fn of this.#discard_callbacks) fn(this);
this.#discard_callbacks.clear();
this.#fork_commit_callbacks.clear();
this.#unlink();
}
/**
* @param {Effect} effect
*/
register_created_effect(effect2) {
this.#new_effects.push(effect2);
}
#commit() {
this.#unlink();
for (let batch = first_batch; batch !== null; batch = batch.#next) {
var is_earlier = batch.id < this.id;
var sources = [];
for (const [source3, [value, is_derived]] of this.current) {
if (batch.current.has(source3)) {
var batch_value = (
/** @type {[any, boolean]} */
batch.current.get(source3)[0]
);
if (is_earlier && value !== batch_value) {
batch.current.set(source3, [value, is_derived]);
} else {
continue;
}
}
sources.push(source3);
}
if (is_earlier) {
for (const [effect2, deferred2] of this.async_deriveds) {
const d = batch.async_deriveds.get(effect2);
if (d) deferred2.promise.then(d.resolve);
}
}
if (!batch.#started) continue;
var others = [...batch.current.keys()].filter((s) => !this.current.has(s));
if (others.length === 0) {
if (is_earlier) {
batch.discard();
}
} else if (sources.length > 0) {
if (is_earlier) {
for (const unskipped of this.#unskipped_branches) {
batch.unskip_effect(unskipped, (e) => {
if ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) {
batch.schedule(e);
} else {
batch.#defer_effects([e]);
}
});
}
}
batch.activate();
var marked = /* @__PURE__ */ new Set();
var checked = /* @__PURE__ */ new Map();
for (var source2 of sources) {
mark_effects(source2, others, marked, checked);
}
checked = /* @__PURE__ */ new Map();
var current_unequal = [...batch.current.keys()].filter(
(c) => this.current.has(c) ? (
/** @type {[any, boolean]} */
this.current.get(c)[0] !== c.v
) : true
);
if (current_unequal.length > 0) {
for (const effect2 of this.#new_effects) {
if ((effect2.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 && depends_on(effect2, current_unequal, checked)) {
if ((effect2.f & (ASYNC | BLOCK_EFFECT)) !== 0) {
set_signal_status(effect2, DIRTY);
batch.schedule(effect2);
} else {
batch.#dirty_effects.add(effect2);
}
}
}
}
if (batch.#roots.length > 0) {
batch.apply();
for (var root2 of batch.#roots) {
batch.#traverse(root2, [], []);
}
batch.#roots = [];
}
batch.deactivate();
}
}
}
/**
* @param {boolean} blocking
* @param {Effect} effect
*/
increment(blocking, effect2) {
this.#pending += 1;
if (blocking) {
let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0;
this.#blocking_pending.set(effect2, blocking_pending_count + 1);
}
}
/**
* @param {boolean} blocking
* @param {Effect} effect
*/
decrement(blocking, effect2) {
this.#pending -= 1;
if (blocking) {
let blocking_pending_count = this.#blocking_pending.get(effect2) ?? 0;
if (blocking_pending_count === 1) {
this.#blocking_pending.delete(effect2);
} else {
this.#blocking_pending.set(effect2, blocking_pending_count - 1);
}
}
if (this.#decrement_queued) return;
this.#decrement_queued = true;
queue_micro_task(() => {
this.#decrement_queued = false;
if (this.linked) {
this.flush();
}
});
}
/**
* @param {Set<Effect>} dirty_effects
* @param {Set<Effect>} maybe_dirty_effects
*/
transfer_effects(dirty_effects, maybe_dirty_effects) {
for (const e of dirty_effects) {
this.#dirty_effects.add(e);
}
for (const e of maybe_dirty_effects) {
this.#maybe_dirty_effects.add(e);
}
dirty_effects.clear();
maybe_dirty_effects.clear();
}
/** @param {(batch: Batch) => void} fn */
oncommit(fn) {
this.#commit_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
ondiscard(fn) {
this.#discard_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
on_fork_commit(fn) {
this.#fork_commit_callbacks.add(fn);
}
run_fork_commit_callbacks() {
for (const fn of this.#fork_commit_callbacks) fn(this);
this.#fork_commit_callbacks.clear();
}
settled() {
return (this.#deferred ??= deferred()).promise;
}
static ensure() {
if (current_batch === null) {
const batch = current_batch = new Batch();
batch.#link();
if (!is_processing && !is_flushing_sync) {
queue_micro_task(() => {
if (!batch.#started) {
batch.flush();
}
});
}
}
return current_batch;
}
apply() {
{
batch_values = null;
return;
}
}
/**
*
* @param {Effect} effect
*/
schedule(effect2) {
last_scheduled_effect = effect2;
if (effect2.b?.is_pending && (effect2.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect2.f & REACTION_RAN) === 0) {
effect2.b.defer_effect(effect2);
return;
}
var e = effect2;
while (e.parent !== null) {
e = e.parent;
var flags2 = e.f;
if (collected_effects !== null && e === active_effect) {
if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) {
return;
}
}
if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {
if ((flags2 & CLEAN) === 0) {
return;
}
e.f ^= CLEAN;
}
}
this.#roots.push(e);
}
#link() {
if (last_batch === null) {
first_batch = last_batch = this;
} else {
last_batch.#next = this;
this.#prev = last_batch;
}
last_batch = this;
}
#unlink() {
var prev = this.#prev;
var next2 = this.#next;
if (prev === null) {
first_batch = next2;
} else {
prev.#next = next2;
}
if (next2 === null) {
last_batch = prev;
} else {
next2.#prev = prev;
}
this.linked = false;
}
}
function flushSync(fn) {
var was_flushing_sync = is_flushing_sync;
is_flushing_sync = true;
try {
var result;
if (fn) ;
while (true) {
flush_tasks();
if (current_batch === null) {
return (
/** @type {T} */
result
);
}
current_batch.flush();
}
} finally {
is_flushing_sync = was_flushing_sync;
}
}
function infinite_loop_guard() {
try {
effect_update_depth_exceeded();
} catch (error) {
invoke_error_boundary(error, last_scheduled_effect);
}
}
let eager_block_effects = null;
function flush_queued_effects(effects) {
var length = effects.length;
if (length === 0) return;
var i = 0;
while (i < length) {
var effect2 = effects[i++];
if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) {
eager_block_effects = /* @__PURE__ */ new Set();
update_effect(effect2);
if (effect2.deps === null && effect2.first === null && effect2.nodes === null && effect2.teardown === null && effect2.ac === null) {
unlink_effect(effect2);
}
if (eager_block_effects?.size > 0) {
old_values.clear();
for (const e of eager_block_effects) {
if ((e.f & (DESTROYED | INERT)) !== 0) continue;
const ordered_effects = [e];
let ancestor = e.parent;
while (ancestor !== null) {
if (eager_block_effects.has(ancestor)) {
eager_block_effects.delete(ancestor);
ordered_effects.push(ancestor);
}
ancestor = ancestor.parent;
}
for (let j = ordered_effects.length - 1; j >= 0; j--) {
const e2 = ordered_effects[j];
if ((e2.f & (DESTROYED | INERT)) !== 0) continue;
update_effect(e2);
}
}
eager_block_effects.clear();
}
}
}
eager_block_effects = null;
}
function mark_effects(value, sources, marked, checked) {
if (marked.has(value)) return;
marked.add(value);
if (value.reactions !== null) {
for (const reaction of value.reactions) {
const flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark_effects(
/** @type {Derived} */
reaction,
sources,
marked,
checked
);
} else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) {
set_signal_status(reaction, DIRTY);
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
}
function depends_on(reaction, sources, checked) {
const depends = checked.get(reaction);
if (depends !== void 0) return depends;
if (reaction.deps !== null) {
for (const dep of reaction.deps) {
if (includes.call(sources, dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on(
/** @type {Derived} */
dep,
sources,
checked
)) {
checked.set(
/** @type {Derived} */
dep,
true
);
return true;
}
}
}
checked.set(reaction, false);
return false;
}
function schedule_effect(effect2) {
current_batch.schedule(effect2);
}
function reset_branch(effect2, tracked) {
if ((effect2.f & BRANCH_EFFECT) !== 0 && (effect2.f & CLEAN) !== 0) {
return;
}
if ((effect2.f & DIRTY) !== 0) {
tracked.d.push(effect2);
} else if ((effect2.f & MAYBE_DIRTY) !== 0) {
tracked.m.push(effect2);
}
set_signal_status(effect2, CLEAN);
var e = effect2.first;
while (e !== null) {
reset_branch(e, tracked);
e = e.next;
}
}
function reset_all(effect2) {
set_signal_status(effect2, CLEAN);
var e = effect2.first;
while (e !== null) {
reset_all(e);
e = e.next;
}
}
function createSubscriber(start) {
let subscribers = 0;
let version = source(0);
let stop;
return () => {
if (effect_tracking()) {
get(version);
render_effect(() => {
if (subscribers === 0) {
stop = untrack(() => start(() => increment(version)));
}
subscribers += 1;
return () => {
queue_micro_task(() => {
subscribers -= 1;
if (subscribers === 0) {
stop?.();
stop = void 0;
increment(version);
}
});
};
});
}
};
}
var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;
function boundary(node, props, children, transform_error) {
new Boundary(node, props, children, transform_error);
}
class Boundary {
/** @type {Boundary | null} */
parent;
is_pending = false;
/**
* API-level transformError transform function. Transforms errors before they reach the `failed` snippet.
* Inherited from parent boundary, or defaults to identity.
* @type {(error: unknown) => unknown}
*/
transform_error;
/** @type {TemplateNode} */
#anchor;
/** @type {TemplateNode | null} */
#hydrate_open = hydrating ? hydrate_node : null;
/** @type {BoundaryProps} */
#props;
/** @type {((anchor: Node) => void)} */
#children;
/** @type {Effect} */
#effect;
/** @type {Effect | null} */
#main_effect = null;
/** @type {Effect | null} */
#pending_effect = null;
/** @type {Effect | null} */
#failed_effect = null;
/** @type {DocumentFragment | null} */
#offscreen_fragment = null;
#local_pending_count = 0;
#pending_count = 0;
#pending_count_update_queued = false;
/** @type {Set<Effect>} */
#dirty_effects = /* @__PURE__ */ new Set();
/** @type {Set<Effect>} */
#maybe_dirty_effects = /* @__PURE__ */ new Set();
/**
* A source containing the number of pending async deriveds/expressions.
* Only created if `$effect.pending()` is used inside the boundary,
* otherwise updating the source results in needless `Batch.ensure()`
* calls followed by no-op flushes
* @type {Source<number> | null}
*/
#effect_pending = null;
#effect_pending_subscriber = createSubscriber(() => {
this.#effect_pending = source(this.#local_pending_count);
return () => {
this.#effect_pending = null;
};
});
/**
* @param {TemplateNode} node
* @param {BoundaryProps} props
* @param {((anchor: Node) => void)} children
* @param {((error: unknown) => unknown) | undefined} [transform_error]
*/
constructor(node, props, children, transform_error) {
this.#anchor = node;
this.#props = props;
this.#children = (anchor) => {
var effect2 = (
/** @type {Effect} */
active_effect
);
effect2.b = this;
effect2.f |= BOUNDARY_EFFECT;
children(anchor);
};
this.parent = /** @type {Effect} */
active_effect.b;
this.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e);
this.#effect = block(() => {
if (hydrating) {
const comment2 = (
/** @type {Comment} */
this.#hydrate_open
);
hydrate_next();
const server_rendered_pending = comment2.data === HYDRATION_START_ELSE;
const server_rendered_failed = comment2.data.startsWith(HYDRATION_START_FAILED);
if (server_rendered_failed) {
const serialized_error = JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length));
this.#hydrate_failed_content(serialized_error);
} else if (server_rendered_pending) {
this.#hydrate_pending_content();
} else {
this.#hydrate_resolved_content();
}
} else {
this.#render();
}
}, flags);
if (hydrating) {
this.#anchor = hydrate_node;
}
}
#hydrate_resolved_content() {
try {
this.#main_effect = branch(() => this.#children(this.#anchor));
} catch (error) {
this.error(error);
}
}
/**
* @param {unknown} error The deserialized error from the server's hydration comment
*/
#hydrate_failed_content(error) {
const failed = this.#props.failed;
if (!failed) return;
this.#failed_effect = branch(() => {
failed(
this.#anchor,
() => error,
() => () => {
}
);
});
}
#hydrate_pending_content() {
const pending = this.#props.pending;
if (!pending) return;
this.is_pending = true;
this.#pending_effect = branch(() => pending(this.#anchor));
queue_micro_task(() => {
var fragment = this.#offscreen_fragment = document.createDocumentFragment();
var anchor = create_text();
fragment.append(anchor);
this.#main_effect = this.#run(() => {
return branch(() => this.#children(anchor));
});
if (this.#pending_count === 0) {
this.#anchor.before(fragment);
this.#offscreen_fragment = null;
pause_effect(
/** @type {Effect} */
this.#pending_effect,
() => {
this.#pending_effect = null;
}
);
this.#resolve(
/** @type {Batch} */
current_batch
);
}
});
}
#render() {
try {
this.is_pending = this.has_pending_snippet();
this.#pending_count = 0;
this.#local_pending_count = 0;
this.#main_effect = branch(() => {
this.#children(this.#anchor);
});
if (this.#pending_count > 0) {
var fragment = this.#offscreen_fragment = document.createDocumentFragment();
move_effect(this.#main_effect, fragment);
const pending = (
/** @type {(anchor: Node) => void} */
this.#props.pending
);
this.#pending_effect = branch(() => pending(this.#anchor));
} else {
this.#resolve(
/** @type {Batch} */
current_batch
);
}
} catch (error) {
this.error(error);
}
}
/**
* @param {Batch} batch
*/
#resolve(batch) {
this.is_pending = false;
batch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects);
}
/**
* Defer an effect inside a pending boundary until the boundary resolves
* @param {Effect} effect
*/
defer_effect(effect2) {
defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects);
}
/**
* Returns `false` if the effect exists inside a boundary whose pending snippet is shown
* @returns {boolean}
*/
is_rendered() {
return !this.is_pending && (!this.parent || this.parent.is_rendered());
}
has_pending_snippet() {
return !!this.#props.pending;
}
/**
* @template T
* @param {() => T} fn
*/
#run(fn) {
var previous_effect = active_effect;
var previous_reaction = active_reaction;
var previous_ctx = component_context;
set_active_effect(this.#effect);
set_active_reaction(this.#effect);
set_component_context(this.#effect.ctx);
try {
Batch.ensure();
return fn();
} catch (e) {
handle_error(e);
return null;
} finally {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_ctx);
}
}
/**
* Updates the pending count associated with the currently visible pending snippet,
* if any, such that we can replace the snippet with content once work is done
* @param {1 | -1} d
* @param {Batch} batch
*/
#update_pending_count(d, batch) {
if (!this.has_pending_snippet()) {
if (this.parent) {
this.parent.#update_pending_count(d, batch);
}
return;
}
this.#pending_count += d;
if (this.#pending_count === 0) {
this.#resolve(batch);
if (this.#pending_effect) {
pause_effect(this.#pending_effect, () => {
this.#pending_effect = null;
});
}
if (this.#offscreen_fragment) {
this.#anchor.before(this.#offscreen_fragment);
this.#offscreen_fragment = null;
}
}
}
/**
* Update the source that powers `$effect.pending()` inside this boundary,
* and controls when the current `pending` snippet (if any) is removed.
* Do not call from inside the class
* @param {1 | -1} d
* @param {Batch} batch
*/
update_pending_count(d, batch) {
this.#update_pending_count(d, batch);
this.#local_pending_count += d;
if (!this.#effect_pending || this.#pending_count_update_queued) return;
this.#pending_count_update_queued = true;
queue_micro_task(() => {
this.#pending_count_update_queued = false;
if (this.#effect_pending) {
internal_set(this.#effect_pending, this.#local_pending_count);
}
});
}
get_effect_pending() {
this.#effect_pending_subscriber();
return get(
/** @type {Source<number>} */
this.#effect_pending
);
}
/** @param {unknown} error */
error(error) {
if (!this.#props.onerror && !this.#props.failed) {
throw error;
}
if (current_batch?.is_fork) {
if (this.#main_effect) current_batch.skip_effect(this.#main_effect);
if (this.#pending_effect) current_batch.skip_effect(this.#pending_effect);
if (this.#failed_effect) current_batch.skip_effect(this.#failed_effect);
current_batch.on_fork_commit(() => {
this.#handle_error(error);
});
} else {
this.#handle_error(error);
}
}
/**
* @param {unknown} error
*/
#handle_error(error) {
if (this.#main_effect) {
destroy_effect(this.#main_effect);
this.#main_effect = null;
}
if (this.#pending_effect) {
destroy_effect(this.#pending_effect);
this.#pending_effect = null;
}
if (this.#failed_effect) {
destroy_effect(this.#failed_effect);
this.#failed_effect = null;
}
if (hydrating) {
set_hydrate_node(
/** @type {TemplateNode} */
this.#hydrate_open
);
next();
set_hydrate_node(skip_nodes());
}
var onerror = this.#props.onerror;
let failed = this.#props.failed;
var did_reset = false;
var calling_on_error = false;
const reset2 = () => {
if (did_reset) {
svelte_boundary_reset_noop();
return;
}
did_reset = true;
if (calling_on_error) {
svelte_boundary_reset_onerror();
}
if (this.#failed_effect !== null) {
pause_effect(this.#failed_effect, () => {
this.#failed_effect = null;
});
}
this.#run(() => {
this.#render();
});
};
const handle_error_result = (transformed_error) => {
try {
calling_on_error = true;
onerror?.(transformed_error, reset2);
calling_on_error = false;
} catch (error2) {
invoke_error_boundary(error2, this.#effect && this.#effect.parent);
}
if (failed) {
this.#failed_effect = this.#run(() => {
try {
return branch(() => {
var effect2 = (
/** @type {Effect} */
active_effect
);
effect2.b = this;
effect2.f |= BOUNDARY_EFFECT;
failed(
this.#anchor,
() => transformed_error,
() => reset2
);
});
} catch (error2) {
invoke_error_boundary(
error2,
/** @type {Effect} */
this.#effect.parent
);
return null;
}
});
}
};
queue_micro_task(() => {
var result;
try {
result = this.transform_error(error);
} catch (e) {
invoke_error_boundary(e, this.#effect && this.#effect.parent);
return;
}
if (result !== null && typeof result === "object" && typeof /** @type {any} */
result.then === "function") {
result.then(
handle_error_result,
/** @param {unknown} e */
(e) => invoke_error_boundary(e, this.#effect && this.#effect.parent)
);
} else {
handle_error_result(result);
}
});
}
}
function flatten(blockers, sync, async, fn) {
const d = derived;
var pending = blockers.filter((b) => !b.settled);
if (async.length === 0 && pending.length === 0) {
fn(sync.map(d));
return;
}
var parent = (
/** @type {Effect} */
active_effect
);
var restore = capture();
var blocker_promise = pending.length === 1 ? pending[0].promise : pending.length > 1 ? Promise.all(pending.map((b) => b.promise)) : null;
function finish(values) {
if ((parent.f & DESTROYED) !== 0) {
return;
}
restore();
try {
fn(values);
} catch (error) {
invoke_error_boundary(error, parent);
}
unset_context();
}
var decrement_pending = increment_pending();
if (async.length === 0) {
blocker_promise.then(() => finish(sync.map(d))).finally(decrement_pending);
return;
}
function run() {
Promise.all(async.map((expression) => /* @__PURE__ */ async_derived(expression))).then((result) => finish([...sync.map(d), ...result])).catch((error) => invoke_error_boundary(error, parent)).finally(decrement_pending);
}
if (blocker_promise) {
blocker_promise.then(() => {
restore();
run();
unset_context();
});
} else {
run();
}
}
function capture() {
var previous_effect = (
/** @type {Effect} */
active_effect
);
var previous_reaction = active_reaction;
var previous_component_context = component_context;
var previous_batch2 = (
/** @type {Batch} */
current_batch
);
return function restore(activate_batch = true) {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_component_context);
if (activate_batch && (previous_effect.f & DESTROYED) === 0) {
previous_batch2?.activate();
previous_batch2?.apply();
}
};
}
function unset_context(deactivate_batch = true) {
set_active_effect(null);
set_active_reaction(null);
set_component_context(null);
if (deactivate_batch) current_batch?.deactivate();
}
function increment_pending() {
var effect2 = (
/** @type {Effect} */
active_effect
);
var boundary2 = (
/** @type {Boundary} */
effect2.b
);
var batch = (
/** @type {Batch} */
current_batch
);
var blocking = boundary2.is_rendered();
boundary2.update_pending_count(1, batch);
batch.increment(blocking, effect2);
return () => {
boundary2.update_pending_count(-1, batch);
batch.decrement(blocking, effect2);
};
}
// @__NO_SIDE_EFFECTS__
function derived(fn) {
var flags2 = DERIVED | DIRTY;
if (active_effect !== null) {
active_effect.f |= EFFECT_PRESERVED;
}
const signal = {
ctx: component_context,
deps: null,
effects: null,
equals,
f: flags2,
fn,
reactions: null,
rv: 0,
v: (
/** @type {V} */
UNINITIALIZED
),
wv: 0,
parent: active_effect,
ac: null
};
return signal;
}
const OBSOLETE = /* @__PURE__ */ Symbol("obsolete");
// @__NO_SIDE_EFFECTS__
function async_derived(fn, label, location2) {
let parent = (
/** @type {Effect | null} */
active_effect
);
if (parent === null) {
async_derived_orphan();
}
var promise = (
/** @type {Promise<V>} */
/** @type {unknown} */
void 0
);
var signal = source(
/** @type {V} */
UNINITIALIZED
);
var should_suspend = !active_reaction;
var deferreds = /* @__PURE__ */ new Set();
async_effect(() => {
var effect2 = (
/** @type {Effect} */
active_effect
);
var d = deferred();
promise = d.promise;
try {
Promise.resolve(fn()).then(d.resolve, (e) => {
if (e !== STALE_REACTION) d.reject(e);
}).finally(unset_context);
} catch (error) {
d.reject(error);
unset_context();
}
var batch = (
/** @type {Batch} */
current_batch
);
if (should_suspend) {
if ((effect2.f & REACTION_RAN) !== 0) {
var decrement_pending = increment_pending();
}
if (
/** @type {Boundary} */
parent.b.is_rendered()
) {
batch.async_deriveds.get(effect2)?.reject(OBSOLETE);
} else {
for (const d2 of deferreds.values()) {
d2.reject(OBSOLETE);
}
}
deferreds.add(d);
batch.async_deriveds.set(effect2, d);
}
const handler = (value, error = void 0) => {
decrement_pending?.();
deferreds.delete(d);
if (error === OBSOLETE) return;
batch.activate();
if (error) {
signal.f |= ERROR_VALUE;
internal_set(signal, error);
} else {
if ((signal.f & ERROR_VALUE) !== 0) {
signal.f ^= ERROR_VALUE;
}
internal_set(signal, value);
}
batch.deactivate();
};
d.promise.then(handler, (e) => handler(null, e || "unknown"));
});
teardown(() => {
for (const d of deferreds) {
d.reject(OBSOLETE);
}
});
return new Promise((fulfil) => {
function next2(p) {
function go() {
if (p === promise) {
fulfil(signal);
} else {
next2(promise);
}
}
p.then(go, go);
}
next2(promise);
});
}
// @__NO_SIDE_EFFECTS__
function user_derived(fn) {
const d = /* @__PURE__ */ derived(fn);
push_reaction_value(d);
return d;
}
function destroy_derived_effects(derived2) {
var effects = derived2.effects;
if (effects !== null) {
derived2.effects = null;
for (var i = 0; i < effects.length; i += 1) {
destroy_effect(
/** @type {Effect} */
effects[i]
);
}
}
}
function execute_derived(derived2) {
var value;
var prev_active_effect = active_effect;
var parent = derived2.parent;
if (!is_destroying_effect && parent !== null && derived2.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead
(parent.f & (DESTROYED | INERT)) !== 0) {
derived_inert();
return derived2.v;
}
set_active_effect(parent);
{
try {
derived2.f &= ~WAS_MARKED;
destroy_derived_effects(derived2);
value = update_reaction(derived2);
} finally {
set_active_effect(prev_active_effect);
}
}
return value;
}
function update_derived(derived2) {
var value = execute_derived(derived2);
if (!derived2.equals(value)) {
derived2.wv = increment_write_version();
if (!current_batch?.is_fork || derived2.deps === null) {
if (current_batch !== null) {
current_batch.capture(derived2, value, true);
previous_batch?.capture(derived2, value, true);
} else {
derived2.v = value;
}
if (derived2.deps === null) {
set_signal_status(derived2, CLEAN);
return;
}
}
}
if (is_destroying_effect) {
return;
}
if (batch_values !== null) {
if (effect_tracking() || current_batch?.is_fork) {
batch_values.set(derived2, value);
}
} else {
update_derived_status(derived2);
}
}
function freeze_derived_effects(derived2) {
if (derived2.effects === null) return;
for (const e of derived2.effects) {
if (e.teardown || e.ac) {
e.teardown?.();
e.ac?.abort(STALE_REACTION);
if (e.fn !== null) e.teardown = noop;
e.ac = null;
remove_reactions(e, 0);
destroy_effect_children(e);
}
}
}
function unfreeze_derived_effects(derived2) {
if (derived2.effects === null) return;
for (const e of derived2.effects) {
if (e.teardown && e.fn !== null) {
update_effect(e);
}
}
}
let eager_effects = /* @__PURE__ */ new Set();
const old_values = /* @__PURE__ */ new Map();
let eager_effects_deferred = false;
function source(v, stack) {
var signal = {
f: 0,
// TODO ideally we could skip this altogether, but it causes type errors
v,
reactions: null,
equals,
rv: 0,
wv: 0
};
return signal;
}
// @__NO_SIDE_EFFECTS__
function state(v, stack) {
const s = source(v);
push_reaction_value(s);
return s;
}
// @__NO_SIDE_EFFECTS__
function mutable_source(initial_value, immutable = false, trackable = true) {
const s = source(initial_value);
if (!immutable) {
s.equals = safe_equals;
}
return s;
}
function set(source2, value, should_proxy = false) {
if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check
// to ensure we error if state is set inside an inspect effect
(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) {
state_unsafe_mutation();
}
let new_value = should_proxy ? proxy(value) : value;
return internal_set(source2, new_value, legacy_updates);
}
function internal_set(source2, value, updated_during_traversal = null) {
if (!source2.equals(value)) {
old_values.set(source2, is_destroying_effect ? value : source2.v);
var batch = Batch.ensure();
batch.capture(source2, value);
if ((source2.f & DERIVED) !== 0) {
const derived2 = (
/** @type {Derived} */
source2
);
if ((source2.f & DIRTY) !== 0) {
execute_derived(derived2);
}
if (batch_values === null) {
update_derived_status(derived2);
}
}
source2.wv = increment_write_version();
mark_reactions(source2, DIRTY, updated_during_traversal);
if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) {
if (untracked_writes === null) {
set_untracked_writes([source2]);
} else {
untracked_writes.push(source2);
}
}
if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {
flush_eager_effects();
}
}
return value;
}
function flush_eager_effects() {
eager_effects_deferred = false;
for (const effect2 of eager_effects) {
if ((effect2.f & CLEAN) !== 0) {
set_signal_status(effect2, MAYBE_DIRTY);
}
let dirty;
try {
dirty = is_dirty(effect2);
} catch {
dirty = true;
}
if (dirty) {
update_effect(effect2);
}
}
eager_effects.clear();
}
function increment(source2) {
set(source2, source2.v + 1);
}
function mark_reactions(signal, status, updated_during_traversal) {
var reactions = signal.reactions;
if (reactions === null) return;
var length = reactions.length;
for (var i = 0; i < length; i++) {
var reaction = reactions[i];
var flags2 = reaction.f;
var not_dirty = (flags2 & DIRTY) === 0;
if (not_dirty) {
set_signal_status(reaction, status);
}
if ((flags2 & EAGER_EFFECT) !== 0) {
eager_effects.add(
/** @type {Effect} */
reaction
);
} else if ((flags2 & DERIVED) !== 0) {
var derived2 = (
/** @type {Derived} */
reaction
);
batch_values?.delete(derived2);
if ((flags2 & WAS_MARKED) === 0) {
if (flags2 & CONNECTED && (active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)) {
reaction.f |= WAS_MARKED;
}
mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal);
}
} else if (not_dirty) {
var effect2 = (
/** @type {Effect} */
reaction
);
if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {
eager_block_effects.add(effect2);
}
if (updated_during_traversal !== null) {
updated_during_traversal.push(effect2);
} else {
schedule_effect(effect2);
}
}
}
}
function autofocus(dom, value) {
if (value) {
const body = document.body;
dom.autofocus = true;
queue_micro_task(() => {
if (document.activeElement === body) {
dom.focus();
}
});
}
}
let listening_to_form_reset = false;
function add_form_reset_listener() {
if (!listening_to_form_reset) {
listening_to_form_reset = true;
document.addEventListener(
"reset",
(evt) => {
Promise.resolve().then(() => {
if (!evt.defaultPrevented) {
for (
const e of
/**@type {HTMLFormElement} */
evt.target.elements
) {
e[FORM_RESET_HANDLER]?.();
}
}
});
},
// In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation)
{ capture: true }
);
}
}
function without_reactive_context(fn) {
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
return fn();
} finally {
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
function listen_to_event_and_reset_event(element, event2, handler, on_reset = handler) {
element.addEventListener(event2, () => without_reactive_context(handler));
const prev = (
/** @type {any} */
element[FORM_RESET_HANDLER]
);
if (prev) {
element[FORM_RESET_HANDLER] = () => {
prev();
on_reset(true);
};
} else {
element[FORM_RESET_HANDLER] = () => on_reset(true);
}
add_form_reset_listener();
}
let is_updating_effect = false;
let is_destroying_effect = false;
function set_is_destroying_effect(value) {
is_destroying_effect = value;
}
let active_reaction = null;
let untracking = false;
function set_active_reaction(reaction) {
active_reaction = reaction;
}
let active_effect = null;
function set_active_effect(effect2) {
active_effect = effect2;
}
let current_sources = null;
function push_reaction_value(value) {
if (active_reaction !== null && true) {
if (current_sources === null) {
current_sources = [value];
} else {
current_sources.push(value);
}
}
}
let new_deps = null;
let skipped_deps = 0;
let untracked_writes = null;
function set_untracked_writes(value) {
untracked_writes = value;
}
let write_version = 1;
let read_version = 0;
let update_version = read_version;
function set_update_version(value) {
update_version = value;
}
function increment_write_version() {
return ++write_version;
}
function is_dirty(reaction) {
var flags2 = reaction.f;
if ((flags2 & DIRTY) !== 0) {
return true;
}
if (flags2 & DERIVED) {
reaction.f &= ~WAS_MARKED;
}
if ((flags2 & MAYBE_DIRTY) !== 0) {
var dependencies = (
/** @type {Value[]} */
reaction.deps
);
var length = dependencies.length;
for (var i = 0; i < length; i++) {
var dependency = dependencies[i];
if (is_dirty(
/** @type {Derived} */
dependency
)) {
update_derived(
/** @type {Derived} */
dependency
);
}
if (dependency.wv > reaction.wv) {
return true;
}
}
if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that
// traversal of the graph in the other batches still happens
batch_values === null) {
set_signal_status(reaction, CLEAN);
}
}
return false;
}
function schedule_possible_effect_self_invalidation(signal, effect2, root2 = true) {
var reactions = signal.reactions;
if (reactions === null) return;
if (current_sources !== null && includes.call(current_sources, signal)) {
return;
}
for (var i = 0; i < reactions.length; i++) {
var reaction = reactions[i];
if ((reaction.f & DERIVED) !== 0) {
schedule_possible_effect_self_invalidation(
/** @type {Derived} */
reaction,
effect2,
false
);
} else if (effect2 === reaction) {
if (root2) {
set_signal_status(reaction, DIRTY);
} else if ((reaction.f & CLEAN) !== 0) {
set_signal_status(reaction, MAYBE_DIRTY);
}
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
function update_reaction(reaction) {
var previous_deps = new_deps;
var previous_skipped_deps = skipped_deps;
var previous_untracked_writes = untracked_writes;
var previous_reaction = active_reaction;
var previous_sources = current_sources;
var previous_component_context = component_context;
var previous_untracking = untracking;
var previous_update_version = update_version;
var flags2 = reaction.f;
new_deps = /** @type {null | Value[]} */
null;
skipped_deps = 0;
untracked_writes = null;
active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;
current_sources = null;
set_component_context(reaction.ctx);
untracking = false;
update_version = ++read_version;
if (reaction.ac !== null) {
without_reactive_context(() => {
reaction.ac.abort(STALE_REACTION);
});
reaction.ac = null;
}
try {
reaction.f |= REACTION_IS_UPDATING;
var fn = (
/** @type {Function} */
reaction.fn
);
var result = fn();
reaction.f |= REACTION_RAN;
var deps = reaction.deps;
var is_fork = current_batch?.is_fork;
if (new_deps !== null) {
var i;
if (!is_fork) {
remove_reactions(reaction, skipped_deps);
}
if (deps !== null && skipped_deps > 0) {
deps.length = skipped_deps + new_deps.length;
for (i = 0; i < new_deps.length; i++) {
deps[skipped_deps + i] = new_deps[i];
}
} else {
reaction.deps = deps = new_deps;
}
if (effect_tracking() && (reaction.f & CONNECTED) !== 0) {
for (i = skipped_deps; i < deps.length; i++) {
(deps[i].reactions ??= []).push(reaction);
}
}
} else if (!is_fork && deps !== null && skipped_deps < deps.length) {
remove_reactions(reaction, skipped_deps);
deps.length = skipped_deps;
}
if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) {
for (i = 0; i < /** @type {Source[]} */
untracked_writes.length; i++) {
schedule_possible_effect_self_invalidation(
untracked_writes[i],
/** @type {Effect} */
reaction
);
}
}
if (previous_reaction !== null && previous_reaction !== reaction) {
read_version++;
if (previous_reaction.deps !== null) {
for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) {
previous_reaction.deps[i2].rv = read_version;
}
}
if (previous_deps !== null) {
for (const dep of previous_deps) {
dep.rv = read_version;
}
}
if (untracked_writes !== null) {
if (previous_untracked_writes === null) {
previous_untracked_writes = untracked_writes;
} else {
previous_untracked_writes.push(.../** @type {Source[]} */
untracked_writes);
}
}
}
if ((reaction.f & ERROR_VALUE) !== 0) {
reaction.f ^= ERROR_VALUE;
}
return result;
} catch (error) {
return handle_error(error);
} finally {
reaction.f ^= REACTION_IS_UPDATING;
new_deps = previous_deps;
skipped_deps = previous_skipped_deps;
untracked_writes = previous_untracked_writes;
active_reaction = previous_reaction;
current_sources = previous_sources;
set_component_context(previous_component_context);
untracking = previous_untracking;
update_version = previous_update_version;
}
}
function remove_reaction(signal, dependency) {
let reactions = dependency.reactions;
if (reactions !== null) {
var index = index_of.call(reactions, signal);
if (index !== -1) {
var new_length = reactions.length - 1;
if (new_length === 0) {
reactions = dependency.reactions = null;
} else {
reactions[index] = reactions[new_length];
reactions.pop();
}
}
}
if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear
// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`
// allows us to skip the expensive work of disconnecting and immediately reconnecting it
(new_deps === null || !includes.call(new_deps, dependency))) {
var derived2 = (
/** @type {Derived} */
dependency
);
if ((derived2.f & CONNECTED) !== 0) {
derived2.f ^= CONNECTED;
derived2.f &= ~WAS_MARKED;
}
if (derived2.v !== UNINITIALIZED) {
update_derived_status(derived2);
}
freeze_derived_effects(derived2);
remove_reactions(derived2, 0);
}
}
function remove_reactions(signal, start_index) {
var dependencies = signal.deps;
if (dependencies === null) return;
for (var i = start_index; i < dependencies.length; i++) {
remove_reaction(signal, dependencies[i]);
}
}
function update_effect(effect2) {
var flags2 = effect2.f;
if ((flags2 & DESTROYED) !== 0) {
return;
}
set_signal_status(effect2, CLEAN);
var previous_effect = active_effect;
var was_updating_effect = is_updating_effect;
active_effect = effect2;
is_updating_effect = true;
try {
if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {
destroy_block_effect_children(effect2);
} else {
destroy_effect_children(effect2);
}
execute_effect_teardown(effect2);
var teardown2 = update_reaction(effect2);
effect2.teardown = typeof teardown2 === "function" ? teardown2 : null;
effect2.wv = write_version;
var dep;
if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) ;
} finally {
is_updating_effect = was_updating_effect;
active_effect = previous_effect;
}
}
async function tick() {
await Promise.resolve();
flushSync();
}
function get(signal) {
var flags2 = signal.f;
var is_derived = (flags2 & DERIVED) !== 0;
if (active_reaction !== null && !untracking) {
var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;
if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) {
var deps = active_reaction.deps;
if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {
if (signal.rv < read_version) {
signal.rv = read_version;
if (new_deps === null && deps !== null && deps[skipped_deps] === signal) {
skipped_deps++;
} else if (new_deps === null) {
new_deps = [signal];
} else {
new_deps.push(signal);
}
}
} else {
(active_reaction.deps ??= []).push(signal);
var reactions = signal.reactions;
if (reactions === null) {
signal.reactions = [active_reaction];
} else if (!includes.call(reactions, active_reaction)) {
reactions.push(active_reaction);
}
}
}
}
if (is_destroying_effect && old_values.has(signal)) {
return old_values.get(signal);
}
if (is_derived) {
var derived2 = (
/** @type {Derived} */
signal
);
if (is_destroying_effect) {
var value = derived2.v;
if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) {
value = execute_derived(derived2);
}
old_values.set(derived2, value);
return value;
}
var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0);
var is_new = (derived2.f & REACTION_RAN) === 0;
if (is_dirty(derived2)) {
if (should_connect) {
derived2.f |= CONNECTED;
}
update_derived(derived2);
}
if (should_connect && !is_new) {
unfreeze_derived_effects(derived2);
reconnect(derived2);
}
}
if (batch_values?.has(signal)) {
return batch_values.get(signal);
}
if ((signal.f & ERROR_VALUE) !== 0) {
throw signal.v;
}
return signal.v;
}
function reconnect(derived2) {
derived2.f |= CONNECTED;
if (derived2.deps === null) return;
for (const dep of derived2.deps) {
(dep.reactions ??= []).push(derived2);
if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {
unfreeze_derived_effects(
/** @type {Derived} */
dep
);
reconnect(
/** @type {Derived} */
dep
);
}
}
}
function depends_on_old_values(derived2) {
if (derived2.v === UNINITIALIZED) return true;
if (derived2.deps === null) return false;
for (const dep of derived2.deps) {
if (old_values.has(dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on_old_values(
/** @type {Derived} */
dep
)) {
return true;
}
}
return false;
}
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function validate_effect(rune) {
if (active_effect === null) {
if (active_reaction === null) {
effect_orphan();
}
effect_in_unowned_derived();
}
if (is_destroying_effect) {
effect_in_teardown();
}
}
function push_effect(effect2, parent_effect) {
var parent_last = parent_effect.last;
if (parent_last === null) {
parent_effect.last = parent_effect.first = effect2;
} else {
parent_last.next = effect2;
effect2.prev = parent_last;
parent_effect.last = effect2;
}
}
function create_effect(type, fn) {
var parent = active_effect;
if (parent !== null && (parent.f & INERT) !== 0) {
type |= INERT;
}
var effect2 = {
ctx: component_context,
deps: null,
nodes: null,
f: type | DIRTY | CONNECTED,
first: null,
fn,
last: null,
next: null,
parent,
b: parent && parent.b,
prev: null,
teardown: null,
wv: 0,
ac: null
};
current_batch?.register_created_effect(effect2);
var e = effect2;
if ((type & EFFECT) !== 0) {
if (collected_effects !== null) {
collected_effects.push(effect2);
} else {
Batch.ensure().schedule(effect2);
}
} else if (fn !== null) {
try {
update_effect(effect2);
} catch (e2) {
destroy_effect(effect2);
throw e2;
}
if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child
(e.f & EFFECT_PRESERVED) === 0) {
e = e.first;
if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {
e.f |= EFFECT_TRANSPARENT;
}
}
}
if (e !== null) {
e.parent = parent;
if (parent !== null) {
push_effect(e, parent);
}
if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) {
var derived2 = (
/** @type {Derived} */
active_reaction
);
(derived2.effects ??= []).push(e);
}
}
return effect2;
}
function effect_tracking() {
return active_reaction !== null && !untracking;
}
function teardown(fn) {
const effect2 = create_effect(RENDER_EFFECT, null);
set_signal_status(effect2, CLEAN);
effect2.teardown = fn;
return effect2;
}
function user_effect(fn) {
validate_effect();
var flags2 = (
/** @type {Effect} */
active_effect.f
);
var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & REACTION_RAN) === 0;
if (defer) {
var context = (
/** @type {ComponentContext} */
component_context
);
(context.e ??= []).push(fn);
} else {
return create_user_effect(fn);
}
}
function create_user_effect(fn) {
return create_effect(EFFECT | USER_EFFECT, fn);
}
function effect_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
return () => {
destroy_effect(effect2);
};
}
function component_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
return (options = {}) => {
return new Promise((fulfil) => {
if (options.outro) {
pause_effect(effect2, () => {
destroy_effect(effect2);
fulfil(void 0);
});
} else {
destroy_effect(effect2);
fulfil(void 0);
}
});
};
}
function effect(fn) {
return create_effect(EFFECT, fn);
}
function async_effect(fn) {
return create_effect(ASYNC | EFFECT_PRESERVED, fn);
}
function render_effect(fn, flags2 = 0) {
return create_effect(RENDER_EFFECT | flags2, fn);
}
function template_effect(fn, sync = [], async = [], blockers = []) {
flatten(blockers, sync, async, (values) => {
create_effect(RENDER_EFFECT, () => fn(...values.map(get)));
});
}
function block(fn, flags2 = 0) {
var effect2 = create_effect(BLOCK_EFFECT | flags2, fn);
return effect2;
}
function managed(fn, flags2 = 0) {
var effect2 = create_effect(MANAGED_EFFECT | flags2, fn);
return effect2;
}
function branch(fn) {
return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn);
}
function execute_effect_teardown(effect2) {
var teardown2 = effect2.teardown;
if (teardown2 !== null) {
const previously_destroying_effect = is_destroying_effect;
const previous_reaction = active_reaction;
set_is_destroying_effect(true);
set_active_reaction(null);
try {
teardown2.call(null);
} finally {
set_is_destroying_effect(previously_destroying_effect);
set_active_reaction(previous_reaction);
}
}
}
function destroy_effect_children(signal, remove_dom = false) {
var effect2 = signal.first;
signal.first = signal.last = null;
while (effect2 !== null) {
const controller = effect2.ac;
if (controller !== null) {
without_reactive_context(() => {
controller.abort(STALE_REACTION);
});
}
var next2 = effect2.next;
if ((effect2.f & ROOT_EFFECT) !== 0) {
effect2.parent = null;
} else {
destroy_effect(effect2, remove_dom);
}
effect2 = next2;
}
}
function destroy_block_effect_children(signal) {
var effect2 = signal.first;
while (effect2 !== null) {
var next2 = effect2.next;
if ((effect2.f & BRANCH_EFFECT) === 0) {
destroy_effect(effect2);
}
effect2 = next2;
}
}
function destroy_effect(effect2, remove_dom = true) {
var removed = false;
if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) {
remove_effect_dom(
effect2.nodes.start,
/** @type {TemplateNode} */
effect2.nodes.end
);
removed = true;
}
set_signal_status(effect2, DESTROYING);
destroy_effect_children(effect2, remove_dom && !removed);
remove_reactions(effect2, 0);
var transitions = effect2.nodes && effect2.nodes.t;
if (transitions !== null) {
for (const transition of transitions) {
transition.stop();
}
}
execute_effect_teardown(effect2);
effect2.f ^= DESTROYING;
effect2.f |= DESTROYED;
var parent = effect2.parent;
if (parent !== null && parent.first !== null) {
unlink_effect(effect2);
}
effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = effect2.b = null;
}
function remove_effect_dom(node, end) {
while (node !== null) {
var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
node.remove();
node = next2;
}
}
function unlink_effect(effect2) {
var parent = effect2.parent;
var prev = effect2.prev;
var next2 = effect2.next;
if (prev !== null) prev.next = next2;
if (next2 !== null) next2.prev = prev;
if (parent !== null) {
if (parent.first === effect2) parent.first = next2;
if (parent.last === effect2) parent.last = prev;
}
}
function pause_effect(effect2, callback, destroy = true) {
var transitions = [];
pause_children(effect2, transitions, true);
var fn = () => {
if (destroy) destroy_effect(effect2);
if (callback) callback();
};
var remaining = transitions.length;
if (remaining > 0) {
var check = () => --remaining || fn();
for (var transition of transitions) {
transition.out(check);
}
} else {
fn();
}
}
function pause_children(effect2, transitions, local) {
if ((effect2.f & INERT) !== 0) return;
effect2.f ^= INERT;
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition of t) {
if (transition.is_global || local) {
transitions.push(transition);
}
}
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
if ((child2.f & ROOT_EFFECT) === 0) {
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent,
// it means the parent block effect was pruned. In that case,
// transparency information was transferred to the branch effect.
(child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0;
pause_children(child2, transitions, transparent ? local : false);
}
child2 = sibling2;
}
}
function resume_effect(effect2) {
resume_children(effect2, true);
}
function resume_children(effect2, local) {
if ((effect2.f & INERT) === 0) return;
effect2.f ^= INERT;
if ((effect2.f & CLEAN) === 0) {
set_signal_status(effect2, DIRTY);
Batch.ensure().schedule(effect2);
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0;
resume_children(child2, transparent ? local : false);
child2 = sibling2;
}
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition of t) {
if (transition.is_global || local) {
transition.in();
}
}
}
}
function move_effect(effect2, fragment) {
if (!effect2.nodes) return;
var node = effect2.nodes.start;
var end = effect2.nodes.end;
while (node !== null) {
var next2 = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
fragment.append(node);
node = next2;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get$1(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get$1(scope.store), {
[name]: value
});
} else {
Object.assign(get$1(scope.store), name);
}
scope.store.set(get$1(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n = {
ariaLinkLabel: "Altcha (official website)",
cancel: "Cancel",
enterCode: "Enter code",
enterCodeAria: "Enter code you hear. Press Space to play audio.",
enterCodeFromImage: "To proceed, please enter the code from the image below.",
error: "Verification failed. Try again later.",
expired: "Verification expired. Try again.",
footer: 'Protected by <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (official website)">ALTCHA</a>',
getAudioChallenge: "Get an audio challenge",
label: "I'm not a robot",
loading: "Loading...",
reload: "Reload",
verify: "Verify",
verificationRequired: "Verification required!",
verified: "Verified",
verifying: "Verifying...",
waitAlert: "Verifying... please wait."
};
globalThis.$altcha.i18n.set("en", i18n);
const PUBLIC_VERSION = "5";
if (typeof window !== "undefined") {
((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION);
}
const event_symbol = /* @__PURE__ */ Symbol("events");
const all_registered_events = /* @__PURE__ */ new Set();
const root_event_handles = /* @__PURE__ */ new Set();
function create_event(event_name, dom, handler, options = {}) {
function target_handler(event2) {
if (!options.capture) {
handle_event_propagation.call(dom, event2);
}
if (!event2.cancelBubble) {
return without_reactive_context(() => {
return handler?.call(this, event2);
});
}
}
if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") {
queue_micro_task(() => {
dom.addEventListener(event_name, target_handler, options);
});
} else {
dom.addEventListener(event_name, target_handler, options);
}
return target_handler;
}
function event(event_name, dom, handler, capture2, passive) {
var options = { capture: capture2, passive };
var target_handler = create_event(event_name, dom, handler, options);
if (dom === document.body || // @ts-ignore
dom === window || // @ts-ignore
dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed
dom instanceof HTMLMediaElement) {
teardown(() => {
dom.removeEventListener(event_name, target_handler, options);
});
}
}
function delegated(event_name, element, handler) {
(element[event_symbol] ??= {})[event_name] = handler;
}
function delegate(events) {
for (var i = 0; i < events.length; i++) {
all_registered_events.add(events[i]);
}
for (var fn of root_event_handles) {
fn(events);
}
}
let last_propagated_event = null;
function handle_event_propagation(event2) {
var handler_element = this;
var owner_document = (
/** @type {Node} */
handler_element.ownerDocument
);
var event_name = event2.type;
var path = event2.composedPath?.() || [];
var current_target = (
/** @type {null | Element} */
path[0] || event2.target
);
last_propagated_event = event2;
var path_idx = 0;
var handled_at = last_propagated_event === event2 && event2[event_symbol];
if (handled_at) {
var at_idx = path.indexOf(handled_at);
if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */
window)) {
event2[event_symbol] = handler_element;
return;
}
var handler_idx = path.indexOf(handler_element);
if (handler_idx === -1) {
return;
}
if (at_idx <= handler_idx) {
path_idx = at_idx;
}
}
current_target = /** @type {Element} */
path[path_idx] || event2.target;
if (current_target === handler_element) return;
define_property(event2, "currentTarget", {
configurable: true,
get() {
return current_target || owner_document;
}
});
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
var throw_error;
var other_errors = [];
while (current_target !== null) {
var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */
current_target.host || null;
try {
var delegated2 = current_target[event_symbol]?.[event_name];
if (delegated2 != null && (!/** @type {any} */
current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well
// -> the target could not have been disabled because it emits the event in the first place
event2.target === current_target)) {
delegated2.call(current_target, event2);
}
} catch (error) {
if (throw_error) {
other_errors.push(error);
} else {
throw_error = error;
}
}
if (event2.cancelBubble || parent_element === handler_element || parent_element === null) {
break;
}
current_target = parent_element;
}
if (throw_error) {
for (let error of other_errors) {
queueMicrotask(() => {
throw error;
});
}
throw throw_error;
}
} finally {
event2[event_symbol] = handler_element;
delete event2.currentTarget;
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
const policy = (
// We gotta write it like this because after downleveling the pure comment may end up in the wrong location
globalThis?.window?.trustedTypes && /* @__PURE__ */ globalThis.window.trustedTypes.createPolicy("svelte-trusted-html", {
/** @param {string} html */
createHTML: (html2) => {
return html2;
}
})
);
function create_trusted_html(html2) {
return (
/** @type {string} */
policy?.createHTML(html2) ?? html2
);
}
function create_fragment_from_html(html2) {
var elem = create_element("template");
elem.innerHTML = create_trusted_html(html2.replaceAll("<!>", "<!---->"));
return elem.content;
}
function assign_nodes(start, end) {
var effect2 = (
/** @type {Effect} */
active_effect
);
if (effect2.nodes === null) {
effect2.nodes = { start, end, a: null, t: null };
}
}
// @__NO_SIDE_EFFECTS__
function from_html(content, flags2) {
var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0;
var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0;
var node;
var has_start = !content.startsWith("<!>");
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (node === void 0) {
node = create_fragment_from_html(has_start ? content : "<!>" + content);
if (!is_fragment) node = /** @type {TemplateNode} */
/* @__PURE__ */ get_first_child(node);
}
var clone = (
/** @type {TemplateNode} */
use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)
);
if (is_fragment) {
var start = (
/** @type {TemplateNode} */
/* @__PURE__ */ get_first_child(clone)
);
var end = (
/** @type {TemplateNode} */
clone.lastChild
);
assign_nodes(start, end);
} else {
assign_nodes(clone, clone);
}
return clone;
};
}
// @__NO_SIDE_EFFECTS__
function from_namespace(content, flags2, ns = "svg") {
var has_start = !content.startsWith("<!>");
var wrapped = `<${ns}>${has_start ? content : "<!>" + content}</${ns}>`;
var node;
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (!node) {
var fragment = (
/** @type {DocumentFragment} */
create_fragment_from_html(wrapped)
);
var root2 = (
/** @type {Element} */
/* @__PURE__ */ get_first_child(fragment)
);
{
node = /** @type {Element} */
/* @__PURE__ */ get_first_child(root2);
}
}
var clone = (
/** @type {TemplateNode} */
node.cloneNode(true)
);
{
assign_nodes(clone, clone);
}
return clone;
};
}
// @__NO_SIDE_EFFECTS__
function from_svg(content, flags2) {
return /* @__PURE__ */ from_namespace(content, flags2, "svg");
}
function text(value = "") {
if (!hydrating) {
var t = create_text(value + "");
assign_nodes(t, t);
return t;
}
var node = hydrate_node;
if (node.nodeType !== TEXT_NODE) {
node.before(node = create_text());
set_hydrate_node(node);
} else {
merge_text_nodes(
/** @type {Text} */
node
);
}
assign_nodes(node, node);
return node;
}
function comment() {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
var frag = document.createDocumentFragment();
var start = document.createComment("");
var anchor = create_text();
frag.append(start, anchor);
assign_nodes(start, anchor);
return frag;
}
function append(anchor, dom) {
if (hydrating) {
var effect2 = (
/** @type {Effect & { nodes: EffectNodes }} */
active_effect
);
if ((effect2.f & REACTION_RAN) === 0 || effect2.nodes.end === null) {
effect2.nodes.end = hydrate_node;
}
hydrate_next();
return;
}
if (anchor === null) {
return;
}
anchor.before(
/** @type {Node} */
dom
);
}
function is_capture_event(name) {
return name.endsWith("capture") && name !== "gotpointercapture" && name !== "lostpointercapture";
}
const DELEGATED_EVENTS = [
"beforeinput",
"click",
"change",
"dblclick",
"contextmenu",
"focusin",
"focusout",
"input",
"keydown",
"keyup",
"mousedown",
"mousemove",
"mouseout",
"mouseover",
"mouseup",
"pointerdown",
"pointermove",
"pointerout",
"pointerover",
"pointerup",
"touchend",
"touchmove",
"touchstart"
];
function can_delegate_event(event_name) {
return DELEGATED_EVENTS.includes(event_name);
}
const ATTRIBUTE_ALIASES = {
// no `class: 'className'` because we handle that separately
formnovalidate: "formNoValidate",
ismap: "isMap",
nomodule: "noModule",
playsinline: "playsInline",
readonly: "readOnly",
defaultvalue: "defaultValue",
defaultchecked: "defaultChecked",
srcobject: "srcObject",
novalidate: "noValidate",
allowfullscreen: "allowFullscreen",
disablepictureinpicture: "disablePictureInPicture",
disableremoteplayback: "disableRemotePlayback"
};
function normalize_attribute(name) {
name = name.toLowerCase();
return ATTRIBUTE_ALIASES[name] ?? name;
}
const PASSIVE_EVENTS = ["touchstart", "touchmove"];
function is_passive_event(name) {
return PASSIVE_EVENTS.includes(name);
}
function set_text(text2, value) {
var str = value == null ? "" : typeof value === "object" ? `${value}` : value;
if (str !== /** @type {any} */
(text2[TEXT_CACHE] ??= text2.nodeValue)) {
text2[TEXT_CACHE] = str;
text2.nodeValue = `${str}`;
}
}
function mount(component2, options) {
return _mount(component2, options);
}
function hydrate(component2, options) {
init_operations();
options.intro = options.intro ?? false;
const target = options.target;
const was_hydrating = hydrating;
const previous_hydrate_node = hydrate_node;
try {
var anchor = /* @__PURE__ */ get_first_child(target);
while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */
anchor.data !== HYDRATION_START)) {
anchor = /* @__PURE__ */ get_next_sibling(anchor);
}
if (!anchor) {
throw HYDRATION_ERROR;
}
set_hydrating(true);
set_hydrate_node(
/** @type {Comment} */
anchor
);
const instance = _mount(component2, { ...options, anchor });
set_hydrating(false);
return (
/** @type {Exports} */
instance
);
} catch (error) {
if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) {
throw error;
}
if (error !== HYDRATION_ERROR) {
console.warn("Failed to hydrate: ", error);
}
if (options.recover === false) {
hydration_failed();
}
init_operations();
clear_text_content(target);
set_hydrating(false);
return mount(component2, options);
} finally {
set_hydrating(was_hydrating);
set_hydrate_node(previous_hydrate_node);
}
}
const listeners = /* @__PURE__ */ new Map();
function _mount(Component, { target, anchor, props = {}, events, context, intro = true, transformError }) {
init_operations();
var component2 = void 0;
var unmount2 = component_root(() => {
var anchor_node = anchor ?? target.appendChild(create_text());
boundary(
/** @type {TemplateNode} */
anchor_node,
{
pending: () => {
}
},
(anchor_node2) => {
push({});
var ctx = (
/** @type {ComponentContext} */
component_context
);
if (context) ctx.c = context;
if (events) {
props.$$events = events;
}
if (hydrating) {
assign_nodes(
/** @type {TemplateNode} */
anchor_node2,
null
);
}
component2 = Component(anchor_node2, props) || {};
if (hydrating) {
active_effect.nodes.end = hydrate_node;
if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */
hydrate_node.data !== HYDRATION_END) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
}
pop();
},
transformError
);
var registered_events = /* @__PURE__ */ new Set();
var event_handle = (events2) => {
for (var i = 0; i < events2.length; i++) {
var event_name = events2[i];
if (registered_events.has(event_name)) continue;
registered_events.add(event_name);
var passive = is_passive_event(event_name);
for (const node of [target, document]) {
var counts = listeners.get(node);
if (counts === void 0) {
counts = /* @__PURE__ */ new Map();
listeners.set(node, counts);
}
var count = counts.get(event_name);
if (count === void 0) {
node.addEventListener(event_name, handle_event_propagation, { passive });
counts.set(event_name, 1);
} else {
counts.set(event_name, count + 1);
}
}
}
};
event_handle(array_from(all_registered_events));
root_event_handles.add(event_handle);
return () => {
for (var event_name of registered_events) {
for (const node of [target, document]) {
var counts = (
/** @type {Map<string, number>} */
listeners.get(node)
);
var count = (
/** @type {number} */
counts.get(event_name)
);
if (--count == 0) {
node.removeEventListener(event_name, handle_event_propagation);
counts.delete(event_name);
if (counts.size === 0) {
listeners.delete(node);
}
} else {
counts.set(event_name, count);
}
}
}
root_event_handles.delete(event_handle);
if (anchor_node !== anchor) {
anchor_node.parentNode?.removeChild(anchor_node);
}
};
});
mounted_components.set(component2, unmount2);
return component2;
}
let mounted_components = /* @__PURE__ */ new WeakMap();
function unmount(component2, options) {
const fn = mounted_components.get(component2);
if (fn) {
mounted_components.delete(component2);
return fn(options);
}
return Promise.resolve();
}
class BranchManager {
/** @type {TemplateNode} */
anchor;
/** @type {Map<Batch, Key>} */
#batches = /* @__PURE__ */ new Map();
/**
* Map of keys to effects that are currently rendered in the DOM.
* These effects are visible and actively part of the document tree.
* Example:
*
data/skin/mobile/story_g/js/altcha/i18n.js+2656
변경 전i18n.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후i18n.js
const noop = () => {
};
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function get(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let untracking = false;
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get(scope.store), {
[name]: value
});
} else {
Object.assign(get(scope.store), name);
}
scope.store.set(get(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n$Y = {
ariaLinkLabel: "Altcha (الموقع الرسمي)",
enterCode: "أدخل الرمز",
enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",
error: "فشل التحقق. حاول مرة أخرى لاحقاً.",
expired: "انتهت صلاحية التحقق. حاول مرة أخرى.",
footer: 'محمي بواسطة <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (الموقع الرسمي)">ALTCHA</a>',
getAudioChallenge: "احصل على تحدي صوتي",
label: "أنا لست روبوتاً",
loading: "جارٍ التحميل...",
reload: "إعادة تحميل",
verify: "تحقق",
verificationRequired: "مطلوب التحقق!",
verified: "تم التحقق",
verifying: "جارٍ التحقق...",
waitAlert: "جارٍ التحقق... يرجى الانتظار.",
cancel: "إلغاء",
enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه."
};
globalThis.$altcha.i18n.set("ar", i18n$Y);
const i18n$X = {
ariaLinkLabel: "Altcha (официален уебсайт)",
enterCode: "Въведете код",
enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",
error: "Проверката неуспешна. Моля, опитайте по-късно.",
expired: "Времето за проверка изтече. Моля, опитайте отново.",
footer: 'Защитено от <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официален уебсайт)">ALTCHA</a>',
getAudioChallenge: "Аудио проверка",
label: "Аз не съм робот",
loading: "Зареждане...",
reload: "Презареди",
verify: "Провери",
verificationRequired: "Изисква се проверка!",
verified: "Проверено",
verifying: "Проверява се...",
waitAlert: "Проверката е в процес... моля изчакайте.",
cancel: "Отказ",
enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу."
};
globalThis.$altcha.i18n.set("bg", i18n$X);
const i18n$W = {
ariaLinkLabel: "Altcha (афіцыйны сайт)",
enterCode: "Увядзіце код",
enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",
error: "Праверка не прайшла. Паспрабуйце пазней.",
expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.",
footer: 'Абаронена <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (афіцыйны сайт)">ALTCHA</a>',
getAudioChallenge: "Атрымаць аўдыё выклік",
label: "Я не робат",
loading: "Загрузка...",
reload: "Перазагрузіць",
verify: "Праверыць",
verificationRequired: "Патрабуецца праверка!",
verified: "Праверана",
verifying: "Правяраем...",
waitAlert: "Праверка... калі ласка, пачакайце.",
cancel: "Скасаваць",
enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй."
};
globalThis.$altcha.i18n.set("be", i18n$W);
const i18n$V = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("bs", i18n$V);
const i18n$U = {
ariaLinkLabel: "Altcha (lloc web oficial)",
enterCode: "Introdueix el codi",
enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",
error: "Verificació fallida. Torna-ho a provar més tard.",
expired: "Verificació expirada. Torna-ho a provar.",
footer: 'Protegit per <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (lloc web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtenir un desafiament d’àudio",
label: "No sóc un robot",
loading: "Carregant...",
reload: "Torna a carregar",
verify: "Verificar",
verificationRequired: "Es requereix verificació!",
verified: "Verificat",
verifying: "Verificant...",
waitAlert: "Verificant... si us plau, espera.",
cancel: "Cancel·la",
enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent."
};
globalThis.$altcha.i18n.set("ca", i18n$U);
const i18n$T = {
ariaLinkLabel: "Altcha (oficiální web)",
enterCode: "Zadejte kód",
enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",
error: "Ověření selhalo. Zkuste to prosím později.",
expired: "Ověření vypršelo. Zkuste to prosím znovu.",
footer: 'Chráněno pomocí <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiální web)">ALTCHA</a>',
getAudioChallenge: "Získat audio výzvu",
label: "Nejsem robot",
loading: "Načítání...",
reload: "Znovu načíst",
verify: "Ověřit",
verificationRequired: "Vyžaduje se ověření!",
verified: "Ověřeno",
verifying: "Ověřování...",
waitAlert: "Probíhá ověření... prosím počkejte.",
cancel: "Zrušit",
enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže."
};
globalThis.$altcha.i18n.set("cs", i18n$T);
const i18n$S = {
ariaLinkLabel: "Altcha (officiel hjemmeside)",
enterCode: "Indtast kode",
enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",
error: "Verificering mislykkedes. Prøv venligst igen senere.",
expired: "Verificering udløbet. Prøv venligst igen.",
footer: 'Beskyttet af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiel hjemmeside)">ALTCHA</a>',
getAudioChallenge: "Hent lydudfordring",
label: "Jeg er ikke en robot",
loading: "Indlæser...",
reload: "Genindlæs",
verify: "Verificer",
verificationRequired: "Verificering kræves!",
verified: "Verificeret",
verifying: "Verificerer...",
waitAlert: "Verificerer... vent venligst.",
cancel: "Annuller",
enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder."
};
globalThis.$altcha.i18n.set("da", i18n$S);
const i18n$R = {
ariaLinkLabel: "Altcha (offizielle Website)",
enterCode: "Code eingeben",
enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",
error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",
footer: 'Geschützt durch <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offizielle Website)">ALTCHA</a>',
getAudioChallenge: "Audio-Herausforderung anfordern",
label: "Ich bin kein Roboter",
loading: "Lade...",
reload: "Neu laden",
verify: "Überprüfen",
verificationRequired: "Überprüfung erforderlich!",
verified: "Überprüft",
verifying: "Wird überprüft...",
waitAlert: "Überprüfung läuft... bitte warten.",
cancel: "Abbrechen",
enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."
};
globalThis.$altcha.i18n.set("de", i18n$R);
const i18n$Q = {
ariaLinkLabel: "Altcha (επίσημος ιστότοπος)",
enterCode: "Εισαγάγετε κωδικό",
enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",
error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",
expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.",
footer: 'Προστατεύεται από το <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (επίσημος ιστότοπος)">ALTCHA</a>',
getAudioChallenge: "Λήψη ηχητικής δοκιμασίας",
label: "Δεν είμαι ρομπότ",
loading: "Φόρτωση...",
reload: "Επαναφόρτωση",
verify: "Επαλήθευση",
verificationRequired: "Απαιτείται έλεγχος!",
verified: "Επαληθεύτηκε",
verifying: "Γίνεται επαλήθευση...",
waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.",
cancel: "Ακύρωση",
enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."
};
globalThis.$altcha.i18n.set("el", i18n$Q);
const i18n$P = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Introduce el código",
enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor intente nuevamente más tarde.",
expired: "Verificación expirada. Por favor intente nuevamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un desafío de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Recargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espere.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo."
};
globalThis.$altcha.i18n.set("es-es", i18n$P);
const i18n$O = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Ingresa el código",
enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.",
expired: "La verificación expiró. Por favor inténtalo de nuevo.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un reto de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Volver a cargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espera.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación."
};
globalThis.$altcha.i18n.set("es-419", i18n$O);
const i18n$N = {
ariaLinkLabel: "Altcha (ametlik veebisait)",
enterCode: "Sisesta kood",
enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",
error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",
expired: "Kinnitamine aegus. Proovi uuesti.",
footer: 'Kaitstud <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ametlik veebisait)">ALTCHA</a> poolt',
getAudioChallenge: "Hangi heliülesanne",
label: "Ma ei ole robot",
loading: "Laadimine...",
reload: "Laadi uuesti",
verify: "Kinnita",
verificationRequired: "Kontroll on vajalik!",
verified: "Kinnitatud",
verifying: "Kinnitamine...",
waitAlert: "Kinnitamine... palun oota.",
cancel: "Tühista",
enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood."
};
globalThis.$altcha.i18n.set("et", i18n$N);
const i18n$M = {
ariaLinkLabel: "Altcha (webgune ofiziala)",
enterCode: "Sartu kodea",
enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",
error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.",
expired: "Egiaztatzea iraungi da. Saiatu berriro.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (webgune ofiziala)">ALTCHA</a>k babestuta',
getAudioChallenge: "Jaso audio-erronka bat",
label: "Ez naiz robot bat",
loading: "Kargatzen...",
reload: "Birkargatu",
verify: "Egiaztatu",
verificationRequired: "Egiaztatzea beharrezkoa da!",
verified: "Egiaztatuta",
verifying: "Egiaztatzen...",
waitAlert: "Egiaztatzen... itxaron mesedez.",
cancel: "Utzi",
enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea."
};
globalThis.$altcha.i18n.set("eu", i18n$M);
const i18n$L = {
ariaLinkLabel: "Altcha (وب‌سایت رسمی)",
enterCode: "کد را وارد کنید",
enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",
error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",
expired: "احراز هویت منقضی شد. دوباره تلاش کنید.",
footer: 'محافظت شده توسط <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (وب‌سایت رسمی)">ALTCHA</a>',
getAudioChallenge: "دریافت چالش صوتی",
label: "من ربات نیستم",
loading: "در حال بارگذاری...",
reload: "بارگذاری مجدد",
verify: "تایید",
verificationRequired: "احراز هویت لازم است!",
verified: "تایید شد",
verifying: "در حال تایید...",
waitAlert: "در حال تایید... لطفا منتظر بمانید.",
cancel: "لغو کردن",
enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید."
};
globalThis.$altcha.i18n.set("fa", i18n$L);
const i18n$K = {
ariaLinkLabel: "Altcha (offiziell Websäit)",
enterCode: "Code aginn",
enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",
error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",
expired: "Verifikatioun ofgelaf. Probéiert nach emol.",
footer: 'Geschützt vun <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offiziell Websäit)">ALTCHA</a>',
getAudioChallenge: "Kritt eng Audio-Herausfuerderung",
label: "Ech sinn keen Robot",
loading: "Lueden...",
reload: "Nei lueden",
verify: "Verifizéieren",
verificationRequired: "Verifikatioun néideg!",
verified: "Verifizéiert",
verifying: "Verifizéieren...",
waitAlert: "Verifizéieren... waart wgl.",
cancel: "Ofbriechen",
enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."
};
globalThis.$altcha.i18n.set("lb", i18n$K);
const i18n$J = {
ariaLinkLabel: "Altcha (virallinen verkkosivusto)",
enterCode: "Syötä koodi",
enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",
error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.",
expired: "Varmennus vanhentui. Yritä uudelleen.",
footer: 'Suojattu <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (virallinen verkkosivusto)">ALTCHA</a>:lla',
getAudioChallenge: "Hae äänitehtävä",
label: "En ole robotti",
loading: "Ladataan...",
reload: "Lataa uudelleen",
verify: "Vahvista",
verificationRequired: "Vahvistus vaaditaan!",
verified: "Vahvistettu",
verifying: "Vahvistetaan...",
waitAlert: "Vahvistetaan... odota hetki.",
cancel: "Peruuta",
enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi."
};
globalThis.$altcha.i18n.set("fi", i18n$J);
const i18n$I = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",
error: "Échec de la vérification. Réessayez plus tard.",
expired: "La vérification a expiré. Réessayez.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-ca", i18n$I);
const i18n$H = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",
error: "Échec de la vérification. Essayez à nouveau plus tard.",
expired: "La vérification a expiré. Essayez à nouveau.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-fr", i18n$H);
const i18n$G = {
ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)",
enterCode: "Iontráil cód",
enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",
error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.",
expired: "Tá an fíorú as feidhm. Bain triail eile as.",
footer: 'Cosanta ag <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (láithreán gréasáin oifigiúil)">ALTCHA</a>',
getAudioChallenge: "Faigh dúshlán fuaime",
label: "Níl mé i mo róbat",
loading: "Á luchtú...",
reload: "Athluchtaigh",
verify: "Fíoraigh",
verificationRequired: "Fíorú riachtanach!",
verified: "Fíoraithe",
verifying: "Fíorú ar siúl...",
waitAlert: "Fíorú ar siúl... fan go fóill.",
cancel: "Cealaigh",
enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."
};
globalThis.$altcha.i18n.set("ga", i18n$G);
const i18n$F = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",
error: "Provjera nije uspjela. Molimo pokušajte kasnije.",
expired: "Provjera je istekla. Molimo pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Audio provjera",
label: "Ja nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Provjeri",
verificationRequired: "Potrebna je provjera!",
verified: "Provjereno",
verifying: "Provjeravanje...",
waitAlert: "Provjera je u tijeku... molimo pričekajte.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("hr", i18n$F);
const i18n$E = {
ariaLinkLabel: "Altcha (hivatalos weboldal)",
enterCode: "Írja be a kódot",
enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",
error: "A hitelesítés nem sikerült. Próbáld meg később újra.",
expired: "A hitelesítés lejárt. Próbáld újra.",
footer: 'Védve a következő által: <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (hivatalos weboldal)">ALTCHA</a>',
getAudioChallenge: "Hangalapú kihívás kérése",
label: "Nem vagyok robot",
loading: "Betöltés...",
reload: "Újratöltés",
verify: "Ellenőrzés",
verificationRequired: "Ellenőrzés szükséges!",
verified: "Ellenőrizve",
verifying: "Ellenőrzés folyamatban...",
waitAlert: "Ellenőrzés folyamatban... kérlek várj.",
cancel: "Mégse",
enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját."
};
globalThis.$altcha.i18n.set("hu", i18n$E);
const i18n$D = {
ariaLinkLabel: "Altcha (opinber vefsíða)",
enterCode: "Sláðu inn kóða",
enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",
error: "Staðfesting mistókst. Reyndu aftur síðar.",
expired: "Staðfesting er útrunnin. Reyndu aftur.",
footer: 'Verndað af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (opinber vefsíða)">ALTCHA</a>',
getAudioChallenge: "Fá hljóðáskorun",
label: "Ég er ekki robot",
loading: "Hleður...",
reload: "Hleð aftur",
verify: "Staðfesta",
verificationRequired: "Staðfesting er nauðsynleg!",
verified: "Staðfest",
verifying: "Að staðfesta...",
waitAlert: "Að staðfesta... vinsamlegast bíða.",
cancel: "Hætta við",
enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."
};
globalThis.$altcha.i18n.set("is", i18n$D);
const i18n$C = {
ariaLinkLabel: "Altcha (sito ufficiale)",
enterCode: "Inserisci il codice",
enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",
error: "Verifica fallita. Riprova più tardi.",
expired: "Verifica scaduta. Riprova.",
footer: 'Protetto da <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sito ufficiale)">ALTCHA</a>',
getAudioChallenge: "Ottieni una sfida audio",
label: "Non sono un robot",
loading: "Caricamento...",
reload: "Ricarica",
verify: "Verifica",
verificationRequired: "Verifica richiesta!",
verified: "Verificato",
verifying: "Verifica in corso...",
waitAlert: "Verifica in corso... attendere.",
cancel: "Annulla",
enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante."
};
globalThis.$altcha.i18n.set("it", i18n$C);
const i18n$B = {
ariaLinkLabel: "Altcha (oficiali svetainė)",
enterCode: "Įveskite kodą",
enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",
error: "Patvirtinimas nepavyko. Bandykite vėliau.",
expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.",
footer: 'Apsaugota <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiali svetainė)">ALTCHA</a>',
getAudioChallenge: "Gauti garso užduotį",
label: "Aš nesu robotas",
loading: "Įkeliama...",
reload: "Įkelti iš naujo",
verify: "Patvirtinti",
verificationRequired: "Reikalingas patvirtinimas!",
verified: "Patvirtinta",
verifying: "Tikrinama...",
waitAlert: "Tikrinama... prašome palaukti.",
cancel: "Atšaukti",
enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."
};
globalThis.$altcha.i18n.set("lt", i18n$B);
const i18n$A = {
ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)",
enterCode: "Ievadiet kodu",
enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",
error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",
expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",
footer: 'Aizsargāts ar <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiālā tīmekļa vietne)">ALTCHA</a>',
getAudioChallenge: "Saņemt audio izaicinājumu",
label: "Es neesmu robots",
loading: "Notiek ielāde...",
reload: "Pārlādēt",
verify: "Verificēt",
verificationRequired: "Nepieciešama verifikācija!",
verified: "Verificēts",
verifying: "Notiek verifikācija...",
waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.",
cancel: "Atcelt",
enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."
};
globalThis.$altcha.i18n.set("lv", i18n$A);
const i18n$z = {
ariaLinkLabel: "Altcha (sit uffiċjali)",
enterCode: "Idħol il-kodiċi",
enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",
error: "Il-verifika falliet. Erġa’ pprova aktar tard.",
expired: "Il-verifika skadiet. Erġa’ pprova.",
footer: 'Protett minn <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sit uffiċjali)">ALTCHA</a>',
getAudioChallenge: "Ikseb sfida bl-awdjo",
label: "M’inix robot",
loading: "Qed jitgħabba...",
reload: "Ittella’ mill-ġdid",
verify: "Ivverifika",
verificationRequired: "Verifika meħtieġa!",
verified: "Ivverifikat",
verifying: "Verifika għaddejja...",
waitAlert: "Verifika għaddejja... stenna ftit.",
cancel: "Ikkanċella",
enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."
};
globalThis.$altcha.i18n.set("mt", i18n$z);
const i18n$y = {
ariaLinkLabel: "Altcha (offisiell nettside)",
enterCode: "Skriv inn kode",
enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.",
error: "Verifisering mislyktes. Prøv igjen senere.",
expired: "Verifiseringen utløp. Prøv igjen.",
footer: 'Beskyttet av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offisiell nettside)">ALTCHA</a>',
getAudioChallenge: "Få en lydutfordring",
label: "Jeg er ikke en robot",
loading: "Laster...",
reload: "Last på nytt",
verify: "Verifiser",
verificationRequired: "Verifisering kreves!",
verified: "Verifisert",
verifying: "Verifiserer...",
waitAlert: "Verifiserer... vennligst vent.",
cancel: "Avbryt",
enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor."
};
globalThis.$altcha.i18n.set("nb", i18n$y);
const i18n$x = {
ariaLinkLabel: "Altcha (officiële website)",
enterCode: "Voer code in",
enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",
error: "Verificatie mislukt. Probeer het later opnieuw.",
expired: "Verificatie verlopen. Probeer het opnieuw.",
footer: 'Beschermd door <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiële website)">ALTCHA</a>',
getAudioChallenge: "Audio-uitdaging ontvangen",
label: "Ik ben geen robot",
loading: "Laden...",
reload: "Herladen",
verify: "Verifiëren",
verificationRequired: "Verificatie vereist!",
verified: "Geverifieerd",
verifying: "Bezig met verifiëren...",
waitAlert: "Bezig met verifiëren... even geduld a.u.b.",
cancel: "Annuleren",
enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in."
};
globalThis.$altcha.i18n.set("nl", i18n$x);
const i18n$w = {
ariaLinkLabel: "Altcha (oficjalna strona internetowa)",
enterCode: "Wprowadź kod",
enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",
error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.",
expired: "Weryfikacja wygasła. Spróbuj ponownie.",
footer: 'Chronione przez <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficjalna strona internetowa)">ALTCHA</a>',
getAudioChallenge: "Pobierz zadanie dźwiękowe",
label: "Nie jestem robotem",
loading: "Ładowanie...",
reload: "Odśwież",
verify: "Zweryfikuj",
verificationRequired: "Wymagana weryfikacja!",
verified: "Zweryfikowano",
verifying: "Weryfikacja...",
waitAlert: "Trwa weryfikacja... proszę czekać.",
cancel: "Anuluj",
enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka."
};
globalThis.$altcha.i18n.set("pl", i18n$w);
const i18n$v = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduza o código",
enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",
error: "A verificação falhou. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Não sou um robô",
loading: "A carregar...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "A verificar...",
waitAlert: "A verificar... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-pt", i18n$v);
const i18n$u = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Digite o código",
enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",
error: "Falha na verificação. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Eu não sou um robô",
loading: "Carregando...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-br", i18n$u);
const i18n$t = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduceți codul",
enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",
error: "Verificarea a eșuat. Încearcă din nou mai târziu.",
expired: "Verificarea a expirat. Încearcă din nou.",
footer: 'Protejat de <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obține o provocare audio",
label: "Nu sunt un robot",
loading: "Se încarcă...",
reload: "Reîncarcă",
verify: "Verifică",
verificationRequired: "Verificare necesară!",
verified: "Verificat",
verifying: "Se verifică...",
waitAlert: "Se verifică... te rugăm să aștepți.",
cancel: "Anulare",
enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."
};
globalThis.$altcha.i18n.set("ro", i18n$t);
const i18n$s = {
ariaLinkLabel: "Altcha (официальный сайт)",
enterCode: "Введите код",
enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",
error: "Ошибка верификации. Попробуйте позже.",
expired: "Срок действия верификации истек. Попробуйте снова.",
footer: 'Защищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официальный сайт)">ALTCHA</a>',
getAudioChallenge: "Получить аудио задачу",
label: "Я не робот",
loading: "Загрузка...",
reload: "Перезагрузить",
verify: "Проверить",
verificationRequired: "Требуется проверка!",
verified: "Проверено",
verifying: "Идет проверка...",
waitAlert: "Идет проверка... Пожалуйста, подождите.",
cancel: "Отмена",
enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже."
};
globalThis.$altcha.i18n.set("ru", i18n$s);
const i18n$r = {
ariaLinkLabel: "Altcha (oficiálna webová stránka)",
enterCode: "Zadajte kód",
enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",
error: "Verifikácia zlyhala. Skúste to znova neskôr.",
expired: "Verifikácia vypršala. Skúste to znova.",
footer: 'Chránené <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiálna webová stránka)">ALTCHA</a>',
getAudioChallenge: "Získať audio výzvu",
label: "Nie som robot",
loading: "Načítava sa...",
reload: "Obnoviť",
verify: "Verifikovať",
verificationRequired: "Vyžaduje sa overenie!",
verified: "Verifikované",
verifying: "Prebieha verifikácia...",
waitAlert: "Prebieha verifikácia... prosím čakajte.",
cancel: "Zrušiť",
enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie."
};
globalThis.$altcha.i18n.set("sk", i18n$r);
const i18n$q = {
ariaLinkLabel: "Altcha (uradna spletna stran)",
enterCode: "Vnesite kodo",
enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",
error: "Preverjanje ni uspelo. Poskusite znova kasneje.",
expired: "Preverjanje je poteklo. Poskusite znova.",
footer: 'Zaščiteno z <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (uradna spletna stran)">ALTCHA</a>',
getAudioChallenge: "Pridobite zvočni izziv",
label: "Nisem robot",
loading: "Nalagam...",
reload: "Ponovno naloži",
verify: "Preveri",
verificationRequired: "Potrebna je preveritev!",
verified: "Preverjeno",
verifying: "Preverjanje...",
waitAlert: "Preverjanje... prosim počakajte.",
cancel: "Preklic",
enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."
};
globalThis.$altcha.i18n.set("sl", i18n$q);
const i18n$p = {
ariaLinkLabel: "Altcha (faqja zyrtare)",
enterCode: "Fut kodin",
enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",
error: "Verifikimi dështoi. Provoni përsëri më vonë.",
expired: "Verifikimi ka skaduar. Provoni përsëri.",
footer: 'I mbrojtur nga <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (faqja zyrtare)">ALTCHA</a>',
getAudioChallenge: "Merr një sfidë audio",
label: "Unë nuk jam një robot",
loading: "Duke u ngarkuar...",
reload: "Ringarko",
verify: "Verifiko",
verificationRequired: "Kërkohet verifikimi!",
verified: "I verifikuar",
verifying: "Duke verifikuar...",
waitAlert: "Duke verifikuar... ju lutem prisni.",
cancel: "Anuloje",
enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."
};
globalThis.$altcha.i18n.set("sq", i18n$p);
const i18n$o = {
ariaLinkLabel: "Altcha (zvanična web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (zvanična web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovo učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Откажи",
enterCodeFromImage: "Да бисте наставили, унесите код са слике испод."
};
globalThis.$altcha.i18n.set("sr", i18n$o);
const i18n$n = {
ariaLinkLabel: "Altcha (officiell webbplats)",
enterCode: "Ange kod",
enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
error: "Verifiering misslyckades. Försök igen senare.",
expired: "Verifieringen har gått ut. Försök igen.",
footer: 'Skyddad av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiell webbplats)">ALTCHA</a>',
getAudioChallenge: "Få ljudutmaning",
label: "Jag är inte en robot",
loading: "Laddar...",
reload: "Ladda om",
verify: "Verifiera",
verificationRequired: "Verifiering krävs!",
verified: "Verifierad",
verifying: "Verifierar...",
waitAlert: "Verifierar... vänligen vänta.",
cancel: "Avbryt",
enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan."
};
globalThis.$altcha.i18n.set("sv", i18n$n);
const i18n$m = {
ariaLinkLabel: "Altcha (resmi web sitesi)",
enterCode: "Kodu girin",
enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
footer: 'ALTCHA tarafından korunuyor <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (resmi web sitesi)">ALTCHA</a>',
getAudioChallenge: "Sesli doğrulama al",
label: "Ben robot değilim",
loading: "Yükleniyor...",
reload: "Yeniden yükle",
verify: "Doğrula",
verificationRequired: "Doğrulama gerekli!",
verified: "Doğrulandı",
verifying: "Doğrulama yapılıyor...",
waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.",
cancel: "İptal",
enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin."
};
globalThis.$altcha.i18n.set("tr", i18n$m);
const i18n$l = {
ariaLinkLabel: "Altcha (офіційний сайт)",
enterCode: "Введіть код",
enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
error: "Перевірка не вдалася. Спробуйте пізніше.",
expired: "Перевірка прострочена. Спробуйте знову.",
footer: 'Захищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (офіційний сайт)">ALTCHA</a>',
getAudioChallenge: "Отримати аудіо-челлендж",
label: "Я не робот",
loading: "Завантаження...",
reload: "Перезавантажити",
verify: "Перевірити",
verificationRequired: "Потрібна перевірка!",
verified: "Перевірено",
verifying: "Перевіряється...",
waitAlert: "Перевірка... будь ласка, зачекайте.",
cancel: "Скасувати",
enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче."
};
globalThis.$altcha.i18n.set("uk", i18n$l);
const i18n$k = {
ariaLinkLabel: "Altcha (amptelike webwerf)",
enterCode: "Voer kode in",
enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",
error: "Verifikasie het misluk. Probeer later weer.",
expired: "Verifikasie het verval. Probeer weer.",
footer: 'Beskerm deur <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (amptelike webwerf)">ALTCHA</a>',
getAudioChallenge: "Kry 'n klankuitdaging",
label: "Ek is nie 'n robot nie",
loading: "Laai...",
reload: "Laai weer",
verify: "Verifieer",
verificationRequired: "Verifikasie is vereis!",
verified: "Geverifieer",
verifying: "Verifieer...",
waitAlert: "Verifieer... wag asseblief.",
cancel: "Kanselleer",
enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."
};
globalThis.$altcha.i18n.set("af", i18n$k);
const i18n$j = {
ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)",
enterCode: "ኮድ አስገባ",
enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",
error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",
expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",
footer: 'በ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ዋናው ድህረ ገጽ)">ALTCHA</a> የተጠበቀ',
getAudioChallenge: "የድምጽ ፈተና ያግኙ",
label: "እኔ ሮቦት አይደለሁም",
loading: "በመጫን ላይ...",
reload: "እንደገና ጫን",
verify: "አረጋግጥ",
verificationRequired: "ማረጋገጫ ያስፈልጋል!",
verified: "ተረጋግጧል",
verifying: "በማረጋገጥ ላይ...",
waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",
cancel: "ይቅር",
enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"
};
globalThis.$altcha.i18n.set("am", i18n$j);
const i18n$i = {
ariaLinkLabel: "Altcha (tovuti rasmi)",
enterCode: "Weka nambari",
enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.",
error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.",
expired: "Uthibitishaji umeisha. Jaribu tena.",
footer: 'Imealindwa na <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (tovuti rasmi)">ALTCHA</a>',
getAudioChallenge: "Pata changamoto ya sauti",
label: "Mimi sio roboti",
loading: "Inapakia...",
reload: "Pakia tena",
verify: "Thibitisha",
verificationRequired: "Uthibitishaji unahitajika!",
verified: "Imethibitishwa",
verifying: "Inathibitisha...",
waitAlert: "Inathibitisha... tafadhali subiri.",
cancel: "Ghairi",
enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."
};
globalThis.$altcha.i18n.set("sw", i18n$i);
const i18n$h = {
ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)",
enterCode: "Tẹ koodu sii",
enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",
error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",
expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",
footer: 'Ti wa ni ààbò nipasẹ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oju opo wẹẹbu osise)">ALTCHA</a>',
getAudioChallenge: "Gba ìjàdú ohùn",
label: "Emi kii ṣe ẹrọ",
loading: "Ó ń gbé sílẹ̀...",
reload: "Tún gbé wọlé",
verify: "Ṣàdájọ́",
verificationRequired: "Ìdájọ́kòwò ni a nílò!",
verified: "A ti dájọ́",
verifying: "Ó ń ṣàdájọ́...",
waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",
cancel: "Fagbọsẹ",
enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."
};
globalThis.$altcha.i18n.set("yo", i18n$h);
const i18n$g = {
ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)",
enterCode: "কোড লিখুন",
enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",
error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",
expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",
footer: 'দ্বারা সুরক্ষিত <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (অফিসিয়াল ওয়েবসাইট)">ALTCHA</a>',
getAudioChallenge: "অডিও চ্যালেঞ্জ নিন",
label: "আমি রোবট নই",
loading: "লোড হচ্ছে...",
reload: "পুনরায় লোড করুন",
verify: "যাচাই করুন",
verificationRequired: "যাচাই প্রয়োজন!",
verified: "যাচাই করা হয়েছে",
verifying: "যাচাই করা হচ্ছে...",
waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",
cancel: "বাতিল করুন",
enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"
};
globalThis.$altcha.i18n.set("bn", i18n$g);
const i18n$f = {
ariaLinkLabel: "Altcha (אתר רשמי)",
enterCode: "הזן קוד",
enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",
error: "האימות נכשל. נסה שוב מאוחר יותר.",
expired: "תוקף האימות פג. נסה שוב.",
footer: 'מוגן על ידי <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (אתר רשמי)">ALTCHA</a>',
getAudioChallenge: "קבל אתגר שמע",
label: "אני לא רובוט",
loading: "טוען...",
reload: "טען מחדש",
verify: "אמת",
verificationRequired: "נדרש אימות!",
verified: "אומת",
verifying: "מאמת...",
waitAlert: "מבצע אימות... אנא המתן.",
cancel: "ביטול",
enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."
};
globalThis.$altcha.i18n.set("he", i18n$f);
const i18n$e = {
ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)",
enterCode: "कोड दर्ज करेंं",
enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",
error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",
expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",
footer: 'द्वारा संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (आधिकारिक वेबसाइट)">ALTCHA</a>',
getAudioChallenge: "ऑडियो चुनौती प्राप्त करें",
label: "मैं रोबोट नहीं हूँ",
loading: "लोड हो रहा है...",
reload: "पुनः लोड करें",
verify: "सत्यापित करें",
verificationRequired: "सत्यापन आवश्यक है!",
verified: "सत्यापित",
verifying: "सत्यापित कर रहे हैं...",
waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",
cancel: "रद्द करें",
enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"
};
globalThis.$altcha.i18n.set("hi", i18n$e);
const i18n$d = {
ariaLinkLabel: "Altcha (situs web resmi)",
enterCode: "Masukkan kode",
enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",
error: "Verifikasi gagal. Coba lagi nanti.",
expired: "Verifikasi telah kedaluwarsa. Coba lagi.",
footer: 'Dilindungi oleh <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (situs web resmi)">ALTCHA</a>',
getAudioChallenge: "Dapatkan tantangan audio",
label: "Saya bukan robot",
loading: "Memuat...",
reload: "Muat ulang",
verify: "Verifikasi",
verificationRequired: "Verifikasi diperlukan!",
verified: "Terverifikasi",
verifying: "Memverifikasi...",
waitAlert: "Memverifikasi... harap tunggu.",
cancel: "Batal",
enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."
};
globalThis.$altcha.i18n.set("id", i18n$d);
const i18n$c = {
ariaLinkLabel: "Altcha (公式ウェブサイト)",
enterCode: "コードを入力",
enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。",
error: "認証に失敗しました。後でもう一度試してください。",
expired: "認証が期限切れです。再試行してください。",
footer: '保護されています <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (公式ウェブサイト)">ALTCHA</a>',
getAudioChallenge: "音声チャレンジを取得",
label: "私はロボットではありません",
loading: "読み込み中...",
reload: "再読み込み",
verify: "確認",
verificationRequired: "認証が必要です!",
verified: "確認済み",
verifying: "確認中...",
waitAlert: "確認中...少々お待ちください。",
cancel: "キャンセル",
enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。"
};
globalThis.$altcha.i18n.set("ja", i18n$c);
const i18n$b = {
ariaLinkLabel: "Altcha (공식 웹사이트)",
enterCode: "코드 입력",
enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",
error: "인증 실패. 나중에 다시 시도해주세요.",
expired: "인증이 만료되었습니다. 다시 시도해주세요.",
footer: 'ALTCHA에서 보호됨 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (공식 웹사이트)">ALTCHA</a>',
getAudioChallenge: "오디오 챌린지 받기",
label: "저는 로봇이 아닙니다",
loading: "로딩 중...",
reload: "새로 고침",
verify: "확인",
verificationRequired: "인증이 필요합니다!",
verified: "확인됨",
verifying: "확인 중...",
waitAlert: "확인 중... 잠시만 기다려주세요.",
cancel: "취소",
enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요."
};
globalThis.$altcha.i18n.set("ko", i18n$b);
const i18n$a = {
ariaLinkLabel: "Altcha (ресми веб-сайт)",
enterCode: "Кодты енгізіңіз",
enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",
error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",
expired: "Тексеру мерзімі аяқталды. Қайталаңыз.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ресми веб-сайт)">ALTCHA</a> қорғайды',
getAudioChallenge: "Аудио сынақ алу",
label: "Мен робот емеспін",
loading: "Жүктелуде...",
reload: "Қайта жүктеу",
verify: "Тексеру",
verificationRequired: "Тексеру талап етіледі!",
verified: "Тексерілді",
verifying: "Тексеруде...",
waitAlert: "Тексерілуде... күте тұрыңыз.",
cancel: "Болдыру",
enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."
};
globalThis.$altcha.i18n.set("kk", i18n$a);
const i18n$9 = {
ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)",
enterCode: "कोड टाकाा",
enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",
error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",
expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",
footer: 'द्वारे संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (अधिकृत संकेतस्थळ)">ALTCHA</a>',
getAudioChallenge: "ऑडिओ चॅलेंज मिळवा",
label: "मी रोबोट नाही",
loading: "लोड होत आहे...",
reload: "पुन्हा लोड करा",
verify: "पुष्टीकरण करा",
verificationRequired: "पडताळणी आवश्यक आहे!",
verified: "पुष्टीकरण झाले",
verifying: "पुष्टीकरण करत आहे...",
waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",
cancel: "रद्द करा",
enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."
};
globalThis.$altcha.i18n.set("mr", i18n$9);
const i18n$8 = {
ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",
enterCode: "குறியீட்டை உள்ளிடவும்",
enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (அதிகாரப்பூர்வ வலைத்தளம்)">ALTCHA</a>',
getAudioChallenge: "ஒலி சவாலை பெறவும்",
label: "நான் ரோபோடான அல்ல",
loading: "செயலாக்கம்...",
reload: "மீண்டும் புதுப்பிக்கவும்",
verify: "சரிபார்க்கவும்",
verificationRequired: "சரிபார்ப்பு தேவை!",
verified: "சரிபார்க்கப்பட்டது",
verifying: "சரிபார்க்கப்படுகிறது...",
waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",
cancel: "ரத்துசெய்",
enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."
};
globalThis.$altcha.i18n.set("ta", i18n$8);
const i18n$7 = {
ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)",
enterCode: "కోడ్‌ని నమోదు చేయండి",
enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (అధికారిక వెబ్‌సైట్)">ALTCHA</a>',
getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
label: "నేను రోబోట్ కాదు",
loading: "లోడ్ అవుతోంది...",
reload: "మళ్ళీ లోడ్ చేయండి",
verify: "ధ్రువీకరించు",
verificationRequired: "ధృవీకరణ అవసరం!",
verified: "ధ్రువీకరించబడింది",
verifying: "ధ్రువీకరణ జరుగుతుంది...",
waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",
cancel: "రద్దు చేయండి",
enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."
};
globalThis.$altcha.i18n.set("te", i18n$7);
const i18n$6 = {
ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)",
enterCode: "ป้อนรหัส",
enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
footer: 'ป้องกันโดย <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (เว็บไซต์ทางการ)">ALTCHA</a>',
getAudioChallenge: "รับการท้าทายเสียง",
label: "ฉันไม่ใช่บอท",
loading: "กำลังโหลด...",
reload: "โหลดใหม่",
verify: "ตรวจสอบ",
verificationRequired: "จำเป็นต้องตรวจสอบ!",
verified: "ตรวจสอบแล้ว",
verifying: "กำลังตรวจสอบ...",
waitAlert: "กำลังตรวจสอบ... กรุณารอ",
cancel: "ยกเลิก",
enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"
};
globalThis.$altcha.i18n.set("th", i18n$6);
const i18n$5 = {
ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)",
enterCode: "کوڈ درج کریں",
enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (سرکاری ویب سائٹ)">ALTCHA</a>',
getAudioChallenge: "آڈیو چیلنج حاصل کریں",
label: "میں روبوٹ نہیں ہوں",
loading: "لوڈ ہو رہا ہے...",
reload: "دوبارہ لوڈ کریں",
verify: "توثیق کریں",
verificationRequired: "تصدیق ضروری ہے!",
verified: "توثیق شدہ",
verifying: "توثیق ہو رہی ہے...",
waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",
cancel: "منسوخ کریں",
enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"
};
globalThis.$altcha.i18n.set("ur", i18n$5);
const i18n$4 = {
ariaLinkLabel: "Altcha (rasmiy veb-sayt)",
enterCode: "Kodni kiriting",
enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",
error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",
expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (rasmiy veb-sayt)">ALTCHA</a> tomonidan himoyalangan',
getAudioChallenge: "Audio sinovni olish",
label: "Men robot emasman",
loading: "Yuklanmoqda...",
reload: "Qayta yuklash",
verify: "Tekshirish",
verificationRequired: "Tekshiruv talab qilinadi!",
verified: "Tekshirildi",
verifying: "Tekshirilmoqda...",
waitAlert: "Tekshirilmoqda... iltimos kuting.",
cancel: "Bekor qilish",
enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."
};
globalThis.$altcha.i18n.set("uz", i18n$4);
const i18n$3 = {
ariaLinkLabel: "Altcha (trang web chính thức)",
enterCode: "Nhập mã",
enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
error: "Xác minh thất bại. Vui lòng thử lại sau.",
expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
footer: 'Được bảo vệ bởi <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (trang web chính thức)">ALTCHA</a>',
getAudioChallenge: "Nhận thử thách âm thanh",
label: "Tôi không phải là robot",
loading: "Đang tải...",
reload: "Tải lại",
verify: "Xác minh",
verificationRequired: "Yêu cầu xác minh!",
verified: "Đã xác minh",
verifying: "Đang xác minh...",
waitAlert: "Đang xác minh... vui lòng chờ.",
cancel: "Hủy bỏ",
enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."
};
globalThis.$altcha.i18n.set("vi", i18n$3);
const i18n$2 = {
ariaLinkLabel: "Altcha (官方网站)",
enterCode: "输入代码",
enterCodeAria: "输入您听到的代码。按空格键播放音频。",
error: "验证失败。稍后再试。",
expired: "验证已过期。请重试。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方网站)">ALTCHA</a> 保护',
getAudioChallenge: "获取音频挑战",
label: "我不是机器人",
loading: "加载中...",
reload: "重新加载",
verify: "验证",
verificationRequired: "需要验证!",
verified: "已验证",
verifying: "正在验证...",
waitAlert: "正在验证... 请稍等。",
cancel: "取消",
enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。"
};
globalThis.$altcha.i18n.set("zh-cn", i18n$2);
const i18n$1 = {
ariaLinkLabel: "Altcha (官方網站)",
cancel: "取消",
enterCode: "輸入代碼",
enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。",
enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。",
error: "驗證失敗。請稍後再試。",
expired: "驗證已過期。請再試一次。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 提供保護',
getAudioChallenge: "取得音訊驗證",
label: "我唔係機械人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "驗證中...",
waitAlert: "驗證中... 請稍候。"
};
globalThis.$altcha.i18n.set("zh-hk", i18n$1);
const i18n = {
ariaLinkLabel: "Altcha (官方網站)",
enterCode: "輸入代碼",
enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
error: "驗證失敗。稍後再試。",
expired: "驗證已過期。請重試。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 保護',
getAudioChallenge: "獲取音頻挑戰",
label: "我不是機器人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "正在驗證...",
waitAlert: "正在驗證... 請稍等。",
cancel: "取消",
enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。"
};
globalThis.$altcha.i18n.set("zh-tw", i18n);
const noop = () => {
};
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function subscribe_to_store(store2, run, invalidate) {
if (store2 == null) {
run(void 0);
return noop;
}
const unsub = untrack(
() => store2.subscribe(
run,
// @ts-expect-error
invalidate
)
);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
const subscriber_queue = [];
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function get(store2) {
let value;
subscribe_to_store(store2, (_) => value = _)();
return value;
}
let untracking = false;
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
function store(defaultValue) {
const scope = {
get: (name) => {
return get(scope.store)[name];
},
set: (name, value) => {
if (typeof name === "string") {
Object.assign(get(scope.store), {
[name]: value
});
} else {
Object.assign(get(scope.store), name);
}
scope.store.set(get(scope.store));
},
store: writable(defaultValue)
};
return scope;
}
globalThis.$altcha = globalThis.$altcha || {
algorithms: /* @__PURE__ */ new Map(),
defaults: store({}),
i18n: store({}),
instances: /* @__PURE__ */ new Set(),
plugins: /* @__PURE__ */ new Set()
};
const i18n$Y = {
ariaLinkLabel: "Altcha (الموقع الرسمي)",
enterCode: "أدخل الرمز",
enterCodeAria: "أدخل الرمز الذي تسمعه. اضغط على المسافة لتشغيل الصوت.",
error: "فشل التحقق. حاول مرة أخرى لاحقاً.",
expired: "انتهت صلاحية التحقق. حاول مرة أخرى.",
footer: 'محمي بواسطة <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (الموقع الرسمي)">ALTCHA</a>',
getAudioChallenge: "احصل على تحدي صوتي",
label: "أنا لست روبوتاً",
loading: "جارٍ التحميل...",
reload: "إعادة تحميل",
verify: "تحقق",
verificationRequired: "مطلوب التحقق!",
verified: "تم التحقق",
verifying: "جارٍ التحقق...",
waitAlert: "جارٍ التحقق... يرجى الانتظار.",
cancel: "إلغاء",
enterCodeFromImage: "للمتابعة، يرجى إدخال الرمز من الصورة أدناه."
};
globalThis.$altcha.i18n.set("ar", i18n$Y);
const i18n$X = {
ariaLinkLabel: "Altcha (официален уебсайт)",
enterCode: "Въведете код",
enterCodeAria: "Въведете кода, който чувате. Натиснете Space за възпроизвеждане на аудио.",
error: "Проверката неуспешна. Моля, опитайте по-късно.",
expired: "Времето за проверка изтече. Моля, опитайте отново.",
footer: 'Защитено от <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официален уебсайт)">ALTCHA</a>',
getAudioChallenge: "Аудио проверка",
label: "Аз не съм робот",
loading: "Зареждане...",
reload: "Презареди",
verify: "Провери",
verificationRequired: "Изисква се проверка!",
verified: "Проверено",
verifying: "Проверява се...",
waitAlert: "Проверката е в процес... моля изчакайте.",
cancel: "Отказ",
enterCodeFromImage: "За да продължите, моля, въведете кода от изображението по-долу."
};
globalThis.$altcha.i18n.set("bg", i18n$X);
const i18n$W = {
ariaLinkLabel: "Altcha (афіцыйны сайт)",
enterCode: "Увядзіце код",
enterCodeAria: "Увядзіце код, які вы чуеце. Націсніце прабел, каб прайграць аўдыё.",
error: "Праверка не прайшла. Паспрабуйце пазней.",
expired: "Тэрмін праверкі скончыўся. Паспрабуйце зноў.",
footer: 'Абаронена <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (афіцыйны сайт)">ALTCHA</a>',
getAudioChallenge: "Атрымаць аўдыё выклік",
label: "Я не робат",
loading: "Загрузка...",
reload: "Перазагрузіць",
verify: "Праверыць",
verificationRequired: "Патрабуецца праверка!",
verified: "Праверана",
verifying: "Правяраем...",
waitAlert: "Праверка... калі ласка, пачакайце.",
cancel: "Скасаваць",
enterCodeFromImage: "Каб працягнуць, увядзіце код з малюнка ніжэй."
};
globalThis.$altcha.i18n.set("be", i18n$W);
const i18n$V = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspjela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak, molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("bs", i18n$V);
const i18n$U = {
ariaLinkLabel: "Altcha (lloc web oficial)",
enterCode: "Introdueix el codi",
enterCodeAria: "Introdueix el codi que escoltes. Prem Espai per reproduir l’àudio.",
error: "Verificació fallida. Torna-ho a provar més tard.",
expired: "Verificació expirada. Torna-ho a provar.",
footer: 'Protegit per <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (lloc web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtenir un desafiament d’àudio",
label: "No sóc un robot",
loading: "Carregant...",
reload: "Torna a carregar",
verify: "Verificar",
verificationRequired: "Es requereix verificació!",
verified: "Verificat",
verifying: "Verificant...",
waitAlert: "Verificant... si us plau, espera.",
cancel: "Cancel·la",
enterCodeFromImage: "Per continuar, si us plau, introdueix el codi de la imatge següent."
};
globalThis.$altcha.i18n.set("ca", i18n$U);
const i18n$T = {
ariaLinkLabel: "Altcha (oficiální web)",
enterCode: "Zadejte kód",
enterCodeAria: "Zadejte kód, který slyšíte. Stisknutím mezerníku přehrajete zvuk.",
error: "Ověření selhalo. Zkuste to prosím později.",
expired: "Ověření vypršelo. Zkuste to prosím znovu.",
footer: 'Chráněno pomocí <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiální web)">ALTCHA</a>',
getAudioChallenge: "Získat audio výzvu",
label: "Nejsem robot",
loading: "Načítání...",
reload: "Znovu načíst",
verify: "Ověřit",
verificationRequired: "Vyžaduje se ověření!",
verified: "Ověřeno",
verifying: "Ověřování...",
waitAlert: "Probíhá ověření... prosím počkejte.",
cancel: "Zrušit",
enterCodeFromImage: "Pro pokračování zadejte kód z obrázku níže."
};
globalThis.$altcha.i18n.set("cs", i18n$T);
const i18n$S = {
ariaLinkLabel: "Altcha (officiel hjemmeside)",
enterCode: "Indtast kode",
enterCodeAria: "Indtast den kode, du hører. Tryk på mellemrumstasten for at afspille lyd.",
error: "Verificering mislykkedes. Prøv venligst igen senere.",
expired: "Verificering udløbet. Prøv venligst igen.",
footer: 'Beskyttet af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiel hjemmeside)">ALTCHA</a>',
getAudioChallenge: "Hent lydudfordring",
label: "Jeg er ikke en robot",
loading: "Indlæser...",
reload: "Genindlæs",
verify: "Verificer",
verificationRequired: "Verificering kræves!",
verified: "Verificeret",
verifying: "Verificerer...",
waitAlert: "Verificerer... vent venligst.",
cancel: "Annuller",
enterCodeFromImage: "For at fortsætte, bedes du indtaste koden fra billedet herunder."
};
globalThis.$altcha.i18n.set("da", i18n$S);
const i18n$R = {
ariaLinkLabel: "Altcha (offizielle Website)",
enterCode: "Code eingeben",
enterCodeAria: "Geben Sie den Code ein, den Sie hören. Drücken Sie die Leertaste, um die Audio abzuspielen.",
error: "Überprüfung fehlgeschlagen. Bitte versuchen Sie es später erneut.",
expired: "Überprüfung abgelaufen. Bitte versuchen Sie es erneut.",
footer: 'Geschützt durch <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offizielle Website)">ALTCHA</a>',
getAudioChallenge: "Audio-Herausforderung anfordern",
label: "Ich bin kein Roboter",
loading: "Lade...",
reload: "Neu laden",
verify: "Überprüfen",
verificationRequired: "Überprüfung erforderlich!",
verified: "Überprüft",
verifying: "Wird überprüft...",
waitAlert: "Überprüfung läuft... bitte warten.",
cancel: "Abbrechen",
enterCodeFromImage: "Um fortzufahren, geben Sie bitte den Code aus dem Bild unten ein."
};
globalThis.$altcha.i18n.set("de", i18n$R);
const i18n$Q = {
ariaLinkLabel: "Altcha (επίσημος ιστότοπος)",
enterCode: "Εισαγάγετε κωδικό",
enterCodeAria: "Εισαγάγετε τον κωδικό που ακούτε. Πατήστε Space για να παίξετε τον ήχο.",
error: "Η επαλήθευση απέτυχε. Δοκιμάστε ξανά αργότερα.",
expired: "Η επαλήθευση έληξε. Δοκιμάστε ξανά.",
footer: 'Προστατεύεται από το <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (επίσημος ιστότοπος)">ALTCHA</a>',
getAudioChallenge: "Λήψη ηχητικής δοκιμασίας",
label: "Δεν είμαι ρομπότ",
loading: "Φόρτωση...",
reload: "Επαναφόρτωση",
verify: "Επαλήθευση",
verificationRequired: "Απαιτείται έλεγχος!",
verified: "Επαληθεύτηκε",
verifying: "Γίνεται επαλήθευση...",
waitAlert: "Γίνεται επαλήθευση... παρακαλώ περιμένετε.",
cancel: "Ακύρωση",
enterCodeFromImage: "Για να συνεχίσετε, εισάγετε τον κωδικό από την παρακάτω εικόνα."
};
globalThis.$altcha.i18n.set("el", i18n$Q);
const i18n$P = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Introduce el código",
enterCodeAria: "Introduce el código que escuchas. Pulsa Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor intente nuevamente más tarde.",
expired: "Verificación expirada. Por favor intente nuevamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un desafío de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Recargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espere.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, introduzca el código de la imagen de abajo."
};
globalThis.$altcha.i18n.set("es-es", i18n$P);
const i18n$O = {
ariaLinkLabel: "Altcha (sitio web oficial)",
enterCode: "Ingresa el código",
enterCodeAria: "Ingresa el código que escuchas. Presiona Espacio para reproducir el audio.",
error: "Falló la verificación. Por favor vuelve a intentarlo más tarde.",
expired: "La verificación expiró. Por favor inténtalo de nuevo.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sitio web oficial)">ALTCHA</a>',
getAudioChallenge: "Obtener un reto de audio",
label: "No soy un robot",
loading: "Cargando...",
reload: "Volver a cargar",
verify: "Verificar",
verificationRequired: "¡Verificación requerida!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor espera.",
cancel: "Cancelar",
enterCodeFromImage: "Para continuar, ingresa el código de la imagen a continuación."
};
globalThis.$altcha.i18n.set("es-419", i18n$O);
const i18n$N = {
ariaLinkLabel: "Altcha (ametlik veebisait)",
enterCode: "Sisesta kood",
enterCodeAria: "Sisestage kuuldu kood. Vajutage tühikut, et esitada heli.",
error: "Kinnitamine ebaõnnestus. Proovi hiljem uuesti.",
expired: "Kinnitamine aegus. Proovi uuesti.",
footer: 'Kaitstud <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ametlik veebisait)">ALTCHA</a> poolt',
getAudioChallenge: "Hangi heliülesanne",
label: "Ma ei ole robot",
loading: "Laadimine...",
reload: "Laadi uuesti",
verify: "Kinnita",
verificationRequired: "Kontroll on vajalik!",
verified: "Kinnitatud",
verifying: "Kinnitamine...",
waitAlert: "Kinnitamine... palun oota.",
cancel: "Tühista",
enterCodeFromImage: "Jätkamiseks sisestage alloleval pildil olev kood."
};
globalThis.$altcha.i18n.set("et", i18n$N);
const i18n$M = {
ariaLinkLabel: "Altcha (webgune ofiziala)",
enterCode: "Sartu kodea",
enterCodeAria: "Sartu entzun duzun kodea. Sakatu Espazioa audioa erreproduzitzeko.",
error: "Egiaztatzeak huts egin du. Saiatu berriro geroago.",
expired: "Egiaztatzea iraungi da. Saiatu berriro.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (webgune ofiziala)">ALTCHA</a>k babestuta',
getAudioChallenge: "Jaso audio-erronka bat",
label: "Ez naiz robot bat",
loading: "Kargatzen...",
reload: "Birkargatu",
verify: "Egiaztatu",
verificationRequired: "Egiaztatzea beharrezkoa da!",
verified: "Egiaztatuta",
verifying: "Egiaztatzen...",
waitAlert: "Egiaztatzen... itxaron mesedez.",
cancel: "Utzi",
enterCodeFromImage: "Jarraitzeko, idatzi beheko irudiko kodea."
};
globalThis.$altcha.i18n.set("eu", i18n$M);
const i18n$L = {
ariaLinkLabel: "Altcha (وب‌سایت رسمی)",
enterCode: "کد را وارد کنید",
enterCodeAria: "کدی که می‌شنوید را وارد کنید. برای پخش صدا Space را فشار دهید.",
error: "احراز هویت ناموفق بود. بعداً دوباره تلاش کنید.",
expired: "احراز هویت منقضی شد. دوباره تلاش کنید.",
footer: 'محافظت شده توسط <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (وب‌سایت رسمی)">ALTCHA</a>',
getAudioChallenge: "دریافت چالش صوتی",
label: "من ربات نیستم",
loading: "در حال بارگذاری...",
reload: "بارگذاری مجدد",
verify: "تایید",
verificationRequired: "احراز هویت لازم است!",
verified: "تایید شد",
verifying: "در حال تایید...",
waitAlert: "در حال تایید... لطفا منتظر بمانید.",
cancel: "لغو کردن",
enterCodeFromImage: "برای ادامه، لطفاً کد تصویر زیر را وارد کنید."
};
globalThis.$altcha.i18n.set("fa", i18n$L);
const i18n$K = {
ariaLinkLabel: "Altcha (offiziell Websäit)",
enterCode: "Code aginn",
enterCodeAria: "Gitt de Code an deen dir héiert. Dréckt op d'Weltraumtast fir Audio ofzespillen.",
error: "Verifikatioun ass feelgeschloen. Probéiert méi spéit nach emol.",
expired: "Verifikatioun ofgelaf. Probéiert nach emol.",
footer: 'Geschützt vun <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offiziell Websäit)">ALTCHA</a>',
getAudioChallenge: "Kritt eng Audio-Herausfuerderung",
label: "Ech sinn keen Robot",
loading: "Lueden...",
reload: "Nei lueden",
verify: "Verifizéieren",
verificationRequired: "Verifikatioun néideg!",
verified: "Verifizéiert",
verifying: "Verifizéieren...",
waitAlert: "Verifizéieren... waart wgl.",
cancel: "Ofbriechen",
enterCodeFromImage: "Fir virun ze fueren, gitt wgl. de Code aus dem Bild hei drënner an."
};
globalThis.$altcha.i18n.set("lb", i18n$K);
const i18n$J = {
ariaLinkLabel: "Altcha (virallinen verkkosivusto)",
enterCode: "Syötä koodi",
enterCodeAria: "Kirjoita kuulemasi koodi. Paina välilyöntiä toistaaksesi äänen.",
error: "Varmennus epäonnistui. Yritä myöhemmin uudelleen.",
expired: "Varmennus vanhentui. Yritä uudelleen.",
footer: 'Suojattu <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (virallinen verkkosivusto)">ALTCHA</a>:lla',
getAudioChallenge: "Hae äänitehtävä",
label: "En ole robotti",
loading: "Ladataan...",
reload: "Lataa uudelleen",
verify: "Vahvista",
verificationRequired: "Vahvistus vaaditaan!",
verified: "Vahvistettu",
verifying: "Vahvistetaan...",
waitAlert: "Vahvistetaan... odota hetki.",
cancel: "Peruuta",
enterCodeFromImage: "Jatkaaksesi, syötä alla olevan kuvan koodi."
};
globalThis.$altcha.i18n.set("fi", i18n$J);
const i18n$I = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur la barre d'espace pour écouter l'audio.",
error: "Échec de la vérification. Réessayez plus tard.",
expired: "La vérification a expiré. Réessayez.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-ca", i18n$I);
const i18n$H = {
ariaLinkLabel: "Altcha (site officiel)",
enterCode: "Entrez le code",
enterCodeAria: "Entrez le code que vous entendez. Appuyez sur Espace pour écouter l'audio.",
error: "Échec de la vérification. Essayez à nouveau plus tard.",
expired: "La vérification a expiré. Essayez à nouveau.",
footer: 'Protégé par <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site officiel)">ALTCHA</a>',
getAudioChallenge: "Obtenir un défi audio",
label: "Je ne suis pas un robot",
loading: "Chargement...",
reload: "Recharger",
verify: "Vérifier",
verificationRequired: "Vérification requise !",
verified: "Vérifié",
verifying: "Vérification en cours...",
waitAlert: "Vérification en cours... veuillez patienter.",
cancel: "Annuler",
enterCodeFromImage: "Pour continuer, veuillez entrer le code de l'image ci-dessous."
};
globalThis.$altcha.i18n.set("fr-fr", i18n$H);
const i18n$G = {
ariaLinkLabel: "Altcha (láithreán gréasáin oifigiúil)",
enterCode: "Iontráil cód",
enterCodeAria: "Cuir isteach an cód a chloiseann tú. Brúigh Spás chun an fuaime a sheinm.",
error: "Theip ar an bhfíorú. Bain triail eile as níos déanaí.",
expired: "Tá an fíorú as feidhm. Bain triail eile as.",
footer: 'Cosanta ag <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (láithreán gréasáin oifigiúil)">ALTCHA</a>',
getAudioChallenge: "Faigh dúshlán fuaime",
label: "Níl mé i mo róbat",
loading: "Á luchtú...",
reload: "Athluchtaigh",
verify: "Fíoraigh",
verificationRequired: "Fíorú riachtanach!",
verified: "Fíoraithe",
verifying: "Fíorú ar siúl...",
waitAlert: "Fíorú ar siúl... fan go fóill.",
cancel: "Cealaigh",
enterCodeFromImage: "Chun dul ar aghaidh, le do thoil cuir isteach an cód ón íomhá thíos."
};
globalThis.$altcha.i18n.set("ga", i18n$G);
const i18n$F = {
ariaLinkLabel: "Altcha (službena web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite razmaknicu za reprodukciju zvuka.",
error: "Provjera nije uspjela. Molimo pokušajte kasnije.",
expired: "Provjera je istekla. Molimo pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (službena web stranica)">ALTCHA</a>',
getAudioChallenge: "Audio provjera",
label: "Ja nisam robot",
loading: "Učitavanje...",
reload: "Ponovno učitaj",
verify: "Provjeri",
verificationRequired: "Potrebna je provjera!",
verified: "Provjereno",
verifying: "Provjeravanje...",
waitAlert: "Provjera je u tijeku... molimo pričekajte.",
cancel: "Odustani",
enterCodeFromImage: "Za nastavak molimo unesite kod sa slike ispod."
};
globalThis.$altcha.i18n.set("hr", i18n$F);
const i18n$E = {
ariaLinkLabel: "Altcha (hivatalos weboldal)",
enterCode: "Írja be a kódot",
enterCodeAria: "Írja be a hallott kódot. Nyomja meg a Szóköz billentyűt a hang lejátszásához.",
error: "A hitelesítés nem sikerült. Próbáld meg később újra.",
expired: "A hitelesítés lejárt. Próbáld újra.",
footer: 'Védve a következő által: <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (hivatalos weboldal)">ALTCHA</a>',
getAudioChallenge: "Hangalapú kihívás kérése",
label: "Nem vagyok robot",
loading: "Betöltés...",
reload: "Újratöltés",
verify: "Ellenőrzés",
verificationRequired: "Ellenőrzés szükséges!",
verified: "Ellenőrizve",
verifying: "Ellenőrzés folyamatban...",
waitAlert: "Ellenőrzés folyamatban... kérlek várj.",
cancel: "Mégse",
enterCodeFromImage: "A folytatáshoz, kérjük, adja meg az alábbi kép kódját."
};
globalThis.$altcha.i18n.set("hu", i18n$E);
const i18n$D = {
ariaLinkLabel: "Altcha (opinber vefsíða)",
enterCode: "Sláðu inn kóða",
enterCodeAria: "Sláðu inn kóðann sem þú heyrir. Ýttu á Space til að spila hljóðið.",
error: "Staðfesting mistókst. Reyndu aftur síðar.",
expired: "Staðfesting er útrunnin. Reyndu aftur.",
footer: 'Verndað af <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (opinber vefsíða)">ALTCHA</a>',
getAudioChallenge: "Fá hljóðáskorun",
label: "Ég er ekki robot",
loading: "Hleður...",
reload: "Hleð aftur",
verify: "Staðfesta",
verificationRequired: "Staðfesting er nauðsynleg!",
verified: "Staðfest",
verifying: "Að staðfesta...",
waitAlert: "Að staðfesta... vinsamlegast bíða.",
cancel: "Hætta við",
enterCodeFromImage: "Til að halda áfram, vinsamlegast sláðu inn kóðann af myndinni hér að neðan."
};
globalThis.$altcha.i18n.set("is", i18n$D);
const i18n$C = {
ariaLinkLabel: "Altcha (sito ufficiale)",
enterCode: "Inserisci il codice",
enterCodeAria: "Inserisci il codice che senti. Premi Spazio per riprodurre l'audio.",
error: "Verifica fallita. Riprova più tardi.",
expired: "Verifica scaduta. Riprova.",
footer: 'Protetto da <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sito ufficiale)">ALTCHA</a>',
getAudioChallenge: "Ottieni una sfida audio",
label: "Non sono un robot",
loading: "Caricamento...",
reload: "Ricarica",
verify: "Verifica",
verificationRequired: "Verifica richiesta!",
verified: "Verificato",
verifying: "Verifica in corso...",
waitAlert: "Verifica in corso... attendere.",
cancel: "Annulla",
enterCodeFromImage: "Per procedere, inserisci il codice dall'immagine sottostante."
};
globalThis.$altcha.i18n.set("it", i18n$C);
const i18n$B = {
ariaLinkLabel: "Altcha (oficiali svetainė)",
enterCode: "Įveskite kodą",
enterCodeAria: "Įveskite girdimą kodą. Paspauskite tarpo klavišą, kad grotumėte garso įrašą.",
error: "Patvirtinimas nepavyko. Bandykite vėliau.",
expired: "Patvirtinimo laikas baigėsi. Bandykite dar kartą.",
footer: 'Apsaugota <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiali svetainė)">ALTCHA</a>',
getAudioChallenge: "Gauti garso užduotį",
label: "Aš nesu robotas",
loading: "Įkeliama...",
reload: "Įkelti iš naujo",
verify: "Patvirtinti",
verificationRequired: "Reikalingas patvirtinimas!",
verified: "Patvirtinta",
verifying: "Tikrinama...",
waitAlert: "Tikrinama... prašome palaukti.",
cancel: "Atšaukti",
enterCodeFromImage: "Norėdami tęsti, įveskite kodą iš paveikslėlio žemiau."
};
globalThis.$altcha.i18n.set("lt", i18n$B);
const i18n$A = {
ariaLinkLabel: "Altcha (oficiālā tīmekļa vietne)",
enterCode: "Ievadiet kodu",
enterCodeAria: "Ievadiet dzirdamo kodu. Nospiediet atstarpes taustiņu, lai atskaņotu audio.",
error: "Verifikācija neizdevās. Mēģiniet vēlāk vēlreiz.",
expired: "Verifikācijas laiks ir beidzies. Mēģiniet vēlreiz.",
footer: 'Aizsargāts ar <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiālā tīmekļa vietne)">ALTCHA</a>',
getAudioChallenge: "Saņemt audio izaicinājumu",
label: "Es neesmu robots",
loading: "Notiek ielāde...",
reload: "Pārlādēt",
verify: "Verificēt",
verificationRequired: "Nepieciešama verifikācija!",
verified: "Verificēts",
verifying: "Notiek verifikācija...",
waitAlert: "Notiek verifikācija... lūdzu, uzgaidiet.",
cancel: "Atcelt",
enterCodeFromImage: "Lai turpinātu, lūdzu, ievadiet zemāk redzamo attēlu kodu."
};
globalThis.$altcha.i18n.set("lv", i18n$A);
const i18n$z = {
ariaLinkLabel: "Altcha (sit uffiċjali)",
enterCode: "Idħol il-kodiċi",
enterCodeAria: "Idħol il-kodiċi li tisma'. Agħfas Spazju biex tindaqq l-awdjo.",
error: "Il-verifika falliet. Erġa’ pprova aktar tard.",
expired: "Il-verifika skadiet. Erġa’ pprova.",
footer: 'Protett minn <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (sit uffiċjali)">ALTCHA</a>',
getAudioChallenge: "Ikseb sfida bl-awdjo",
label: "M’inix robot",
loading: "Qed jitgħabba...",
reload: "Ittella’ mill-ġdid",
verify: "Ivverifika",
verificationRequired: "Verifika meħtieġa!",
verified: "Ivverifikat",
verifying: "Verifika għaddejja...",
waitAlert: "Verifika għaddejja... stenna ftit.",
cancel: "Ikkanċella",
enterCodeFromImage: "Biex tipproċedi, jekk jogħġbok daħħal il-kodiċi mill-immaġni hawn taħt."
};
globalThis.$altcha.i18n.set("mt", i18n$z);
const i18n$y = {
ariaLinkLabel: "Altcha (offisiell nettside)",
enterCode: "Skriv inn kode",
enterCodeAria: "Skriv inn koden du hører. Trykk på Space for å spille av lyden.",
error: "Verifisering mislyktes. Prøv igjen senere.",
expired: "Verifiseringen utløp. Prøv igjen.",
footer: 'Beskyttet av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (offisiell nettside)">ALTCHA</a>',
getAudioChallenge: "Få en lydutfordring",
label: "Jeg er ikke en robot",
loading: "Laster...",
reload: "Last på nytt",
verify: "Verifiser",
verificationRequired: "Verifisering kreves!",
verified: "Verifisert",
verifying: "Verifiserer...",
waitAlert: "Verifiserer... vennligst vent.",
cancel: "Avbryt",
enterCodeFromImage: "For å fortsette, vennligst skriv inn koden fra bildet nedenfor."
};
globalThis.$altcha.i18n.set("nb", i18n$y);
const i18n$x = {
ariaLinkLabel: "Altcha (officiële website)",
enterCode: "Voer code in",
enterCodeAria: "Voer de code in die je hoort. Druk op Spatie om de audio af te spelen.",
error: "Verificatie mislukt. Probeer het later opnieuw.",
expired: "Verificatie verlopen. Probeer het opnieuw.",
footer: 'Beschermd door <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiële website)">ALTCHA</a>',
getAudioChallenge: "Audio-uitdaging ontvangen",
label: "Ik ben geen robot",
loading: "Laden...",
reload: "Herladen",
verify: "Verifiëren",
verificationRequired: "Verificatie vereist!",
verified: "Geverifieerd",
verifying: "Bezig met verifiëren...",
waitAlert: "Bezig met verifiëren... even geduld a.u.b.",
cancel: "Annuleren",
enterCodeFromImage: "Om door te gaan, voert u de code uit de onderstaande afbeelding in."
};
globalThis.$altcha.i18n.set("nl", i18n$x);
const i18n$w = {
ariaLinkLabel: "Altcha (oficjalna strona internetowa)",
enterCode: "Wprowadź kod",
enterCodeAria: "Wpisz kod, który słyszysz. Naciśnij Spację, aby odtworzyć dźwięk.",
error: "Weryfikacja nie powiodła się. Spróbuj ponownie później.",
expired: "Weryfikacja wygasła. Spróbuj ponownie.",
footer: 'Chronione przez <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficjalna strona internetowa)">ALTCHA</a>',
getAudioChallenge: "Pobierz zadanie dźwiękowe",
label: "Nie jestem robotem",
loading: "Ładowanie...",
reload: "Odśwież",
verify: "Zweryfikuj",
verificationRequired: "Wymagana weryfikacja!",
verified: "Zweryfikowano",
verifying: "Weryfikacja...",
waitAlert: "Trwa weryfikacja... proszę czekać.",
cancel: "Anuluj",
enterCodeFromImage: "Aby kontynuować, wprowadź kod z poniższego obrazka."
};
globalThis.$altcha.i18n.set("pl", i18n$w);
const i18n$v = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduza o código",
enterCodeAria: "Introduza o código que ouve. Prima Espaço para reproduzir o áudio.",
error: "A verificação falhou. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Não sou um robô",
loading: "A carregar...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "A verificar...",
waitAlert: "A verificar... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, introduza o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-pt", i18n$v);
const i18n$u = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Digite o código",
enterCodeAria: "Digite o código que você ouve. Pressione Espaço para reproduzir o áudio.",
error: "Falha na verificação. Por favor, tente novamente mais tarde.",
expired: "Verificação expirada. Por favor, tente novamente.",
footer: 'Protegido por <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obter desafio de áudio",
label: "Eu não sou um robô",
loading: "Carregando...",
reload: "Recarregar",
verify: "Verificar",
verificationRequired: "Verificação necessária!",
verified: "Verificado",
verifying: "Verificando...",
waitAlert: "Verificando... por favor aguarde.",
cancel: "Cancelar",
enterCodeFromImage: "Para prosseguir, digite o código da imagem abaixo."
};
globalThis.$altcha.i18n.set("pt-br", i18n$u);
const i18n$t = {
ariaLinkLabel: "Altcha (site oficial)",
enterCode: "Introduceți codul",
enterCodeAria: "Introduceți codul pe care îl auziți. Apăsați Spațiu pentru a reda audio.",
error: "Verificarea a eșuat. Încearcă din nou mai târziu.",
expired: "Verificarea a expirat. Încearcă din nou.",
footer: 'Protejat de <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (site oficial)">ALTCHA</a>',
getAudioChallenge: "Obține o provocare audio",
label: "Nu sunt un robot",
loading: "Se încarcă...",
reload: "Reîncarcă",
verify: "Verifică",
verificationRequired: "Verificare necesară!",
verified: "Verificat",
verifying: "Se verifică...",
waitAlert: "Se verifică... te rugăm să aștepți.",
cancel: "Anulare",
enterCodeFromImage: "Pentru a continua, vă rugăm să introduceți codul din imaginea de mai jos."
};
globalThis.$altcha.i18n.set("ro", i18n$t);
const i18n$s = {
ariaLinkLabel: "Altcha (официальный сайт)",
enterCode: "Введите код",
enterCodeAria: "Введите код, который слышите. Нажмите пробел для воспроизведения аудио.",
error: "Ошибка верификации. Попробуйте позже.",
expired: "Срок действия верификации истек. Попробуйте снова.",
footer: 'Защищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (официальный сайт)">ALTCHA</a>',
getAudioChallenge: "Получить аудио задачу",
label: "Я не робот",
loading: "Загрузка...",
reload: "Перезагрузить",
verify: "Проверить",
verificationRequired: "Требуется проверка!",
verified: "Проверено",
verifying: "Идет проверка...",
waitAlert: "Идет проверка... Пожалуйста, подождите.",
cancel: "Отмена",
enterCodeFromImage: "Чтобы продолжить, пожалуйста, введите код с изображения ниже."
};
globalThis.$altcha.i18n.set("ru", i18n$s);
const i18n$r = {
ariaLinkLabel: "Altcha (oficiálna webová stránka)",
enterCode: "Zadajte kód",
enterCodeAria: "Zadajte kód, ktorý počujete. Stlačením medzerníka prehráte zvuk.",
error: "Verifikácia zlyhala. Skúste to znova neskôr.",
expired: "Verifikácia vypršala. Skúste to znova.",
footer: 'Chránené <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oficiálna webová stránka)">ALTCHA</a>',
getAudioChallenge: "Získať audio výzvu",
label: "Nie som robot",
loading: "Načítava sa...",
reload: "Obnoviť",
verify: "Verifikovať",
verificationRequired: "Vyžaduje sa overenie!",
verified: "Verifikované",
verifying: "Prebieha verifikácia...",
waitAlert: "Prebieha verifikácia... prosím čakajte.",
cancel: "Zrušiť",
enterCodeFromImage: "Na pokračovanie, prosím, zadajte kód z obrázka nižšie."
};
globalThis.$altcha.i18n.set("sk", i18n$r);
const i18n$q = {
ariaLinkLabel: "Altcha (uradna spletna stran)",
enterCode: "Vnesite kodo",
enterCodeAria: "Vnesite kodo, ki jo slišite. Pritisnite preslednico za predvajanje zvoka.",
error: "Preverjanje ni uspelo. Poskusite znova kasneje.",
expired: "Preverjanje je poteklo. Poskusite znova.",
footer: 'Zaščiteno z <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (uradna spletna stran)">ALTCHA</a>',
getAudioChallenge: "Pridobite zvočni izziv",
label: "Nisem robot",
loading: "Nalagam...",
reload: "Ponovno naloži",
verify: "Preveri",
verificationRequired: "Potrebna je preveritev!",
verified: "Preverjeno",
verifying: "Preverjanje...",
waitAlert: "Preverjanje... prosim počakajte.",
cancel: "Preklic",
enterCodeFromImage: "Za nadaljevanje, prosimo, vnesite kodo s slike spodaj."
};
globalThis.$altcha.i18n.set("sl", i18n$q);
const i18n$p = {
ariaLinkLabel: "Altcha (faqja zyrtare)",
enterCode: "Fut kodin",
enterCodeAria: "Fut kodin që dëgjon. Shtypni Hapësirë për të luajtur audio.",
error: "Verifikimi dështoi. Provoni përsëri më vonë.",
expired: "Verifikimi ka skaduar. Provoni përsëri.",
footer: 'I mbrojtur nga <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (faqja zyrtare)">ALTCHA</a>',
getAudioChallenge: "Merr një sfidë audio",
label: "Unë nuk jam një robot",
loading: "Duke u ngarkuar...",
reload: "Ringarko",
verify: "Verifiko",
verificationRequired: "Kërkohet verifikimi!",
verified: "I verifikuar",
verifying: "Duke verifikuar...",
waitAlert: "Duke verifikuar... ju lutem prisni.",
cancel: "Anuloje",
enterCodeFromImage: "Për të vazhduar, ju lutemi fusni kodin nga imazhi më poshtë."
};
globalThis.$altcha.i18n.set("sq", i18n$p);
const i18n$o = {
ariaLinkLabel: "Altcha (zvanična web stranica)",
enterCode: "Unesite kod",
enterCodeAria: "Unesite kod koji čujete. Pritisnite Space da biste pustili zvuk.",
error: "Verifikacija nije uspela. Pokušajte ponovo kasnije.",
expired: "Verifikacija je istekla. Pokušajte ponovo.",
footer: 'Zaštićeno od strane <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (zvanična web stranica)">ALTCHA</a>',
getAudioChallenge: "Dohvatite audio izazov",
label: "Nisam robot",
loading: "Učitavanje...",
reload: "Ponovo učitaj",
verify: "Verifikuj",
verificationRequired: "Verifikacija je obavezna!",
verified: "Verifikovano",
verifying: "Verifikacija u toku...",
waitAlert: "Verifikacija u toku... molimo vas da sačekate.",
cancel: "Откажи",
enterCodeFromImage: "Да бисте наставили, унесите код са слике испод."
};
globalThis.$altcha.i18n.set("sr", i18n$o);
const i18n$n = {
ariaLinkLabel: "Altcha (officiell webbplats)",
enterCode: "Ange kod",
enterCodeAria: "Ange koden du hör. Tryck på mellanslag för att spela upp ljudet.",
error: "Verifiering misslyckades. Försök igen senare.",
expired: "Verifieringen har gått ut. Försök igen.",
footer: 'Skyddad av <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (officiell webbplats)">ALTCHA</a>',
getAudioChallenge: "Få ljudutmaning",
label: "Jag är inte en robot",
loading: "Laddar...",
reload: "Ladda om",
verify: "Verifiera",
verificationRequired: "Verifiering krävs!",
verified: "Verifierad",
verifying: "Verifierar...",
waitAlert: "Verifierar... vänligen vänta.",
cancel: "Avbryt",
enterCodeFromImage: "För att fortsätta, ange koden från bilden nedan."
};
globalThis.$altcha.i18n.set("sv", i18n$n);
const i18n$m = {
ariaLinkLabel: "Altcha (resmi web sitesi)",
enterCode: "Kodu girin",
enterCodeAria: "Duyduğunuz kodu girin. Ses dosyasını oynatmak için Boşluk tuşuna basın.",
error: "Doğrulama başarısız oldu. Lütfen daha sonra tekrar deneyin.",
expired: "Doğrulama süresi doldu. Lütfen tekrar deneyin.",
footer: 'ALTCHA tarafından korunuyor <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (resmi web sitesi)">ALTCHA</a>',
getAudioChallenge: "Sesli doğrulama al",
label: "Ben robot değilim",
loading: "Yükleniyor...",
reload: "Yeniden yükle",
verify: "Doğrula",
verificationRequired: "Doğrulama gerekli!",
verified: "Doğrulandı",
verifying: "Doğrulama yapılıyor...",
waitAlert: "Doğrulama yapılıyor... lütfen bekleyin.",
cancel: "İptal",
enterCodeFromImage: "Devam etmek için lütfen aşağıdaki resimdeki kodu girin."
};
globalThis.$altcha.i18n.set("tr", i18n$m);
const i18n$l = {
ariaLinkLabel: "Altcha (офіційний сайт)",
enterCode: "Введіть код",
enterCodeAria: "Введіть код, який ви чуєте. Натисніть пробіл, щоб відтворити аудіо.",
error: "Перевірка не вдалася. Спробуйте пізніше.",
expired: "Перевірка прострочена. Спробуйте знову.",
footer: 'Захищено <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (офіційний сайт)">ALTCHA</a>',
getAudioChallenge: "Отримати аудіо-челлендж",
label: "Я не робот",
loading: "Завантаження...",
reload: "Перезавантажити",
verify: "Перевірити",
verificationRequired: "Потрібна перевірка!",
verified: "Перевірено",
verifying: "Перевіряється...",
waitAlert: "Перевірка... будь ласка, зачекайте.",
cancel: "Скасувати",
enterCodeFromImage: "Щоб продовжити, введіть код із зображення нижче."
};
globalThis.$altcha.i18n.set("uk", i18n$l);
const i18n$k = {
ariaLinkLabel: "Altcha (amptelike webwerf)",
enterCode: "Voer kode in",
enterCodeAria: "Voer die kode in wat jy hoor. Druk Spasie om die klank af te speel.",
error: "Verifikasie het misluk. Probeer later weer.",
expired: "Verifikasie het verval. Probeer weer.",
footer: 'Beskerm deur <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (amptelike webwerf)">ALTCHA</a>',
getAudioChallenge: "Kry 'n klankuitdaging",
label: "Ek is nie 'n robot nie",
loading: "Laai...",
reload: "Laai weer",
verify: "Verifieer",
verificationRequired: "Verifikasie is vereis!",
verified: "Geverifieer",
verifying: "Verifieer...",
waitAlert: "Verifieer... wag asseblief.",
cancel: "Kanselleer",
enterCodeFromImage: "Om voort te gaan, voer asseblief die kode vanaf die onderstaande prentjie in."
};
globalThis.$altcha.i18n.set("af", i18n$k);
const i18n$j = {
ariaLinkLabel: "Altcha (ዋናው ድህረ ገጽ)",
enterCode: "ኮድ አስገባ",
enterCodeAria: "የሚሰማዎትን ኮድ ያስገቡ። ድምጽ ለመጫወት Space ን ይጫኑ።",
error: "ማረጋገጫ አልተሳካም። በኋላ ላይ እንደገና ይሞክሩ።",
expired: "ማረጋገጫው ጊዜው አልፏል። እንደገና ይሞክሩ።",
footer: 'በ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ዋናው ድህረ ገጽ)">ALTCHA</a> የተጠበቀ',
getAudioChallenge: "የድምጽ ፈተና ያግኙ",
label: "እኔ ሮቦት አይደለሁም",
loading: "በመጫን ላይ...",
reload: "እንደገና ጫን",
verify: "አረጋግጥ",
verificationRequired: "ማረጋገጫ ያስፈልጋል!",
verified: "ተረጋግጧል",
verifying: "በማረጋገጥ ላይ...",
waitAlert: "በማረጋገጥ ላይ... እባክዎ ይጠብቁ።",
cancel: "ይቅር",
enterCodeFromImage: "ለመቀጠል፣ እባክዎን ከታች ካለው ምስል ኮዱን ያስገቡ።"
};
globalThis.$altcha.i18n.set("am", i18n$j);
const i18n$i = {
ariaLinkLabel: "Altcha (tovuti rasmi)",
enterCode: "Weka nambari",
enterCodeAria: "Weka nambari unayosikia. Bonyeza Space kucheza sauti.",
error: "Uthibitishaji umeshindwa. Jaribu tena baadaye.",
expired: "Uthibitishaji umeisha. Jaribu tena.",
footer: 'Imealindwa na <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (tovuti rasmi)">ALTCHA</a>',
getAudioChallenge: "Pata changamoto ya sauti",
label: "Mimi sio roboti",
loading: "Inapakia...",
reload: "Pakia tena",
verify: "Thibitisha",
verificationRequired: "Uthibitishaji unahitajika!",
verified: "Imethibitishwa",
verifying: "Inathibitisha...",
waitAlert: "Inathibitisha... tafadhali subiri.",
cancel: "Ghairi",
enterCodeFromImage: "Ili kuendelea, tafadhali weka nambari kutoka kwa picha hapa chini."
};
globalThis.$altcha.i18n.set("sw", i18n$i);
const i18n$h = {
ariaLinkLabel: "Altcha (oju opo wẹẹbu osise)",
enterCode: "Tẹ koodu sii",
enterCodeAria: "Tẹ koodu ti o ngbọ sii. Tẹ Space lati ṣe ohun orin.",
error: "Ìdájọ́kòwò kò ṣẹ́ṣe. Gbiyanju lẹẹkansi ni ọjọ́ iwájú.",
expired: "Ìdájọ́kòwò ti pari. Gbiyanju lẹẹkansi.",
footer: 'Ti wa ni ààbò nipasẹ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (oju opo wẹẹbu osise)">ALTCHA</a>',
getAudioChallenge: "Gba ìjàdú ohùn",
label: "Emi kii ṣe ẹrọ",
loading: "Ó ń gbé sílẹ̀...",
reload: "Tún gbé wọlé",
verify: "Ṣàdájọ́",
verificationRequired: "Ìdájọ́kòwò ni a nílò!",
verified: "A ti dájọ́",
verifying: "Ó ń ṣàdájọ́...",
waitAlert: "Ó ń ṣàdájọ́... ẹ jọ̀ọ́ ẹ duro.",
cancel: "Fagbọsẹ",
enterCodeFromImage: "Lati tẹsiwaju, jọwọ tẹ koodu ti o wa lati aworan isalẹ sii."
};
globalThis.$altcha.i18n.set("yo", i18n$h);
const i18n$g = {
ariaLinkLabel: "Altcha (অফিসিয়াল ওয়েবসাইট)",
enterCode: "কোড লিখুন",
enterCodeAria: "আপনি যে কোড শুনতে পান তা লিখুন। অডিও প্লে করতে স্পেস বাটন টিপুন।",
error: "যাচাইকরণ ব্যর্থ হয়েছে। পরে আবার চেষ্টা করুন।",
expired: "যাচাইকরণ সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন।",
footer: 'দ্বারা সুরক্ষিত <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (অফিসিয়াল ওয়েবসাইট)">ALTCHA</a>',
getAudioChallenge: "অডিও চ্যালেঞ্জ নিন",
label: "আমি রোবট নই",
loading: "লোড হচ্ছে...",
reload: "পুনরায় লোড করুন",
verify: "যাচাই করুন",
verificationRequired: "যাচাই প্রয়োজন!",
verified: "যাচাই করা হয়েছে",
verifying: "যাচাই করা হচ্ছে...",
waitAlert: "যাচাই করা হচ্ছে... দয়া করে অপেক্ষা করুন।",
cancel: "বাতিল করুন",
enterCodeFromImage: "এগিয়ে যেতে, অনুগ্রহ করে নীচের চিত্র থেকে কোডটি প্রবেশ করান।"
};
globalThis.$altcha.i18n.set("bn", i18n$g);
const i18n$f = {
ariaLinkLabel: "Altcha (אתר רשמי)",
enterCode: "הזן קוד",
enterCodeAria: "הזן את הקוד שאתה שומע. לחץ על רווח להפעלת השמע.",
error: "האימות נכשל. נסה שוב מאוחר יותר.",
expired: "תוקף האימות פג. נסה שוב.",
footer: 'מוגן על ידי <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (אתר רשמי)">ALTCHA</a>',
getAudioChallenge: "קבל אתגר שמע",
label: "אני לא רובוט",
loading: "טוען...",
reload: "טען מחדש",
verify: "אמת",
verificationRequired: "נדרש אימות!",
verified: "אומת",
verifying: "מאמת...",
waitAlert: "מבצע אימות... אנא המתן.",
cancel: "ביטול",
enterCodeFromImage: "כדי להמשיך, אנא הזן את הקוד מהתמונה למטה."
};
globalThis.$altcha.i18n.set("he", i18n$f);
const i18n$e = {
ariaLinkLabel: "Altcha (आधिकारिक वेबसाइट)",
enterCode: "कोड दर्ज करेंं",
enterCodeAria: "आप जो कोड सुनते हैं उसे दर्ज करें। ऑडियो चलाने के लिए स्पेस दबाएं।",
error: "सत्यापन विफल। कृपया बाद में फिर से प्रयास करें।",
expired: "सत्यापन समाप्त हो गया है। कृपया पुनः प्रयास करें।",
footer: 'द्वारा संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (आधिकारिक वेबसाइट)">ALTCHA</a>',
getAudioChallenge: "ऑडियो चुनौती प्राप्त करें",
label: "मैं रोबोट नहीं हूँ",
loading: "लोड हो रहा है...",
reload: "पुनः लोड करें",
verify: "सत्यापित करें",
verificationRequired: "सत्यापन आवश्यक है!",
verified: "सत्यापित",
verifying: "सत्यापित कर रहे हैं...",
waitAlert: "सत्यापित किया जा रहा है... कृपया प्रतीक्षा करें।",
cancel: "रद्द करें",
enterCodeFromImage: "आगे बढ़ने के लिए, कृपया नीचे दी गई छवि से कोड दर्ज करें।"
};
globalThis.$altcha.i18n.set("hi", i18n$e);
const i18n$d = {
ariaLinkLabel: "Altcha (situs web resmi)",
enterCode: "Masukkan kode",
enterCodeAria: "Masukkan kode yang Anda dengar. Tekan Spasi untuk memutar audio.",
error: "Verifikasi gagal. Coba lagi nanti.",
expired: "Verifikasi telah kedaluwarsa. Coba lagi.",
footer: 'Dilindungi oleh <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (situs web resmi)">ALTCHA</a>',
getAudioChallenge: "Dapatkan tantangan audio",
label: "Saya bukan robot",
loading: "Memuat...",
reload: "Muat ulang",
verify: "Verifikasi",
verificationRequired: "Verifikasi diperlukan!",
verified: "Terverifikasi",
verifying: "Memverifikasi...",
waitAlert: "Memverifikasi... harap tunggu.",
cancel: "Batal",
enterCodeFromImage: "Untuk melanjutkan, silakan masukkan kode dari gambar di bawah ini."
};
globalThis.$altcha.i18n.set("id", i18n$d);
const i18n$c = {
ariaLinkLabel: "Altcha (公式ウェブサイト)",
enterCode: "コードを入力",
enterCodeAria: "聞こえるコードを入力してください。スペースキーを押して音声を再生します。",
error: "認証に失敗しました。後でもう一度試してください。",
expired: "認証が期限切れです。再試行してください。",
footer: '保護されています <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (公式ウェブサイト)">ALTCHA</a>',
getAudioChallenge: "音声チャレンジを取得",
label: "私はロボットではありません",
loading: "読み込み中...",
reload: "再読み込み",
verify: "確認",
verificationRequired: "認証が必要です!",
verified: "確認済み",
verifying: "確認中...",
waitAlert: "確認中...少々お待ちください。",
cancel: "キャンセル",
enterCodeFromImage: "続行するには、以下の画像からコードを入力してください。"
};
globalThis.$altcha.i18n.set("ja", i18n$c);
const i18n$b = {
ariaLinkLabel: "Altcha (공식 웹사이트)",
enterCode: "코드 입력",
enterCodeAria: "들리는 코드를 입력하세요. 스페이스 바를 눌러 오디오를 재생합니다.",
error: "인증 실패. 나중에 다시 시도해주세요.",
expired: "인증이 만료되었습니다. 다시 시도해주세요.",
footer: 'ALTCHA에서 보호됨 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (공식 웹사이트)">ALTCHA</a>',
getAudioChallenge: "오디오 챌린지 받기",
label: "저는 로봇이 아닙니다",
loading: "로딩 중...",
reload: "새로 고침",
verify: "확인",
verificationRequired: "인증이 필요합니다!",
verified: "확인됨",
verifying: "확인 중...",
waitAlert: "확인 중... 잠시만 기다려주세요.",
cancel: "취소",
enterCodeFromImage: "계속 진행하려면 아래 이미지에서 코드를 입력하세요."
};
globalThis.$altcha.i18n.set("ko", i18n$b);
const i18n$a = {
ariaLinkLabel: "Altcha (ресми веб-сайт)",
enterCode: "Кодты енгізіңіз",
enterCodeAria: "Естіген кодыңызды енгізіңіз. Аудионы ойнату үшін Бос орынды басыңыз.",
error: "Тексеру сәтсіз аяқталды. Кейінірек қайталаңыз.",
expired: "Тексеру мерзімі аяқталды. Қайталаңыз.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (ресми веб-сайт)">ALTCHA</a> қорғайды',
getAudioChallenge: "Аудио сынақ алу",
label: "Мен робот емеспін",
loading: "Жүктелуде...",
reload: "Қайта жүктеу",
verify: "Тексеру",
verificationRequired: "Тексеру талап етіледі!",
verified: "Тексерілді",
verifying: "Тексеруде...",
waitAlert: "Тексерілуде... күте тұрыңыз.",
cancel: "Болдыру",
enterCodeFromImage: "Жалғастыру үшін төмендегі суреттегі кодты енгізіңіз."
};
globalThis.$altcha.i18n.set("kk", i18n$a);
const i18n$9 = {
ariaLinkLabel: "Altcha (अधिकृत संकेतस्थळ)",
enterCode: "कोड टाकाा",
enterCodeAria: "तुम्ही ऐकत असलेला कोड टाका. ऑडिओ प्ले करण्यासाठी स्पेस दाबा.",
error: "पुष्टीकरण अयशस्वी झाले. कृपया नंतर पुन्हा प्रयत्न करा.",
expired: "पुष्टीकरण कालबाह्य झाले आहे. कृपया पुन्हा प्रयत्न करा.",
footer: 'द्वारे संरक्षित <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (अधिकृत संकेतस्थळ)">ALTCHA</a>',
getAudioChallenge: "ऑडिओ चॅलेंज मिळवा",
label: "मी रोबोट नाही",
loading: "लोड होत आहे...",
reload: "पुन्हा लोड करा",
verify: "पुष्टीकरण करा",
verificationRequired: "पडताळणी आवश्यक आहे!",
verified: "पुष्टीकरण झाले",
verifying: "पुष्टीकरण करत आहे...",
waitAlert: "पुष्टीकरण करत आहे... कृपया थोडा वेळ थांबा.",
cancel: "रद्द करा",
enterCodeFromImage: "पुढे जाण्यासाठी, कृपया खालील प्रतिमेतील कोड प्रविष्ट करा."
};
globalThis.$altcha.i18n.set("mr", i18n$9);
const i18n$8 = {
ariaLinkLabel: "Altcha (அதிகாரப்பூர்வ வலைத்தளம்)",
enterCode: "குறியீட்டை உள்ளிடவும்",
enterCodeAria: "நீங்கள் கேட்கும் குறியீட்டை உள்ளிடவும். ஆடியோவை இயக்க Space ஐ அழுத்தவும்.",
error: "சரிபார்ப்பு தோல்வி. பிறகு மீண்டும் முயற்சிக்கவும்.",
expired: "சரிபார்ப்பு காலாவதியானது. மீண்டும் முயற்சிக்கவும்.",
footer: 'மூலமாக பாதுகாக்கப்பட்டவை <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (அதிகாரப்பூர்வ வலைத்தளம்)">ALTCHA</a>',
getAudioChallenge: "ஒலி சவாலை பெறவும்",
label: "நான் ரோபோடான அல்ல",
loading: "செயலாக்கம்...",
reload: "மீண்டும் புதுப்பிக்கவும்",
verify: "சரிபார்க்கவும்",
verificationRequired: "சரிபார்ப்பு தேவை!",
verified: "சரிபார்க்கப்பட்டது",
verifying: "சரிபார்க்கப்படுகிறது...",
waitAlert: "சரிபார்க்கப்படுகிறது... தயவுசெய்து காத்திருக்கவும்.",
cancel: "ரத்துசெய்",
enterCodeFromImage: "தொடர, கீழே உள்ள படத்திலிருந்து குறியீட்டை உள்ளிடவும்."
};
globalThis.$altcha.i18n.set("ta", i18n$8);
const i18n$7 = {
ariaLinkLabel: "Altcha (అధికారిక వెబ్‌సైట్)",
enterCode: "కోడ్‌ని నమోదు చేయండి",
enterCodeAria: "మీరు విన్న కోడ్‌ని నమోదు చేయండి. ఆడియో ప్లే చేయడానికి స్పేస్‌ను నొక్కండి.",
error: "చెకింగ్ విఫలమైంది. దయచేసి మరల ప్రయత్నించండి.",
expired: "చెకింగ్ కాలం ముగిసింది. దయచేసి మరల ప్రయత్నించండి.",
footer: 'ఈ సైట్ రక్షించబడింది <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (అధికారిక వెబ్‌సైట్)">ALTCHA</a>',
getAudioChallenge: "ఆడియో ఛాలెంజ్ పొందండి",
label: "నేను రోబోట్ కాదు",
loading: "లోడ్ అవుతోంది...",
reload: "మళ్ళీ లోడ్ చేయండి",
verify: "ధ్రువీకరించు",
verificationRequired: "ధృవీకరణ అవసరం!",
verified: "ధ్రువీకరించబడింది",
verifying: "ధ్రువీకరణ జరుగుతుంది...",
waitAlert: "ధ్రువీకరణ జరుగుతుంది... దయచేసి వేచి ఉండండి.",
cancel: "రద్దు చేయండి",
enterCodeFromImage: "కొనసాగడానికి, దయచేసి క్రింది చిత్రంలో ఉన్న కోడ్‌ను నమోదు చేయండి."
};
globalThis.$altcha.i18n.set("te", i18n$7);
const i18n$6 = {
ariaLinkLabel: "Altcha (เว็บไซต์ทางการ)",
enterCode: "ป้อนรหัส",
enterCodeAria: "ป้อนรหัสที่คุณได้ยิน กด Space เพื่อเล่นเสียง",
error: "การตรวจสอบล้มเหลว กรุณาลองอีกครั้งภายหลัง",
expired: "การตรวจสอบหมดอายุ กรุณาลองใหม่",
footer: 'ป้องกันโดย <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (เว็บไซต์ทางการ)">ALTCHA</a>',
getAudioChallenge: "รับการท้าทายเสียง",
label: "ฉันไม่ใช่บอท",
loading: "กำลังโหลด...",
reload: "โหลดใหม่",
verify: "ตรวจสอบ",
verificationRequired: "จำเป็นต้องตรวจสอบ!",
verified: "ตรวจสอบแล้ว",
verifying: "กำลังตรวจสอบ...",
waitAlert: "กำลังตรวจสอบ... กรุณารอ",
cancel: "ยกเลิก",
enterCodeFromImage: "เพื่อดำเนินการต่อ โปรดป้อนรหัสจากรูปภาพด้านล่าง"
};
globalThis.$altcha.i18n.set("th", i18n$6);
const i18n$5 = {
ariaLinkLabel: "Altcha (سرکاری ویب سائٹ)",
enterCode: "کوڈ درج کریں",
enterCodeAria: "جو کوڈ آپ سنتے ہیں وہ درج کریں۔ آڈیو چلانے کے لیے اسپیس دبائیں۔",
error: "توثیق ناکام ہو گئی۔ براہ کرم بعد میں دوبارہ کوشش کریں۔",
expired: "توثیق کی مدت ختم ہو گئی ہے۔ براہ کرم دوبارہ کوشش کریں۔",
footer: 'کے ذریعے محفوظ <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (سرکاری ویب سائٹ)">ALTCHA</a>',
getAudioChallenge: "آڈیو چیلنج حاصل کریں",
label: "میں روبوٹ نہیں ہوں",
loading: "لوڈ ہو رہا ہے...",
reload: "دوبارہ لوڈ کریں",
verify: "توثیق کریں",
verificationRequired: "تصدیق ضروری ہے!",
verified: "توثیق شدہ",
verifying: "توثیق ہو رہی ہے...",
waitAlert: "توثیق ہو رہی ہے... براہ کرم انتظار کریں۔",
cancel: "منسوخ کریں",
enterCodeFromImage: "اگلے مرحلے پر جانے کے لیے، براہ کرم نیچے دی گئی تصویر سے کوڈ درج کریں۔"
};
globalThis.$altcha.i18n.set("ur", i18n$5);
const i18n$4 = {
ariaLinkLabel: "Altcha (rasmiy veb-sayt)",
enterCode: "Kodni kiriting",
enterCodeAria: "Eshitgan kodingizni kiriting. Audioni ijro etish uchun Bo'sh joy tugmasini bosing.",
error: "Tekshiruv muvaffaqiyatsiz tugadi. Keyinroq qayta urinib ko'ring.",
expired: "Tekshiruv muddati tugadi. Qayta urinib ko'ring.",
footer: '<a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (rasmiy veb-sayt)">ALTCHA</a> tomonidan himoyalangan',
getAudioChallenge: "Audio sinovni olish",
label: "Men robot emasman",
loading: "Yuklanmoqda...",
reload: "Qayta yuklash",
verify: "Tekshirish",
verificationRequired: "Tekshiruv talab qilinadi!",
verified: "Tekshirildi",
verifying: "Tekshirilmoqda...",
waitAlert: "Tekshirilmoqda... iltimos kuting.",
cancel: "Bekor qilish",
enterCodeFromImage: "Davom etish uchun, iltimos, quyidagi rasmda ko'rsatilgan kodni kiriting."
};
globalThis.$altcha.i18n.set("uz", i18n$4);
const i18n$3 = {
ariaLinkLabel: "Altcha (trang web chính thức)",
enterCode: "Nhập mã",
enterCodeAria: "Nhập mã bạn nghe được. Nhấn Phím cách để phát âm thanh.",
error: "Xác minh thất bại. Vui lòng thử lại sau.",
expired: "Xác minh đã hết hạn. Vui lòng thử lại.",
footer: 'Được bảo vệ bởi <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (trang web chính thức)">ALTCHA</a>',
getAudioChallenge: "Nhận thử thách âm thanh",
label: "Tôi không phải là robot",
loading: "Đang tải...",
reload: "Tải lại",
verify: "Xác minh",
verificationRequired: "Yêu cầu xác minh!",
verified: "Đã xác minh",
verifying: "Đang xác minh...",
waitAlert: "Đang xác minh... vui lòng chờ.",
cancel: "Hủy bỏ",
enterCodeFromImage: "Để tiếp tục, vui lòng nhập mã từ hình ảnh bên dưới."
};
globalThis.$altcha.i18n.set("vi", i18n$3);
const i18n$2 = {
ariaLinkLabel: "Altcha (官方网站)",
enterCode: "输入代码",
enterCodeAria: "输入您听到的代码。按空格键播放音频。",
error: "验证失败。稍后再试。",
expired: "验证已过期。请重试。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方网站)">ALTCHA</a> 保护',
getAudioChallenge: "获取音频挑战",
label: "我不是机器人",
loading: "加载中...",
reload: "重新加载",
verify: "验证",
verificationRequired: "需要验证!",
verified: "已验证",
verifying: "正在验证...",
waitAlert: "正在验证... 请稍等。",
cancel: "取消",
enterCodeFromImage: "为继续操作,请输入下图中显示的验证码。"
};
globalThis.$altcha.i18n.set("zh-cn", i18n$2);
const i18n$1 = {
ariaLinkLabel: "Altcha (官方網站)",
cancel: "取消",
enterCode: "輸入代碼",
enterCodeAria: "輸入你聽到嘅代碼。按空格鍵播放音訊。",
enterCodeFromImage: "要繼續,請輸入下面圖片入面嘅代碼。",
error: "驗證失敗。請稍後再試。",
expired: "驗證已過期。請再試一次。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 提供保護',
getAudioChallenge: "取得音訊驗證",
label: "我唔係機械人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "驗證中...",
waitAlert: "驗證中... 請稍候。"
};
globalThis.$altcha.i18n.set("zh-hk", i18n$1);
const i18n = {
ariaLinkLabel: "Altcha (官方網站)",
enterCode: "輸入代碼",
enterCodeAria: "輸入您聽到的代碼。按空格鍵播放音頻。",
error: "驗證失敗。稍後再試。",
expired: "驗證已過期。請重試。",
footer: '由 <a href="https://altcha.org/" tabindex="-1" target="_blank" aria-label="Altcha (官方網站)">ALTCHA</a> 保護',
getAudioChallenge: "獲取音頻挑戰",
label: "我不是機器人",
loading: "載入中...",
reload: "重新載入",
verify: "驗證",
verificationRequired: "需要驗證!",
verified: "已驗證",
verifying: "正在驗證...",
waitAlert: "正在驗證... 請稍等。",
cancel: "取消",
enterCodeFromImage: "若要繼續,請輸入下方的圖片驗證碼。"
};
globalThis.$altcha.i18n.set("zh-tw", i18n);
 
data/skin/mobile/story_g/js/gd_board_view.js+72
변경 전gd_board_view.js
*/
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$('img.js-smart-img').each(function(){
$(this).css('max-width','100%');
});
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
*/
 
$(document).ready(function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$('img.js-smart-img').each(function(){
$(this).css('max-width','100%');
});
return false;
}
 
 
 
 
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
 
 
 
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
 
},
dataType: 'json'
}).success(function (data) {
 
변경 후gd_board_view.js
*/
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
$('img.js-smart-img').each(function(){
$(this).css('max-width','100%');
});
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
*/
 
$(document).ready(function () {
 
/**
* ALTCHA(자동등록방지) 게이트 — 위젯이 있으면 verified 상태여야 제출 허용
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaGuard = function (formEl) {
const widget = formEl.find('altcha-widget')[0];
if (widget && typeof widget.getState === 'function' && widget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
return true;
};
 
/**
* ALTCHA 위젯이 발급한 payload(hidden input) 값을 읽는다. AJAX 제출용.
* @param {jQuery} formEl 캡차 위젯을 포함하는 폼 컨테이너
*/
const altchaPayload = function (formEl) {
return formEl.find('input[name=altcha]').val();
};
$('img.js-smart-img').each(function(){
$(this).css('max-width','100%');
});
return false;
}
 
if (!altchaGuard(domRoot.commentFormWrite.element)) {
return false;
}
 
if (domRoot.commentFormWrite.isSecret.is(':checked') || domRoot.commentFormWrite.isSecret.val() === 'y' ) {
isSecret = 'y';
}
writerPw: domRoot.commentFormWrite.password.val(),
isSecret: isSecret,
captchaKey: domRoot.commentFormWrite.captchaKey.val(),
altcha: altchaPayload(domRoot.commentFormWrite.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
return false;
}
 
if (!altchaGuard(commentFormAction.element)) {
return false;
}
 
if (commentFormAction.isSecret.is(':checked') || commentFormAction.isSecret.val() === 'y') {
isSecret = 'y';
}
memo: commentFormAction.memo.val(),
isSecret: isSecret,
captchaKey: commentFormAction.captchaKey.val(),
altcha: altchaPayload(commentFormAction.element),
},
dataType: 'json'
}).success(function (data) {
 
data/skin/mobile/story_g/js/gd_board_write.js+708-704
변경 전gd_board_write.js
function captchaReload() {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../board/captcha.php?ch=' + someDate);
}, 1);
}
/*
function addUpload() {
uploadBoxCount = $('#uploadBox').find('.file-upload').length;
if (uploadBoxCount > 4) {
alert("업로드는 최대 5개만 지원합니다");
return;
}
var addUploadBox = _.template(
$("script.template").html()
);
$('#uploadBox:last').append(addUploadBox({idx: uploadBoxCount + 1}));
}
function uploadRemove(obj) {
obj.closest('.file-upload').remove();
}
*/
var boardSubmitFl = true;
$(document).ready(function () {
var params = {};
if(typeof bdId != 'undefined') {
params = {
bdId : bdId,
bdSno : bdSno,
};
}
$('.js-board-layer').bind('click',function(){
var type = $(this).data('type');
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_"+type+"_select.php",
success: function (data) {
$('#popup-select-goods').empty().append(data);
$('#popup-select-goods').show();
},
error: function (data) {
alert(data.message);
}
});
})
$('body').on('click','.js-layer-close',function(e){
e.stopPropagation();
$('.js-select-confirm').off('click');
$('#popup-select-goods').empty();
$('#popup-select-goods').hide();
})
$('body').on('click','.js-select-remove',function(){
$(this).closest('div.js-select-item').remove();
$('.itemselect-comment').show();
})
uploadBoxCount = $('#uploadBox').find('.file-upload').length;
$('.file-upload:last').find('label').attr('for', 'attach' + uploadBoxCount);
$('.file-upload:last').find('input[type=file]').attr('id', 'attach' + uploadBoxCount);
if (cfgUploadFl == 'y') {
$('#addUploadBtn').bind('click', function () {
addUpload();
});
}
$("#frmWrite").validate({
submitHandler: function (form) {
if (boardSubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
if (cfgEditorFl == 'y') {
oEditors.getById["editor"].exec("UPDATE_CONTENTS_FIELD", []); // 에디터의 내용이 textarea에 적용됩니다.
}
boardSubmitFl = false;
form.submit();
$('iframe[name=ifrmProcess]').load(function(){
var doc = this.contentWindow ? this.contentWindow.document : (this.contentDocument ? this.contentDocument : this.document);
var root = doc.documentElement ? doc.documentElement : doc.body;
var result = root.textContent ? root.textContent : root.innerText;
result = result.replace(/(\s+)|(\s+$)|(\r)|(\n)/g, "");
if (result.indexOf(__('저장되었습니다')) < 0 && result.indexOf('/board/list.php') < 0) { //실패 시 버튼 활성화
boardSubmitFl = true;
}
});
},
rules: {
private: 'required',
contents: {
required: function (textarea) {
if (cfgEditorFl == 'y') {
var editorcontent = oEditors.getById[textarea.id].getIR(); // 에디터의 내용 가져오기.
editorcontent = editorcontent.replace(/<(?!img).*?>/ig, '').replace('&nbsp;', ''); //이미지테그제외한 테그제거
return editorcontent.length === 0;
}
else {
return textarea.value.length === 0;
}
}
},
writerNm: 'required',
writerPw: 'required',
subject: 'required',
captchaKey: 'required',
goodsPt: 'required',
writerEmail: {
required: true,
email: true
},
},
messages: {
writerNm: {
required: __('작성자를 입력해주세요.')
},
writerPw: {
required: __('비밀번호를 입력해주세요.')
},
subject: {
required: __('제목을 입력해주세요.')
},
contents: {
required: __('내용을 입력해주세요')
},
private: {
required: __('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.')
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
writerEmail: {
required: __('이메일을 입력해주세요.'),
email: __('메일 형식이 틀렸습니다.')
}
}
})
$("select[id=category]").on("change", function(){
var category = $(this).val();
var bdId = $('[name="bdId"]').val();
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'category', bdId: bdId, 'category': category},
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
$("textarea[name=contents]").val(result).focus();
}).error(function (e) {
alert(e.responseText);
});
});
});
function initFileUpload() {
var maxUploadFile = maxFileNumber;
maxUploadFile = maxUploadFile ? maxUploadFile : 0;
if (mode == 'modify') {
for (var i = 0; i < prvFilePath.length; i++) {
prevImg = getPrevImg(prvFileName[i], prvFilePath[i]);
$newItem = $("#board-attach li.item.template").clone();
$("#board-attach li.item.template").before($newItem);
$newItem.removeClass("template");
$prvFileFace = $newItem.find('.file-face');
prewFileFace = $prvFileFace[0];
$prvFileFace.addClass("preview").css({
"background-image": "url('" + prevImg + "')"
});
}
$("#board-attach li.item:not(.template)").each(function (index) {
this.onclick = function () {
var delFilehtml = '';
if (confirm(__('첨부된 파일을 삭제하시겠습니까?'))) {
delFilehtml = '<input type="hidden" name="delFile[' + index + ']" value="y" />';
$('#frmWrite').append(delFilehtml);
this.remove();
}
};
});
}
$('#board-attach li.item.template').off().on("click", 'button.file-face', function () {
var templateContainer = this.parentNode;
// templateContainer.remove('input');
var $container = $(templateContainer);
var $fileFace = $container.find("button.file-face"), fileFace = $fileFace[0];
var $fileHidden = $container.find("input.file-hidden"), fileHidden = $fileHidden[0];
var idx = $('input[name="' + fileHidden.name + '"]').index(this);
if ($("#board-attach li.item:not(.template) input.file-hidden").length >= maxUploadFile) {
alert(__('첨부파일은 최대 %1$s개 까지 업로드 가능합니다.', maxUploadFile.toString()));
return false;
}
else {
$fileHidden.val('');
fileHidden.onchange = function () {
var index = $("#board-attach").find('li').index($(this).closest("li"));
//ajax업로드 처리
var uploadImages = [];
gdAjaxUpload.upload(
{
formObj: $("#frmWrite"),
thisObj: $(this),
actionUrl: '../board/board_ps.php',
params: {bdId: $('[name=bdId]').val(), 'mode': 'ajaxUpload'},
onbeforeunload: function () {
if (uploadImages.length == 0) {
return false;
}
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'deleteGarbageImage', bdId: $('[name=bdId]').val(), deleteImage: uploadImages.join('^|^')},
cache: false,
}).success(function (data) {
}).error(function (e) {
});
},
successAfter: function (data) {
uploadImages.push(data.saveFileNm);
},
failAfter : function(data) {
if (data.result == 'fail' && fileHidden.name == 'upfiles[]') {
$('input[name="' + fileHidden.name + '"]').eq(idx).val('');
}
}
}
)
if(gdAjaxUpload.isSuccess == false){
return false;
}
var fileReader = new FileReader();
fileName = this.files[0].name;
fileReader.readAsDataURL(this.files[0]);
fileReader.onload = function () {
previewUrl = getPrevImg(fileName, this.result);
$(templateContainer).clone(true).appendTo($("#board-attach"));
$container.removeClass("template");
$fileFace.addClass("preview").css({
"background-image": "url('" + previewUrl + "')",
"background-position": "center",
"background-size": "cover",
"background-repeat": "no-repeat",
"-webkit-background-size": "cover",
"-moz-background-size": "cover",
"-o-background-size": "cover"
});
fileFace.onclick = function (e) {
if (confirm(__("첨부된 파일을 삭제하시겠습니까?"))) {
$("input[name='uploadFileNm[" + index + "]']").remove();
$("input[name='saveFileNm[" + index + "]']").remove();
$container.remove();
} else {
e.stopPropagation();
}
};
};
fileReader.onerror = function () {
alert(__("이미지 로드 중 에러가 발생했습니다."));
};
};
$fileHidden.trigger("click");
}
});
}
function getPrevImg(fileName, imgUrl) {
var fileExt = '';
if (fileName.indexOf('.') > 0) {
_fileExt = fileName.substring(fileName.lastIndexOf('.'), fileName.length).toLowerCase();
fileExt = _fileExt.replace('.', '');
}
switch (fileExt) {
case 'gif':
case 'jpg':
case 'bmp':
case 'png':
case 'jpeg':
return imgUrl;
break;
case 'doc':
case'docx':
fileName = 'icon_file_doc.png';
break;
case 'ppt':
case'pptx':
fileName = 'icon_file_ppt.png';
break;
case 'pdf':
fileName = 'icon_file_pdf.png';
break;
case 'xls':
case'xlsx':
fileName = 'icon_file_xls.png';
break;
case 'txt':
fileName = 'icon_file_txt.png';
break;
default :
fileName = 'icon_file_etc.png';
}
previewUrl = mobileSkinPath + '/img/new/' + fileName;
return previewUrl;
}
function setAddGoods(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectGoodsTblTr').html());
var param = {goodsNo: val.goodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, goodsPrice: val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectGoodsBox").empty();
$("#selectGoodsBox").append(selecttblTrHtml);
$('.itemselect-comment').hide();
}
function setAddOrder(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectOrderTblTr').html());
var param = {orderNo: val.orderNo, orderGoodsNo: val.orderGoodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, optionName:val.optionName,goodsPrice:val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectOrderBox").empty();
$("#selectOrderBox").append(selecttblTrHtml);
$('.itemselect-comment').hide();
}
 
 
function captchaReload() {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../board/captcha.php?ch=' + someDate);
}, 1);
}
/*
function addUpload() {
uploadBoxCount = $('#uploadBox').find('.file-upload').length;
if (uploadBoxCount > 4) {
alert("업로드는 최대 5개만 지원합니다");
return;
}
var addUploadBox = _.template(
$("script.template").html()
);
$('#uploadBox:last').append(addUploadBox({idx: uploadBoxCount + 1}));
}
function uploadRemove(obj) {
obj.closest('.file-upload').remove();
}
*/
var boardSubmitFl = true;
$(document).ready(function () {
var params = {};
if(typeof bdId != 'undefined') {
params = {
bdId : bdId,
bdSno : bdSno,
};
}
$('.js-board-layer').bind('click',function(){
var type = $(this).data('type');
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_"+type+"_select.php",
success: function (data) {
$('#popup-select-goods').empty().append(data);
$('#popup-select-goods').show();
},
error: function (data) {
alert(data.message);
}
});
})
$('body').on('click','.js-layer-close',function(e){
e.stopPropagation();
$('.js-select-confirm').off('click');
$('#popup-select-goods').empty();
$('#popup-select-goods').hide();
})
$('body').on('click','.js-select-remove',function(){
$(this).closest('div.js-select-item').remove();
$('.itemselect-comment').show();
})
uploadBoxCount = $('#uploadBox').find('.file-upload').length;
$('.file-upload:last').find('label').attr('for', 'attach' + uploadBoxCount);
$('.file-upload:last').find('input[type=file]').attr('id', 'attach' + uploadBoxCount);
if (cfgUploadFl == 'y') {
$('#addUploadBtn').bind('click', function () {
addUpload();
});
}
$("#frmWrite").validate({
submitHandler: function (form) {
if (boardSubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
if (cfgEditorFl == 'y') {
oEditors.getById["editor"].exec("UPDATE_CONTENTS_FIELD", []); // 에디터의 내용이 textarea에 적용됩니다.
}
boardSubmitFl = false;
form.submit();
$('iframe[name=ifrmProcess]').load(function(){
var doc = this.contentWindow ? this.contentWindow.document : (this.contentDocument ? this.contentDocument : this.document);
var root = doc.documentElement ? doc.documentElement : doc.body;
var result = root.textContent ? root.textContent : root.innerText;
result = result.replace(/(\s+)|(\s+$)|(\r)|(\n)/g, "");
if (result.indexOf(__('저장되었습니다')) < 0 && result.indexOf('/board/list.php') < 0) { //실패 시 버튼 활성화
boardSubmitFl = true;
}
});
},
rules: {
private: 'required',
contents: {
required: function (textarea) {
if (cfgEditorFl == 'y') {
var editorcontent = oEditors.getById[textarea.id].getIR(); // 에디터의 내용 가져오기.
editorcontent = editorcontent.replace(/<(?!img).*?>/ig, '').replace('&nbsp;', ''); //이미지테그제외한 테그제거
return editorcontent.length === 0;
}
else {
return textarea.value.length === 0;
}
}
},
writerNm: 'required',
writerPw: 'required',
subject: 'required',
captchaKey: 'required',
goodsPt: 'required',
writerEmail: {
required: true,
email: true
},
},
messages: {
writerNm: {
required: __('작성자를 입력해주세요.')
},
writerPw: {
required: __('비밀번호를 입력해주세요.')
},
subject: {
required: __('제목을 입력해주세요.')
},
contents: {
required: __('내용을 입력해주세요')
},
private: {
required: __('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')
},
captchaKey: {
required: __('자동등록방지 문자를 입력해주세요.')
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
writerEmail: {
required: __('이메일을 입력해주세요.'),
email: __('메일 형식이 틀렸습니다.')
}
}
})
$("select[id=category]").on("change", function(){
var category = $(this).val();
var bdId = $('[name="bdId"]').val();
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'category', bdId: bdId, 'category': category},
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
$("textarea[name=contents]").val(result).focus();
}).error(function (e) {
alert(e.responseText);
});
});
});
function initFileUpload() {
var maxUploadFile = maxFileNumber;
maxUploadFile = maxUploadFile ? maxUploadFile : 0;
if (mode == 'modify') {
for (var i = 0; i < prvFilePath.length; i++) {
prevImg = getPrevImg(prvFileName[i], prvFilePath[i]);
$newItem = $("#board-attach li.item.template").clone();
$("#board-attach li.item.template").before($newItem);
$newItem.removeClass("template");
$prvFileFace = $newItem.find('.file-face');
prewFileFace = $prvFileFace[0];
$prvFileFace.addClass("preview").css({
"background-image": "url('" + prevImg + "')"
});
}
$("#board-attach li.item:not(.template)").each(function (index) {
this.onclick = function () {
var delFilehtml = '';
if (confirm(__('첨부된 파일을 삭제하시겠습니까?'))) {
delFilehtml = '<input type="hidden" name="delFile[' + index + ']" value="y" />';
$('#frmWrite').append(delFilehtml);
this.remove();
}
};
});
}
$('#board-attach li.item.template').off().on("click", 'button.file-face', function () {
var templateContainer = this.parentNode;
// templateContainer.remove('input');
var $container = $(templateContainer);
var $fileFace = $container.find("button.file-face"), fileFace = $fileFace[0];
var $fileHidden = $container.find("input.file-hidden"), fileHidden = $fileHidden[0];
var idx = $('input[name="' + fileHidden.name + '"]').index(this);
if ($("#board-attach li.item:not(.template) input.file-hidden").length >= maxUploadFile) {
alert(__('첨부파일은 최대 %1$s개 까지 업로드 가능합니다.', maxUploadFile.toString()));
return false;
}
else {
$fileHidden.val('');
fileHidden.onchange = function () {
var index = $("#board-attach").find('li').index($(this).closest("li"));
//ajax업로드 처리
var uploadImages = [];
gdAjaxUpload.upload(
{
formObj: $("#frmWrite"),
thisObj: $(this),
actionUrl: '../board/board_ps.php',
params: {bdId: $('[name=bdId]').val(), 'mode': 'ajaxUpload'},
onbeforeunload: function () {
if (uploadImages.length == 0) {
return false;
}
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'deleteGarbageImage', bdId: $('[name=bdId]').val(), deleteImage: uploadImages.join('^|^')},
cache: false,
}).success(function (data) {
}).error(function (e) {
});
},
successAfter: function (data) {
uploadImages.push(data.saveFileNm);
},
failAfter : function(data) {
if (data.result == 'fail' && fileHidden.name == 'upfiles[]') {
$('input[name="' + fileHidden.name + '"]').eq(idx).val('');
}
}
}
)
if(gdAjaxUpload.isSuccess == false){
return false;
}
var fileReader = new FileReader();
fileName = this.files[0].name;
fileReader.readAsDataURL(this.files[0]);
fileReader.onload = function () {
previewUrl = getPrevImg(fileName, this.result);
$(templateContainer).clone(true).appendTo($("#board-attach"));
$container.removeClass("template");
$fileFace.addClass("preview").css({
"background-image": "url('" + previewUrl + "')",
"background-position": "center",
"background-size": "cover",
"background-repeat": "no-repeat",
"-webkit-background-size": "cover",
"-moz-background-size": "cover",
"-o-background-size": "cover"
});
fileFace.onclick = function (e) {
if (confirm(__("첨부된 파일을 삭제하시겠습니까?"))) {
$("input[name='uploadFileNm[" + index + "]']").remove();
$("input[name='saveFileNm[" + index + "]']").remove();
$container.remove();
} else {
e.stopPropagation();
}
};
};
fileReader.onerror = function () {
alert(__("이미지 로드 중 에러가 발생했습니다."));
};
};
$fileHidden.trigger("click");
}
});
}
function getPrevImg(fileName, imgUrl) {
var fileExt = '';
if (fileName.indexOf('.') > 0) {
_fileExt = fileName.substring(fileName.lastIndexOf('.'), fileName.length).toLowerCase();
fileExt = _fileExt.replace('.', '');
}
switch (fileExt) {
case 'gif':
case 'jpg':
case 'bmp':
case 'png':
case 'jpeg':
return imgUrl;
break;
case 'doc':
case'docx':
fileName = 'icon_file_doc.png';
break;
case 'ppt':
case'pptx':
fileName = 'icon_file_ppt.png';
break;
case 'pdf':
fileName = 'icon_file_pdf.png';
break;
case 'xls':
case'xlsx':
fileName = 'icon_file_xls.png';
break;
case 'txt':
fileName = 'icon_file_txt.png';
break;
default :
fileName = 'icon_file_etc.png';
}
previewUrl = mobileSkinPath + '/img/new/' + fileName;
return previewUrl;
}
function setAddGoods(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectGoodsTblTr').html());
var param = {goodsNo: val.goodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, goodsPrice: val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectGoodsBox").empty();
$("#selectGoodsBox").append(selecttblTrHtml);
$('.itemselect-comment').hide();
}
function setAddOrder(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectOrderTblTr').html());
var param = {orderNo: val.orderNo, orderGoodsNo: val.orderGoodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, optionName:val.optionName,goodsPrice:val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectOrderBox").empty();
$("#selectOrderBox").append(selecttblTrHtml);
$('.itemselect-comment').hide();
}
 
 
 
변경 후gd_board_write.js
function captchaReload() {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../board/captcha.php?ch=' + someDate);
}, 1);
}
 
/*
function addUpload() {
uploadBoxCount = $('#uploadBox').find('.file-upload').length;
if (uploadBoxCount > 4) {
alert("업로드는 최대 5개만 지원합니다");
return;
}
 
var addUploadBox = _.template(
$("script.template").html()
);
 
$('#uploadBox:last').append(addUploadBox({idx: uploadBoxCount + 1}));
}
 
function uploadRemove(obj) {
obj.closest('.file-upload').remove();
}
*/
var boardSubmitFl = true;
$(document).ready(function () {
var params = {};
if(typeof bdId != 'undefined') {
params = {
bdId : bdId,
bdSno : bdSno,
};
}
$('.js-board-layer').bind('click',function(){
var type = $(this).data('type');
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_"+type+"_select.php",
success: function (data) {
$('#popup-select-goods').empty().append(data);
$('#popup-select-goods').show();
},
error: function (data) {
alert(data.message);
}
});
})
 
$('body').on('click','.js-layer-close',function(e){
e.stopPropagation();
$('.js-select-confirm').off('click');
$('#popup-select-goods').empty();
$('#popup-select-goods').hide();
})
 
$('body').on('click','.js-select-remove',function(){
$(this).closest('div.js-select-item').remove();
$('.itemselect-comment').show();
})
 
uploadBoxCount = $('#uploadBox').find('.file-upload').length;
$('.file-upload:last').find('label').attr('for', 'attach' + uploadBoxCount);
$('.file-upload:last').find('input[type=file]').attr('id', 'attach' + uploadBoxCount);
 
if (cfgUploadFl == 'y') {
$('#addUploadBtn').bind('click', function () {
addUpload();
});
}
 
$("#frmWrite").validate({
ignore: 'altcha-widget *',
submitHandler: function (form) {
if (boardSubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
if (cfgEditorFl == 'y') {
oEditors.getById["editor"].exec("UPDATE_CONTENTS_FIELD", []); // 에디터의 내용이 textarea에 적용됩니다.
}
boardSubmitFl = false;
form.submit();
$('iframe[name=ifrmProcess]').load(function(){
var doc = this.contentWindow ? this.contentWindow.document : (this.contentDocument ? this.contentDocument : this.document);
var root = doc.documentElement ? doc.documentElement : doc.body;
var result = root.textContent ? root.textContent : root.innerText;
result = result.replace(/(\s+)|(\s+$)|(\r)|(\n)/g, "");
if (result.indexOf(__('저장되었습니다')) < 0 && result.indexOf('/board/list.php') < 0) { //실패 시 버튼 활성화
boardSubmitFl = true;
}
});
},
rules: {
private: 'required',
contents: {
required: function (textarea) {
if (cfgEditorFl == 'y') {
var editorcontent = oEditors.getById[textarea.id].getIR(); // 에디터의 내용 가져오기.
editorcontent = editorcontent.replace(/<(?!img).*?>/ig, '').replace('&nbsp;', ''); //이미지테그제외한 테그제거
return editorcontent.length === 0;
}
else {
return textarea.value.length === 0;
}
}
},
writerNm: 'required',
writerPw: 'required',
subject: 'required',
goodsPt: 'required',
writerEmail: {
required: true,
email: true
},
},
messages: {
writerNm: {
required: __('작성자를 입력해주세요.')
},
writerPw: {
required: __('비밀번호를 입력해주세요.')
},
subject: {
required: __('제목을 입력해주세요.')
},
contents: {
required: __('내용을 입력해주세요')
},
private: {
required: __('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
writerEmail: {
required: __('이메일을 입력해주세요.'),
email: __('메일 형식이 틀렸습니다.')
}
}
})
 
$("select[id=category]").on("change", function(){
var category = $(this).val();
var bdId = $('[name="bdId"]').val();
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'category', bdId: bdId, 'category': category},
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
$("textarea[name=contents]").val(result).focus();
}).error(function (e) {
alert(e.responseText);
});
});
});
 
 
function initFileUpload() {
var maxUploadFile = maxFileNumber;
maxUploadFile = maxUploadFile ? maxUploadFile : 0;
if (mode == 'modify') {
for (var i = 0; i < prvFilePath.length; i++) {
prevImg = getPrevImg(prvFileName[i], prvFilePath[i]);
$newItem = $("#board-attach li.item.template").clone();
$("#board-attach li.item.template").before($newItem);
$newItem.removeClass("template");
$prvFileFace = $newItem.find('.file-face');
prewFileFace = $prvFileFace[0];
$prvFileFace.addClass("preview").css({
"background-image": "url('" + prevImg + "')"
});
}
 
$("#board-attach li.item:not(.template)").each(function (index) {
this.onclick = function () {
var delFilehtml = '';
if (confirm(__('첨부된 파일을 삭제하시겠습니까?'))) {
delFilehtml = '<input type="hidden" name="delFile[' + index + ']" value="y" />';
$('#frmWrite').append(delFilehtml);
this.remove();
}
};
});
}
 
$('#board-attach li.item.template').off().on("click", 'button.file-face', function () {
var templateContainer = this.parentNode;
 
// templateContainer.remove('input');
var $container = $(templateContainer);
var $fileFace = $container.find("button.file-face"), fileFace = $fileFace[0];
var $fileHidden = $container.find("input.file-hidden"), fileHidden = $fileHidden[0];
var idx = $('input[name="' + fileHidden.name + '"]').index(this);
if ($("#board-attach li.item:not(.template) input.file-hidden").length >= maxUploadFile) {
alert(__('첨부파일은 최대 %1$s개 까지 업로드 가능합니다.', maxUploadFile.toString()));
return false;
}
else {
$fileHidden.val('');
fileHidden.onchange = function () {
var index = $("#board-attach").find('li').index($(this).closest("li"));
//ajax업로드 처리
var uploadImages = [];
gdAjaxUpload.upload(
{
formObj: $("#frmWrite"),
thisObj: $(this),
actionUrl: '../board/board_ps.php',
params: {bdId: $('[name=bdId]').val(), 'mode': 'ajaxUpload'},
onbeforeunload: function () {
if (uploadImages.length == 0) {
return false;
}
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'deleteGarbageImage', bdId: $('[name=bdId]').val(), deleteImage: uploadImages.join('^|^')},
cache: false,
}).success(function (data) {
}).error(function (e) {
});
},
successAfter: function (data) {
uploadImages.push(data.saveFileNm);
},
failAfter : function(data) {
if (data.result == 'fail' && fileHidden.name == 'upfiles[]') {
$('input[name="' + fileHidden.name + '"]').eq(idx).val('');
}
}
}
)
if(gdAjaxUpload.isSuccess == false){
return false;
}
 
var fileReader = new FileReader();
fileName = this.files[0].name;
 
fileReader.readAsDataURL(this.files[0]);
fileReader.onload = function () {
previewUrl = getPrevImg(fileName, this.result);
$(templateContainer).clone(true).appendTo($("#board-attach"));
$container.removeClass("template");
 
$fileFace.addClass("preview").css({
"background-image": "url('" + previewUrl + "')",
"background-position": "center",
"background-size": "cover",
"background-repeat": "no-repeat",
"-webkit-background-size": "cover",
"-moz-background-size": "cover",
"-o-background-size": "cover"
});
 
fileFace.onclick = function (e) {
if (confirm(__("첨부된 파일을 삭제하시겠습니까?"))) {
$("input[name='uploadFileNm[" + index + "]']").remove();
$("input[name='saveFileNm[" + index + "]']").remove();
$container.remove();
} else {
e.stopPropagation();
}
};
};
 
fileReader.onerror = function () {
alert(__("이미지 로드 중 에러가 발생했습니다."));
};
};
$fileHidden.trigger("click");
}
});
}
 
function getPrevImg(fileName, imgUrl) {
var fileExt = '';
if (fileName.indexOf('.') > 0) {
_fileExt = fileName.substring(fileName.lastIndexOf('.'), fileName.length).toLowerCase();
fileExt = _fileExt.replace('.', '');
}
 
switch (fileExt) {
case 'gif':
case 'jpg':
case 'bmp':
case 'png':
case 'jpeg':
return imgUrl;
break;
case 'doc':
case'docx':
fileName = 'icon_file_doc.png';
break;
case 'ppt':
case'pptx':
fileName = 'icon_file_ppt.png';
break;
case 'pdf':
fileName = 'icon_file_pdf.png';
break;
case 'xls':
case'xlsx':
fileName = 'icon_file_xls.png';
break;
case 'txt':
fileName = 'icon_file_txt.png';
break;
default :
fileName = 'icon_file_etc.png';
}
previewUrl = mobileSkinPath + '/img/new/' + fileName;
 
return previewUrl;
}
 
function setAddGoods(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectGoodsTblTr').html());
var param = {goodsNo: val.goodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, goodsPrice: val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectGoodsBox").empty();
$("#selectGoodsBox").append(selecttblTrHtml);
$('.itemselect-comment').hide();
}
 
function setAddOrder(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectOrderTblTr').html());
var param = {orderNo: val.orderNo, orderGoodsNo: val.orderGoodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, optionName:val.optionName,goodsPrice:val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectOrderBox").empty();
$("#selectOrderBox").append(selecttblTrHtml);
$('.itemselect-comment').hide();
}
function captchaReload() {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../board/captcha.php?ch=' + someDate);
}, 1);
}
 
/*
function addUpload() {
uploadBoxCount = $('#uploadBox').find('.file-upload').length;
if (uploadBoxCount > 4) {
alert("업로드는 최대 5개만 지원합니다");
return;
}
 
var addUploadBox = _.template(
$("script.template").html()
);
 
$('#uploadBox:last').append(addUploadBox({idx: uploadBoxCount + 1}));
}
 
function uploadRemove(obj) {
obj.closest('.file-upload').remove();
}
*/
var boardSubmitFl = true;
$(document).ready(function () {
var params = {};
if(typeof bdId != 'undefined') {
params = {
bdId : bdId,
bdSno : bdSno,
};
}
$('.js-board-layer').bind('click',function(){
var type = $(this).data('type');
$.ajax({
method: "POST",
data : params,
cache: false,
url: "../share/layer_"+type+"_select.php",
success: function (data) {
$('#popup-select-goods').empty().append(data);
$('#popup-select-goods').show();
},
error: function (data) {
alert(data.message);
}
});
})
 
$('body').on('click','.js-layer-close',function(e){
e.stopPropagation();
$('.js-select-confirm').off('click');
$('#popup-select-goods').empty();
$('#popup-select-goods').hide();
})
 
$('body').on('click','.js-select-remove',function(){
$(this).closest('div.js-select-item').remove();
$('.itemselect-comment').show();
})
 
uploadBoxCount = $('#uploadBox').find('.file-upload').length;
$('.file-upload:last').find('label').attr('for', 'attach' + uploadBoxCount);
$('.file-upload:last').find('input[type=file]').attr('id', 'attach' + uploadBoxCount);
 
if (cfgUploadFl == 'y') {
$('#addUploadBtn').bind('click', function () {
addUpload();
});
}
 
$("#frmWrite").validate({
ignore: 'altcha-widget *',
submitHandler: function (form) {
if (boardSubmitFl === false) {
alert(__('처리중입니다. 잠시만 기다려주세요.'));
return false;
}
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return false;
}
if($(form).find('[name=uploadType]').val() == 'ajax') {
$('input:file').prop('disabled', true);
}
if (cfgEditorFl == 'y') {
oEditors.getById["editor"].exec("UPDATE_CONTENTS_FIELD", []); // 에디터의 내용이 textarea에 적용됩니다.
}
boardSubmitFl = false;
form.submit();
$('iframe[name=ifrmProcess]').load(function(){
var doc = this.contentWindow ? this.contentWindow.document : (this.contentDocument ? this.contentDocument : this.document);
var root = doc.documentElement ? doc.documentElement : doc.body;
var result = root.textContent ? root.textContent : root.innerText;
result = result.replace(/(\s+)|(\s+$)|(\r)|(\n)/g, "");
if (result.indexOf(__('저장되었습니다')) < 0 && result.indexOf('/board/list.php') < 0) { //실패 시 버튼 활성화
boardSubmitFl = true;
}
});
},
rules: {
private: 'required',
contents: {
required: function (textarea) {
if (cfgEditorFl == 'y') {
var editorcontent = oEditors.getById[textarea.id].getIR(); // 에디터의 내용 가져오기.
editorcontent = editorcontent.replace(/<(?!img).*?>/ig, '').replace('&nbsp;', ''); //이미지테그제외한 테그제거
return editorcontent.length === 0;
}
else {
return textarea.value.length === 0;
}
}
},
writerNm: 'required',
writerPw: 'required',
subject: 'required',
goodsPt: 'required',
writerEmail: {
required: true,
email: true
},
},
messages: {
writerNm: {
required: __('작성자를 입력해주세요.')
},
writerPw: {
required: __('비밀번호를 입력해주세요.')
},
subject: {
required: __('제목을 입력해주세요.')
},
contents: {
required: __('내용을 입력해주세요')
},
private: {
required: __('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')
},
goodsPt: {
required: __('평가를 체크해주세요.')
},
writerEmail: {
required: __('이메일을 입력해주세요.'),
email: __('메일 형식이 틀렸습니다.')
}
}
})
 
$("select[id=category]").on("change", function(){
var category = $(this).val();
var bdId = $('[name="bdId"]').val();
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'category', bdId: bdId, 'category': category},
dataType: 'text',
cache: false,
async: false,
}).success(function (result) {
$("textarea[name=contents]").val(result).focus();
}).error(function (e) {
alert(e.responseText);
});
});
});
 
 
function initFileUpload() {
var maxUploadFile = maxFileNumber;
maxUploadFile = maxUploadFile ? maxUploadFile : 0;
if (mode == 'modify') {
for (var i = 0; i < prvFilePath.length; i++) {
prevImg = getPrevImg(prvFileName[i], prvFilePath[i]);
$newItem = $("#board-attach li.item.template").clone();
$("#board-attach li.item.template").before($newItem);
$newItem.removeClass("template");
$prvFileFace = $newItem.find('.file-face');
prewFileFace = $prvFileFace[0];
$prvFileFace.addClass("preview").css({
"background-image": "url('" + prevImg + "')"
});
}
 
$("#board-attach li.item:not(.template)").each(function (index) {
this.onclick = function () {
var delFilehtml = '';
if (confirm(__('첨부된 파일을 삭제하시겠습니까?'))) {
delFilehtml = '<input type="hidden" name="delFile[' + index + ']" value="y" />';
$('#frmWrite').append(delFilehtml);
this.remove();
}
};
});
}
 
$('#board-attach li.item.template').off().on("click", 'button.file-face', function () {
var templateContainer = this.parentNode;
 
// templateContainer.remove('input');
var $container = $(templateContainer);
var $fileFace = $container.find("button.file-face"), fileFace = $fileFace[0];
var $fileHidden = $container.find("input.file-hidden"), fileHidden = $fileHidden[0];
var idx = $('input[name="' + fileHidden.name + '"]').index(this);
if ($("#board-attach li.item:not(.template) input.file-hidden").length >= maxUploadFile) {
alert(__('첨부파일은 최대 %1$s개 까지 업로드 가능합니다.', maxUploadFile.toString()));
return false;
}
else {
$fileHidden.val('');
fileHidden.onchange = function () {
var index = $("#board-attach").find('li').index($(this).closest("li"));
//ajax업로드 처리
var uploadImages = [];
gdAjaxUpload.upload(
{
formObj: $("#frmWrite"),
thisObj: $(this),
actionUrl: '../board/board_ps.php',
params: {bdId: $('[name=bdId]').val(), 'mode': 'ajaxUpload'},
onbeforeunload: function () {
if (uploadImages.length == 0) {
return false;
}
$.ajax({
method: "POST",
url: "../board/board_ps.php",
data: {mode: 'deleteGarbageImage', bdId: $('[name=bdId]').val(), deleteImage: uploadImages.join('^|^')},
cache: false,
}).success(function (data) {
}).error(function (e) {
});
},
successAfter: function (data) {
uploadImages.push(data.saveFileNm);
},
failAfter : function(data) {
if (data.result == 'fail' && fileHidden.name == 'upfiles[]') {
$('input[name="' + fileHidden.name + '"]').eq(idx).val('');
}
}
}
)
if(gdAjaxUpload.isSuccess == false){
return false;
}
 
var fileReader = new FileReader();
fileName = this.files[0].name;
 
fileReader.readAsDataURL(this.files[0]);
fileReader.onload = function () {
previewUrl = getPrevImg(fileName, this.result);
$(templateContainer).clone(true).appendTo($("#board-attach"));
$container.removeClass("template");
 
$fileFace.addClass("preview").css({
"background-image": "url('" + previewUrl + "')",
"background-position": "center",
"background-size": "cover",
"background-repeat": "no-repeat",
"-webkit-background-size": "cover",
"-moz-background-size": "cover",
"-o-background-size": "cover"
});
 
fileFace.onclick = function (e) {
if (confirm(__("첨부된 파일을 삭제하시겠습니까?"))) {
$("input[name='uploadFileNm[" + index + "]']").remove();
$("input[name='saveFileNm[" + index + "]']").remove();
$container.remove();
} else {
e.stopPropagation();
}
};
};
 
fileReader.onerror = function () {
alert(__("이미지 로드 중 에러가 발생했습니다."));
};
};
$fileHidden.trigger("click");
}
});
}
 
function getPrevImg(fileName, imgUrl) {
var fileExt = '';
if (fileName.indexOf('.') > 0) {
_fileExt = fileName.substring(fileName.lastIndexOf('.'), fileName.length).toLowerCase();
fileExt = _fileExt.replace('.', '');
}
 
switch (fileExt) {
case 'gif':
case 'jpg':
case 'bmp':
case 'png':
case 'jpeg':
return imgUrl;
break;
case 'doc':
case'docx':
fileName = 'icon_file_doc.png';
break;
case 'ppt':
case'pptx':
fileName = 'icon_file_ppt.png';
break;
case 'pdf':
fileName = 'icon_file_pdf.png';
break;
case 'xls':
case'xlsx':
fileName = 'icon_file_xls.png';
break;
case 'txt':
fileName = 'icon_file_txt.png';
break;
default :
fileName = 'icon_file_etc.png';
}
previewUrl = mobileSkinPath + '/img/new/' + fileName;
 
return previewUrl;
}
 
function setAddGoods(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectGoodsTblTr').html());
var param = {goodsNo: val.goodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, goodsPrice: val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectGoodsBox").empty();
$("#selectGoodsBox").append(selecttblTrHtml);
$('.itemselect-comment').hide();
}
 
function setAddOrder(frmData) {
$.each(frmData.info, function (key, val) {
var selectTblTr = _.template($('#selectOrderTblTr').html());
var param = {orderNo: val.orderNo, orderGoodsNo: val.orderGoodsNo, goodsImgageSrc: val.goodsImgageSrc, goodsName: val.goodsName, optionName:val.optionName,goodsPrice:val.goodsPrice};
selecttblTrHtml = selectTblTr(param);
});
$("#selectOrderBox").empty();
$("#selectOrderBox").append(selecttblTrHtml);
$('.itemselect-comment').hide();
}
 
data/skin/mobile/story_g/js/gd_common.js+46
변경 전gd_common.js
return formatted;
};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function resize_frame(obj) {
var iframeHeight =
(obj).contentWindow.document.body.clientHeight;
 
변경 후gd_common.js
return formatted;
};
 
/* iframe(mypage 등)으로 board 목록이 실릴 때, onload 1회 측정(resize_frame/gd_resize_frame) 이후에도
댓글/답글 폼 토글, ALTCHA 위젯 지연 렌더, 댓글 등록/삭제 등으로 내용 높이가 바뀌면
부모 iframe 높이를 다시 맞춘다. body 높이가 실제로 변했을 때만 호출해 재측정 루프를 방지. */
(function () {
let parentResize;
try {
if (window.parent === window) {
return; // 최상위 문서 → 대상 아님
}
parentResize = window.parent.gd_resize_frame || window.parent.resize_frame;
} catch (e) {
return; // cross-origin 부모 → 접근 불가, 대상 아님
}
if (typeof parentResize !== 'function' || typeof window.ResizeObserver === 'undefined') {
return;
}
const startObserve = function () {
const frameEl = window.frameElement
|| (window.name ? window.parent.document.getElementsByName(window.name)[0] : null);
if (!frameEl || !document.body) {
return;
}
let timer = null;
let lastHeight = -1;
const observer = new ResizeObserver(function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function () {
const height = document.body.clientHeight;
if (height === lastHeight) {
return; // 실제 콘텐츠 높이 변화 없음 → 재측정 루프 방지
}
lastHeight = height;
parentResize.call(window.parent, frameEl);
}, 100);
});
observer.observe(document.body);
};
if (document.body) {
startObserve();
} else {
document.addEventListener('DOMContentLoaded', startObserve);
}
})();
 
function resize_frame(obj) {
var iframeHeight =
(obj).contentWindow.document.body.clientHeight;
 
data/skin/mobile/story_g/js/gd_member2.js+12-18
변경 전gd_member2.js
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore",
focusCleanup: true,
rules: {
memPwRe: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
},
captchaKey: {
required: true
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
},
captchaKey: {
required: function () {
return alert(__('자동등록방지 문자를 입력해주세요.'));
}
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
}
if (validate.form()) {
 
 
 
 
 
$(form).find('select').prop('disabled', false);
$('.btn-join').attr("disabled", true);
 
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore",
focusCleanup: true,
rules: {
memPwRe: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
},
captchaKey: {
required: true
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
},
captchaKey: {
required: function () {
return alert(__('자동등록방지 문자를 입력해주세요.'));
}
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
}
if (validate.form()) {
 
 
 
 
 
$(form).find('select').prop('disabled', false);
$('.btn-join').attr("disabled", true);
 
 
변경 후gd_member2.js
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore, altcha-widget *",
focusCleanup: true,
rules: {
memPwRe: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
 
 
 
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
 
 
 
 
 
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
}
if (validate.form()) {
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return;
}
$(form).find('select').prop('disabled', false);
$('.btn-join').attr("disabled", true);
 
is_my_page = false;
validate_settings = {
defaults: {
ignore: ".ignore, altcha-widget *",
focusCleanup: true,
rules: {
memPwRe: {
rangelength: function () {
return [$('input[name="busiNo"]').data('charlen'), $('input[name="busiNo"]').data('charlen')];
}
 
 
 
}
},
messages: {
rangelength: function () {
return __("사업자번호는 %i자로 입력해야 합니다.", $('input[name="busiNo"]').data('charlen'));
}
 
 
 
 
 
}
},
errorElement: 'div',
validate.settings.submitHandler = func;
}
if (validate.form()) {
const altchaWidget = document.querySelector('altcha-widget');
if (altchaWidget && typeof altchaWidget.getState === 'function' && altchaWidget.getState() !== 'verified') {
alert(__('자동등록방지 확인을 완료해주세요.'));
return;
}
$(form).find('select').prop('disabled', false);
$('.btn-join').attr("disabled", true);
 
 
data/skin/mobile/story_g/member/join.html+4-20
변경 전join.html
</div>
</form>
</section>
 
 
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
<!--{? joinField.captcha.use == 'y'}-->
$('#reload_captcha').click(function (e) {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../member/captcha.php?ch=' + someDate);
}, 1);
}).trigger('click');
<!--{/}-->
select_email_domain('email');
gd_member2.init($formJoin);
</div>
</form>
</section>
 
 
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
<!--{? joinField.captcha.use == 'y'}-->
$('#reload_captcha').click(function (e) {
$('#captchaImg').removeAttr('src');
setTimeout(function () {
var someDate = new Date();
someDate = someDate.getTime();
$('#captchaImg').attr('src', '../member/captcha.php?ch=' + someDate);
}, 1);
}).trigger('click');
<!--{/}-->
select_email_domain('email');
gd_member2.init($formJoin);
 
변경 후join.html
</div>
</form>
</section>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
 
 
 
 
 
 
 
 
 
select_email_domain('email');
gd_member2.init($formJoin);
</div>
</form>
</section>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"></script>
<script type="module" src="\{=c.PATH_MOBILE_SKIN}js/altcha/i18n.js"></script>
<script type="text/javascript">
var paycoProfile = {paycoProfile};
var naverProfile = {naverProfile};
});
<!--{/}-->
 
 
 
 
 
 
 
 
 
 
select_email_domain('email');
gd_member2.init($formJoin);
 
data/skin/mobile/story_g/member/_join_view_captcha.html+2-32
변경 전_join_view_captcha.html
<div class="account_content">
<div class="table1 gd_member_option_table">
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" id="reload_captcha" class="normal-btn small1 captchareload">
<em><img src="../img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="account_content">
<div class="table1 gd_member_option_table">
<div class="input_wrap ty3">
<div class="capcha">
<div class="capcha-img">
<img src="./captcha.php" align="absmiddle" id="captchaImg"/>
</div>
<div class="capcha-body">
<div class="capcha-text">
<p class="pre">{=__('보이는 순서대로 %s숫자 및 문자를 모두 입력해 주세요.', '<br />')}</p>
</div>
<div class="txt-field hs">
<input type="text" name="captchaKey" maxlength="5" onKeyUp="this.value=this.value.toUpperCase();" onfocus="this.select()" placeholder="{=__('문자를 입력해주세요.')}" class="text captcha">
</div>
<button type="button" id="reload_captcha" class="normal-btn small1 captchareload">
<em><img src="../img/etc/icon-reset.png" alt="" class="va-m"> {=__('이미지 새로고침')}</em>
</button>
</div>
</div>
</div>
</div>
</div>
 
변경 후_join_view_captcha.html
<div class="account_content">
<div class="table1 gd_member_option_table">
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
</div>
</div>
<div class="account_content">
<div class="table1 gd_member_option_table">
<div class="input_wrap ty3">
{=includeWidget('share/_altcha.html', 'altchaChallenge', './captcha.php')}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</div>
</div>
</div>
 
data/skin/mobile/story_g/share/_altcha.html+28
변경 전_altcha.html
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
변경 후_altcha.html
{*** [공통 위젯] 자동등록방지 ALTCHA | share/_altcha.html (Widget\Mobile\Share\AltchaWidget) ***}
{*** altchaChallenge : (필수) challenge 발급 스크립트 경로. 폼 위치에 따라 상대/절대 경로가 다르므로 호출부에서 지정 (mode 쿼리스트링은 위젯이 서버 사이드에서 부착) ***}
{*** altchaSrc : (옵션) 'y' 이면 data-altcha-src 부여 → AJAX 인라인 주입 폼에서 altcha.js 동적 로드 ***}
{*** altchaConfig : (옵션) altcha-widget configuration JSON 을 덮어씀. 미지정 시 {"hideLogo":true,"hideFooter":true} ***}
<div class="capcha capcha_altcha"<!--{? altchaSrc == 'y'}--> data-altcha-src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"<!--{/}-->>
<altcha-widget
challenge="{=altchaChallenge}?mode={=altchaMode}"
name="altcha"
auto="off"
language="{=gGlobal.locale}"
configuration='<!--{? altchaConfig}-->{=altchaConfig}<!--{:}-->{"hideLogo":true,"hideFooter":true}<!--{/}-->'
type="native"
></altcha-widget>
</div>
{*** [공통 위젯] 자동등록방지 ALTCHA | share/_altcha.html (Widget\Mobile\Share\AltchaWidget) ***}
{*** altchaChallenge : (필수) challenge 발급 스크립트 경로. 폼 위치에 따라 상대/절대 경로가 다르므로 호출부에서 지정 (mode 쿼리스트링은 위젯이 서버 사이드에서 부착) ***}
{*** altchaSrc : (옵션) 'y' 이면 data-altcha-src 부여 → AJAX 인라인 주입 폼에서 altcha.js 동적 로드 ***}
{*** altchaConfig : (옵션) altcha-widget configuration JSON 을 덮어씀. 미지정 시 {"hideLogo":true,"hideFooter":true} ***}
<div class="capcha capcha_altcha"<!--{? altchaSrc == 'y'}--> data-altcha-src="\{=c.PATH_MOBILE_SKIN}js/altcha/altcha.js"<!--{/}-->>
<altcha-widget
challenge="{=altchaChallenge}?mode={=altchaMode}"
name="altcha"
auto="off"
language="{=gGlobal.locale}"
configuration='<!--{? altchaConfig}-->{=altchaConfig}<!--{:}-->{"hideLogo":true,"hideFooter":true}<!--{/}-->'
type="native"
></altcha-widget>
</div>