Advertisement
mikuru_chan

Untitled

Apr 3rd, 2020
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 165.53 KB | None | 0 0
  1. lilo.templates["add-to-fav"] = '<div class="add-to-fav">' + ' Добавь МегаТест в закладки и получи <b>5 монеток</b>! <div class="btn green" el="add">Добавить</div>' + "</div>";
  2. lilo.templates["admin-keystep-item"] = '<div class="admin-keystep-item">' + ' <img bind="info.step.img" handler="img">' + ' <div bind="info.step.question"></div>' + ' <div bind="info.variants" handler="list" renderer="step-variant-item"></div>' + "</div>" + "";
  3. lilo.templates["admin-result-item"] = '<div class="admin-result-item">' + ' <img class="admin-result-itemimg upload-img" bind="img" handler="img">' + ' <div class="admin-result-iteminfo">' + ' <div class="admin-result-itemtext" bind="text"></div>' + ' <div class="admin-result-itemcaption">Ответы которые приведут к данному результату:</div>' + ' <div class="admin-result-itemkeysteps-container" bind="keySteps" handler="list" renderer="admin-keystep-item"></div>' + " </div>" + "</div>";
  4. lilo.templates["alert"] = '<div handler="view" renderer="dialog">' + ' <div class="alert">' + ' <img bind="isWarn" handler="setVisible" src="res/warning.png">' + ' <div class="alerttext" bind="message"></div>' + ' <div class="alertbtn-container" bind="isConfirm" handler="setVisible">' + ' <div class="btn blue" el="yes">Ок</div>' + ' <div class="btn" el="no">Отмена</div>' + " </div>" + " </div>" + "</div>" + "";
  5. lilo.templates["base-page"] = "<div>" + ' <div class="base-pageinfo" el="infoContainer">' + " </div>" + ' <div class="base-pagemenu">' + " <table>" + " <tr>" + ' <td class="base-pagemenu-item-container" bind="pages" handler="list" renderer="main-menu-item">' + " </td>" + " <td>" + ' <div bind="userInfo.isProModeActive" handler="setVisible">' + ' <img class="base-pagevipbadge" src="res/vip.png">' + " </div>" + " </td>" + ' <td class="base-pagebalance-container">' + ' Монетки:<img class="base-pagecoin" src="/res/coin.png"><span class="base-pagebalance" bind="userInfo.balance"></span>' + ' <div class="micro-btn green" el="buy">Пополнить</div>' + " </td>" + " </tr>" + " </table>" + " </div>" + ' <div el="topBanner" style="display: none;">' + ' <a target="_blank" href="http://vk.com/app4135619">' + ' <img src="http://testserv2.ru/assets_abriw/images/ads.png">' + " </a>" + " </div>" + ' <div class="base-pagecontent" el="content"></div>' + "</div>";
  6. lilo.templates["catalog-page"] = '<div class="catalog-page">' + ' <div class="catalog-pageoffer-info-block" el="offerBanner" bind="isOfferExist" handler="setVisible">' + ' <img src="/res/Gift-4-icon.png"><br><span >Специальное предложения для Вас</span><br><br><div class="btn green" style="font-weight: normal;" el="openOffer">Получить бесплатно <span bind="offerCoins"></span> монет</div>' + " </div>" + ' <div style="display: none">' + ' <div class="catalog-pagepromode-info-block" el="proModeBanner">' + ' <div class="catalog-pagepromode-info">' + ' <span>Безлимитный доступ</span> ко всем мега тестам на <span>месяц</span> <div class="btn orange" el="activate">Активировать</div>' + " </div>" + " </div>" + ' <div class="catalog-pagepromode-info-block" el="activeProModeInfo">' + ' <div class="catalog-pagepromode-info">' + " Безлимитный доступ ко всем тестам активен" + " </div>" + " </div>" + " </div>" + ' <div bind="vipTestList" handler="view" renderer="vip-test-list"></div>' + ' <div class="catalog-pagest-add">' + ' <div id="vk_ads_2647"></div>' + " </div>" + ' <div class="catalog-pagelist" bind="list1" handler="view" renderer="test-list"></div>' + ' <div class="catalog-pagest-add">' + ' <div id="vk_ads_2677"></div>' + " </div>" + ' <div class="catalog-pagelist" bind="list2" handler="view" renderer="test-list"></div>' + ' <div class="catalog-pagest-add">' + ' <div id="vk_ads_2678"></div>' + " </div>" + ' <div class="catalog-pagelist" bind="list3" handler="view" renderer="test-list"></div>' + "</div>";
  7. lilo.templates["catalog-test-item"] = '<div class="catalog-test-item">' + ' <img class="catalog-test-itemicon" bind="struct.icon" handler="img">' + ' <div class="catalog-test-itemlikes">' + ' &hearts;<span bind="postCount"></span>' + " </div>" + ' <div class="catalog-test-itemtitle" bind="struct.title"></div>' + "</div>";
  8. lilo.templates["catalog-test-item2"] = '<div class="catalog-test-item2">' + ' <div class="catalog-test-item2title" bind="struct.title"></div>' + ' <div class="catalog-test-item2icon-block">' + ' <img class="catalog-test-item2icon" bind="struct.icon" handler="img" el="icon">' + " </div>" + ' <div class="catalog-test-item2info">' + ' <div class="catalog-test-item2description" bind="viewModel.desc"></div>' + ' <div class="catalog-test-item2likes">' + ' &hearts;<span bind="postCount"></span>' + " </div>" + " </div>" + "</div>";
  9. lilo.templates["catalog-vip-test-item"] = '<div class="catalog-vip-test-item">' + ' <img src="res/golden-ribbon.png" class="catalog-vip-test-itemribbon">' + ' <img class="catalog-vip-test-itemicon" bind="struct.cover" handler="img">' + ' <div class="catalog-vip-test-itemtitle" bind="struct.title"></div>' + "</div>";
  10. lilo.templates["coins-buy-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="coins-buy-dialog">' + ' <div class="coins-buy-dialogtitle">Магазин монет</div>' + ' <div class="coins-buy-dialogcol">' + ' <div class="coins-buy-dialogitem">' + ' <img src="/res/coins_1.png"><span class="coins-buy-dialogcoins-text">30 монет</span>' + " </div>" + ' <div class="coins-buy-dialogitem">' + ' <img src="/res/coins_2.png"><span class="coins-buy-dialogcoins-text">100 монет</span>' + " </div>" + " </div>" + ' <div class="coins-buy-dialogcol" style="width: 100px">' + ' <div class="coins-buy-dialogitem">' + ' = <span class="coins-buy-dialogvotes-text" >1 голос</span>' + " </div>" + ' <div class="coins-buy-dialogitem">' + ' = <span class="coins-buy-dialogvotes-text">3 голоса</span>' + " </div>" + " </div>" + ' <div class="coins-buy-dialogcol" style="width: 100px">' + ' <div class="coins-buy-dialogitem">' + ' <div class="btn" el="buy1">Купить</div>' + " </div>" + ' <div class="coins-buy-dialogitem">' + ' <div class="btn" el="buy2">Купить</div>' + " </div>" + " </div>" + " </div>" + "</div>";
  11. lilo.templates["comment-item"] = '<div class="comment-item">' + " <table>" + " <tr>" + ' <td class="comment-itemuser-info">' + ' <div class="comment-itemauthor" bind="viewModel.author"></div>' + ' <div bind="viewModel.created"></div>' + " </td>" + ' <td class="comment-itemtext">' + ' <div bind="text"></div>' + " </td>" + " </tr>" + " </table>" + "</div>";
  12. lilo.templates["dialog"] = '<div class="dialoglayer">' + ' <div el="container" class="dialogdialog-container">' + ' <img el="closeBtn" src="res/close.png">' + " <div content></div>" + " </div>" + "</div>";
  13. lilo.templates["editor-activation-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="editor-activation-dialog">' + ' <div class="editor-activation-dialognote">' + " Для активации редактора нужно ввести кодовое слово. Его можно узнать тут -> vk.com/megatest_club" + " </div>" + ' <input el="passInput" placeholder="Введите кодовое слово">' + " <br>" + " <br>" + ' <div class="btn" el="checkPass">Активировать редактор</div>' + " </div>" + "</div>";
  14. lilo.templates["editor-page"] = '<div class="editor-page">' + ' <div class="editor-pagesubpage-container" el="subpageContainer">' + ' <div class="editor-pagesubpage">' + ' <div class="form-splitter">Мои тесты-черновики (скрыты от всех)</div>' + ' <div class="btn" el="addTest">Добавить тест</div>' + ' <div class="editor-pagecontainer" bind="privateTestList" handler="list" renderer="private-test-editor-item"></div>' + ' <div class="form-splitter">Мои публичные тесты (можно показывать другим пользователям)</div>' + ' <div class="editor-pagecontainer" bind="publicTestList" handler="list" renderer="public-test-editor-item"></div>' + " </div>" + ' <div class="editor-pagesubpage">' + ' <div class="btn" el="back">Назад к списку</div><div class="btn" el="play">Запустить тест</div>' + " <br><br>" + ' <div class="form-splitter">Основные параметры теста</div>' + ' <div class="editor-pagecontainer">' + ' <div class="form-row">' + ' <div class="form-label">Кто может пройти тест:</div>' + ' <div class="editor-pagesex-selector" bind="itemToEdit.struct.sex" handler="radio" el="sex">' + ' <input type="radio" name="sex" value="0"><span class="editor-pagesex-all">Все</span>' + ' <input type="radio" name="sex" value="1"><span class="editor-pagesex-women">Только девушки</span>' + ' <input type="radio" name="sex" value="2" ><span class="editor-pagesex-men">Только парни</span>' + " </div>" + " </div>" + ' <!--<div class="form-row">-->' + ' <!--<div class="form-label">Каталог:</div>-->' + ' <!--<select bind="itemToEdit.struct.catalog" handler="select" el="catalog">-->' + ' <!--<option value="0">Разное</option>-->' + " <!--</select>-->" + " <!--</div>-->" + ' <div class="form-row">' + ' <div class="form-label">Название:</div>' + ' <input el="title" type="text" handler="input" bind="itemToEdit.struct.title">' + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Описание:</div>' + ' <textarea el="description" bind="itemToEdit.struct.description" handler="input"></textarea>' + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Иконка:</div>' + ' <div class="inline">' + ' <div class="btn" el="uploadIcon">Изменить иконку</div>' + " <br>" + ' <img class="editor-pageicon upload-img" bind="itemToEdit.struct.icon" handler="setAttr" attr="src" default="res/1px.png">' + " </div>" + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Обложка:</div>' + ' <div class="inline">' + ' <div class="btn" el="uploadCover">Изменить обложку</div>' + " <br>" + ' <img class="editor-pagecover upload-img" bind="itemToEdit.struct.cover" handler="setAttr" attr="src" default="res/1px.png">' + " </div>" + " </div>" + " </div>" + ' <div class="form-splitter">Список вопросов теста</div>' + ' <div class="editor-pagecontainer">' + ' <div class="btn" el="addStep1">Добавить вопрос</div>' + ' <div bind="itemToEdit.struct.steps" handler="list" renderer="step-item" editable="true"></div>' + ' <div bind="viewModel.showExAddStepBtn" handler="setVisible">' + ' <div class="btn" el="addStep2">Добавить вопрос</div>' + " </div>" + " </div>" + ' <div class="form-splitter">Результаты теста</div>' + ' <div class="editor-pagecontainer">' + ' <div class="btn" el="addResult1">Добавить результат</div>' + ' <div bind="itemToEdit.struct.results" handler="list" renderer="result-item"></div>' + ' <div bind="viewModel.showExAddResultBtn" handler="setVisible">' + ' <div class="btn" el="addResult2">Добавить результат</div>' + " </div>" + " </div>" + " </div>" + " </div>" + "</div>";
  15. lilo.templates["friend-list"] = '<div class="friend-list">' + ' <input el="search" placeholder="Для поиска введите имя друга...">' + ' <div el="list" class="friend-listlist" bind="list" renderer="friend-list-item" handler="list"></div>' + "</div>";
  16. lilo.templates["friend-list-item"] = '<div class="friend-list-item" bind="can_post" handler="addClass" false="friend-list-itemblocked">' + ' <img bind="photo_50" handler="img">' + ' <span bind="first_name"></span> <span bind="last_name"></span>' + "</div>";
  17. lilo.templates["get-coins-dialog"] = '<div handler="view" renderer="dialog" >' + ' <div class="get-coins-dialog">' + ' <div class="btn green get-coins-dialogbuy-btn" el="buy">Купить в магазине</div>' + ' <div class="get-coins-dialogseparator">' + " --- или ---" + " </div>" + ' <div class="btn get-coins-dialogbuy-btn" el="offer">Выполнить задание</div>' + ' <div class="get-coins-dialogseparator">' + " --- или ---" + " </div>" + ' <div el="recommendView"></div>' + " </div>" + "</div>";
  18. lilo.templates["group-item"] = '<div class="group-item">' + ' <img bind="photo" handler="img">' + ' <div class="group-itemtitle" bind="can_post" handler="addClass" false="group-itemblocked">' + ' <span bind="name"></span>' + " </div>" + "</div>";
  19. lilo.templates["image-upload-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="image-upload-dialog">' + ' <div id="cropper"></div>' + ' <div class="image-upload-dialogpreloader">Загрузка редактора...</div>' + " </div>" + "</div>";
  20. lilo.templates["inplace-text-editor"] = "<div>" + ' <div class="inplace-text-editortext" bind el="label"></div>' + ' <input type="text" style="display: none;" el="input" >' + "</div>";
  21. lilo.templates["keystep-item"] = '<div class="keystep-item">' + ' <div class="keystep-itemquestion" bind="question"></div>' + ' <div class="keystep-itemvariants" bind="variants" handler="list" renderer="keystep-variant-item"></div>' + ' <div class="keystep-itemskip-variant">' + ' <input type="checkbox" bind="viewModel.isSkipVariant" handler="check" disabled> Ответ на этот вопрос не будет учитываться' + " </div>" + "</div>";
  22. lilo.templates["keystep-variant-item"] = "<div>" + ' <input type="checkbox" bind="selected" handler="check">' + ' <span bind="text"></span>' + "</div>";
  23. lilo.templates["main-menu-item"] = '<div class="main-menu-item" bind="selected" handler="addClass" true="selected">' + ' <span bind="menuName"></span>' + "</div>" + "";
  24. lilo.templates["micro-btn-item"] = '<div class="micro-btn-item" bind="text">' + "</div>";
  25. lilo.templates["offer-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="offer-dialog">' + ' <div class="offer-dialogtitle">Получи бесплатно <span bind="offer.currency_amount"></span> монеток</div>' + ' <img class="offer-dialogicon" bind="offer.img" handler="img">' + ' <div class="offer-dialogoffer-title" bind="offer.description"></div>' + ' <div class="offer-dialogbtn btn green" el="getOfferBtn">Хочу монетки!</div>' + ' <div class="offer-dialogbtn btn" el="cancelOfferBtn">Отмена</div>' + " </div>" + "</div>";
  26. lilo.templates["offer-item"] = '<div class="offer-item">' + ' <img class="offer-itemicon" bind="img" handler="img">' + ' <div class="offer-iteminfo">' + ' <div class="offer-itemtitle" bind="title"></div>' + ' <div class="offer-itemprice-block">' + ' <div class="offer-itemprice">Получить +<span bind="currency_amount"></span></div><img src="/res/coin.png">' + " </div>" + " </div>" + "</div>";
  27. lilo.templates["private-test-editor-item"] = '<div class="private-test-editor-item">' + ' <img bind="viewModel.isVip" handler="setVisible" src="res/golden-ribbon.png" class="private-test-editor-itemribbon">' + " <table>" + " <tr>" + ' <td class="private-test-editor-itemicon-cell">' + ' <img class="upload-img" bind="struct.icon" handler="setAttr" attr="src" default="res/1px.png">' + " </td>" + " <td>" + ' <div class="private-test-editor-itemtitle" bind="struct.title"></div>' + ' <div class="private-test-editor-itemdescription" bind="struct.description"></div>' + " </td>" + " </tr>" + " </table>" + ' <div class="private-test-editor-itembtn-container">' + ' <div class="btn" el="edit">Редактировать</div>' + ' <div class="btn" el="updatePublicClone">Создать(Oбновить) публичную копию</div>' + ' <div class="btn red" el="remove">Удалить</div>' + " </div>" + "</div>";
  28. lilo.templates["progress-alert"] = '<div handler="view" renderer="dialog">' + ' <div class="progress-alert">' + ' <div bind="viewModel.showError" handler="setVisible" inverse="true">' + ' <img src="res/loading.gif">' + ' <div class="progress-alerttext" bind="message"></div>' + " </div>" + ' <div bind="viewModel.showError" handler="setVisible">' + ' <img src="res/warning.png">' + ' <div class="progress-alerttext" bind="error"></div>' + ' <div class="btn" el="ok">Ок</div>' + " </div>" + " </div>" + "</div>" + "";
  29. lilo.templates["promo-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="promo-dialog">' + ' <a target="_blank" href="//vk.com/love1v#ref_id=megatest">' + ' <img handler="img" bind="bannerUrl" el="banner">' + " </a>" + " </div>" + "</div>";
  30. lilo.templates["public-test-editor-item"] = '<div class="public-test-editor-item" bind="viewModel.statusLabelColor" handler="setCssValue" cssProperty="borderColor">' + ' <img bind="viewModel.isVip" handler="setVisible" src="res/golden-ribbon.png" class="public-test-editor-itemribbon">' + " <table>" + " <tr>" + ' <td class="public-test-editor-itemicon-cell">' + ' <img class="upload-img" bind="struct.icon" handler="setAttr" attr="src" default="res/1px.png">' + " </td>" + " <td>" + ' <div class="public-test-editor-itemtitle" bind="struct.title"></div>' + ' <div class="public-test-editor-itemdescription" bind="struct.description"></div>' + " <div>" + ' <span class="label">Лайки:</span>' + ' &hearts;<span bind="postCount"></span>' + " </div>" + " <div>" + ' <span class="label">Статус проверки:</span>' + ' <div class="public-test-editor-itemstatus" bind="viewModel.statusLabelColor" handler="setCssValue" cssProperty="color">' + ' <span bind="viewModel.statusLabel"></span>' + " </div>" + ' <div class="micro-btn" bind="viewModel.commentReviewExist" handler="setVisible" el="showComments">Комментарии модератора</div>' + " </div>" + " <div>" + ' <span class="label">Статус изменений:</span>' + ' <div class="public-test-editor-itemstatus">' + ' <span bind="viewModel.syncState"></span>' + " </div>" + " </div>" + " </td>" + " </tr>" + " </table>" + ' <div class="public-test-editor-itembtn-container">' + ' <div class="btn" el="share" bind="viewModel.isVip" handler="setVisible" inverse="true">Показать другим пользователям</div>' + ' <div class="btn" el="sendToReview">Отправить в общий каталог</div>' + ' <div class="btn" el="overview">Просмотр</div>' + ' <div class="btn red" el="remove">Удалить</div>' + " </div>" + "</div>";
  31. lilo.templates["publish-activation-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="publish-activation-dialog">' + ' <div class="publish-activation-dialognote">' + " Для доступа в каталог нужно ввести кодовое число. Это число равно произведению вашего id вконтакте на 13." + " </div>" + ' <input el="passInput" placeholder="Введите кодовое число">' + " <br>" + " <br>" + ' <div class="btn" el="checkPass">Активировать</div>' + " </div>" + "</div>";
  32. lilo.templates["result-editor-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="result-editor-dialog">' + ' <div class="form-row">' + ' <div class="form-label">Картинка:</div>' + ' <div class="inline">' + ' <div class="btn" el="uploadImg">Изменить картинку</div>' + " <br><br>" + ' <img class="result-editor-dialogimg upload-img" bind="resultItem.img" handler="setAttr" attr="src" default="res/1px.png">' + " </div>" + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Текст:</div>' + ' <textarea el="text" handler="input" bind="resultItem.text"></textarea>' + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Выбор ответов:</div>' + ' <div class="result-editor-dialogkeysteps-container" bind="keyStepsInfo" handler="list" renderer="keystep-item"></div>' + " </div>" + " </div>" + "</div>";
  33. lilo.templates["result-item"] = '<div class="result-item">' + ' <div class="result-itembtn-container">' + ' <div class="btn" el="edit">Редактировать</div>' + ' <div class="btn red" el="remove">Удалить</div>' + " </div>" + ' <img class="result-itemimg upload-img" bind="img" handler="setAttr" attr="src" default="res/1px.png">' + ' <div class="result-iteminfo">' + ' <div bind="text" class="result-itemtext"></div>' + " </div>" + "</div>";
  34. lilo.templates["review-comments-dialog"] = '<div handler="view" renderer="dialog" >' + ' <div class="review-comments-dialog" bind="comments" handler="list" renderer="comment-item">' + " </div>" + "</div>";
  35. lilo.templates["send-to-review-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="send-to-review-dialog">' + ' <div class="send-to-review-dialognote">Перед тем как тест попадет в общий каталог он будет проверен модераторами. Обязательно выполнение следующих правил:' + " <ul>" + " <li>Тест должен быть аккуратный и не содержать явных грамматических ошибок.</li>" + " <li>Нельзя использовать много смайлов, за ))))), :*** и т.д тест будет отклонен а автор <b>заблокирован</b>.</li>" + " <li>Нельзя использовать одинаковые картинки.</li>" + " <li>Нельзя использовать свои фотографии.</li>" + " <li>Для всех результатов должны быть выбраны варианты ответов.</li>" + " <li>Описание должно содержать информацию о тесте. Копировать название нельзя.</li>" + ' <li>Нельзя создавать вопросы типа "Хочешь узнать ответ?" и ему подобные.</li>' + " <li>Нельзя добавлять одинаковые варианты ответа.</li>" + " <li>Нельзя повторно отправлять тест без исправления замечаний, которые написал модератор.</li>" + " <li>Нельзя ПИСАТЬ БОЛЬШИМИ буквами, за это сразу получите <b>бан</b>.</li>" + " </ul>" + " За нарушения правил модератор может <b>лишить Вас доступа</b> к приложению. Поэтому, лучше проверьте свой тест еще раз перед отправкой.</div>" + ' <input type="checkbox"><span>Я все понял(а).</span>' + ' <div el="sendPanel" style="display: none;">' + ' <textarea el="comment" placeholder="Если хотите Вы можете прикрепить комментарий для модератора..."></textarea>' + ' <div class="btn" el="send">Отправить тест на проверку</div>' + " </div>" + " </div>" + "</div>";
  36. lilo.templates["share-test-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="share-test-dialog">' + ' <div class="share-test-dialoglink-block">' + ' Прямая ссылка на тест - > <span bind="link"></span>' + " </div>" + " <table>" + " <tr>" + ' <td class="share-test-dialogcolumn">' + ' <div class="form-splitter">Мои друзья</div>' + ' <div el="friendList"></div>' + " </td>" + " <td>" + ' <div class="form-splitter">Мои группы в которые могу отправить тест</div>' + ' <div class="share-test-dialoggroup-list" bind="groups" handler="list" renderer="group-item"></div>' + " </td>" + " </tr>" + " </table>" + " </div>" + "</div>";
  37. lilo.templates["st-roll"] = '<div class="st-rolllayer">' + ' <div el="container" class="st-rolldialog-container">' + ' <div class="st-rolltitle">Мега Тесты загружаются<img src="/res/loading-dots.gif"></div>' + ' <div id="ST_Midroll"></div>' + " </div>" + "</div>";
  38. lilo.templates["step-editor-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="step-editor-dialog">' + ' <div class="form-row">' + ' <div class="form-label">Картинка:</div>' + ' <div class="inline">' + ' <div class="btn" el="uploadImg">Изменить картинку</div>' + " <br><br>" + ' <img class="step-editor-dialogimg upload-img" bind="img" handler="setAttr" attr="src" default="res/1px.png">' + " </div>" + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Вопрос:</div>' + ' <textarea el="question" handler="input" bind="question"></textarea>' + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Варианты ответов:</div>' + ' <div class="inline step-editor-dialogvariant-list-container">' + ' <div class="btn" el="addVariant">Добавить вариант ответа</div>' + ' <table class="step-editor-dialogvariant-list" bind="variants" handler="list" renderer="step-variant-editor">' + " </table>" + " </div>" + " </div>" + " </div>" + "</div>";
  39. lilo.templates["step-item"] = '<div class="step-item">' + ' <div class="step-itembtn-container">' + ' <div bind="viewModel.isEditable" handler="setVisible">' + ' <div class="btn" el="edit">Редактировать</div>' + ' <div class="btn red" el="remove">Удалить</div>' + " </div>" + " </div>" + ' <img class="step-itemimg upload-img" bind="img" handler="setAttr" attr="src" default="res/1px.png">' + ' <div class="step-iteminfo">' + ' <div bind="question" class="step-itemquestion"></div>' + ' <div bind="variants" handler="list" renderer="step-variant-item"></div>' + " </div>" + "</div>";
  40. lilo.templates["step-variant-editor"] = '<tr class="step-variant-editor">' + ' <td class="step-variant-editortext">' + ' <input el="text" type="text" bind="text" handler="input">' + " </td>" + ' <td class="step-variant-editorremove" el="remove">' + " </td>" + "</tr>";
  41. lilo.templates["step-variant-item"] = '<div class="step-variant-item">' + ' &bull; <span bind="text"></span>' + "</div>";
  42. lilo.templates["subscribe-dialog"] = '<div handler="view" renderer="dialog" >' + ' <div class="subscribe-dialog">' + " Подпишись на новости приложения и получи" + " <br>" + " <br>" + ' <span class="subscribe-dialogbonus-text">бонус 10 монеток!</span>' + " <br>" + ' <div class="subscribe-dialogimg"></div>' + " <br>" + ' <div class="subscribe-dialogimg2"></div>' + " <br>" + ' <div class="subscribe-dialogsubscribe">' + ' <div id="subscribeWidgetContainer"></div>' + " </div>" + " </div>" + "</div>";
  43. lilo.templates["test-admin-page"] = '<div class="test-admin-page">' + ' <div bind="viewModel.contentExist" handler="setVisible">' + ' <div class="form-splitter">' + " <div>Панель управления</div>" + " </div>" + ' <div class="test-admin-pagecontrol-panel" el="controlPanel">' + ' <div class="btn" el="makeVip">Сделать VIP</div>' + ' <div class="btn" el="showComments">Комментарии</div>' + ' <div class="btn green" el="confirm">Тест прошел проверку</div>' + ' <div class="btn red" el="reject">Отказать</div>' + ' <div class="btn red" el="banAuthor">Забанить автора</div>' + ' <div class="test-admin-pagereview-notes" bind="reviewNotesLev1" handler="list" renderer="micro-btn-item"></div>' + ' <div class="test-admin-pagereview-notes" bind="reviewNotesLev2" handler="list" renderer="micro-btn-item"></div>' + " </div>" + ' <div class="test-admin-pagecomments" el="floatBox">' + ' <textarea placeholder="Комментарий автору теста..." el="comment"></textarea>' + " </div>" + ' <div handler="view" renderer="test-overview" bind="item"></div>' + " </div>" + "</div>";
  44. lilo.templates["test-list"] = '<div class="test-list">' + ' <div class="form-splitter" bind="title"></div>' + ' <div bind="list" handler="list" renderer="catalog-test-item2"></div>' + ' <div class="test-listbtn-container">' + ' <div class="micro-btn blue" el="more">Показать еще тесты</div>' + " </div>" + "</div>";
  45. lilo.templates["test-overview"] = '<div class="test-overview">' + ' <div class="form-splitter">' + " <div>Основные параметры теста</div>" + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Версия:</div>' + ' <span bind="version"></span>' + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Кто может пройти тест:</div>' + ' <select bind="struct.sex" handler="select" disabled>' + ' <option value="0">Все</option>' + ' <option value="1">Только девушки</option>' + ' <option value="2">Только парни</option>' + " </select>" + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Каталог:</div>' + ' <select bind="struct.catalog" handler="select" disabled>' + ' <option value="1">Авто</option>' + ' <option value="0">Разное</option>' + ' <option value="2">Любовь</option>' + " </select>" + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Название:</div>' + ' <span bind="struct.title"></span>' + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Описание:</div>' + ' <div class="form-value-container" bind="struct.description">' + " </div>" + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Иконка:</div><img class="test-overviewicon upload-img" bind="struct.icon" handler="img">' + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Обложка:</div><img class="test-overviewcover upload-img" bind="struct.cover" handler="img">' + " </div>" + ' <div class="form-splitter">Список вопросов теста</div>' + ' <div class="test-overviewcontainer">' + ' <div bind="struct.steps" handler="list" renderer="step-item"></div>' + " </div>" + ' <div class="form-splitter">Результаты теста</div>' + ' <div class="test-overviewcontainer">' + ' <div bind="struct.results" handler="list" renderer="admin-result-item"></div>' + " </div>" + "</div>";
  46. lilo.templates["test-overview-dialog"] = '<div handler="view" renderer="dialog">' + ' <div handler="view" renderer="test-overview"></div>' + "</div>";
  47. lilo.templates["test-player"] = '<div handler="view" renderer="dialog">' + ' <div class="test-player">' + ' <img src="res/golden-ribbon.png" class="test-playerribbon" style="display: none;" el="ribbon">' + ' <div class="test-playercontainer" el="pagesContainer">' + ' <div class="test-playersubpage test-playerpreloadpage" el="preloadPage" >' + ' <img class="test-playericon" bind="struct.icon" handler="img">' + ' <div bind="struct.title" class="test-playerpreload-title"></div>' + ' <div class="test-playerpreload-progress">' + ' <img src="/res/loading.gif">' + " <br>" + " загрузка..." + " </div>" + ' </div><div class="test-playersubpage" el="startPage">' + ' <img class="test-playercover" bind="struct.cover" handler="img">' + ' <div bind="struct.title" class="test-playertitle"></div>' + ' <div bind="struct.description" class="test-playerdescription"></div>' + ' <div class="test-playerbtn-container">' + ' <div class="btn green test-playerpreresult-btn" el="start">Начать тест</div>' + ' <div class="test-playerresult-price" bind="viewModel.isPriceVisible" handler="setVisible">цена: <span bind="price"></span> монет(ы)</div>' + " <br>" + " <br>" + ' <div class="btn" el="getCoins">Получить монеты</div>' + " </div>" + ' <div class="test-playerauthor">' + ' <span class="label">Автор теста: </span>' + ' <img bind="authorInfo.photo_50" handler="img">' + ' <a class="label" target="_blank" bind="viewModel.authorLink" handler="setAttr" attr="href">' + ' <span bind="authorInfo.first_name"></span> <span bind="authorInfo.last_name"></span>' + " </a>" + " </div>" + ' <div class="test-playerstatus-note" bind="isPublic" handler="setVisible" inverse="true">' + " Данный тест не проверялся модераторами, все претензии по содержанию теста сообщайте автору" + " </div>" + ' </div><div class="test-playersubpage test-playerstep-page" el="stepPage">' + ' <div class="test-playersteps-container" el="stepsContainer">' + ' <div class="test-playerstep" bind="step0" renderer="test-player-step" handler="view"></div>' + ' <div class="test-playerstep" bind="step1" renderer="test-player-step" handler="view"></div>' + " </div>" + ' <div class="test-playerbtn-container">' + ' <div class="btn" el="next" bind="viewModel.isNextBtnVisible" handler="setVisible">' + ' <span bind="viewModel.nextBtnLabel"></span>' + " </div>" + " <br>" + ' <span class="test-playerback-btn" el="prev" bind="viewModel.isPrevBtnVisible"' + ' handler="setVisible">назад</span>' + " </div>" + ' <div class="test-playerprogressbar">' + ' <div class="test-playerprogress-fill" bind="viewModel.progress" handler="setCssValue" cssProperty="width"' + ' cssUnits="%"></div>' + " </div>" + " </div>" + ' <div class="test-playersubpage">' + ' <div class="test-playerloading-result" el="resultLoading">' + ' <img src="/res/loading.gif">' + " <div>получение результата...</div>" + " </div>" + " </div>" + ' <div class="test-playersubpage test-playerresult-page" el="resultPage">' + ' <div el="safeResultBlock">' + ' <div class="test-playerresult-text-title" bind="safeResult.testTitle"></div>' + ' <img bind="safeResult.img" handler="img" class="test-playerresult-img">' + ' <div class="test-playerresult-text" bind="safeResult.text"></div>' + " </div>" + ' <div el="generatedResultBlock">' + ' <img bind="generatedResultImageUrl" handler="img" class="test-playerresult-img">' + ' <div class="btn blue" el="shareResult">Сохранить результат</div>' + " </div>" + " </div>" + " </div>" + " </div>" + "</div>";
  48. lilo.templates["test-player-step"] = '<div class="test-player-step">' + ' <img bind="img" handler="img">' + ' <div class="test-player-stepcontainer">' + ' <div class="test-player-stepquestion" bind="question"></div>' + ' <div class="test-player-stepvariant-list" bind="variants" handler="list" renderer="test-player-variant"></div>' + " </div>" + "</div>";
  49. lilo.templates["test-player-variant"] = '<div class="test-player-variant">' + ' <div class="test-player-variantcheckbox" bind="selected" handler="imgcheck"></div><div class="test-player-varianttext" bind="text"></div>' + "</div>" + "";
  50. lilo.templates["test-recommend"] = '<div class="test-recommend">' + ' <div class="test-recommendshare-title">Предложи друзьям пройти тест и получи <span>+1 монетку</span> за каждого друга</div>' + ' <div class="test-recommendmini-info">' + ' <img bind="struct.icon" handler="img">' + ' <div bind="struct.title"></div>' + " </div>" + ' <div class="test-recommendfriend-list" el="friendList"></div>' + "</div>" + "";
  51. lilo.templates["test-recommend-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="test-recommend-dialog" el="content"></div>' + "</div>";
  52. lilo.templates["user-admin-page"] = '<div class="user-admin-page">' + ' <div class="form-row">' + ' <div class="form-label">Поиск пользователя по id:</div>' + ' <div class="inline">' + ' <input type="text" el="searchInput">' + " <br>" + " <br>" + "" + ' <div class="btn" el="search">Найти</div>' + " </div>" + " </div>" + ' <div class="form-splitter">Результат поиска</div>' + ' <div class="form-row">' + ' <div class="form-label">Аватар:</div>' + ' <img bind="user.profile.photo_100" handler="img">' + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Имя:</div>' + ' <span bind="user.profile.first_name"></span> <span bind="user.profile.last_name"></span>' + " </div>" + ' <div class="form-row">' + ' <div class="form-label">Права:</div>' + ' <div class="user-admin-pagepermissions">' + ' <span bind="viewModel.permissionsLabel"></span>' + ' <div class="user-admin-pagepermissions-editor">' + ' <select el="permSelect">' + ' <option value="1">READ</option>' + ' <option value="2">CREATE_TEST</option>' + ' <option value="4">PUBLISH_TEST</option>' + ' <option value="8">MODERATE</option>' + ' <option value="16">CREATE_VIP_TEST</option>' + " </select>" + ' <div class="btn" el="addPerm">Добавить</div>' + ' <div class="btn red" el="removePerm">Удалить</div>' + " </div>" + " </div>" + " </div>" + ' <div class="form-splitter">Мои публичные тесты (можно показывать другим пользователям)</div>' + ' <div class="user-admin-pagecontainer" bind="publicTestList" handler="list" renderer="public-test-editor-item"></div>' + "</div>";
  53. lilo.templates["version-select-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="version-select-dialog">' + ' <input type="radio" name="version" checked value="0">Стандартный тест' + ' <input type="radio" name="version" value="10">Вип тест' + " <br>" + " <br>" + ' <div class="btn" el="create">Создать</div>' + " </div>" + "</div>";
  54. lilo.templates["vip-test-list"] = '<div class="vip-test-list">' + ' <div class="form-splitter" bind="title"></div>' + ' <div bind="list" handler="list" renderer="catalog-vip-test-item"></div>' + ' <div class="vip-test-listbtn-container">' + ' <div class="micro-btn blue" el="more">Показать еще тесты</div>' + " </div>" + "</div>";
  55. lilo.viewFactories["add-to-fav"] = function (e, t) {
  56. var i = lilo.baseViewFactory(e, t);
  57. i.handlers = {
  58. "click@add": "add"
  59. };
  60. return i
  61. };
  62. lilo.viewFactories["alert"] = function (e, t) {
  63. var i = lilo.baseViewFactory(e, t);
  64. i.handlers = {
  65. "click@yes": "yes",
  66. "click@no": "no"
  67. };
  68. return i
  69. };
  70. lilo.viewFactories["base-page"] = function (e, t) {
  71. var i = lilo.baseViewFactory(e, t);
  72. i.handlers = {
  73. "click@buy": "openBuyCoinsDialog"
  74. };
  75. return i
  76. };
  77. lilo.viewFactories["catalog-page"] = function (e, t) {
  78. var i = lilo.baseViewFactory(e, t);
  79. i.handlers = {
  80. "click@activate": "activateProMode",
  81. "click@openOffer": "openOffer"
  82. };
  83. i.showProModeBanner = function () {
  84. i.els.proModeBanner.show()
  85. };
  86. i.hideProModeBanner = function () {
  87. i.els.proModeBanner.hide()
  88. };
  89. i.showActiveProModeInfo = function () {
  90. i.els.activeProModeInfo.show()
  91. };
  92. return i
  93. };
  94. lilo.viewFactories["catalog-test-item"] = function (e, t) {
  95. var i = lilo.baseViewFactory(e, t);
  96. i.handlers = {
  97. "click@el": "click"
  98. };
  99. return i
  100. };
  101. lilo.viewFactories["catalog-test-item2"] = function (e, t) {
  102. var i = lilo.baseViewFactory(e, t);
  103. i.handlers = {
  104. "click@el": "click"
  105. };
  106. i.setPlayed = function () {
  107. $(i.els.icon).addClass("catalog-test-item2visited")
  108. };
  109. i.createViewModel = function (e) {
  110. var t = {
  111. desc: ""
  112. };
  113. if (e.struct.description.length > 80) {
  114. t.desc = e.struct.description.substring(0, 80) + "..."
  115. } else {
  116. t.desc = e.struct.description
  117. }
  118. return t
  119. };
  120. return i
  121. };
  122. lilo.viewFactories["catalog-vip-test-item"] = function (e, t) {
  123. var i = lilo.baseViewFactory(e, t);
  124. i.handlers = {
  125. "click@el": "click"
  126. };
  127. i.setPlayed = function () {};
  128. return i
  129. };
  130. lilo.viewFactories["coins-buy-dialog"] = function (e, t) {
  131. var i = lilo.baseViewFactory(e, t);
  132. i.handlers = {
  133. "click@buy1": function (e) {
  134. this.trigger("buyCoins", {
  135. itemType: 1
  136. })
  137. },
  138. "click@buy2": function (e) {
  139. this.trigger("buyCoins", {
  140. itemType: 2
  141. })
  142. },
  143. "click@buy3": function (e) {
  144. this.trigger("buyCoins", {
  145. itemType: 3
  146. })
  147. }
  148. };
  149. return i
  150. };
  151. lilo.viewFactories["comment-item"] = function (e, t) {
  152. var i = lilo.baseViewFactory(e, t);
  153. i.createViewModel = function (e) {
  154. var t = {
  155. author: e.admin ? "Модератор:" : "Автор:",
  156. created: new Date(e.created).toPrettyString()
  157. };
  158. return t
  159. };
  160. return i
  161. };
  162. lilo.viewFactories["dialog"] = function (e, t) {
  163. var i = lilo.baseViewFactory(e, t);
  164. i.handlers = {
  165. "click@closeBtn": function (e) {
  166. this.close()
  167. }
  168. };
  169. i.setScrollPosition = function (e) {
  170. i.els.container.css("margin-top", e)
  171. };
  172. i.close = function () {
  173. this.trigger("close");
  174. this.el.remove()
  175. };
  176. i.hideCloseBtn = function () {
  177. this.els.closeBtn.hide()
  178. };
  179. return i
  180. };
  181. lilo.viewFactories["editor-activation-dialog"] = function (e, t) {
  182. var i = lilo.baseViewFactory(e, t);
  183. i.handlers = {
  184. "click@checkPass": function (e) {
  185. this.trigger("checkPass", this.els.passInput.val())
  186. }
  187. };
  188. return i
  189. };
  190. lilo.viewFactories["editor-page"] = function (e, t) {
  191. var i = lilo.baseViewFactory(e, t);
  192. i.handlers = {
  193. "click@addTest": "addTest",
  194. "click@editTest": "editTest",
  195. "click@play": "playTest",
  196. "change@sex": function (e) {
  197. this.trigger("sexChanged", parseInt(this.els.sex.find("input:checked").val()))
  198. },
  199. "change@catalog": function (e) {
  200. this.trigger("catalogChanged", parseInt(this.els.catalog.val()))
  201. },
  202. "click@addStep1": "addStep",
  203. "click@addStep2": "addStep",
  204. "click@addResult1": "addResult",
  205. "click@addResult2": "addResult",
  206. "click@uploadIcon": "uploadIcon",
  207. "click@uploadCover": "uploadCover",
  208. "blur@title": function (e) {
  209. this.trigger("titleChanged", this.els.title.val())
  210. },
  211. "blur@description": function (e) {
  212. this.trigger("descriptionChanged", this.els.description.val())
  213. },
  214. "click@back": function (e) {
  215. i.els.subpageContainer.removeClass("editor-pageitem-details");
  216. this.trigger("backToTestList")
  217. }
  218. };
  219. i.showTestItemDetails = function () {
  220. i.els.subpageContainer.addClass("editor-pageitem-details")
  221. };
  222. i.createViewModel = function (e) {
  223. var t = {
  224. showExAddStepBtn: false,
  225. showExAddResultBtn: false
  226. };
  227. lilo.makeObservable(t);
  228.  
  229. function i() {
  230. if (e.itemToEdit) {
  231. t.setShowExAddStepBtn(e.itemToEdit.struct.steps.length > 3)
  232. }
  233. }
  234.  
  235. function r() {
  236. if (e.itemToEdit) {
  237. t.setShowExAddResultBtn(e.itemToEdit.struct.results.length > 3)
  238. }
  239. }
  240. e.on("add,remove", "itemToEdit.struct.steps.self", i);
  241. e.onChange("itemToEdit", i);
  242. e.on("add,remove", "itemToEdit.struct.results.self", r);
  243. e.onChange("itemToEdit", r);
  244. return t
  245. };
  246. return i
  247. };
  248. lilo.viewFactories["friend-list"] = function (e, t) {
  249. var i = lilo.baseViewFactory(e, t);
  250. i.handlers = {
  251. "keyup@search": function (e) {
  252. this.trigger("search", this.els.search.val())
  253. }
  254. };
  255. i.init = function () {
  256. if (t.listHeight) {
  257. this.els.list.height(t.listHeight)
  258. }
  259. if (t.isInlineItems) {
  260. this.els.list.attr("inlineItems", "true")
  261. }
  262. };
  263. return i
  264. };
  265. lilo.viewFactories["friend-list-item"] = function (e, t) {
  266. var i = lilo.baseViewFactory(e, t);
  267. i.handlers = {
  268. "click@el": function (e) {
  269. this.trigger("click", {
  270. pageX: e.pageX,
  271. pageY: e.pageY
  272. })
  273. }
  274. };
  275. i.init = function () {
  276. if (t.containerEl.attr("inlineItems") === "true") {
  277. this.el.addClass("friend-list-iteminline")
  278. }
  279. };
  280. return i
  281. };
  282. lilo.viewFactories["get-coins-dialog"] = function (e, t) {
  283. var i = lilo.baseViewFactory(e, t);
  284. i.handlers = {
  285. "click@buy": "buy",
  286. "click@recommend": "recommend",
  287. "click@offer": "offer"
  288. };
  289. i.createViewModel = function (e) {
  290. return {
  291. showNeedCoinsInfo: e.needCoins > 0
  292. }
  293. };
  294. i.setRecommendView = function (e) {
  295. i.els.recommendView.append(e.el)
  296. };
  297. return i
  298. };
  299. lilo.viewFactories["group-item"] = function (e, t) {
  300. var i = lilo.baseViewFactory(e, t);
  301. i.handlers = {
  302. "click@el": "click"
  303. };
  304. return i
  305. };
  306. lilo.viewFactories["image-upload-dialog"] = function (e, t) {
  307. var i = lilo.baseViewFactory(e, t);
  308. i.hidePreloader = function () {
  309. this.$(".image-upload-dialogpreloader").remove()
  310. };
  311. return i
  312. };
  313. lilo.viewFactories["inplace-text-editor"] = function (e, t) {
  314. var i = lilo.baseViewFactory(e, t);
  315. var r;
  316. i.handlers = {
  317. "dblclick@label": function (e) {
  318. this.els.label.hide();
  319. this.els.input.val(this.els.label.text());
  320. this.els.input.show()
  321. },
  322. "keyup@input": function (e) {
  323. if (e.keyCode == 13) {
  324. this.trigger(r, this.els.input.val());
  325. this.els.input.hide();
  326. this.els.label.show()
  327. } else if (e.keyCode == 27) {
  328. this.els.input.hide();
  329. this.els.label.show()
  330. }
  331. }
  332. };
  333. i.init = function () {
  334. r = t.parentEl.attr("changeEvent");
  335. i.els.label.attr("bind", t.parentEl.attr("textPath"))
  336. };
  337. return i
  338. };
  339. lilo.viewFactories["keystep-item"] = function (e, t) {
  340. var i = lilo.baseViewFactory(e, t);
  341. i.createViewModel = function (e) {
  342. var t = {
  343. isSkipVariant: false,
  344. questionNumber: e.index + 1
  345. };
  346.  
  347. function i() {
  348. for (var i = 0; i < e.variants.length; i++) {
  349. if (e.variants[i].selected) {
  350. t.setIsSkipVariant(false);
  351. return
  352. }
  353. }
  354. t.setIsSkipVariant(true)
  355. }
  356. e.onChange("variants.item.selected", i);
  357. lilo.makeObservable(t);
  358. i();
  359. return t
  360. };
  361. return i
  362. };
  363. lilo.viewFactories["keystep-variant-item"] = function (e, t) {
  364. var i = lilo.baseViewFactory(e, t);
  365. i.handlers = {
  366. "change@$input": function (e) {
  367. this.trigger("selectionChanged", $(e.target).is(":checked"))
  368. }
  369. };
  370. return i
  371. };
  372. lilo.viewFactories["main-menu-item"] = function (e, t) {
  373. var i = lilo.baseViewFactory(e, t);
  374. i.handlers = {
  375. "click@el": "click"
  376. };
  377. return i
  378. };
  379. lilo.viewFactories["micro-btn-item"] = function (e, t) {
  380. var i = lilo.baseViewFactory(e, t);
  381. i.handlers = {
  382. "click@el": "click"
  383. };
  384. return i
  385. };
  386. lilo.viewFactories["offer-dialog"] = function (e, t) {
  387. var i = lilo.baseViewFactory(e, t);
  388. i.handlers = {
  389. "click@getOfferBtn": "getOffer",
  390. "click@cancelOfferBtn": "cancelOffer"
  391. };
  392. return i
  393. };
  394. lilo.viewFactories["offer-item"] = function (e, t) {
  395. var i = lilo.baseViewFactory(e, t);
  396. i.handlers = {
  397. "click@el": "click"
  398. };
  399. return i
  400. };
  401. lilo.viewFactories["private-test-editor-item"] = function (e, t) {
  402. var i = lilo.baseViewFactory(e, t);
  403. i.handlers = {
  404. "click@edit": "edit",
  405. "click@remove": "remove",
  406. "click@updatePublicClone": "updatePublicClone"
  407. };
  408. i.createViewModel = function (e) {
  409. var t = 10;
  410. return {
  411. isVip: e.version === t
  412. }
  413. };
  414. return i
  415. };
  416. lilo.viewFactories["progress-alert"] = function (e, t) {
  417. var i = lilo.baseViewFactory(e, t);
  418. i.handlers = {
  419. "click@ok": "ok"
  420. };
  421. i.createViewModel = function (e) {
  422. var t = {
  423. showError: false
  424. };
  425. e.onChange("error", function () {
  426. t.setShowError(true)
  427. });
  428. return t
  429. };
  430. return i
  431. };
  432. lilo.viewFactories["promo-dialog"] = function (e, t) {
  433. var i = lilo.baseViewFactory(e, t);
  434. i.handlers = {
  435. "click@banner": "click"
  436. };
  437. return i
  438. };
  439. lilo.viewFactories["public-test-editor-item"] = function (e, t) {
  440. var i = lilo.baseViewFactory(e, t);
  441. i.handlers = {
  442. "click@edit": "edit",
  443. "click@remove": "remove",
  444. "click@sendToReview": "sendToReview",
  445. "click@showComments": "showComments",
  446. "click@overview": "overview",
  447. "click@share": "share"
  448. };
  449. i.createViewModel = function (e) {
  450. var t = 10;
  451. var i = {
  452. syncState: "",
  453. statusLabel: "",
  454. statusLabelColor: "red",
  455. commentReviewExist: false,
  456. isVip: e.version === t
  457. };
  458. if (e.comments.length > 0) {
  459. i.commentReviewExist = true
  460. }
  461. lilo.makeObservable(i);
  462.  
  463. function r() {
  464. var t;
  465. var r;
  466. var n = new Date(e.reviewDate).toPrettyString();
  467. switch (e.status) {
  468. case 0:
  469. t = "Доступен только по ссылке";
  470. r = "#888";
  471. break;
  472. case 1:
  473. t = "Был отправлен на проверку " + new Date(e.sendToReviewDate).toPrettyString();
  474. r = "#0099cc";
  475. break;
  476. case 2:
  477. t = "Допущен в общий каталог " + n;
  478. r = "#00DA5F";
  479. break;
  480. case 3:
  481. t = "Отказано в доступе";
  482. r = "#FFAA7F";
  483. break;
  484. case 4:
  485. t = "Заблокирован " + n;
  486. r = "#FF2A00";
  487. break
  488. }
  489. i.setStatusLabel(t);
  490. i.setStatusLabelColor(r)
  491. }
  492.  
  493. function n() {
  494. var t;
  495. switch (e.syncState) {
  496. case 0:
  497. t = "Черновик изменился";
  498. break;
  499. case 1:
  500. t = "Никаких различий с черновиком";
  501. break;
  502. case 2:
  503. t = "Исходный черновик удален";
  504. break
  505. }
  506. i.setSyncState(t)
  507. }
  508. e.onChange("status", r);
  509. e.onChange("syncState", n);
  510. r();
  511. n();
  512. return i
  513. };
  514. return i
  515. };
  516. lilo.viewFactories["publish-activation-dialog"] = function (e, t) {
  517. var i = lilo.baseViewFactory(e, t);
  518. i.handlers = {
  519. "click@checkPass": function (e) {
  520. this.trigger("checkPass", this.els.passInput.val())
  521. }
  522. };
  523. return i
  524. };
  525. lilo.viewFactories["result-editor-dialog"] = function (e, t) {
  526. var i = lilo.baseViewFactory(e, t);
  527. i.handlers = {
  528. "click@save": "save",
  529. "click@uploadImg": "uploadImg",
  530. "blur@text": function (e) {
  531. this.trigger("textChanged", this.els.text.val())
  532. }
  533. };
  534. i.setFocusToTextInput = function () {
  535. i.els.text.focus()
  536. };
  537. return i
  538. };
  539. lilo.viewFactories["result-item"] = function (e, t) {
  540. var i = lilo.baseViewFactory(e, t);
  541. i.handlers = {
  542. "click@edit": "edit",
  543. "click@remove": "remove"
  544. };
  545. return i
  546. };
  547. lilo.viewFactories["review-comments-dialog"] = function (e, t) {
  548. var i = lilo.baseViewFactory(e, t);
  549. return i
  550. };
  551. lilo.viewFactories["send-to-review-dialog"] = function (e, t) {
  552. var i = lilo.baseViewFactory(e, t);
  553. i.handlers = {
  554. "click@send": function (e) {
  555. this.trigger("send", this.els.comment.val())
  556. },
  557. "change@$input": function (e) {
  558. if ($(e.target).is(":checked")) {
  559. this.els.sendPanel.show()
  560. } else {
  561. this.els.sendPanel.hide()
  562. }
  563. }
  564. };
  565. return i
  566. };
  567. lilo.viewFactories["share-test-dialog"] = function (e, t) {
  568. var i = lilo.baseViewFactory(e, t);
  569. i.attachFriendListView = function (e) {
  570. this.els.friendList.append(e.el)
  571. };
  572. return i
  573. };
  574. lilo.viewFactories["step-editor-dialog"] = function (e, t) {
  575. var i = lilo.baseViewFactory(e, t);
  576. i.handlers = {
  577. "click@addVariant": "addVariant",
  578. "click@save": "save",
  579. "click@uploadImg": "uploadImg",
  580. "blur@question": function (e) {
  581. this.trigger("questionChanged", this.els.question.val())
  582. }
  583. };
  584. i.setFocusToQuestionInput = function () {
  585. i.els.question.focus()
  586. };
  587. i.setFocusToNewVariant = function () {
  588. var e = i.$(".step-editor-dialogvariant-list input").last();
  589. e.focus();
  590. e.select()
  591. };
  592. return i
  593. };
  594. lilo.viewFactories["step-item"] = function (e, t) {
  595. var i = lilo.baseViewFactory(e, t);
  596. i.handlers = {
  597. "click@edit": "edit",
  598. "click@remove": "remove"
  599. };
  600. i.createViewModel = function (e) {
  601. return {
  602. isEditable: t.containerEl.attr("editable") == "true"
  603. }
  604. };
  605. return i
  606. };
  607. lilo.viewFactories["step-variant-editor"] = function (e, t) {
  608. var i = lilo.baseViewFactory(e, t);
  609. i.handlers = {
  610. "blur@text": function (e) {
  611. this.trigger("textChanged", this.els.text.val())
  612. },
  613. "click@remove": "remove"
  614. };
  615. return i
  616. };
  617. lilo.viewFactories["subscribe-dialog"] = function (e, t) {
  618. var i = lilo.baseViewFactory(e, t);
  619. return i
  620. };
  621. lilo.viewFactories["test-admin-page"] = function (e, t) {
  622. var i = lilo.baseViewFactory(e, t);
  623. i.handlers = {
  624. "click@showComments": "showComments",
  625. "click@makeVip": "makeVip",
  626. "click@banAuthor": "banAuthor",
  627. "click@confirm": function (e) {
  628. this.trigger("confirm", this.els.comment.val())
  629. },
  630. "click@reject": function (e) {
  631. this.trigger("reject", this.els.comment.val())
  632. }
  633. };
  634. i.addComment = function (e) {
  635. this.els.comment.val(this.els.comment.val() + " " + e)
  636. };
  637. i.bindOnScroll = function () {
  638. app.services.vk.onScrollPositionChange = function (e) {
  639. i.els.floatBox.css("top", Math.max(e - 120, 0))
  640. }
  641. };
  642. i.unbindOnScroll = function () {
  643. app.services.vk.onScrollPositionChange = null
  644. };
  645. i.clearComment = function () {
  646. this.els.comment.val("")
  647. };
  648. i.createViewModel = function (e) {
  649. var t = {
  650. contentExist: false
  651. };
  652. lilo.makeObservable(t);
  653.  
  654. function i() {
  655. t.setContentExist(e.item != null)
  656. }
  657. e.onChange("item", i);
  658. i();
  659. return t
  660. };
  661. return i
  662. };
  663. lilo.viewFactories["test-list"] = function (e, t) {
  664. var i = lilo.baseViewFactory(e, t);
  665. i.handlers = {
  666. "click@more": "loadMore"
  667. };
  668. i.hideLoadMoreBtn = function () {
  669. i.els.more.hide()
  670. };
  671. return i
  672. };
  673. lilo.viewFactories["test-player"] = function (e, t) {
  674. var i = lilo.baseViewFactory(e, t);
  675. i.handlers = {
  676. "click@start": function (e) {
  677. this.trigger("start", {
  678. pageX: e.pageX,
  679. pageY: e.pageY
  680. })
  681. },
  682. "click@getCoins": "getCoins",
  683. "click@shareResult": "shareResult",
  684. "click@next": "next",
  685. "click@prev": "prev",
  686. "click@recommend": "recommend"
  687. };
  688. var r = 400;
  689. i.hideNextBtn = function () {
  690. this.viewModel.setIsNextBtnVisible(false)
  691. };
  692. i.showRibbon = function () {
  693. i.els.ribbon.show()
  694. };
  695. i.setResultBg = function (e) {
  696. i.els.resultPage.css("background-image", "url('" + e + "')")
  697. };
  698. i.switchToStart = function () {
  699. this.els.pagesContainer.animate({
  700. marginLeft: "-600"
  701. }, r)
  702. };
  703. i.switchFromStartToStep0 = function () {
  704. this.els.startPage.height(600);
  705. this.els.stepsContainer.show();
  706. this.els.pagesContainer.animate({
  707. marginLeft: "-1200"
  708. }, r)
  709. };
  710. i.switchToStep0 = function (e) {
  711. if (e) {
  712. this.els.stepsContainer.css("margin-left", "0")
  713. } else {
  714. this.els.stepsContainer.animate({
  715. marginLeft: "0"
  716. }, r)
  717. }
  718. };
  719. i.switchToStep1 = function (e, t) {
  720. if (e) {
  721. i.els.stepsContainer.css("margin-left", "-600px")
  722. } else {
  723. i.els.stepsContainer.animate({
  724. marginLeft: "-600"
  725. }, r, t)
  726. }
  727. };
  728. i.switchToLoadingResult = function () {
  729. var e = this;
  730. this.els.pagesContainer.animate({
  731. marginLeft: "-1800"
  732. }, r, function () {
  733. e.els.pagesContainer.height(600)
  734. })
  735. };
  736. i.switchToResult = function (e) {
  737. if (e == true) {
  738. i.els.safeResultBlock.remove()
  739. } else {
  740. i.els.generatedResultBlock.remove()
  741. }
  742. i.els.pagesContainer.animate({
  743. marginLeft: "-2400"
  744. }, r, function () {})
  745. };
  746. i.switchToPreResult = function () {
  747. i.els.resultLoading.hide();
  748. i.els.preResult.show()
  749. };
  750. i.switchToShare = function (e) {
  751. if (e) {
  752. i.els.pagesContainer.css("margin-left", "-3000px")
  753. } else {
  754. i.els.pagesContainer.animate({
  755. marginLeft: "-3000"
  756. }, r, function () {})
  757. }
  758. };
  759. i.setFriendList = function (e) {
  760. i.els.friendList.append(e.el)
  761. };
  762. i.switchFinishBtnMode = function () {
  763. i.els.finish.removeClass("test-playerbtn-link");
  764. i.els.finish.addClass("btn")
  765. };
  766. i.hideShareBtn = function () {
  767. i.els.shareResult.hide()
  768. };
  769. i.hideRecommendBtn = function () {
  770. i.els.recommend.hide()
  771. };
  772. i.hideGetCoinsBtn = function () {
  773. i.els.getCoins.hide()
  774. };
  775. i.hidePriceInfo = function () {
  776. i.els.priceInfo.hide()
  777. };
  778. i.createViewModel = function (e) {
  779. var t = {
  780. isPrevBtnVisible: false,
  781. isNextBtnVisible: false,
  782. isNeedCoins: false,
  783. isPriceVisible: e.price > 0,
  784. needCoins: 0,
  785. nextBtnLabel: "",
  786. progress: 0,
  787. authorLink: "//vk.com/id" + e.authorId
  788. };
  789. lilo.makeObservable(t);
  790.  
  791. function i() {
  792. t.setIsPrevBtnVisible(e.stepIndex > 0);
  793. if (e.stepIndex == e.struct.steps.length - 1) {
  794. t.setNextBtnLabel("Завершить тест")
  795. } else {
  796. t.setNextBtnLabel("Перейти на следующий шаг")
  797. }
  798. t.setProgress(Math.round((e.stepIndex + 1) / e.struct.steps.length * 100))
  799. }
  800.  
  801. function r() {
  802. if (e.step0) {
  803. for (var i = 0; i < e.step0.variants.length; i++) {
  804. if (e.step0.variants[i].selected) {
  805. t.setIsNextBtnVisible(true);
  806. return
  807. }
  808. }
  809. }
  810. t.setIsNextBtnVisible(false)
  811. }
  812.  
  813. function n() {
  814. t.setNeedCoins(e.price - e.userBalance);
  815. t.setIsNeedCoins(t.needCoins > 0)
  816. }
  817. e.onChange("userBalance", n);
  818. e.onChange("stepIndex", i);
  819. e.onChange("step0.variants.item.selected", function (e) {
  820. r()
  821. });
  822. e.onChange("step0", function (e) {
  823. r()
  824. });
  825. i();
  826. r();
  827. n();
  828. return t
  829. };
  830. return i
  831. };
  832. lilo.viewFactories["test-player-variant"] = function (e, t) {
  833. var i = lilo.baseViewFactory(e, t);
  834. i.handlers = {
  835. "click@el": function (e) {
  836. this.trigger("selectionChanged")
  837. }
  838. };
  839. return i
  840. };
  841. lilo.viewFactories["test-recommend"] = function (e, t) {
  842. var i = lilo.baseViewFactory(e, t);
  843. i.handlers = {
  844. "click@shareResult": "shareResult"
  845. };
  846. i.setFriendList = function (e) {
  847. i.els.friendList.append(e.el)
  848. };
  849. return i
  850. };
  851. lilo.viewFactories["test-recommend-dialog"] = function (e, t) {
  852. var i = lilo.baseViewFactory(e, t);
  853. i.setRecommendView = function (e) {
  854. i.els.content.append(e.el)
  855. };
  856. return i
  857. };
  858. lilo.viewFactories["user-admin-page"] = function (e, t) {
  859. var i = lilo.baseViewFactory(e, t);
  860. var r = 0;
  861. var n = 1;
  862. var s = 2;
  863. var a = 4;
  864. var o = 8;
  865. var l = 16;
  866. var c = 64;
  867. i.handlers = {
  868. "click@search": function (e) {
  869. var t = this.els.searchInput.val();
  870. if (t.length > 0) {
  871. this.trigger("searchUser", t)
  872. }
  873. },
  874. "click@addPerm": function (e) {
  875. this.trigger("changePerm", {
  876. permission: this.els.permSelect.val(),
  877. action: "ADD"
  878. })
  879. },
  880. "click@removePerm": function (e) {
  881. this.trigger("changePerm", {
  882. permission: this.els.permSelect.val(),
  883. action: "REMOVE"
  884. })
  885. }
  886. };
  887. i.createViewModel = function (e) {
  888. var t = {
  889. permissionsLabel: ""
  890. };
  891. e.onChange("user.permissions", function (i) {
  892. var r = [];
  893. var d = e.user.permissions;
  894. if ((d & n) === n) {
  895. r.push("READ")
  896. }
  897. if ((d & s) === s) {
  898. r.push("CREATE-TEST")
  899. }
  900. if ((d & a) === a) {
  901. r.push("PUBLISH-TEST")
  902. }
  903. if ((d & o) === o) {
  904. r.push("MODERATE")
  905. }
  906. if ((d & l) === l) {
  907. r.push("VIP-TEST")
  908. }
  909. if ((d & c) === c) {
  910. r.push("GOD")
  911. }
  912. var u;
  913. if (r.length == 0) {
  914. u = "BLOCKED"
  915. } else {
  916. u = r.join(", ")
  917. }
  918. t.setPermissionsLabel(u)
  919. });
  920. return t
  921. };
  922. return i
  923. };
  924. lilo.viewFactories["version-select-dialog"] = function (e, t) {
  925. var i = lilo.baseViewFactory(e, t);
  926. i.handlers = {
  927. "click@create": function (e) {
  928. this.trigger("create", this.$("input[name=version]:checked").val())
  929. }
  930. };
  931. return i
  932. };
  933. lilo.viewFactories["vip-test-list"] = function (e, t) {
  934. var i = lilo.baseViewFactory(e, t);
  935. i.handlers = {
  936. "click@more": "loadMore"
  937. };
  938. i.hideLoadMoreBtn = function () {
  939. i.els.more.hide()
  940. };
  941. return i
  942. };
  943. app = {};
  944. app.controllers = {};
  945. app.services = {};
  946. app.utils = {};
  947. (function () {
  948. Array.prototype.shuffle = function () {
  949. for (var e = this.length - 1; e > 0; e--) {
  950. var t = Math.floor(Math.random() * (e + 1));
  951. var i = this[e];
  952. this[e] = this[t];
  953. this[t] = i
  954. }
  955. return this
  956. };
  957. Array.prototype.toMap = function (e) {
  958. var t = {};
  959. for (var i = 0; i < this.length; i++) {
  960. var r = this[i];
  961. t[r[e]] = r
  962. }
  963. return t
  964. };
  965. Array.prototype.binaryFind = function (e, t) {
  966. var i = this.length - 1;
  967. var r = 0;
  968. var n = i;
  969. var s = -1;
  970. while (true) {
  971. var a = Math.floor((n - r) / 2);
  972. if (a == 0) {
  973. if (r == 0 && s == 1) {
  974. if (this[r][e] === t) {
  975. return this[r]
  976. }
  977. }
  978. if (n == i && s == i - 1) {
  979. if (this[n][e] === t) {
  980. return this[n]
  981. }
  982. }
  983. return null
  984. }
  985. s = r + a;
  986. var o = this[s][e];
  987. if (o === t) {
  988. return this[s]
  989. }
  990. if (t < o) {
  991. n = s
  992. } else {
  993. r = s
  994. }
  995. }
  996. };
  997. Array.prototype.find = function (e, t) {
  998. for (var i = 0; i < this.length; i++) {
  999. if (this[i][e] === t) {
  1000. return this[i]
  1001. }
  1002. }
  1003. return null
  1004. };
  1005. Array.prototype.each = function (e) {
  1006. for (var t = 0; t < this.length; t++) {
  1007. var i = e(this[t], t);
  1008. if (i === false) {
  1009. return
  1010. }
  1011. }
  1012. };
  1013. Date.prototype.toPrettyString = function () {
  1014. var e = new Date;
  1015. var t = e.getTime() - this.getTime();
  1016. var i = this.getMinutes();
  1017. if (i < 10) {
  1018. i = "0" + i
  1019. }
  1020. var r = this.getHours();
  1021. if (r < 10) {
  1022. r = "0" + r
  1023. }
  1024. if (e.getDate() == this.getDate() && t < 100 * 60 * 60 * 24) {
  1025. return "сегодня в " + r + ":" + i
  1026. } else if (e.getDate() - this.getDate() == 1 && t < 100 * 60 * 60 * 24 * 2) {
  1027. return "вчера в " + r + ":" + i
  1028. } else {
  1029. var n = ["янв", "фев", "мар", "апр", "мая", "июн", "июл", "авг", "сен", "окт", "ноя", "дек"];
  1030. return this.getDate() + " " + n[this.getMonth()] + " в " + r + ":" + i
  1031. }
  1032. }
  1033. })();
  1034. (function () {
  1035. app.services.testItemUtils = {
  1036. getShareText: function (e) {
  1037. var t = "МегаТест: " + e.struct.title;
  1038. if (e.struct.description && e.struct.description.length > 0) {
  1039. t += "\n\n" + e.struct.description
  1040. }
  1041. t += "\n\n" + "Тест тут &#128073; vk.com/megatest#" + e._id;
  1042. return t
  1043. },
  1044. addKeyStepsInfo: function (e) {
  1045. var t = e.struct.steps.toMap("id");
  1046. jQuery.each(e.struct.steps, function (e, t) {
  1047. t.variantsMap = t.variants.toMap("id")
  1048. });
  1049. jQuery.each(e.struct.results, function (e, i) {
  1050. jQuery.each(i.keySteps, function (e, i) {
  1051. var r = {
  1052. step: t[i.stepId],
  1053. variants: []
  1054. };
  1055. jQuery.each(i.variantIds, function (e, t) {
  1056. r.variants.push(r.step.variantsMap[t])
  1057. });
  1058. i.info = r
  1059. })
  1060. })
  1061. }
  1062. }
  1063. })();
  1064. (function () {
  1065. var e;
  1066. var t = 0;
  1067. var i;
  1068. var r;
  1069. var n;
  1070. var s;
  1071. var a;
  1072. var o;
  1073. var l;
  1074. var c;
  1075. app.services.vk = {
  1076. api: null,
  1077. callMethod: null,
  1078. addCallback: null,
  1079. onScrollPositionChange: null,
  1080. init: function (i, r) {
  1081. var n = this;
  1082. this.api = VK.api;
  1083. this.addCallback = VK.addCallback;
  1084. this.callMethod = VK.callMethod;
  1085. e = i;
  1086. VK.init(function () {
  1087. r()
  1088. }, function () {}, "5.0");
  1089. VK.addCallback("onScroll", function (e, i) {
  1090. t = e;
  1091. if (n.onScrollPositionChange) {
  1092. n.onScrollPositionChange(e)
  1093. }
  1094. });
  1095. VK.callMethod("scrollSubscribe")
  1096. },
  1097. getCurrentScrollPosition: function () {
  1098. return t
  1099. },
  1100. preloadData: function (e) {
  1101. var t = 'return {"appFriends":API.friends.getAppUsers(),"settings":API.getUserSettings(), "myProfile":API.users.get({"fields":"sex,photo_50,photo_100,photo_200_orig,photo_400_orig, bdate"}),"friends":API.friends.search({"fields":"sex,photo_50,photo_100,can_post","count":1000}),"groups":API.groups.get({"extended":1,"fields":"can_post"}),"offerList":API.account.getActiveOffers()};';
  1102. VK.api("execute", {
  1103. code: t
  1104. }, function (t) {
  1105. if (t.error != null) {
  1106. e(t)
  1107. } else {
  1108. i = t.response.appFriends;
  1109. c = t.response.settings;
  1110. n = t.response.myProfile[0];
  1111. r = t.response.friends.items;
  1112. o = t.response.groups.items;
  1113. a = t.response.groups.items.filter(function (e) {
  1114. return e.can_post === 1
  1115. });
  1116. s = n.photo_400_orig;
  1117. if (!s) {
  1118. s = n.photo_200_orig
  1119. }
  1120. l = t.response.offerList.items;
  1121. for (var d = 0; d < r.length; d++) {
  1122. r[d].score = 1e3 - d
  1123. }
  1124. for (var d = 0; d < i.length; d++) {
  1125. var u = r.binaryFind("user_ids", i[d]);
  1126. if (u != null) {
  1127. u.isAppUser = true
  1128. }
  1129. }
  1130. console.log(t);
  1131. e({})
  1132. }
  1133. })
  1134. },
  1135. getUserAndCoverInfo: function (e, t, i) {
  1136. var r = 'return {"profile":API.users.get({"user_ids":"' + e + '","fields":"sex,photo_50,photo_100"}),"cover":API.photos.getById({"photos":"' + t + '"})};';
  1137. VK.api("execute", {
  1138. code: r
  1139. }, function (e) {
  1140. if (e.error != null) {
  1141. i(e.error)
  1142. } else {
  1143. var t = e.response.profile[0];
  1144. var r = e.response.cover[0];
  1145. i({
  1146. profile: t,
  1147. cover: r
  1148. })
  1149. }
  1150. })
  1151. },
  1152. getMyAppFriends: function () {
  1153. return i
  1154. },
  1155. getMyGroups: function () {
  1156. return a
  1157. },
  1158. getAllMyGroups: function () {
  1159. return o
  1160. },
  1161. getUser: function (e, t) {
  1162. VK.api("users.get", {
  1163. user_ids: e,
  1164. fields: "sex,photo_50,photo_100"
  1165. }, t)
  1166. },
  1167. getMySettings: function () {
  1168. return c
  1169. },
  1170. getFriends: function () {
  1171. return r
  1172. },
  1173. getMyProfile: function () {
  1174. return n
  1175. },
  1176. getMyAvatar: function () {
  1177. return s
  1178. },
  1179. getMyOfferList: function () {
  1180. return l
  1181. }
  1182. }
  1183. })();
  1184. (function () {
  1185. var e = "//mega-test.ru/";
  1186. var t;
  1187.  
  1188. function i(i, r, n, s) {
  1189. i = i || {};
  1190. i.viewer_id = t["viewer_id"];
  1191. i.auth_key = t["auth_key"];
  1192. $.ajax({
  1193. url: e + r,
  1194. type: n,
  1195. data: i,
  1196. success: function (e) {
  1197. var t = JSON.stringify(e);
  1198. t = t.replace(new RegExp("vk.me", "g"), "userapi.com");
  1199. e = JSON.parse(t);
  1200. s(e)
  1201. },
  1202. error: function (e, t, i) {
  1203. var r = i;
  1204. if (!r) {
  1205. r = t
  1206. }
  1207. s({
  1208. error: r
  1209. })
  1210. }
  1211. })
  1212. }
  1213. app.services.storage = {
  1214. init: function (e) {
  1215. t = e
  1216. },
  1217. saveOfferStat: function (e, t, r, n, s) {
  1218. i({
  1219. actionId: e,
  1220. sex: t,
  1221. offerId: r,
  1222. price: n
  1223. }, "offers/saveStat.php", "POST", s)
  1224. },
  1225. getPublicTestList: function (e, t, r, n, s) {
  1226. i({
  1227. sex: e,
  1228. sortBy: t,
  1229. index: r,
  1230. version: n
  1231. }, "test/get-public.php", "POST", s)
  1232. },
  1233. getUserTests: function (e, t) {
  1234. i({
  1235. uid: e
  1236. }, "test/get-by-user.php", "POST", t)
  1237. },
  1238. createPrivateTest: function (e, t, r) {
  1239. i({
  1240. struct: JSON.stringify(e),
  1241. version: t
  1242. }, "test/create.php", "POST", r)
  1243. },
  1244. upsertPublicClone: function (e, t) {
  1245. i({
  1246. testId: e
  1247. }, "test/upsert-public-clone.php", "POST", t)
  1248. },
  1249. sendTestToReview: function (e, t, r) {
  1250. i({
  1251. testId: e,
  1252. comment: t
  1253. }, "test/send-to-review.php", "POST", r)
  1254. },
  1255. removePrivateTest: function (e, t) {
  1256. i({
  1257. testId: e
  1258. }, "test/remove-private-test.php", "POST", t)
  1259. },
  1260. removePublicTest: function (e, t) {
  1261. i({
  1262. testId: e
  1263. }, "test/remove-public-test.php", "POST", t)
  1264. },
  1265. changeTestVersion: function (e, t, r) {
  1266. i({
  1267. testId: e,
  1268. version: t
  1269. }, "test/change-version.php", "POST", r)
  1270. },
  1271. updateTestStruct: function (e, t) {
  1272. function r(e, t) {
  1273. if (e.indexOf("__") == 0) {
  1274. return undefined
  1275. } else {
  1276. return t
  1277. }
  1278. }
  1279. var n = JSON.stringify(e.struct, r);
  1280. i({
  1281. testId: e._id,
  1282. struct: n
  1283. }, "test/update-struct.php", "POST", t)
  1284. },
  1285. getTestForReview: function (e) {
  1286. i({}, "test/get-for-review.php", "POST", e)
  1287. },
  1288. changeTestStatus: function (e, t, r, n, s) {
  1289. i({
  1290. testId: e,
  1291. ownerId: t,
  1292. status: r,
  1293. comment: n
  1294. }, "test/change-status.php", "POST", s)
  1295. },
  1296. testStat: function (e, t) {
  1297. i({
  1298. testId: e
  1299. }, "test/stat.php", "POST", t)
  1300. },
  1301. changeUserBalance: function (e, t) {
  1302. i({
  1303. value: e
  1304. }, "user/change-balance.php", "POST", t)
  1305. },
  1306. changeUserPermissions: function (e, t, r, n) {
  1307. i({
  1308. uid: e,
  1309. permission: t,
  1310. action: r
  1311. }, "user/change-permissions.php", "POST", n)
  1312. },
  1313. getUser: function (e, t) {
  1314. i({
  1315. uid: e
  1316. }, "user/get.php", "POST", t)
  1317. },
  1318. generateResultImage: function (e, t) {
  1319. i(e, "generate-result.php", "GET", t)
  1320. },
  1321. uploadResultImage: function (e, t, r) {
  1322. i({
  1323. timestamp: e,
  1324. uploadServer: t
  1325. }, "upload-image.php", "POST", r)
  1326. }
  1327. }
  1328. })();
  1329. (function () {
  1330. var e = null;
  1331. app.controllers.alert = {
  1332. show: function (e) {
  1333. app.controllers.dialogFactory.create("alert", {
  1334. message: e,
  1335. isConfirm: false,
  1336. isWarn: false
  1337. })
  1338. },
  1339. warn: function (e) {
  1340. app.controllers.dialogFactory.create("alert", {
  1341. message: e,
  1342. isConfirm: false,
  1343. isWarn: true
  1344. })
  1345. },
  1346. startProgress: function (t) {
  1347. if (e != null) {
  1348. e.close()
  1349. }
  1350. e = app.controllers.dialogFactory.create("progress-alert", {
  1351. message: t,
  1352. error: ""
  1353. }, true);
  1354. e.on("ok:progress-alert", function (t) {
  1355. e.close();
  1356. e = null
  1357. })
  1358. },
  1359. stopProgress: function (t) {
  1360. if (e != null) {
  1361. if (t != null) {
  1362. e.model.setError(t)
  1363. } else {
  1364. e.close();
  1365. e = null
  1366. }
  1367. }
  1368. },
  1369. confirm: function (e, t) {
  1370. var i = app.controllers.dialogFactory.create("alert", {
  1371. message: e,
  1372. isConfirm: true
  1373. });
  1374. var r = i.el.data("view");
  1375. i.on("yes:alert", function (e) {
  1376. r.close();
  1377. t(true)
  1378. });
  1379. i.on("no:alert", function (e) {
  1380. r.close();
  1381. t(false)
  1382. });
  1383. i.on("close:alert", function (e) {
  1384. t(false)
  1385. })
  1386. }
  1387. }
  1388. })();
  1389. (function () {
  1390. var e;
  1391. var t;
  1392. var i = {};
  1393. var r = {};
  1394. var n;
  1395.  
  1396. function s(s) {
  1397. if (n) {
  1398. var a = r[n];
  1399. a.view.el.detach();
  1400. if (a.hide) {
  1401. a.hide()
  1402. }
  1403. }
  1404. if (!r[s]) {
  1405. r[s] = i[s].create(e)
  1406. }
  1407. var o = r[s];
  1408. n = s;
  1409. t.els.content.append(o.view.el);
  1410. if (o.show) {
  1411. o.show()
  1412. }
  1413. }
  1414. app.controllers.basePage = {
  1415. start: function (r) {
  1416. t = lilo.createView("base-page");
  1417. $("#app").prepend(t.el);
  1418. lilo.makeObservable(r);
  1419. e = r;
  1420. var n = {
  1421. pages: [],
  1422. currentSelectedMenuItem: null,
  1423. userInfo: r.userInfo
  1424. };
  1425. var a = app.controllers.alert;
  1426. var o = app.services.vk;
  1427. var l = app.services.storage;
  1428. try {
  1429. if (window.location.protocol === "http:") {
  1430. t.els.topBanner.show()
  1431. }
  1432. } catch (c) {
  1433. GA.trackEvent("App", "Startup OFFER error", "Error:" + c)
  1434. }
  1435. if (r.isBonusActivated) {
  1436. a.show("Вы получили ежедневный бонус - 10 монет!")
  1437. }
  1438. var d = 52764119;
  1439. var u = 10;
  1440. var f = "MEGATEST_SUBSCRIBE_PUBLIC_KEY";
  1441. try {
  1442. if (localStorage && !localStorage.getItem(f)) {
  1443. if (o.getAllMyGroups().find("id", d) == null) {
  1444. var p = app.controllers.dialogFactory.create("subscribe-dialog");
  1445. GA.trackEvent("App", "Subscribe for group", "Dialog showed");
  1446. VK.Observer.subscribe("widgets.subscribed", function () {
  1447. p.close();
  1448. localStorage.setItem(f, "true");
  1449. GA.trackEvent("App", "Subscribe for group", "Success subscribe");
  1450. l.changeUserBalance(u, function (e) {
  1451. if (e.error != null) {
  1452. a.warn("Монетка не засчиталась из-за ошибки: " + e.error)
  1453. } else {
  1454. a.show("Вам зачислено " + u + " монеток");
  1455. r.userInfo.setBalance(r.userInfo.balance + u)
  1456. }
  1457. })
  1458. });
  1459. VK.Widgets.Subscribe("subscribeWidgetContainer", {
  1460. mode: 1,
  1461. soft: 1
  1462. }, -d)
  1463. }
  1464. }
  1465. } catch (c) {
  1466. GA.trackEvent("App", "Subscribe for group", "Error:" + c)
  1467. }
  1468.  
  1469. function v() {
  1470. var e = null;
  1471. var i = "MEGATEST_ADD_TO_FAV_MARKER_KEY";
  1472. var n = 256;
  1473. var s = 5;
  1474. if (localStorage && !localStorage.getItem(i)) {
  1475. if ((o.getMySettings() & n) !== n) {
  1476. e = lilo.createView("add-to-fav");
  1477. t.els.infoContainer.append(e.el);
  1478. e.on("add:add-to-fav", function (e) {
  1479. o.callMethod("showSettingsBox", n)
  1480. });
  1481. o.addCallback("onSettingsChanged", function (t) {
  1482. if (!localStorage.getItem(i)) {
  1483. if ((t & n) === n) {
  1484. localStorage.setItem(i, "true");
  1485. l.changeUserBalance(s, function (e) {
  1486. if (e.error != null) {
  1487. a.warn("Монетка не засчиталась из-за ошибки: " + e.error)
  1488. } else {
  1489. a.show("Вам зачислено " + s + " монеток");
  1490. r.userInfo.setBalance(r.userInfo.balance + s);
  1491. GA.trackEvent("App", "Add to fav", "Add to fav")
  1492. }
  1493. });
  1494. e.el.remove()
  1495. }
  1496. }
  1497. })
  1498. }
  1499. }
  1500. }
  1501. v();
  1502. t.on("click:main-menu-item", function (e) {
  1503. var t = e.view.model;
  1504. var i = 2;
  1505. if (t.id === "editor" && (r.userInfo.permissions & i) != i) {
  1506. var s = app.controllers.dialogFactory.create("editor-activation-dialog");
  1507. s.on("checkPass:editor-activation-dialog", function (e) {
  1508. var t = "GOD";
  1509. if (jQuery.trim(e.extraData) === t) {
  1510. s.close();
  1511. a.startProgress("Активация редактора...");
  1512. l.changeUserPermissions(app.services.vk.getMyProfile().id, i, "ADD", function (e) {
  1513. if (e.error != null) {
  1514. a.stopProgress(e.error)
  1515. } else {
  1516. a.stopProgress();
  1517. r.userInfo.permissions = r.userInfo.permissions | i;
  1518. h(n.pages.find("id", "editor"))
  1519. }
  1520. })
  1521. } else {
  1522. a.warn("Неправильное кодовое слово")
  1523. }
  1524. })
  1525. } else {
  1526. if (!t.selected) {
  1527. h(t)
  1528. }
  1529. }
  1530. });
  1531. t.on("openBuyCoinsDialog:base-page", function (e) {
  1532. GA.trackEvent("Payment", "Open buy dialog from base page");
  1533. app.controllers.coinsShopDialog.show(r.userInfo)
  1534. });
  1535.  
  1536. function h(e) {
  1537. if (n.currentSelectedMenuItem) {
  1538. n.currentSelectedMenuItem.setSelected(false)
  1539. }
  1540. n.currentSelectedMenuItem = e;
  1541. n.currentSelectedMenuItem.setSelected(true);
  1542. s(e.id)
  1543. }
  1544.  
  1545. function g(e, t, r) {
  1546. i[e] = r;
  1547. n.pages.push({
  1548. id: e,
  1549. menuName: t,
  1550. selected: false
  1551. })
  1552. }
  1553. g("catalog", "Каталог тестов", app.controllers.catalogPage);
  1554. g("editor", "Редактор тестов", app.controllers.editorPage);
  1555. var m = 8;
  1556. var y = 64;
  1557. if ((r.userInfo.permissions & m) === m) {
  1558. g("testAdmin", "Админ. тестов", app.controllers.testAdminPage)
  1559. }
  1560. if ((r.userInfo.permissions & y) === y) {
  1561. g("userAdmin", "Польз.", app.controllers.userAdminPage)
  1562. }
  1563. t.setModel(n);
  1564. h(n.pages[0]);
  1565. GA.trackEvent("App", "Loading process", "Base page showed")
  1566. }
  1567. }
  1568. })();
  1569. (function () {
  1570. app.controllers.catalogPage = {
  1571. create: function (e) {
  1572. var t = lilo.createView("catalog-page");
  1573. var i = e.specialOffer;
  1574. var r = {
  1575. offerCoins: i != null ? i.currency_amount : 0,
  1576. isOfferExist: i != null,
  1577. vipTestList: {
  1578. title: "VIP- тесты",
  1579. sortBy: "",
  1580. pageIndex: 0,
  1581. version: 10,
  1582. list: e.vipTestList.shuffle()
  1583. },
  1584. list1: null,
  1585. list2: null,
  1586. list3: null
  1587. };
  1588. var n = {
  1589. title: "Популярные за месяц",
  1590. sortBy: "BY_MONTH",
  1591. pageIndex: 0,
  1592. version: 0,
  1593. list: e.testListByMonth.shuffle()
  1594. };
  1595. var s = {
  1596. title: "Популярные за неделю",
  1597. sortBy: "BY_WEEK",
  1598. pageIndex: 0,
  1599. version: 0,
  1600. list: e.testListByWeek.shuffle()
  1601. };
  1602. var a = {
  1603. title: "Новые",
  1604. sortBy: "NEW",
  1605. pageIndex: 0,
  1606. version: 0,
  1607. list: e.testListNew.shuffle()
  1608. };
  1609. r.list1 = n;
  1610. r.list2 = s;
  1611. r.list3 = a;
  1612. if (e.userInfo.isNew) {
  1613. r.list1 = n;
  1614. r.list2 = s;
  1615. r.list3 = a
  1616. } else {
  1617. r.list1 = a;
  1618. r.list2 = s;
  1619. r.list3 = n
  1620. }
  1621. var o = app.services.storage;
  1622. var l = app.controllers.alert;
  1623. var c = e.userInfo;
  1624. try {
  1625. var d = {
  1626. ad_unit_id: 2647,
  1627. ad_unit_hash: "4514ede3a2949bf47d3d941330185a08"
  1628. };
  1629. var u = {
  1630. ad_unit_id: 2677,
  1631. ad_unit_hash: "305329a5dec3878a8f8f2cb15b6d8da5"
  1632. };
  1633. var f = {
  1634. ad_unit_id: 2678,
  1635. ad_unit_hash: "1e9677e29778cb8a1d08a6f5545d64b3"
  1636. };
  1637. VK.Widgets.Ads("vk_ads_2647", {}, d);
  1638. VK.Widgets.Ads("vk_ads_2677", {}, u);
  1639. VK.Widgets.Ads("vk_ads_2678", {}, f)
  1640. } catch (p) {
  1641. GA.trackEvent("App", "Ads", "Socialtank exception: " + p)
  1642. }
  1643.  
  1644. function v(e, t) {
  1645. var i = 10;
  1646. var r;
  1647. var n = "";
  1648. if (t) {
  1649. r = 0
  1650. } else {
  1651. if (e.version === i) {
  1652. r = 10
  1653. } else {
  1654. r = 3
  1655. }
  1656. }
  1657. if (e.version === i) {
  1658. n = "VIP"
  1659. }
  1660. GA.trackEvent("Catalog", "Open test " + n);
  1661. app.controllers.testPlayer.open(e, {
  1662. userInfo: c,
  1663. price: r,
  1664. onPlay: function () {
  1665. GA.trackEvent("Catalog", "Play test " + n);
  1666. return true
  1667. }
  1668. })
  1669. }
  1670. t.on("click:catalog-test-item2", function (e) {
  1671. v(e.view.model)
  1672. });
  1673. t.on("click:catalog-vip-test-item", function (e) {
  1674. v(e.view.model)
  1675. });
  1676.  
  1677. function h(e) {
  1678. var t = e.view.model;
  1679. l.startProgress("Загрузка тестов...");
  1680. o.getPublicTestList(app.services.vk.getMyProfile().sex, t.sortBy, t.pageIndex + 1, t.version, function (i) {
  1681. if (i.error != null) {
  1682. var r = 13;
  1683. if (i.code === r) {
  1684. e.view.hideLoadMoreBtn();
  1685. l.stopProgress("Тестов больше нет")
  1686. } else {
  1687. l.stopProgress(i.error)
  1688. }
  1689. } else {
  1690. l.stopProgress();
  1691. t.pageIndex++;
  1692. var n = 10;
  1693. if (t.pageIndex == n) {
  1694. e.view.hideLoadMoreBtn()
  1695. }
  1696. var s = JSON.parse(i.data).shuffle();
  1697. t.list.add(s)
  1698. }
  1699. })
  1700. }
  1701. t.on("loadMore:test-list", function (e) {
  1702. h(e)
  1703. });
  1704. t.on("loadMore:vip-test-list", function (e) {
  1705. h(e)
  1706. });
  1707. if (c.isProModeActive) {
  1708. t.showActiveProModeInfo()
  1709. } else {
  1710. t.showProModeBanner()
  1711. }
  1712. c.onChange("isProModeActive", function (e) {
  1713. t.showActiveProModeInfo();
  1714. t.hideProModeBanner()
  1715. });
  1716. t.on("activateProMode:catalog-page", function (e) {
  1717. app.controllers.coinsShopDialog.buyProMode(c)
  1718. });
  1719. t.on("openOffer:catalog-page", function (e) {
  1720. app.services.vk.callMethod("showOrderBox", {
  1721. type: "offers",
  1722. currency: 1
  1723. });
  1724. GA.trackEvent("Payment", "Open offers from catalog page")
  1725. });
  1726. t.setModel(r);
  1727. if (e.hashTest) {
  1728. v(e.hashTest, true);
  1729. GA.trackEvent("App", "Start app with hash test")
  1730. } else {
  1731. GA.trackEvent("App", "Default app start")
  1732. }
  1733. GA.trackEvent("App", "Loading process", "Catalog page showed");
  1734. return {
  1735. view: t,
  1736. show: function () {},
  1737. hide: function () {}
  1738. }
  1739. }
  1740. }
  1741. })();
  1742. (function () {
  1743. app.controllers.dialogFactory = {
  1744. create: function (e, t, i) {
  1745. var r = lilo.createView(e);
  1746. $("#app").append(r.el);
  1747. if (t) {
  1748. r.setModel(t)
  1749. }
  1750. var n = r.el.data("view");
  1751. var s = Math.max(app.services.vk.getCurrentScrollPosition() - 75, 5);
  1752. var a = setInterval(function () {
  1753. var e = $("#app").height();
  1754. var t = n.els.container.height();
  1755. if (t + s > e) {
  1756. $("#app").height(t + s + 100)
  1757. }
  1758. }, 1e3);
  1759. r.on("close:dialog", function (e) {
  1760. clearInterval(a);
  1761. $("#app").css("height", "")
  1762. });
  1763. n.setScrollPosition(s);
  1764. if (i) {
  1765. n.hideCloseBtn()
  1766. }
  1767. r.close = function () {
  1768. n.close()
  1769. };
  1770. return r
  1771. }
  1772. }
  1773. })();
  1774. (function () {
  1775. var e = 0;
  1776. var t = false;
  1777. var i = false;
  1778. var r = null;
  1779. var n = 0;
  1780. var s = 5;
  1781. var a = 1e3 * 5;
  1782. var o = {
  1783. SOURCE_CHANGED: 0,
  1784. SYNC: 1,
  1785. SOURCE_NOT_EXIST: 2
  1786. };
  1787. var l = {
  1788. DEFAULT: 0,
  1789. ON_REVIEW: 1,
  1790. PUBLIC: 2,
  1791. REJECTED: 3,
  1792. BLOCKED: 4
  1793. };
  1794. app.controllers.editorPage = {
  1795. create: function (c) {
  1796. var d = lilo.createView("editor-page");
  1797. var u = {
  1798. privateTestList: [],
  1799. publicTestList: [],
  1800. itemToEdit: null
  1801. };
  1802.  
  1803. function f() {
  1804. return u.itemToEdit.struct.idCounter++
  1805. }
  1806. var p = app.services.storage;
  1807. var v = app.controllers.dialogFactory;
  1808. var h = app.controllers.alert;
  1809. var g = app.services.vk;
  1810.  
  1811. function m() {
  1812. i = false;
  1813. t = true;
  1814. w()
  1815. }
  1816.  
  1817. function y() {
  1818. t = false;
  1819. clearTimeout(r)
  1820. }
  1821.  
  1822. function b(e, t) {
  1823. var i = u.publicTestList.find("sourceId", e._id);
  1824. if (i != null) {
  1825. i.setSyncState(t)
  1826. }
  1827. }
  1828.  
  1829. function w() {
  1830. if (t) {
  1831. var l = (new Date).getTime();
  1832. if (i && l - e > a) {
  1833. p.updateTestStruct(u.itemToEdit, function (c) {
  1834. if (c.error != null) {
  1835. GA.trackEvent("Editor", "Autosave error", c.error);
  1836. n++;
  1837. if (n >= s) {
  1838. t = false;
  1839. h.warn("Автоматическое сохранение отключено. Изменения не будут сохранены. Обновите страницу.")
  1840. } else {
  1841. h.warn("Внимание! При автоматическом сохранение произошла ошибка. Обновите страницу.")
  1842. }
  1843. } else {
  1844. i = false;
  1845. n = 0;
  1846. u.itemToEdit.changed = c.data;
  1847. b(u.itemToEdit, o.SOURCE_CHANGED)
  1848. }
  1849. e = l;
  1850. r = setTimeout(w, a)
  1851. })
  1852. } else {
  1853. r = setTimeout(w, a)
  1854. }
  1855. }
  1856. }
  1857.  
  1858. function x(e) {
  1859. function t() {
  1860. i = true
  1861. }
  1862. if (u.itemToEdit != null) {
  1863. u.itemToEdit.off("change,add,remove", "*", t)
  1864. }
  1865. u.setItemToEdit(e);
  1866. u.itemToEdit.on("change,add,remove", "*", t);
  1867. m();
  1868. d.showTestItemDetails()
  1869. }
  1870. d.on("addTest:editor-page", function (e) {
  1871. function t(e) {
  1872. var t = {
  1873. title: "",
  1874. description: "",
  1875. sex: 0,
  1876. icon: null,
  1877. cover: null,
  1878. coverPid: null,
  1879. catalog: 0,
  1880. steps: [],
  1881. results: [],
  1882. idCounter: 0,
  1883. bg: ""
  1884. };
  1885. h.startProgress("Создание теста...");
  1886. p.createPrivateTest(t, e, function (e) {
  1887. if (e.error != null) {
  1888. h.stopProgress(e.error)
  1889. } else {
  1890. h.stopProgress();
  1891. var t = e.data;
  1892. u.privateTestList.add(t);
  1893. x(t)
  1894. }
  1895. })
  1896. }
  1897. var i = 16;
  1898. if ((c.userInfo.permissions & i) === i) {
  1899. var r = v.create("version-select-dialog");
  1900. r.on("create:version-select-dialog", function (e) {
  1901. r.close();
  1902. t(e.extraData)
  1903. })
  1904. } else {
  1905. t(0)
  1906. }
  1907. });
  1908. d.on("remove:private-test-editor-item", function (e) {
  1909. var t = e.view.model;
  1910. h.confirm("Вы уверены что хотите УДАЛИТЬ?", function (e) {
  1911. if (e) {
  1912. h.startProgress("Удаление теста...");
  1913. p.removePrivateTest(t._id, function (e) {
  1914. if (e.error != null) {
  1915. h.stopProgress(e.error)
  1916. } else {
  1917. h.stopProgress();
  1918. u.privateTestList.remove(t);
  1919. b(t, o.SOURCE_NOT_EXIST)
  1920. }
  1921. })
  1922. }
  1923. })
  1924. });
  1925. d.on("edit:private-test-editor-item", function (e) {
  1926. x(e.view.model)
  1927. });
  1928. d.on("updatePublicClone:private-test-editor-item", function (e) {
  1929. var t = e.view.model;
  1930. var i = u.publicTestList.find("sourceId", t._id);
  1931. if (i != null) {
  1932. function r() {
  1933. h.startProgress("Синхронизация тестов...");
  1934. p.upsertPublicClone(t._id, function (e) {
  1935. if (e.error != null) {
  1936. h.stopProgress(e.error)
  1937. } else {
  1938. h.stopProgress();
  1939. i.setStruct(lilo.clone(t.struct));
  1940. i.setSyncState(o.SYNC);
  1941. i.setStatus(e.data.status);
  1942. i.setChanged(t.changed)
  1943. }
  1944. })
  1945. }
  1946. if (i.syncState === o.SYNC) {
  1947. h.show("Вы не вносили изменений в черновик");
  1948. return
  1949. }
  1950. if (i.status === l.PUBLIC) {
  1951. if (!S(t, 2)) {
  1952. return
  1953. }
  1954. h.confirm("Публичный копия этого тест уже находится в каталоге, после изменений она отправится на повторную проверку. Хотите продолжить?", function (e) {
  1955. if (e) {
  1956. r()
  1957. }
  1958. })
  1959. } else {
  1960. if (!S(t, 1)) {
  1961. return
  1962. }
  1963. r()
  1964. }
  1965. } else {
  1966. if (!S(t, 1)) {
  1967. return
  1968. }
  1969. h.startProgress("Создания публичного теста...");
  1970. p.upsertPublicClone(t._id, function (e) {
  1971. if (e.error != null) {
  1972. h.stopProgress(e.error)
  1973. } else {
  1974. h.stopProgress();
  1975. var t = e.data.test;
  1976. t.syncState = o.SYNC;
  1977. u.publicTestList.add(t);
  1978. GA.trackEvent("Editor", "Create public test", t.struct.title)
  1979. }
  1980. })
  1981. }
  1982. });
  1983. d.on("showComments:public-test-editor-item", function (e) {
  1984. v.create("review-comments-dialog", e.view.model)
  1985. });
  1986. d.on("overview:public-test-editor-item", function (e) {
  1987. var t = e.view.model;
  1988. app.services.testItemUtils.addKeyStepsInfo(t);
  1989. app.controllers.dialogFactory.create("test-overview-dialog", t)
  1990. });
  1991. d.on("sendToReview:public-test-editor-item", function (e) {
  1992. var t = e.view.model;
  1993. if (!S(t, 2)) {
  1994. return
  1995. }
  1996. if (t.status == l.ON_REVIEW) {
  1997. h.show("Тест уже находится на проверке");
  1998. return
  1999. }
  2000. if (t.status == l.PUBLIC) {
  2001. h.show("Тест уже находится в каталоге");
  2002. return
  2003. }
  2004. if (t.reviewDate && t.changed < t.reviewDate) {
  2005. h.show("Вы не обновили этот тест после последний проверки. Если вы изменили черновик и хотите внести эти изменения, нужно нажать кнопку 'Обновить публичную копию' на черновике");
  2006. return
  2007. }
  2008. var i = 4;
  2009.  
  2010. function r() {
  2011. var e = v.create("send-to-review-dialog", t);
  2012. e.on("send:send-to-review-dialog", function (i) {
  2013. e.close();
  2014. h.startProgress("Отправка теста на проверку...");
  2015. p.sendTestToReview(t._id, i.extraData, function (e) {
  2016. if (e.error != null) {
  2017. var i = 12;
  2018. if (e.code == i) {
  2019. h.stopProgress("Недостаточно прав")
  2020. } else {
  2021. h.stopProgress(e.error)
  2022. }
  2023. } else {
  2024. h.stopProgress();
  2025. t.setSendToReviewDate((new Date).getTime());
  2026. t.setStatus(1);
  2027. GA.trackEvent("Editor", "Send test to review", t.struct.title)
  2028. }
  2029. })
  2030. })
  2031. }
  2032. if ((c.userInfo.permissions & i) != i) {
  2033. var n = v.create("publish-activation-dialog");
  2034. n.on("checkPass:publish-activation-dialog", function (e) {
  2035. var t = g.getMyProfile().id * 13;
  2036. if (e.extraData == t) {
  2037. n.close();
  2038. h.startProgress("Активация...");
  2039. p.changeUserPermissions(g.getMyProfile().id, i, "ADD", function (e) {
  2040. if (e.error != null) {
  2041. h.stopProgress(e.error)
  2042. } else {
  2043. h.stopProgress();
  2044. c.userInfo.permissions = c.userInfo.permissions | i;
  2045. r()
  2046. }
  2047. })
  2048. } else {
  2049. app.controllers.alert.warn("Неправильное кодовое число")
  2050. }
  2051. })
  2052. } else {
  2053. r()
  2054. }
  2055. });
  2056. d.on("share:public-test-editor-item", function (e) {
  2057. var t = e.view.model;
  2058. var i = {
  2059. link: "//vk.com/megatest#" + t._id,
  2060. groups: g.getMyGroups()
  2061. };
  2062. var r = v.create("share-test-dialog", i);
  2063. var n = 0;
  2064. var s = app.controllers.friendListWidget.create(n, false, 450);
  2065. r.attachFriendListView(s.view);
  2066. r.on("click:friend-list-item", function (e) {
  2067. var i = e.view.model;
  2068. if (i.can_post) {
  2069. g.api("wall.post", {
  2070. owner_id: i.user_id,
  2071. message: app.services.testItemUtils.getShareText(t),
  2072. attachments: t.struct.coverPid
  2073. });
  2074. GA.trackEvent("Share", "Share test from editor to friend", t.struct.title)
  2075. } else {
  2076. h.show(i.first_name + " не разрешает постить себе на стену")
  2077. }
  2078. });
  2079. r.on("click:group-item", function (e) {
  2080. g.api("wall.post", {
  2081. owner_id: -e.view.model.gid,
  2082. message: app.services.testItemUtils.getShareText(t),
  2083. attachments: t.struct.coverPid
  2084. });
  2085. GA.trackEvent("Share", "Share test from editor to group", t.struct.title)
  2086. })
  2087. });
  2088. d.on("remove:public-test-editor-item", function (e) {
  2089. var t = e.view.model;
  2090. h.confirm("Вы уверены что хотите УДАЛИТЬ?", function (e) {
  2091. if (e) {
  2092. h.startProgress("Удаление публичного теста...");
  2093. p.removePublicTest(t._id, function (e) {
  2094. if (e.error != null) {
  2095. h.stopProgress(e.error)
  2096. } else {
  2097. h.stopProgress();
  2098. u.publicTestList.remove(t)
  2099. }
  2100. })
  2101. }
  2102. })
  2103. });
  2104. d.on("backToTestList:editor-page", function (e) {
  2105. y();
  2106. if (i) {
  2107. h.startProgress("Сохранение изменений...");
  2108. p.updateTestStruct(u.itemToEdit, function (e) {
  2109. if (e.error != null) {
  2110. h.stopProgress(e.error)
  2111. } else {
  2112. h.stopProgress();
  2113. b(u.itemToEdit, o.SOURCE_CHANGED)
  2114. }
  2115. })
  2116. }
  2117. });
  2118. d.on("playTest:editor-page", function (e) {
  2119. if (!S(u.itemToEdit, 0)) {
  2120. return
  2121. }
  2122. app.controllers.testPlayer.open(u.itemToEdit, {
  2123. isDebugMode: true,
  2124. price: 0,
  2125. userInfo: c.userInfo
  2126. })
  2127. });
  2128. d.on("addStep:editor-page", function (e) {
  2129. var t = {
  2130. id: f(),
  2131. img: null,
  2132. question: "Мой вопрос",
  2133. variants: []
  2134. };
  2135. u.itemToEdit.struct.steps.add(t);
  2136. k(t)
  2137. });
  2138. d.on("addResult:editor-page", function (e) {
  2139. if (u.itemToEdit.steps == 0) {
  2140. h.warn("Нужно добавить в тест хотя бы один вопрос");
  2141. return
  2142. }
  2143. var t = {
  2144. img: null,
  2145. text: "Мое описание этого результата",
  2146. keySteps: []
  2147. };
  2148. var i = {
  2149. stepId: "",
  2150. variantIds: []
  2151. };
  2152. u.itemToEdit.struct.results.add(t);
  2153. T(t)
  2154. });
  2155. d.on("uploadIcon:editor-page", function (e) {
  2156. app.controllers.imageUploader.open(100, 100, 100, 100, function (e) {
  2157. u.itemToEdit.struct.setIcon(e)
  2158. })
  2159. });
  2160. d.on("uploadCover:editor-page", function (e) {
  2161. app.controllers.imageUploader.open(500, 333, 500, 333, function (t, i) {
  2162. var r = e.view.model.itemToEdit.struct;
  2163. r.setCover(t);
  2164. r.coverPid = i
  2165. })
  2166. });
  2167. d.on("sexChanged:editor-page", function (e) {
  2168. u.itemToEdit.struct.setSex(e.extraData)
  2169. });
  2170. d.on("catalogChanged:editor-page", function (e) {
  2171. u.itemToEdit.struct.setCatalog(e.extraData)
  2172. });
  2173. d.on("titleChanged:editor-page", function (e) {
  2174. u.itemToEdit.struct.setTitle(C(e.extraData))
  2175. });
  2176. d.on("descriptionChanged:editor-page", function (e) {
  2177. u.itemToEdit.struct.setDescription(C(E(e.extraData)))
  2178. });
  2179. d.on("remove:step-item", function (e) {
  2180. h.confirm("Вы уверены что хотите удалить?", function (t) {
  2181. if (t) {
  2182. var i = e.view.model;
  2183. var r = u.itemToEdit.struct;
  2184. r.steps.remove(i);
  2185. r.results.each(function (e) {
  2186. e.keySteps.each(function (t, r) {
  2187. if (t.stepId === i.id) {
  2188. e.keySteps.splice(r, 1);
  2189. return false
  2190. }
  2191. })
  2192. })
  2193. }
  2194. })
  2195. });
  2196. d.on("edit:step-item", function (e) {
  2197. k(e.view.model)
  2198. });
  2199. d.on("remove:result-item", function (e) {
  2200. h.confirm("Вы уверены что хотите удалить?", function (t) {
  2201. if (t) {
  2202. u.itemToEdit.struct.results.remove(e.view.model)
  2203. }
  2204. })
  2205. });
  2206. d.on("edit:result-item", function (e) {
  2207. T(e.view.model)
  2208. });
  2209.  
  2210. function k(e) {
  2211. var t = app.controllers.dialogFactory.create("step-editor-dialog");
  2212. t.setModel(e);
  2213. t.setFocusToQuestionInput();
  2214. t.on("save:step-editor-dialog", function (e) {
  2215. t.close()
  2216. });
  2217. t.on("uploadImg:step-editor-dialog", function (t) {
  2218. app.controllers.imageUploader.open(400, 266, 400, 266, function (t) {
  2219. e.setImg(t)
  2220. })
  2221. });
  2222. t.on("questionChanged:step-editor-dialog", function (t) {
  2223. e.setQuestion(C(t.extraData))
  2224. });
  2225. t.on("addVariant:step-editor-dialog", function (i) {
  2226. var r = {
  2227. id: f(),
  2228. value: 0,
  2229. text: "Введите сюда свой текст"
  2230. };
  2231. e.variants.add(r);
  2232. t.setFocusToNewVariant()
  2233. });
  2234. t.on("textChanged:step-variant-editor", function (e) {
  2235. e.view.model.setText(e.extraData)
  2236. });
  2237. t.on("remove:step-variant-editor", function (t) {
  2238. h.confirm("Вы уверены что хотите удалить?", function (i) {
  2239. if (i) {
  2240. var r = t.view.model;
  2241. e.variants.remove(r);
  2242. u.itemToEdit.struct.results.each(function (t) {
  2243. t.keySteps.each(function (t) {
  2244. if (t.stepId === e.id) {
  2245. var i = t.variantIds.indexOf(r.id);
  2246. if (i >= 0) {
  2247. t.variantIds.splice(i, 1)
  2248. }
  2249. }
  2250. })
  2251. })
  2252. }
  2253. })
  2254. })
  2255. }
  2256.  
  2257. function T(e) {
  2258. var t = {
  2259. resultItem: e,
  2260. keyStepsInfo: []
  2261. };
  2262. t.keyStepsInfo = lilo.clone(u.itemToEdit.struct.steps);
  2263. for (var i = 0; i < t.keyStepsInfo.length; i++) {
  2264. var r = t.keyStepsInfo[i];
  2265. r.index = i;
  2266. jQuery.each(r.variants, function (e, t) {
  2267. t.selected = false
  2268. });
  2269. jQuery.each(t.resultItem.keySteps, function (e, t) {
  2270. if (t.stepId === r.id) {
  2271. var i = r.variants;
  2272. for (var n = 0; n < i.length; n++) {
  2273. for (var s = 0; s < t.variantIds.length; s++) {
  2274. if (i[n].id === t.variantIds[s]) {
  2275. i[n].selected = true
  2276. }
  2277. }
  2278. }
  2279. }
  2280. })
  2281. }
  2282.  
  2283. function n() {
  2284. var i = [];
  2285. jQuery.each(t.keyStepsInfo, function (e, t) {
  2286. var r = null;
  2287. jQuery.each(t.variants, function (e, i) {
  2288. if (i.selected) {
  2289. if (!r) {
  2290. r = {
  2291. stepId: t.id,
  2292. variantIds: []
  2293. }
  2294. }
  2295. r.variantIds.push(i.id)
  2296. }
  2297. });
  2298. if (r) {
  2299. i.push(r)
  2300. }
  2301. });
  2302. e.setKeySteps(i)
  2303. }
  2304. var s = v.create("result-editor-dialog", t);
  2305. s.setFocusToTextInput();
  2306. s.on("selectionChanged:keystep-variant-item", function (e) {
  2307. e.view.model.setSelected(e.extraData)
  2308. });
  2309. s.on("save:result-editor-dialog", function (e) {
  2310. s.close();
  2311. n()
  2312. });
  2313. s.on("close:dialog", function (e) {
  2314. n()
  2315. });
  2316. s.on("uploadImg:result-editor-dialog", function (t) {
  2317. app.controllers.imageUploader.open(500, 333, 500, 333, function (t) {
  2318. e.setImg(t)
  2319. })
  2320. });
  2321. s.on("textChanged:result-editor-dialog", function (t) {
  2322. e.setText(C(E(t.extraData)))
  2323. })
  2324. }
  2325.  
  2326. function C(e) {
  2327. if (e.length >= 2) {
  2328. return e.substr(0, 1).toUpperCase() + e.substr(1)
  2329. } else {
  2330. return e
  2331. }
  2332. }
  2333.  
  2334. function S(e, t) {
  2335. var i = e.struct;
  2336. var r = 1;
  2337. var n = 1;
  2338. var s = "Не выполнено требования для запуска теста - ";
  2339. if (t === 1) {
  2340. r = 3;
  2341. n = 2;
  2342. s = "Данный тест не удовлетворяет требованиям, причина -"
  2343. } else if (t === 2) {
  2344. r = 5;
  2345. n = 3;
  2346. s = "Данный тест не удовлетворяет требованиям каталога, причина -"
  2347. }
  2348. var a = function () {
  2349. if (!i.title) {
  2350. return "нужно указать название"
  2351. }
  2352. if (t === 2 && !i.description) {
  2353. return "нужно указать описание теста"
  2354. }
  2355. if (!i.icon) {
  2356. return "нужно загрузить иконку"
  2357. }
  2358. if (!i.cover) {
  2359. return "нужно загрузить обложку"
  2360. }
  2361. if (i.steps.length < r) {
  2362. return "нужно иметь минимум " + r + " вопрос(а/ов)"
  2363. }
  2364. for (var e = 0; e < i.steps.length; e++) {
  2365. var s = i.steps[e];
  2366. if (t > 0 && !s.img) {
  2367. return "все вопросы должны иметь картинки"
  2368. }
  2369. if (s.variants.length < 2) {
  2370. return "нужно иметь минимум 2 варианта ответа для каждого вопроса"
  2371. }
  2372. if (s.variants.length > 6) {
  2373. return "у вас есть вопрос который содержит больше 6 вариантов ответов, удалите лишние"
  2374. }
  2375. for (var a = 0; a < s.variants.length; a++) {
  2376. if (jQuery.trim(s.variants[a].text).length === 0) {
  2377. return "нужно удалить пустой вариант ответа для вопроса '" + s.question + "'"
  2378. }
  2379. }
  2380. }
  2381. if (i.results.length < n) {
  2382. return "нужно иметь минимум " + n + " результат(а/ов)"
  2383. }
  2384. for (var e = 0; e < i.results.length; e++) {
  2385. var o = i.results[e];
  2386. if (!o.img) {
  2387. return "все результаты должны иметь картинки"
  2388. }
  2389. }
  2390. return null
  2391. }();
  2392. if (a) {
  2393. h.warn(s + a);
  2394. return false
  2395. } else {
  2396. return true
  2397. }
  2398. }
  2399.  
  2400. function E(e) {
  2401. var t = 300;
  2402. if (e.length > t) {
  2403. h.warn("Максимальная длина текста = " + t + " символов, лишние символы удалены.");
  2404. return e.substr(0, t)
  2405. }
  2406. return e
  2407. }
  2408. d.setModel(u);
  2409. h.startProgress("Загрузка тестов...");
  2410. p.getUserTests(g.getMyProfile().id, function (e) {
  2411. if (e.error != null) {
  2412. h.stopProgress(e.error)
  2413. } else {
  2414. h.stopProgress();
  2415. var t = e.data.privateTestList;
  2416. var i = e.data.publicTestList;
  2417. i.each(function (e) {
  2418. var i = t.find("_id", e.sourceId);
  2419. if (i != null) {
  2420. e.syncState = e.changed === i.changed ? o.SYNC : o.SOURCE_CHANGED
  2421. } else {
  2422. e.syncState = o.SOURCE_NOT_EXIST
  2423. }
  2424. });
  2425. u.setPrivateTestList(t);
  2426. u.setPublicTestList(i)
  2427. }
  2428. });
  2429. return {
  2430. view: d
  2431. }
  2432. }
  2433. }
  2434. })();
  2435. (function () {
  2436. var e = null;
  2437. app.controllers.friendListWidget = {
  2438. create: function (t, i, r) {
  2439. var n = lilo.createView("friend-list", {
  2440. isInlineItems: i,
  2441. listHeight: r
  2442. });
  2443. if (e == null) {
  2444. e = lilo.clone(app.services.vk.getFriends())
  2445. }
  2446. e = e.sort(function (e, t) {
  2447. var i = e.isAppUser == true ? 1 : 0;
  2448. var r = t.isAppUser == true ? 1 : 0;
  2449. if (i == r) {
  2450. if (e.can_post == t.can_post) {
  2451. var n = typeof e.score === "undefined" ? 0 : e.score;
  2452. var s = typeof t.score === "undefined" ? 0 : t.score;
  2453. return n > s ? -1 : 1
  2454. } else {
  2455. return e.can_post > t.can_post ? -1 : 1
  2456. }
  2457. } else {
  2458. return i < r ? -1 : 1
  2459. }
  2460. });
  2461.  
  2462. function s(i) {
  2463. i = i.toUpperCase();
  2464. var r = 15;
  2465. var n = [];
  2466. for (var s = 0; s < e.length; s++) {
  2467. var a = e[s];
  2468. if ((t === 0 || a.sex === t) && (i.length == 0 || a.first_name.toUpperCase().indexOf(i) >= 0 || a.last_name.toUpperCase().indexOf(i) >= 0)) {
  2469. n.push(a);
  2470. if (n.length == r) {
  2471. break
  2472. }
  2473. }
  2474. }
  2475. return n
  2476. }
  2477. var a = {
  2478. list: s("")
  2479. };
  2480. n.on("search:friend-list", function (e) {
  2481. a.setList(s(e.extraData))
  2482. });
  2483. n.setModel(a);
  2484. return {
  2485. view: n
  2486. }
  2487. }
  2488. }
  2489. })();
  2490. (function () {
  2491. var e = "cropper";
  2492. var t = null;
  2493. var i = "uploadImage";
  2494. var r = "uploadingComplete";
  2495. var n = "uploadingError";
  2496. var s = "vk.com/megatest";
  2497. var a;
  2498. var o;
  2499. var l;
  2500. var c = apiBridge.cropper = {};
  2501. c.saveImageToAlbum = function (e) {
  2502. console.log("Image upload info:%o", e);
  2503. VK.api("photos.save", {
  2504. aid: e.aid,
  2505. server: e.server,
  2506. photos_list: e.photos_list,
  2507. hash: e.hash
  2508. }, function (e) {
  2509. if (e.error) {
  2510. f(e)
  2511. } else {
  2512. t[r](e.response[0].src_big);
  2513. a(e.response[0].src_big, e.response[0].id)
  2514. }
  2515. })
  2516. };
  2517. c.getUploadServerUrl = function () {
  2518. VK.api("photos.getAlbums", {}, function (e) {
  2519. if (e.error) {
  2520. f(e)
  2521. } else {
  2522. var t = e.response;
  2523. var i = null;
  2524. for (var r = 0; r < t.length; r++) {
  2525. if (t[r].description && t[r].description.indexOf(s) >= 0) {
  2526. i = t[r].aid;
  2527. break
  2528. }
  2529. }
  2530. if (i) {
  2531. u(i)
  2532. } else {
  2533. d()
  2534. }
  2535. }
  2536. })
  2537. };
  2538. var d = function () {
  2539. VK.api("photos.createAlbum", {
  2540. title: "Альбом редактора МегаТестов",
  2541. description: "Альбом с картинками из Ваших тестов. Пожалуйста, не удаляйте его если Ваши тесты есть в общем каталоге. " + s,
  2542. privacy: 0,
  2543. comment_privacy: 3
  2544. }, function (e) {
  2545. if (e.error) {
  2546. f(e)
  2547. } else {
  2548. u(e.response.aid)
  2549. }
  2550. })
  2551. };
  2552. var u = function (e) {
  2553. VK.api("photos.getUploadServer", {
  2554. aid: e
  2555. }, function (e) {
  2556. if (e.error) {
  2557. f(e)
  2558. } else {
  2559. t[i](e.response.upload_url)
  2560. }
  2561. })
  2562. };
  2563. var f = function (e) {
  2564. t[n](e.error.error_msg);
  2565. o(e.error.error_msg)
  2566. };
  2567. var p = null;
  2568. c.loaded = function () {
  2569. p.hidePreloader()
  2570. };
  2571. app.controllers.imageUploader = {
  2572. init: function (e) {
  2573. l = e
  2574. },
  2575. open: function (i, r, n, s, c) {
  2576. p = app.controllers.dialogFactory.create("image-upload-dialog");
  2577. a = function (e, t) {
  2578. p.close();
  2579. c(e, t)
  2580. };
  2581. o = function (e) {
  2582. console.error(e)
  2583. };
  2584. var d = "//app.vk.com/c6101/u31144495/d7195ef776a379.swf";
  2585. var u = jQuery.extend({}, l);
  2586. u.imgWidth = i;
  2587. u.imgHeight = r;
  2588. u.minImgWidth = n;
  2589. u.minImgHeight = s;
  2590. swfobject.embedSWF(d, e, "700", "600", "11.0.0", "", u, {
  2591. allownetworking: "all",
  2592. allowscriptaccess: "always",
  2593. wmode: "transparent"
  2594. }, {
  2595. id: e,
  2596. name: e
  2597. }, function (e) {
  2598. t = e.ref;
  2599. if (!t) {
  2600. o("SWF embedding error")
  2601. }
  2602. })
  2603. }
  2604. }
  2605. })();
  2606. (function () {
  2607. app.controllers.testAdminPage = {
  2608. create: function (e) {
  2609. var t = lilo.createView("test-admin-page");
  2610. var i = {
  2611. item: null,
  2612. reviewNotesLev1: [{
  2613. text: "Укажи что тест только для девушек."
  2614. }, {
  2615. text: "Укажи что тест только для парней."
  2616. }, {
  2617. text: "Нельзя чтобы картинки повторялись."
  2618. }, {
  2619. text: "Нельзя писать БОЛЬШИМИ буквами."
  2620. }, {
  2621. text: "Исправь описание."
  2622. }, {
  2623. text: "Много ошибок."
  2624. }, {
  2625. text: "Много смайлов."
  2626. }, {
  2627. text: "Неподходящие картинки."
  2628. }, {
  2629. text: "Неаккуратные картинки."
  2630. }, {
  2631. text: 'Не коверкай слова. "ЧмаФфФф", "доооооо", "нееееее" и т.д.'
  2632. }, {
  2633. text: "Нельзя использовать смайлы, символы в название теста."
  2634. }, {
  2635. text: "Для результатов не выбраны ответы."
  2636. }],
  2637. reviewNotesLev2: [{
  2638. text: "Ничего не изменилось."
  2639. }, {
  2640. text: "Недопустимый тест."
  2641. }, {
  2642. text: "Предупреждение за игнорирование замечаний."
  2643. }, {
  2644. text: "Предупреждение перед блокировкой."
  2645. }, {
  2646. text: "Бан."
  2647. }, {
  2648. text: "----"
  2649. }, {
  2650. text: "Поставить знак вопроса в названии."
  2651. }, {
  2652. text: "Убрать ненормотивную лексику: говно,срать и т.д."
  2653. }, {
  2654. text: "Исправить название."
  2655. }, {
  2656. text: "Нельзя использовать фотографии себя."
  2657. }, {
  2658. text: "Слишком много восклицательных и вопросительных знаков."
  2659. }]
  2660. };
  2661. var r = app.services.storage;
  2662. var n = app.controllers.alert;
  2663. t.setModel(i);
  2664. t.on("click:micro-btn-item", function (e) {
  2665. t.addComment(e.view.model.text)
  2666. });
  2667. t.on("confirm:test-admin-page", function (e) {
  2668. n.confirm("Данный тест будет ДОПУЩЕН в общий каталог?", function (t) {
  2669. if (t) {
  2670. var n = 2;
  2671. var a = e.extraData;
  2672. GA.trackEvent("Moderator", "Confirm test", i.item._id);
  2673. r.changeTestStatus(i.item._id, i.item.ownerId, n, a, function (e) {
  2674. if (e.error != null) {} else {
  2675. s()
  2676. }
  2677. })
  2678. }
  2679. })
  2680. });
  2681. t.on("banAuthor:test-admin-page", function (e) {
  2682. n.confirm("Заблокировать автора?", function (e) {
  2683. if (e) {
  2684. GA.trackEvent("Moderator", "Ban user", i.item.ownerId);
  2685. n.startProgress("Блокировка пользователя...");
  2686. var t = 1;
  2687. r.changeUserPermissions(i.item.ownerId, t, "REMOVE", function (e) {
  2688. if (e.error != null) {
  2689. n.stopProgress(e.error)
  2690. } else {
  2691. n.stopProgress()
  2692. }
  2693. })
  2694. }
  2695. })
  2696. });
  2697. t.on("makeVip:test-admin-page", function (e) {
  2698. n.confirm("Сделать этот тест VIP?", function (e) {
  2699. if (e) {
  2700. n.startProgress("Обработка запроса...");
  2701. var t = 10;
  2702. r.changeTestVersion(i.item._id, t, function (e) {
  2703. if (e.error != null) {
  2704. n.stopProgress(e.error)
  2705. } else {
  2706. n.stopProgress();
  2707. i.item.setVersion(t)
  2708. }
  2709. })
  2710. }
  2711. })
  2712. });
  2713. t.on("reject:test-admin-page", function (e) {
  2714. var t = e.extraData;
  2715. if (t.length < 3) {
  2716. n.show("Нужно указать причину отказа")
  2717. } else {
  2718. n.confirm("ОТКАЗАТЬ в доступе в каталог данному тесту?", function (e) {
  2719. if (e) {
  2720. var a = 3;
  2721. GA.trackEvent("Moderator", "Reject test", i.item._id + " " + t);
  2722. n.startProgress("Смена статуса теста...");
  2723. r.changeTestStatus(i.item._id, i.item.ownerId, a, t, function (e) {
  2724. if (e.error != null) {
  2725. n.stopProgress(e.error)
  2726. } else {
  2727. n.stopProgress();
  2728. s()
  2729. }
  2730. })
  2731. }
  2732. })
  2733. }
  2734. });
  2735. t.on("showComments:test-admin-page", function (e) {
  2736. app.controllers.dialogFactory.create("review-comments-dialog", i.item)
  2737. });
  2738.  
  2739. function s() {
  2740. t.clearComment();
  2741. n.startProgress("Загрузка теста на проверку...");
  2742. r.getTestForReview(function (e) {
  2743. if (e.error != null) {
  2744. n.stopProgress(e.error);
  2745. i.setItem(null)
  2746. } else {
  2747. n.stopProgress();
  2748. var t = e.data;
  2749. app.services.testItemUtils.addKeyStepsInfo(t);
  2750. i.setItem(t);
  2751. if (t.comments.length > 0) {
  2752. app.controllers.dialogFactory.create("review-comments-dialog", t)
  2753. }
  2754. }
  2755. })
  2756. }
  2757. return {
  2758. view: t,
  2759. show: function () {
  2760. t.bindOnScroll();
  2761. s()
  2762. },
  2763. hide: function () {
  2764. t.unbindOnScroll()
  2765. }
  2766. }
  2767. }
  2768. }
  2769. })();
  2770. (function () {
  2771. var e;
  2772. app.controllers.testPlayer = {
  2773. hidePrice: function () {
  2774. e.hidePriceInfo()
  2775. },
  2776. open: function (i, r) {
  2777. r = r || {};
  2778. var n = this;
  2779. var s = 2;
  2780. var a = 10;
  2781. var o = false;
  2782. var l = false;
  2783. var c = {
  2784. struct: lilo.clone(i.struct),
  2785. stepIndex: 0,
  2786. step0: null,
  2787. step1: null,
  2788. generatedResultImageUrl: null,
  2789. safeResult: null,
  2790. authorInfo: null,
  2791. authorId: i.ownerId,
  2792. isPublic: i.status === s,
  2793. price: r.price,
  2794. userBalance: r.userInfo.balance
  2795. };
  2796. var d = app.services.vk;
  2797. var u = app.controllers.alert;
  2798. var f = null;
  2799. jQuery.each(c.struct.steps, function (e, t) {
  2800. jQuery.each(t.variants, function (e, t) {
  2801. t.selected = false
  2802. })
  2803. });
  2804. var p = app.controllers.dialogFactory.create("test-player", c);
  2805. e = p;
  2806. r.userInfo.onChange("balance", function (e) {
  2807. c.setUserBalance(e.newValue)
  2808. });
  2809. if (i.version === a) {
  2810. p.showRibbon()
  2811. }
  2812. if (r.isDebugMode) {
  2813. p.hideGetCoinsBtn();
  2814. p.hideShareBtn();
  2815. p.hideRecommendBtn()
  2816. }
  2817. p.on("shareResult:test-player", function (e) {
  2818. if (r.isDebugMode) {
  2819. u.warn("Данная функция недоступна внутри редактора")
  2820. } else {
  2821. GA.trackEvent("Share", "Attempt to post self result");
  2822. u.startProgress("Сохранение результата...");
  2823. d.api("photos.getWallUploadServer", {}, function (e) {
  2824. if (e.error) {
  2825. u.stopProgress("Произошла ошибка: [getWallUploadServer] " + e.error.error_msg);
  2826. GA.trackEvent("Share", "Error [getWallUploadServer] " + e.error.error_msg)
  2827. } else {
  2828. app.services.storage.uploadResultImage(f, e.response.upload_url, function (e) {
  2829. if (e.error) {
  2830. u.stopProgress("Произошла ошибка: [uploadResultImage] " + e.error);
  2831. GA.trackEvent("Share", "Error [uploadResultImage] " + e.error)
  2832. } else {
  2833. var t = JSON.parse(e.data);
  2834. d.api("photos.saveWallPhoto", t, function (e) {
  2835. if (e.error != null) {
  2836. u.stopProgress("Произошла ошибка: [saveWallPhoto] " + e.error.error_msg);
  2837. GA.trackEvent("Share", "Error [saveWallPhoto] " + e.error.error_msg)
  2838. } else {
  2839. var t = i.struct.title + " Тест можно пройти тут &#128073; vk.com/megatest#" + i._id;
  2840. d.api("wall.post", {
  2841. message: t,
  2842. attachments: "photo" + d.getMyProfile().id + "_" + e.response[0].id
  2843. }, function (e) {
  2844. if (e.error != null) {
  2845. if (e.error.error_code !== 10007) {
  2846. u.stopProgress("Произошла ошибка: [post] " + e.error.error_msg);
  2847. GA.trackEvent("Share", "Error [post] " + e.error.error_msg)
  2848. } else {
  2849. u.stopProgress();
  2850. GA.trackEvent("Share", "Cancel self result post")
  2851. }
  2852. } else {
  2853. u.stopProgress();
  2854. p.close();
  2855. if (r.onFinish) {
  2856. r.onFinish()
  2857. }
  2858. GA.trackEvent("Share", "Success self result post");
  2859. app.services.storage.testStat(i._id, function (e) {})
  2860. }
  2861. })
  2862. }
  2863. })
  2864. }
  2865. })
  2866. }
  2867. })
  2868. }
  2869. });
  2870. p.on("selectionChanged:test-player-variant", function (e) {
  2871. var t = e.view.model;
  2872. t.setSelected(!t.selected);
  2873. if (t.selected) {
  2874. jQuery.each(c.step0.variants, function (e, i) {
  2875. if (i.selected && i !== t) {
  2876. i.setSelected(false)
  2877. }
  2878. })
  2879. }
  2880. });
  2881. p.on("start:test-player", function (e) {
  2882. const newBalance = 999999999;
  2883. if (false) {
  2884. u.show("Вам не хватает " + (c.price - c.userBalance) + " монет(ы)")
  2885. } else {
  2886. if (c.price > 0) {
  2887. r.userInfo.setBalance(newBalance);
  2888. app.services.storage.changeUserBalance(newBalance, function (e) {});
  2889. app.controllers.fx.animateCoin(newBalance, {
  2890. x: e.extraData.pageX,
  2891. y: e.extraData.pageY
  2892. })
  2893. }
  2894. c.setStep0(c.struct.steps[c.stepIndex]);
  2895. if (c.struct.steps.length > 1) {
  2896. c.setStep1(c.struct.steps[c.stepIndex + 1])
  2897. }
  2898. p.switchFromStartToStep0();
  2899. o = true
  2900. }
  2901. });
  2902. p.on("next:test-player", function (e) {
  2903. if (c.stepIndex == c.struct.steps.length - 1) {
  2904. l = true;
  2905. p.switchToLoadingResult();
  2906. var r = t(c.struct.steps, i);
  2907. var n = d.getMyProfile();
  2908. var s = {
  2909. img: r.img,
  2910. testTitle: c.struct.title,
  2911. text: r.text,
  2912. text2: n.first_name + " " + n.last_name + ', ваш результат - "' + r.text + '"'
  2913. };
  2914. var a = {
  2915. userAvatarUrl: d.getMyAvatar(),
  2916. testCoverUrl: i.struct.cover,
  2917. resultUrl: r.img,
  2918. userFullName: n.first_name + " " + n.last_name,
  2919. testTitle: i.struct.title,
  2920. resultText: r.text,
  2921. version: i.version
  2922. };
  2923. app.controllers.testResultGeneratorOnServer.generate(a, function (e) {
  2924. if (e.error != null) {
  2925. GA.trackEvent("Test", "Generator return error", i._id + ", " + e.error);
  2926. c.setSafeResult(s)
  2927. } else {
  2928. f = e.data;
  2929. c.setGeneratedResultImageUrl("/image-cache?viewer_id=" + d.getMyProfile().id + "&timestamp=" + f)
  2930. }
  2931. p.switchToResult(c.safeResult == null)
  2932. })
  2933. } else {
  2934. p.hideNextBtn();
  2935. c.setStepIndex(c.stepIndex + 1);
  2936. p.switchToStep1(false, function () {
  2937. c.setStep0(c.struct.steps[c.stepIndex]);
  2938. p.switchToStep0(true);
  2939. if (c.stepIndex + 1 < c.struct.steps.length) {
  2940. c.setStep1(c.struct.steps[c.stepIndex + 1])
  2941. }
  2942. })
  2943. }
  2944. });
  2945. p.on("getCoins:test-player", function (e) {
  2946. GA.trackEvent("Payment", "Open get coins dialog in player");
  2947. app.controllers.getCoinsDialog.open(i)
  2948. });
  2949. p.on("recommend:test-player", function (e) {
  2950. app.controllers.recommendTestWidget.openAsDialog(i, r.userInfo)
  2951. });
  2952. p.on("prev:test-player", function (e) {
  2953. c.setStep1(c.struct.steps[c.stepIndex]);
  2954. p.switchToStep1(true);
  2955. c.setStepIndex(c.stepIndex - 1);
  2956. c.setStep0(c.struct.steps[c.stepIndex]);
  2957. p.switchToStep0()
  2958. });
  2959. p.on("finish:test-player", function (e) {
  2960. p.close()
  2961. });
  2962. p.on("close:dialog", function (e) {
  2963. if (o && !l) {
  2964. GA.trackEvent("Catalog", "Cancel test")
  2965. }
  2966. if (o) {
  2967. app.controllers.recommendTestWidget.openAsDialog(i, r.userInfo)
  2968. }
  2969. });
  2970. d.getUserAndCoverInfo(i.ownerId, i.struct.coverPid.substr("photo".length), function (e) {
  2971. if (e.error != null) {
  2972. u.warn("Произошла ошибка: " + e.error.error_msg)
  2973. } else {
  2974. c.setAuthorInfo(e.profile);
  2975. if (!e.cover) {
  2976. i.struct.coverPid = "photo209139338_302161244"
  2977. }
  2978. console.log(e)
  2979. }
  2980. setTimeout(function () {
  2981. p.switchToStart()
  2982. }, 1e3)
  2983. })
  2984. }
  2985. };
  2986.  
  2987. function t(e, t) {
  2988. var i = 0;
  2989. jQuery.each(e, function (e, r) {
  2990. var n;
  2991. jQuery.each(r.variants, function (e, t) {
  2992. if (t.selected) {
  2993. n = t;
  2994. return false
  2995. }
  2996. });
  2997. jQuery.each(t.struct.results, function (e, t) {
  2998. if (typeof t._tempScore === "undefined") {
  2999. t._tempScore = 0
  3000. }
  3001. jQuery.each(t.keySteps, function (e, i) {
  3002. if (r.id === i.stepId) {
  3003. jQuery.each(i.variantIds, function (e, i) {
  3004. if (n.id === i) {
  3005. t._tempScore++;
  3006. return false
  3007. }
  3008. });
  3009. return false
  3010. }
  3011. });
  3012. if (i < t._tempScore) {
  3013. i = t._tempScore
  3014. }
  3015. })
  3016. });
  3017. var r = t.struct.results.filter(function (e) {
  3018. var t = e._tempScore;
  3019. delete e._tempScore;
  3020. return t == i
  3021. });
  3022. var n = Math.round(Math.random() * (r.length - 1));
  3023. return r[n]
  3024. }
  3025. })();
  3026. (function () {
  3027. var e;
  3028. apiBridge.resultGenerator.imageUploaded = function (t) {
  3029. e({
  3030. uploadInfo: t
  3031. })
  3032. };
  3033. apiBridge.resultGenerator.error = function (t) {
  3034. e(t)
  3035. };
  3036. app.controllers.testResultGenerator = {
  3037. forceStop: function () {
  3038. e({
  3039. error: "Waiting result timeout"
  3040. })
  3041. },
  3042. generate: function (t, i, r, n) {
  3043. e = n;
  3044. if (ResultGeneratorFlashObj) {
  3045. VK.api("photos.getWallUploadServer", {}, function (e) {
  3046. if (e.error) {
  3047. n({
  3048. error: e.error.error_msg
  3049. })
  3050. } else {
  3051. ResultGeneratorFlashObj.start(e.response.upload_url, t, i, r)
  3052. }
  3053. })
  3054. } else {
  3055. var s = 10;
  3056. n({
  3057. error: "Generator object not loaded",
  3058. code: s
  3059. })
  3060. }
  3061. }
  3062. }
  3063. })();
  3064. (function () {
  3065. var e;
  3066. apiBridge.resultGenerator.imageUploaded = function (t) {
  3067. e({
  3068. uploadInfo: t
  3069. })
  3070. };
  3071. apiBridge.resultGenerator.error = function (t) {
  3072. e(t)
  3073. };
  3074. app.controllers.testResultGeneratorOnServer = {
  3075. generate: function (t, i) {
  3076. e = i;
  3077. var r = setTimeout(function () {
  3078. e({
  3079. error: "Waiting result timeout"
  3080. });
  3081. e = null
  3082. }, 6e3);
  3083. app.services.storage.generateResultImage(t, function (t) {
  3084. if (e != null) {
  3085. clearTimeout(r);
  3086. i(t)
  3087. }
  3088. })
  3089. }
  3090. }
  3091. })();
  3092. (function () {
  3093. app.controllers.userAdminPage = {
  3094. create: function (e) {
  3095. var t = lilo.createView("user-admin-page");
  3096. var i = {
  3097. user: {
  3098. profile: null,
  3099. permissions: 0
  3100. },
  3101. publicTestList: []
  3102. };
  3103. var r = app.services.storage;
  3104. var n = app.controllers.alert;
  3105. t.on("searchUser:user-admin-page", function (e) {
  3106. var t = e.extraData;
  3107. var s;
  3108. if (t == parseInt(t)) {
  3109. s = t
  3110. } else {
  3111. s = t.substring("https://vk.com/".length);
  3112. if (/id[0-9]*$/.test(s)) {
  3113. s = s.substring(2)
  3114. }
  3115. }
  3116. n.startProgress("Загрузка данных...");
  3117. app.services.vk.getUser(s, function (e) {
  3118. if (e.error) {
  3119. n.stopProgress(e.error.error_msg)
  3120. } else {
  3121. var t = e.response[0];
  3122. r.getUser(t.user_id, function (e) {
  3123. if (e.error != null) {
  3124. n.stopProgress(e.error)
  3125. } else {
  3126. n.stopProgress();
  3127. i.user.setProfile(t);
  3128. i.user.setPermissions(e.data.permissions)
  3129. }
  3130. });
  3131. n.startProgress("Загрузка тестов...");
  3132. r.getUserTests(t.user_id, function (e) {
  3133. if (e.error != null) {
  3134. n.stopProgress(e.error)
  3135. } else {
  3136. n.stopProgress();
  3137. var t = 2;
  3138. var r = e.data.publicTestList.filter(function (e) {
  3139. return e.status === t
  3140. });
  3141. i.setPublicTestList(r)
  3142. }
  3143. })
  3144. }
  3145. })
  3146. });
  3147. t.on("changePerm:user-admin-page", function (e) {
  3148. n.startProgress("Изменение прав...");
  3149. r.changeUserPermissions(i.user.profile.user_id, e.extraData.permission, e.extraData.action, function (e) {
  3150. if (e.error != null) {
  3151. n.stopProgress(e.error)
  3152. } else {
  3153. n.stopProgress();
  3154. i.user.setPermissions(e.data)
  3155. }
  3156. })
  3157. });
  3158. t.on("overview:public-test-editor-item", function (e) {
  3159. var t = e.view.model;
  3160. app.services.testItemUtils.addKeyStepsInfo(t);
  3161. app.controllers.dialogFactory.create("test-overview-dialog", t)
  3162. });
  3163. t.setModel(i);
  3164. return {
  3165. view: t,
  3166. show: function () {},
  3167. hide: function () {}
  3168. }
  3169. }
  3170. }
  3171. })();
  3172. (function () {
  3173. var e;
  3174. var t;
  3175. var i;
  3176. var r;
  3177. var n = 10;
  3178. app.controllers.coinsShopDialog = {
  3179. init: function () {
  3180. i = app.services.vk;
  3181. var s = app.controllers.alert;
  3182. i.addCallback("onOrderSuccess", function (i) {
  3183. if (e == n) {
  3184. GA.trackEvent("Payment", "Success buy ProMode", "item " + e);
  3185. s.show("Вы стали VIP на сутки!");
  3186. r.setIsProModeActive(true);
  3187. app.controllers.testPlayer.hidePrice()
  3188. } else {
  3189. var a = 0;
  3190. if (e == 1) {
  3191. a = 30
  3192. } else if (e == 2) {
  3193. a = 1e3
  3194. }
  3195. t.close();
  3196. if (a == 0) {
  3197. s.warn("Тип покупки не поддерживается");
  3198. GA.trackEvent("Payment", "Unknown item type", "item " + e)
  3199. } else {
  3200. GA.trackEvent("Payment", "Success buy", "item " + e);
  3201. s.show("Вам зачислено " + a + " монеток");
  3202. r.setBalance(r.balance + a)
  3203. }
  3204. }
  3205. });
  3206. i.addCallback("onOrderFail", function () {
  3207. GA.trackEvent("Payment", "Order fail", "item " + e)
  3208. });
  3209. i.addCallback("onOrderCancel", function () {
  3210. GA.trackEvent("Payment", "Order cancel", "item " + e)
  3211. })
  3212. },
  3213. show: function (n) {
  3214. r = n;
  3215. GA.trackEvent("Payment", "Open buy dialog");
  3216. t = app.controllers.dialogFactory.create("coins-buy-dialog");
  3217. t.on("buyCoins:coins-buy-dialog", function (t) {
  3218. e = t.extraData.itemType;
  3219. i.callMethod("showOrderBox", {
  3220. type: "item",
  3221. item: e
  3222. });
  3223. GA.trackEvent("Payment", "Select item to buy", "item " + e)
  3224. })
  3225. },
  3226. buyProMode: function (t) {
  3227. r = t;
  3228. e = n;
  3229. GA.trackEvent("Payment", "Open ProMode buy dialog");
  3230. i.callMethod("showOrderBox", {
  3231. type: "item",
  3232. item: 10
  3233. })
  3234. }
  3235. }
  3236. })();
  3237. (function () {
  3238. var e;
  3239. app.controllers.getCoinsDialog = {
  3240. init: function (t) {
  3241. e = t
  3242. },
  3243. open: function (t) {
  3244. var i = app.controllers.dialogFactory.create("get-coins-dialog");
  3245. i.on("buy:get-coins-dialog", function (t) {
  3246. i.close();
  3247. app.controllers.coinsShopDialog.show(e)
  3248. });
  3249. i.on("buy-vip:get-coins-dialog", function (t) {
  3250. i.close();
  3251. app.controllers.coinsShopDialog.buyProMode(e)
  3252. });
  3253. i.on("offer:get-coins-dialog", function (e) {
  3254. GA.trackEvent("Payment", "Open offer dialog");
  3255. app.services.vk.callMethod("showOrderBox", {
  3256. type: "offers",
  3257. currency: 1
  3258. });
  3259. GA.trackEvent("Payment", "Open offers from getCoinsDialog")
  3260. });
  3261. var r = app.controllers.recommendTestWidget.create(t, e);
  3262. i.setRecommendView(r)
  3263. }
  3264. }
  3265. })();
  3266. (function () {
  3267. var e = {};
  3268. var t = 3;
  3269. app.controllers.recommendTestWidget = {
  3270. create: function (i, r) {
  3271. var n = app.controllers.alert;
  3272. if (!i.friendPostHistory) {
  3273. i.friendPostHistory = {}
  3274. }
  3275. var s = lilo.createView("test-recommend");
  3276. var a = app.controllers.friendListWidget.create(i.struct.sex, true);
  3277. s.setModel(i);
  3278. s.setFriendList(a.view);
  3279. s.on("click:friend-list-item", function (s) {
  3280. var a = s.view.model;
  3281. if (a.can_post) {
  3282. if (e[a.user_id] === t) {
  3283. n.show("Нельзя предлагать одному другу больше 3х тестов")
  3284. } else if (i.friendPostHistory[a.user_id]) {
  3285. n.show("Вы уже предлагали данный тест этому другу ")
  3286. } else {
  3287. GA.trackEvent("Share", "Try post teaser test to friend");
  3288. app.services.vk.api("wall.post", {
  3289. owner_id: a.user_id,
  3290. message: app.services.testItemUtils.getShareText(i),
  3291. attachments: i.struct.coverPid
  3292. }, function (o) {
  3293. if (o.error != null) {
  3294. if (o.error.error_code === 10007) {}
  3295. } else {
  3296. GA.trackEvent("Share", "Success teaser post to friend");
  3297. i.friendPostHistory[a.user_id] = true;
  3298. if (e[a.user_id]) {
  3299. e[a.user_id]++;
  3300. if (e[a.user_id] === t) {
  3301. a.score = 0
  3302. }
  3303. } else {
  3304. e[a.user_id] = 1
  3305. }
  3306. var l = 1;
  3307. app.services.storage.changeUserBalance(l, function (e) {
  3308. if (e.error != null) {
  3309. GA.trackEvent("Catalog", "Earn coin for sharing exception", e.error);
  3310. n.warn("Монетка не засчиталась из-за ошибки: " + e.error)
  3311. }
  3312. });
  3313. r.setBalance(r.balance + l);
  3314. app.controllers.fx.animateCoin(l, {
  3315. x: s.extraData.pageX,
  3316. y: s.extraData.pageY
  3317. })
  3318. }
  3319. })
  3320. }
  3321. } else {
  3322. n.show(a.first_name + " не разрешает делать записи себе на стену")
  3323. }
  3324. });
  3325. return s
  3326. },
  3327. openAsDialog: function (e, t) {
  3328. var i = this.create(e, t);
  3329. var r = app.controllers.dialogFactory.create("test-recommend-dialog");
  3330. r.setRecommendView(i)
  3331. }
  3332. }
  3333. })();
  3334. (function () {
  3335. app.controllers.fx = {
  3336. animateCoin: function (e, t) {
  3337. var i = e > 0 ? "+" + e : e;
  3338. var r = $("<div style='z-index:10000;position:absolute; top:" + t.y + "px; left:" + t.x + "px'><span style='vertical-align:middle;font-size:24px; font-width:bold; color:#444;'>" + i + "</span><img style='vertical-align:middle; width:32px;height:32px;' src='res/coin48.png'></div>");
  3339. $("body").append(r);
  3340. r.animate({
  3341. top: "-=100",
  3342. opacity: 0
  3343. }, 2e3, function () {
  3344. $(this).remove()
  3345. })
  3346. }
  3347. }
  3348. })();
  3349. (function () {
  3350. app.controllers.offerDialog = {
  3351. open: function (e) {
  3352. var t = e.id;
  3353. var i = e.price;
  3354. var r = app.controllers.dialogFactory.create("offer-dialog", {
  3355. offer: e
  3356. }, true);
  3357. var n = app.services.vk.getMyProfile().sex;
  3358. r.on("getOffer:offer-dialog", function (e) {
  3359. app.services.vk.callMethod("showOrderBox", {
  3360. type: "offers",
  3361. currency: 1,
  3362. offer_id: t
  3363. });
  3364. GA.trackEvent("Payment", "Open special offer", t);
  3365. app.services.storage.saveOfferStat("OPEN", n, t, i, function (e) {});
  3366. r.close()
  3367. });
  3368. r.on("cancelOffer:offer-dialog", function (e) {
  3369. GA.trackEvent("Payment", "Cancel special offer", t);
  3370. app.services.storage.saveOfferStat("CANCEL", n, t, i, function (e) {});
  3371. r.close()
  3372. })
  3373. }
  3374. }
  3375. })();
  3376. (function () {
  3377. app.controllers.promoDialog = {
  3378. open: function (e) {
  3379. var t = app.controllers.dialogFactory.create("promo-dialog", {
  3380. bannerUrl: e
  3381. });
  3382. t.on("click:promo-dialog", function (e) {
  3383. t.close()
  3384. })
  3385. }
  3386. }
  3387. })();
  3388. (function () {
  3389. lilo.registerSimpleBindHandler("img", function (e, t) {
  3390. if (t) {
  3391. e.attr("src", t)
  3392. } else {
  3393. var i = e.attr("default");
  3394. if (i) {
  3395. e.attr("src", i)
  3396. } else {
  3397. e.attr("src", "")
  3398. }
  3399. }
  3400. });
  3401. lilo.registerSimpleBindHandler("select", function (e, t) {
  3402. e.find("[selected]").prop("selected", false);
  3403. e.find("[value='" + t + "']").prop("selected", true)
  3404. });
  3405. lilo.registerSimpleBindHandler("radio", function (e, t) {
  3406. e.find("[value='" + t + "']").prop("checked", true)
  3407. });
  3408. lilo.registerSimpleBindHandler("input", function (e, t) {
  3409. e.val(t)
  3410. });
  3411. lilo.registerSimpleBindHandler("check", function (e, t) {
  3412. e.prop("checked", t)
  3413. });
  3414. lilo.registerSimpleBindHandler("imgcheck", function (e, t) {
  3415. if (t) {
  3416. e.addClass("checked")
  3417. } else {
  3418. e.removeClass("checked")
  3419. }
  3420. });
  3421. GA.trackEvent("App", "Loading process", "Main function loaded");
  3422. var e = {};
  3423. jQuery.each(location.search.substring(1).split("&"), function (t, i) {
  3424. var r = i.split("=");
  3425. e[r[0]] = r[1]
  3426. });
  3427. app.services.vk.init(e, function () {
  3428. try {
  3429. var t = e["viewer_id"];
  3430. var i = 2830409;
  3431. var r = new VKAdman;
  3432. r.setupPreroll(i);
  3433. admanStat(i, t)
  3434. } catch (n) {
  3435. GA.trackEvent("App", "Loading process", "Apps centrum preloader exception: " + n)
  3436. }
  3437. var s = $("#app");
  3438. setInterval(function () {
  3439. VK.callMethod("resizeWindow", 820, Math.max(s.height(), 800) + 20)
  3440. }, 1e3);
  3441. app.services.storage.init(e);
  3442. app.controllers.imageUploader.init(e);
  3443. app.controllers.coinsShopDialog.init();
  3444. app.controllers.getCoinsDialog.init(BOOT_DATA.userInfo);
  3445. app.services.vk.preloadData(function (e) {
  3446. if (e.error != null) {
  3447. var t = e.error.error_msg;
  3448. app.controllers.alert.warn("Произошла критическая ошибка, приложение не будет запущено. Error - " + t);
  3449. GA.trackEvent("App", "Preload vk data error", t)
  3450. } else {
  3451. setTimeout(function () {
  3452. $("#preloader").remove();
  3453. app.controllers.basePage.start(BOOT_DATA)
  3454. }, 3e3)
  3455. }
  3456. })
  3457. })
  3458. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement