Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- lilo.templates["add-to-fav"] = '<div class="add-to-fav">' + ' Добавь МегаТест в закладки и получи <b>5 монеток</b>! <div class="btn green" el="add">Добавить</div>' + "</div>";
- 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>" + "";
- 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>";
- 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>" + "";
- 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>";
- 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>";
- 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">' + ' ♥<span bind="postCount"></span>' + " </div>" + ' <div class="catalog-test-itemtitle" bind="struct.title"></div>' + "</div>";
- 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">' + ' ♥<span bind="postCount"></span>' + " </div>" + " </div>" + "</div>";
- 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>";
- 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>";
- 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>";
- lilo.templates["dialog"] = '<div class="dialoglayer">' + ' <div el="container" class="dialogdialog-container">' + ' <img el="closeBtn" src="res/close.png">' + " <div content></div>" + " </div>" + "</div>";
- 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>";
- 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>";
- 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>";
- 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>";
- 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>";
- 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>";
- 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>";
- lilo.templates["inplace-text-editor"] = "<div>" + ' <div class="inplace-text-editortext" bind el="label"></div>' + ' <input type="text" style="display: none;" el="input" >' + "</div>";
- 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>";
- lilo.templates["keystep-variant-item"] = "<div>" + ' <input type="checkbox" bind="selected" handler="check">' + ' <span bind="text"></span>' + "</div>";
- lilo.templates["main-menu-item"] = '<div class="main-menu-item" bind="selected" handler="addClass" true="selected">' + ' <span bind="menuName"></span>' + "</div>" + "";
- lilo.templates["micro-btn-item"] = '<div class="micro-btn-item" bind="text">' + "</div>";
- 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>";
- 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>";
- 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>";
- 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>" + "";
- 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>";
- 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>' + ' ♥<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>";
- 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>";
- 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>";
- 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>";
- lilo.templates["review-comments-dialog"] = '<div handler="view" renderer="dialog" >' + ' <div class="review-comments-dialog" bind="comments" handler="list" renderer="comment-item">' + " </div>" + "</div>";
- 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>";
- 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>";
- 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>";
- 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>";
- 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>";
- 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>";
- lilo.templates["step-variant-item"] = '<div class="step-variant-item">' + ' • <span bind="text"></span>' + "</div>";
- 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>";
- 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>";
- 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>";
- 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>";
- lilo.templates["test-overview-dialog"] = '<div handler="view" renderer="dialog">' + ' <div handler="view" renderer="test-overview"></div>' + "</div>";
- 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>";
- 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>";
- 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>" + "";
- 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>" + "";
- lilo.templates["test-recommend-dialog"] = '<div handler="view" renderer="dialog">' + ' <div class="test-recommend-dialog" el="content"></div>' + "</div>";
- 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>";
- 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>";
- 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>";
- lilo.viewFactories["add-to-fav"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@add": "add"
- };
- return i
- };
- lilo.viewFactories["alert"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@yes": "yes",
- "click@no": "no"
- };
- return i
- };
- lilo.viewFactories["base-page"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@buy": "openBuyCoinsDialog"
- };
- return i
- };
- lilo.viewFactories["catalog-page"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@activate": "activateProMode",
- "click@openOffer": "openOffer"
- };
- i.showProModeBanner = function () {
- i.els.proModeBanner.show()
- };
- i.hideProModeBanner = function () {
- i.els.proModeBanner.hide()
- };
- i.showActiveProModeInfo = function () {
- i.els.activeProModeInfo.show()
- };
- return i
- };
- lilo.viewFactories["catalog-test-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@el": "click"
- };
- return i
- };
- lilo.viewFactories["catalog-test-item2"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@el": "click"
- };
- i.setPlayed = function () {
- $(i.els.icon).addClass("catalog-test-item2visited")
- };
- i.createViewModel = function (e) {
- var t = {
- desc: ""
- };
- if (e.struct.description.length > 80) {
- t.desc = e.struct.description.substring(0, 80) + "..."
- } else {
- t.desc = e.struct.description
- }
- return t
- };
- return i
- };
- lilo.viewFactories["catalog-vip-test-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@el": "click"
- };
- i.setPlayed = function () {};
- return i
- };
- lilo.viewFactories["coins-buy-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@buy1": function (e) {
- this.trigger("buyCoins", {
- itemType: 1
- })
- },
- "click@buy2": function (e) {
- this.trigger("buyCoins", {
- itemType: 2
- })
- },
- "click@buy3": function (e) {
- this.trigger("buyCoins", {
- itemType: 3
- })
- }
- };
- return i
- };
- lilo.viewFactories["comment-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.createViewModel = function (e) {
- var t = {
- author: e.admin ? "Модератор:" : "Автор:",
- created: new Date(e.created).toPrettyString()
- };
- return t
- };
- return i
- };
- lilo.viewFactories["dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@closeBtn": function (e) {
- this.close()
- }
- };
- i.setScrollPosition = function (e) {
- i.els.container.css("margin-top", e)
- };
- i.close = function () {
- this.trigger("close");
- this.el.remove()
- };
- i.hideCloseBtn = function () {
- this.els.closeBtn.hide()
- };
- return i
- };
- lilo.viewFactories["editor-activation-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@checkPass": function (e) {
- this.trigger("checkPass", this.els.passInput.val())
- }
- };
- return i
- };
- lilo.viewFactories["editor-page"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@addTest": "addTest",
- "click@editTest": "editTest",
- "click@play": "playTest",
- "change@sex": function (e) {
- this.trigger("sexChanged", parseInt(this.els.sex.find("input:checked").val()))
- },
- "change@catalog": function (e) {
- this.trigger("catalogChanged", parseInt(this.els.catalog.val()))
- },
- "click@addStep1": "addStep",
- "click@addStep2": "addStep",
- "click@addResult1": "addResult",
- "click@addResult2": "addResult",
- "click@uploadIcon": "uploadIcon",
- "click@uploadCover": "uploadCover",
- "blur@title": function (e) {
- this.trigger("titleChanged", this.els.title.val())
- },
- "blur@description": function (e) {
- this.trigger("descriptionChanged", this.els.description.val())
- },
- "click@back": function (e) {
- i.els.subpageContainer.removeClass("editor-pageitem-details");
- this.trigger("backToTestList")
- }
- };
- i.showTestItemDetails = function () {
- i.els.subpageContainer.addClass("editor-pageitem-details")
- };
- i.createViewModel = function (e) {
- var t = {
- showExAddStepBtn: false,
- showExAddResultBtn: false
- };
- lilo.makeObservable(t);
- function i() {
- if (e.itemToEdit) {
- t.setShowExAddStepBtn(e.itemToEdit.struct.steps.length > 3)
- }
- }
- function r() {
- if (e.itemToEdit) {
- t.setShowExAddResultBtn(e.itemToEdit.struct.results.length > 3)
- }
- }
- e.on("add,remove", "itemToEdit.struct.steps.self", i);
- e.onChange("itemToEdit", i);
- e.on("add,remove", "itemToEdit.struct.results.self", r);
- e.onChange("itemToEdit", r);
- return t
- };
- return i
- };
- lilo.viewFactories["friend-list"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "keyup@search": function (e) {
- this.trigger("search", this.els.search.val())
- }
- };
- i.init = function () {
- if (t.listHeight) {
- this.els.list.height(t.listHeight)
- }
- if (t.isInlineItems) {
- this.els.list.attr("inlineItems", "true")
- }
- };
- return i
- };
- lilo.viewFactories["friend-list-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@el": function (e) {
- this.trigger("click", {
- pageX: e.pageX,
- pageY: e.pageY
- })
- }
- };
- i.init = function () {
- if (t.containerEl.attr("inlineItems") === "true") {
- this.el.addClass("friend-list-iteminline")
- }
- };
- return i
- };
- lilo.viewFactories["get-coins-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@buy": "buy",
- "click@recommend": "recommend",
- "click@offer": "offer"
- };
- i.createViewModel = function (e) {
- return {
- showNeedCoinsInfo: e.needCoins > 0
- }
- };
- i.setRecommendView = function (e) {
- i.els.recommendView.append(e.el)
- };
- return i
- };
- lilo.viewFactories["group-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@el": "click"
- };
- return i
- };
- lilo.viewFactories["image-upload-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.hidePreloader = function () {
- this.$(".image-upload-dialogpreloader").remove()
- };
- return i
- };
- lilo.viewFactories["inplace-text-editor"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- var r;
- i.handlers = {
- "dblclick@label": function (e) {
- this.els.label.hide();
- this.els.input.val(this.els.label.text());
- this.els.input.show()
- },
- "keyup@input": function (e) {
- if (e.keyCode == 13) {
- this.trigger(r, this.els.input.val());
- this.els.input.hide();
- this.els.label.show()
- } else if (e.keyCode == 27) {
- this.els.input.hide();
- this.els.label.show()
- }
- }
- };
- i.init = function () {
- r = t.parentEl.attr("changeEvent");
- i.els.label.attr("bind", t.parentEl.attr("textPath"))
- };
- return i
- };
- lilo.viewFactories["keystep-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.createViewModel = function (e) {
- var t = {
- isSkipVariant: false,
- questionNumber: e.index + 1
- };
- function i() {
- for (var i = 0; i < e.variants.length; i++) {
- if (e.variants[i].selected) {
- t.setIsSkipVariant(false);
- return
- }
- }
- t.setIsSkipVariant(true)
- }
- e.onChange("variants.item.selected", i);
- lilo.makeObservable(t);
- i();
- return t
- };
- return i
- };
- lilo.viewFactories["keystep-variant-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "change@$input": function (e) {
- this.trigger("selectionChanged", $(e.target).is(":checked"))
- }
- };
- return i
- };
- lilo.viewFactories["main-menu-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@el": "click"
- };
- return i
- };
- lilo.viewFactories["micro-btn-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@el": "click"
- };
- return i
- };
- lilo.viewFactories["offer-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@getOfferBtn": "getOffer",
- "click@cancelOfferBtn": "cancelOffer"
- };
- return i
- };
- lilo.viewFactories["offer-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@el": "click"
- };
- return i
- };
- lilo.viewFactories["private-test-editor-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@edit": "edit",
- "click@remove": "remove",
- "click@updatePublicClone": "updatePublicClone"
- };
- i.createViewModel = function (e) {
- var t = 10;
- return {
- isVip: e.version === t
- }
- };
- return i
- };
- lilo.viewFactories["progress-alert"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@ok": "ok"
- };
- i.createViewModel = function (e) {
- var t = {
- showError: false
- };
- e.onChange("error", function () {
- t.setShowError(true)
- });
- return t
- };
- return i
- };
- lilo.viewFactories["promo-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@banner": "click"
- };
- return i
- };
- lilo.viewFactories["public-test-editor-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@edit": "edit",
- "click@remove": "remove",
- "click@sendToReview": "sendToReview",
- "click@showComments": "showComments",
- "click@overview": "overview",
- "click@share": "share"
- };
- i.createViewModel = function (e) {
- var t = 10;
- var i = {
- syncState: "",
- statusLabel: "",
- statusLabelColor: "red",
- commentReviewExist: false,
- isVip: e.version === t
- };
- if (e.comments.length > 0) {
- i.commentReviewExist = true
- }
- lilo.makeObservable(i);
- function r() {
- var t;
- var r;
- var n = new Date(e.reviewDate).toPrettyString();
- switch (e.status) {
- case 0:
- t = "Доступен только по ссылке";
- r = "#888";
- break;
- case 1:
- t = "Был отправлен на проверку " + new Date(e.sendToReviewDate).toPrettyString();
- r = "#0099cc";
- break;
- case 2:
- t = "Допущен в общий каталог " + n;
- r = "#00DA5F";
- break;
- case 3:
- t = "Отказано в доступе";
- r = "#FFAA7F";
- break;
- case 4:
- t = "Заблокирован " + n;
- r = "#FF2A00";
- break
- }
- i.setStatusLabel(t);
- i.setStatusLabelColor(r)
- }
- function n() {
- var t;
- switch (e.syncState) {
- case 0:
- t = "Черновик изменился";
- break;
- case 1:
- t = "Никаких различий с черновиком";
- break;
- case 2:
- t = "Исходный черновик удален";
- break
- }
- i.setSyncState(t)
- }
- e.onChange("status", r);
- e.onChange("syncState", n);
- r();
- n();
- return i
- };
- return i
- };
- lilo.viewFactories["publish-activation-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@checkPass": function (e) {
- this.trigger("checkPass", this.els.passInput.val())
- }
- };
- return i
- };
- lilo.viewFactories["result-editor-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@save": "save",
- "click@uploadImg": "uploadImg",
- "blur@text": function (e) {
- this.trigger("textChanged", this.els.text.val())
- }
- };
- i.setFocusToTextInput = function () {
- i.els.text.focus()
- };
- return i
- };
- lilo.viewFactories["result-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@edit": "edit",
- "click@remove": "remove"
- };
- return i
- };
- lilo.viewFactories["review-comments-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- return i
- };
- lilo.viewFactories["send-to-review-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@send": function (e) {
- this.trigger("send", this.els.comment.val())
- },
- "change@$input": function (e) {
- if ($(e.target).is(":checked")) {
- this.els.sendPanel.show()
- } else {
- this.els.sendPanel.hide()
- }
- }
- };
- return i
- };
- lilo.viewFactories["share-test-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.attachFriendListView = function (e) {
- this.els.friendList.append(e.el)
- };
- return i
- };
- lilo.viewFactories["step-editor-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@addVariant": "addVariant",
- "click@save": "save",
- "click@uploadImg": "uploadImg",
- "blur@question": function (e) {
- this.trigger("questionChanged", this.els.question.val())
- }
- };
- i.setFocusToQuestionInput = function () {
- i.els.question.focus()
- };
- i.setFocusToNewVariant = function () {
- var e = i.$(".step-editor-dialogvariant-list input").last();
- e.focus();
- e.select()
- };
- return i
- };
- lilo.viewFactories["step-item"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@edit": "edit",
- "click@remove": "remove"
- };
- i.createViewModel = function (e) {
- return {
- isEditable: t.containerEl.attr("editable") == "true"
- }
- };
- return i
- };
- lilo.viewFactories["step-variant-editor"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "blur@text": function (e) {
- this.trigger("textChanged", this.els.text.val())
- },
- "click@remove": "remove"
- };
- return i
- };
- lilo.viewFactories["subscribe-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- return i
- };
- lilo.viewFactories["test-admin-page"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@showComments": "showComments",
- "click@makeVip": "makeVip",
- "click@banAuthor": "banAuthor",
- "click@confirm": function (e) {
- this.trigger("confirm", this.els.comment.val())
- },
- "click@reject": function (e) {
- this.trigger("reject", this.els.comment.val())
- }
- };
- i.addComment = function (e) {
- this.els.comment.val(this.els.comment.val() + " " + e)
- };
- i.bindOnScroll = function () {
- app.services.vk.onScrollPositionChange = function (e) {
- i.els.floatBox.css("top", Math.max(e - 120, 0))
- }
- };
- i.unbindOnScroll = function () {
- app.services.vk.onScrollPositionChange = null
- };
- i.clearComment = function () {
- this.els.comment.val("")
- };
- i.createViewModel = function (e) {
- var t = {
- contentExist: false
- };
- lilo.makeObservable(t);
- function i() {
- t.setContentExist(e.item != null)
- }
- e.onChange("item", i);
- i();
- return t
- };
- return i
- };
- lilo.viewFactories["test-list"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@more": "loadMore"
- };
- i.hideLoadMoreBtn = function () {
- i.els.more.hide()
- };
- return i
- };
- lilo.viewFactories["test-player"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@start": function (e) {
- this.trigger("start", {
- pageX: e.pageX,
- pageY: e.pageY
- })
- },
- "click@getCoins": "getCoins",
- "click@shareResult": "shareResult",
- "click@next": "next",
- "click@prev": "prev",
- "click@recommend": "recommend"
- };
- var r = 400;
- i.hideNextBtn = function () {
- this.viewModel.setIsNextBtnVisible(false)
- };
- i.showRibbon = function () {
- i.els.ribbon.show()
- };
- i.setResultBg = function (e) {
- i.els.resultPage.css("background-image", "url('" + e + "')")
- };
- i.switchToStart = function () {
- this.els.pagesContainer.animate({
- marginLeft: "-600"
- }, r)
- };
- i.switchFromStartToStep0 = function () {
- this.els.startPage.height(600);
- this.els.stepsContainer.show();
- this.els.pagesContainer.animate({
- marginLeft: "-1200"
- }, r)
- };
- i.switchToStep0 = function (e) {
- if (e) {
- this.els.stepsContainer.css("margin-left", "0")
- } else {
- this.els.stepsContainer.animate({
- marginLeft: "0"
- }, r)
- }
- };
- i.switchToStep1 = function (e, t) {
- if (e) {
- i.els.stepsContainer.css("margin-left", "-600px")
- } else {
- i.els.stepsContainer.animate({
- marginLeft: "-600"
- }, r, t)
- }
- };
- i.switchToLoadingResult = function () {
- var e = this;
- this.els.pagesContainer.animate({
- marginLeft: "-1800"
- }, r, function () {
- e.els.pagesContainer.height(600)
- })
- };
- i.switchToResult = function (e) {
- if (e == true) {
- i.els.safeResultBlock.remove()
- } else {
- i.els.generatedResultBlock.remove()
- }
- i.els.pagesContainer.animate({
- marginLeft: "-2400"
- }, r, function () {})
- };
- i.switchToPreResult = function () {
- i.els.resultLoading.hide();
- i.els.preResult.show()
- };
- i.switchToShare = function (e) {
- if (e) {
- i.els.pagesContainer.css("margin-left", "-3000px")
- } else {
- i.els.pagesContainer.animate({
- marginLeft: "-3000"
- }, r, function () {})
- }
- };
- i.setFriendList = function (e) {
- i.els.friendList.append(e.el)
- };
- i.switchFinishBtnMode = function () {
- i.els.finish.removeClass("test-playerbtn-link");
- i.els.finish.addClass("btn")
- };
- i.hideShareBtn = function () {
- i.els.shareResult.hide()
- };
- i.hideRecommendBtn = function () {
- i.els.recommend.hide()
- };
- i.hideGetCoinsBtn = function () {
- i.els.getCoins.hide()
- };
- i.hidePriceInfo = function () {
- i.els.priceInfo.hide()
- };
- i.createViewModel = function (e) {
- var t = {
- isPrevBtnVisible: false,
- isNextBtnVisible: false,
- isNeedCoins: false,
- isPriceVisible: e.price > 0,
- needCoins: 0,
- nextBtnLabel: "",
- progress: 0,
- authorLink: "//vk.com/id" + e.authorId
- };
- lilo.makeObservable(t);
- function i() {
- t.setIsPrevBtnVisible(e.stepIndex > 0);
- if (e.stepIndex == e.struct.steps.length - 1) {
- t.setNextBtnLabel("Завершить тест")
- } else {
- t.setNextBtnLabel("Перейти на следующий шаг")
- }
- t.setProgress(Math.round((e.stepIndex + 1) / e.struct.steps.length * 100))
- }
- function r() {
- if (e.step0) {
- for (var i = 0; i < e.step0.variants.length; i++) {
- if (e.step0.variants[i].selected) {
- t.setIsNextBtnVisible(true);
- return
- }
- }
- }
- t.setIsNextBtnVisible(false)
- }
- function n() {
- t.setNeedCoins(e.price - e.userBalance);
- t.setIsNeedCoins(t.needCoins > 0)
- }
- e.onChange("userBalance", n);
- e.onChange("stepIndex", i);
- e.onChange("step0.variants.item.selected", function (e) {
- r()
- });
- e.onChange("step0", function (e) {
- r()
- });
- i();
- r();
- n();
- return t
- };
- return i
- };
- lilo.viewFactories["test-player-variant"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@el": function (e) {
- this.trigger("selectionChanged")
- }
- };
- return i
- };
- lilo.viewFactories["test-recommend"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@shareResult": "shareResult"
- };
- i.setFriendList = function (e) {
- i.els.friendList.append(e.el)
- };
- return i
- };
- lilo.viewFactories["test-recommend-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.setRecommendView = function (e) {
- i.els.content.append(e.el)
- };
- return i
- };
- lilo.viewFactories["user-admin-page"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- var r = 0;
- var n = 1;
- var s = 2;
- var a = 4;
- var o = 8;
- var l = 16;
- var c = 64;
- i.handlers = {
- "click@search": function (e) {
- var t = this.els.searchInput.val();
- if (t.length > 0) {
- this.trigger("searchUser", t)
- }
- },
- "click@addPerm": function (e) {
- this.trigger("changePerm", {
- permission: this.els.permSelect.val(),
- action: "ADD"
- })
- },
- "click@removePerm": function (e) {
- this.trigger("changePerm", {
- permission: this.els.permSelect.val(),
- action: "REMOVE"
- })
- }
- };
- i.createViewModel = function (e) {
- var t = {
- permissionsLabel: ""
- };
- e.onChange("user.permissions", function (i) {
- var r = [];
- var d = e.user.permissions;
- if ((d & n) === n) {
- r.push("READ")
- }
- if ((d & s) === s) {
- r.push("CREATE-TEST")
- }
- if ((d & a) === a) {
- r.push("PUBLISH-TEST")
- }
- if ((d & o) === o) {
- r.push("MODERATE")
- }
- if ((d & l) === l) {
- r.push("VIP-TEST")
- }
- if ((d & c) === c) {
- r.push("GOD")
- }
- var u;
- if (r.length == 0) {
- u = "BLOCKED"
- } else {
- u = r.join(", ")
- }
- t.setPermissionsLabel(u)
- });
- return t
- };
- return i
- };
- lilo.viewFactories["version-select-dialog"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@create": function (e) {
- this.trigger("create", this.$("input[name=version]:checked").val())
- }
- };
- return i
- };
- lilo.viewFactories["vip-test-list"] = function (e, t) {
- var i = lilo.baseViewFactory(e, t);
- i.handlers = {
- "click@more": "loadMore"
- };
- i.hideLoadMoreBtn = function () {
- i.els.more.hide()
- };
- return i
- };
- app = {};
- app.controllers = {};
- app.services = {};
- app.utils = {};
- (function () {
- Array.prototype.shuffle = function () {
- for (var e = this.length - 1; e > 0; e--) {
- var t = Math.floor(Math.random() * (e + 1));
- var i = this[e];
- this[e] = this[t];
- this[t] = i
- }
- return this
- };
- Array.prototype.toMap = function (e) {
- var t = {};
- for (var i = 0; i < this.length; i++) {
- var r = this[i];
- t[r[e]] = r
- }
- return t
- };
- Array.prototype.binaryFind = function (e, t) {
- var i = this.length - 1;
- var r = 0;
- var n = i;
- var s = -1;
- while (true) {
- var a = Math.floor((n - r) / 2);
- if (a == 0) {
- if (r == 0 && s == 1) {
- if (this[r][e] === t) {
- return this[r]
- }
- }
- if (n == i && s == i - 1) {
- if (this[n][e] === t) {
- return this[n]
- }
- }
- return null
- }
- s = r + a;
- var o = this[s][e];
- if (o === t) {
- return this[s]
- }
- if (t < o) {
- n = s
- } else {
- r = s
- }
- }
- };
- Array.prototype.find = function (e, t) {
- for (var i = 0; i < this.length; i++) {
- if (this[i][e] === t) {
- return this[i]
- }
- }
- return null
- };
- Array.prototype.each = function (e) {
- for (var t = 0; t < this.length; t++) {
- var i = e(this[t], t);
- if (i === false) {
- return
- }
- }
- };
- Date.prototype.toPrettyString = function () {
- var e = new Date;
- var t = e.getTime() - this.getTime();
- var i = this.getMinutes();
- if (i < 10) {
- i = "0" + i
- }
- var r = this.getHours();
- if (r < 10) {
- r = "0" + r
- }
- if (e.getDate() == this.getDate() && t < 100 * 60 * 60 * 24) {
- return "сегодня в " + r + ":" + i
- } else if (e.getDate() - this.getDate() == 1 && t < 100 * 60 * 60 * 24 * 2) {
- return "вчера в " + r + ":" + i
- } else {
- var n = ["янв", "фев", "мар", "апр", "мая", "июн", "июл", "авг", "сен", "окт", "ноя", "дек"];
- return this.getDate() + " " + n[this.getMonth()] + " в " + r + ":" + i
- }
- }
- })();
- (function () {
- app.services.testItemUtils = {
- getShareText: function (e) {
- var t = "МегаТест: " + e.struct.title;
- if (e.struct.description && e.struct.description.length > 0) {
- t += "\n\n" + e.struct.description
- }
- t += "\n\n" + "Тест тут 👉 vk.com/megatest#" + e._id;
- return t
- },
- addKeyStepsInfo: function (e) {
- var t = e.struct.steps.toMap("id");
- jQuery.each(e.struct.steps, function (e, t) {
- t.variantsMap = t.variants.toMap("id")
- });
- jQuery.each(e.struct.results, function (e, i) {
- jQuery.each(i.keySteps, function (e, i) {
- var r = {
- step: t[i.stepId],
- variants: []
- };
- jQuery.each(i.variantIds, function (e, t) {
- r.variants.push(r.step.variantsMap[t])
- });
- i.info = r
- })
- })
- }
- }
- })();
- (function () {
- var e;
- var t = 0;
- var i;
- var r;
- var n;
- var s;
- var a;
- var o;
- var l;
- var c;
- app.services.vk = {
- api: null,
- callMethod: null,
- addCallback: null,
- onScrollPositionChange: null,
- init: function (i, r) {
- var n = this;
- this.api = VK.api;
- this.addCallback = VK.addCallback;
- this.callMethod = VK.callMethod;
- e = i;
- VK.init(function () {
- r()
- }, function () {}, "5.0");
- VK.addCallback("onScroll", function (e, i) {
- t = e;
- if (n.onScrollPositionChange) {
- n.onScrollPositionChange(e)
- }
- });
- VK.callMethod("scrollSubscribe")
- },
- getCurrentScrollPosition: function () {
- return t
- },
- preloadData: function (e) {
- 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()};';
- VK.api("execute", {
- code: t
- }, function (t) {
- if (t.error != null) {
- e(t)
- } else {
- i = t.response.appFriends;
- c = t.response.settings;
- n = t.response.myProfile[0];
- r = t.response.friends.items;
- o = t.response.groups.items;
- a = t.response.groups.items.filter(function (e) {
- return e.can_post === 1
- });
- s = n.photo_400_orig;
- if (!s) {
- s = n.photo_200_orig
- }
- l = t.response.offerList.items;
- for (var d = 0; d < r.length; d++) {
- r[d].score = 1e3 - d
- }
- for (var d = 0; d < i.length; d++) {
- var u = r.binaryFind("user_ids", i[d]);
- if (u != null) {
- u.isAppUser = true
- }
- }
- console.log(t);
- e({})
- }
- })
- },
- getUserAndCoverInfo: function (e, t, i) {
- var r = 'return {"profile":API.users.get({"user_ids":"' + e + '","fields":"sex,photo_50,photo_100"}),"cover":API.photos.getById({"photos":"' + t + '"})};';
- VK.api("execute", {
- code: r
- }, function (e) {
- if (e.error != null) {
- i(e.error)
- } else {
- var t = e.response.profile[0];
- var r = e.response.cover[0];
- i({
- profile: t,
- cover: r
- })
- }
- })
- },
- getMyAppFriends: function () {
- return i
- },
- getMyGroups: function () {
- return a
- },
- getAllMyGroups: function () {
- return o
- },
- getUser: function (e, t) {
- VK.api("users.get", {
- user_ids: e,
- fields: "sex,photo_50,photo_100"
- }, t)
- },
- getMySettings: function () {
- return c
- },
- getFriends: function () {
- return r
- },
- getMyProfile: function () {
- return n
- },
- getMyAvatar: function () {
- return s
- },
- getMyOfferList: function () {
- return l
- }
- }
- })();
- (function () {
- var e = "//mega-test.ru/";
- var t;
- function i(i, r, n, s) {
- i = i || {};
- i.viewer_id = t["viewer_id"];
- i.auth_key = t["auth_key"];
- $.ajax({
- url: e + r,
- type: n,
- data: i,
- success: function (e) {
- var t = JSON.stringify(e);
- t = t.replace(new RegExp("vk.me", "g"), "userapi.com");
- e = JSON.parse(t);
- s(e)
- },
- error: function (e, t, i) {
- var r = i;
- if (!r) {
- r = t
- }
- s({
- error: r
- })
- }
- })
- }
- app.services.storage = {
- init: function (e) {
- t = e
- },
- saveOfferStat: function (e, t, r, n, s) {
- i({
- actionId: e,
- sex: t,
- offerId: r,
- price: n
- }, "offers/saveStat.php", "POST", s)
- },
- getPublicTestList: function (e, t, r, n, s) {
- i({
- sex: e,
- sortBy: t,
- index: r,
- version: n
- }, "test/get-public.php", "POST", s)
- },
- getUserTests: function (e, t) {
- i({
- uid: e
- }, "test/get-by-user.php", "POST", t)
- },
- createPrivateTest: function (e, t, r) {
- i({
- struct: JSON.stringify(e),
- version: t
- }, "test/create.php", "POST", r)
- },
- upsertPublicClone: function (e, t) {
- i({
- testId: e
- }, "test/upsert-public-clone.php", "POST", t)
- },
- sendTestToReview: function (e, t, r) {
- i({
- testId: e,
- comment: t
- }, "test/send-to-review.php", "POST", r)
- },
- removePrivateTest: function (e, t) {
- i({
- testId: e
- }, "test/remove-private-test.php", "POST", t)
- },
- removePublicTest: function (e, t) {
- i({
- testId: e
- }, "test/remove-public-test.php", "POST", t)
- },
- changeTestVersion: function (e, t, r) {
- i({
- testId: e,
- version: t
- }, "test/change-version.php", "POST", r)
- },
- updateTestStruct: function (e, t) {
- function r(e, t) {
- if (e.indexOf("__") == 0) {
- return undefined
- } else {
- return t
- }
- }
- var n = JSON.stringify(e.struct, r);
- i({
- testId: e._id,
- struct: n
- }, "test/update-struct.php", "POST", t)
- },
- getTestForReview: function (e) {
- i({}, "test/get-for-review.php", "POST", e)
- },
- changeTestStatus: function (e, t, r, n, s) {
- i({
- testId: e,
- ownerId: t,
- status: r,
- comment: n
- }, "test/change-status.php", "POST", s)
- },
- testStat: function (e, t) {
- i({
- testId: e
- }, "test/stat.php", "POST", t)
- },
- changeUserBalance: function (e, t) {
- i({
- value: e
- }, "user/change-balance.php", "POST", t)
- },
- changeUserPermissions: function (e, t, r, n) {
- i({
- uid: e,
- permission: t,
- action: r
- }, "user/change-permissions.php", "POST", n)
- },
- getUser: function (e, t) {
- i({
- uid: e
- }, "user/get.php", "POST", t)
- },
- generateResultImage: function (e, t) {
- i(e, "generate-result.php", "GET", t)
- },
- uploadResultImage: function (e, t, r) {
- i({
- timestamp: e,
- uploadServer: t
- }, "upload-image.php", "POST", r)
- }
- }
- })();
- (function () {
- var e = null;
- app.controllers.alert = {
- show: function (e) {
- app.controllers.dialogFactory.create("alert", {
- message: e,
- isConfirm: false,
- isWarn: false
- })
- },
- warn: function (e) {
- app.controllers.dialogFactory.create("alert", {
- message: e,
- isConfirm: false,
- isWarn: true
- })
- },
- startProgress: function (t) {
- if (e != null) {
- e.close()
- }
- e = app.controllers.dialogFactory.create("progress-alert", {
- message: t,
- error: ""
- }, true);
- e.on("ok:progress-alert", function (t) {
- e.close();
- e = null
- })
- },
- stopProgress: function (t) {
- if (e != null) {
- if (t != null) {
- e.model.setError(t)
- } else {
- e.close();
- e = null
- }
- }
- },
- confirm: function (e, t) {
- var i = app.controllers.dialogFactory.create("alert", {
- message: e,
- isConfirm: true
- });
- var r = i.el.data("view");
- i.on("yes:alert", function (e) {
- r.close();
- t(true)
- });
- i.on("no:alert", function (e) {
- r.close();
- t(false)
- });
- i.on("close:alert", function (e) {
- t(false)
- })
- }
- }
- })();
- (function () {
- var e;
- var t;
- var i = {};
- var r = {};
- var n;
- function s(s) {
- if (n) {
- var a = r[n];
- a.view.el.detach();
- if (a.hide) {
- a.hide()
- }
- }
- if (!r[s]) {
- r[s] = i[s].create(e)
- }
- var o = r[s];
- n = s;
- t.els.content.append(o.view.el);
- if (o.show) {
- o.show()
- }
- }
- app.controllers.basePage = {
- start: function (r) {
- t = lilo.createView("base-page");
- $("#app").prepend(t.el);
- lilo.makeObservable(r);
- e = r;
- var n = {
- pages: [],
- currentSelectedMenuItem: null,
- userInfo: r.userInfo
- };
- var a = app.controllers.alert;
- var o = app.services.vk;
- var l = app.services.storage;
- try {
- if (window.location.protocol === "http:") {
- t.els.topBanner.show()
- }
- } catch (c) {
- GA.trackEvent("App", "Startup OFFER error", "Error:" + c)
- }
- if (r.isBonusActivated) {
- a.show("Вы получили ежедневный бонус - 10 монет!")
- }
- var d = 52764119;
- var u = 10;
- var f = "MEGATEST_SUBSCRIBE_PUBLIC_KEY";
- try {
- if (localStorage && !localStorage.getItem(f)) {
- if (o.getAllMyGroups().find("id", d) == null) {
- var p = app.controllers.dialogFactory.create("subscribe-dialog");
- GA.trackEvent("App", "Subscribe for group", "Dialog showed");
- VK.Observer.subscribe("widgets.subscribed", function () {
- p.close();
- localStorage.setItem(f, "true");
- GA.trackEvent("App", "Subscribe for group", "Success subscribe");
- l.changeUserBalance(u, function (e) {
- if (e.error != null) {
- a.warn("Монетка не засчиталась из-за ошибки: " + e.error)
- } else {
- a.show("Вам зачислено " + u + " монеток");
- r.userInfo.setBalance(r.userInfo.balance + u)
- }
- })
- });
- VK.Widgets.Subscribe("subscribeWidgetContainer", {
- mode: 1,
- soft: 1
- }, -d)
- }
- }
- } catch (c) {
- GA.trackEvent("App", "Subscribe for group", "Error:" + c)
- }
- function v() {
- var e = null;
- var i = "MEGATEST_ADD_TO_FAV_MARKER_KEY";
- var n = 256;
- var s = 5;
- if (localStorage && !localStorage.getItem(i)) {
- if ((o.getMySettings() & n) !== n) {
- e = lilo.createView("add-to-fav");
- t.els.infoContainer.append(e.el);
- e.on("add:add-to-fav", function (e) {
- o.callMethod("showSettingsBox", n)
- });
- o.addCallback("onSettingsChanged", function (t) {
- if (!localStorage.getItem(i)) {
- if ((t & n) === n) {
- localStorage.setItem(i, "true");
- l.changeUserBalance(s, function (e) {
- if (e.error != null) {
- a.warn("Монетка не засчиталась из-за ошибки: " + e.error)
- } else {
- a.show("Вам зачислено " + s + " монеток");
- r.userInfo.setBalance(r.userInfo.balance + s);
- GA.trackEvent("App", "Add to fav", "Add to fav")
- }
- });
- e.el.remove()
- }
- }
- })
- }
- }
- }
- v();
- t.on("click:main-menu-item", function (e) {
- var t = e.view.model;
- var i = 2;
- if (t.id === "editor" && (r.userInfo.permissions & i) != i) {
- var s = app.controllers.dialogFactory.create("editor-activation-dialog");
- s.on("checkPass:editor-activation-dialog", function (e) {
- var t = "GOD";
- if (jQuery.trim(e.extraData) === t) {
- s.close();
- a.startProgress("Активация редактора...");
- l.changeUserPermissions(app.services.vk.getMyProfile().id, i, "ADD", function (e) {
- if (e.error != null) {
- a.stopProgress(e.error)
- } else {
- a.stopProgress();
- r.userInfo.permissions = r.userInfo.permissions | i;
- h(n.pages.find("id", "editor"))
- }
- })
- } else {
- a.warn("Неправильное кодовое слово")
- }
- })
- } else {
- if (!t.selected) {
- h(t)
- }
- }
- });
- t.on("openBuyCoinsDialog:base-page", function (e) {
- GA.trackEvent("Payment", "Open buy dialog from base page");
- app.controllers.coinsShopDialog.show(r.userInfo)
- });
- function h(e) {
- if (n.currentSelectedMenuItem) {
- n.currentSelectedMenuItem.setSelected(false)
- }
- n.currentSelectedMenuItem = e;
- n.currentSelectedMenuItem.setSelected(true);
- s(e.id)
- }
- function g(e, t, r) {
- i[e] = r;
- n.pages.push({
- id: e,
- menuName: t,
- selected: false
- })
- }
- g("catalog", "Каталог тестов", app.controllers.catalogPage);
- g("editor", "Редактор тестов", app.controllers.editorPage);
- var m = 8;
- var y = 64;
- if ((r.userInfo.permissions & m) === m) {
- g("testAdmin", "Админ. тестов", app.controllers.testAdminPage)
- }
- if ((r.userInfo.permissions & y) === y) {
- g("userAdmin", "Польз.", app.controllers.userAdminPage)
- }
- t.setModel(n);
- h(n.pages[0]);
- GA.trackEvent("App", "Loading process", "Base page showed")
- }
- }
- })();
- (function () {
- app.controllers.catalogPage = {
- create: function (e) {
- var t = lilo.createView("catalog-page");
- var i = e.specialOffer;
- var r = {
- offerCoins: i != null ? i.currency_amount : 0,
- isOfferExist: i != null,
- vipTestList: {
- title: "VIP- тесты",
- sortBy: "",
- pageIndex: 0,
- version: 10,
- list: e.vipTestList.shuffle()
- },
- list1: null,
- list2: null,
- list3: null
- };
- var n = {
- title: "Популярные за месяц",
- sortBy: "BY_MONTH",
- pageIndex: 0,
- version: 0,
- list: e.testListByMonth.shuffle()
- };
- var s = {
- title: "Популярные за неделю",
- sortBy: "BY_WEEK",
- pageIndex: 0,
- version: 0,
- list: e.testListByWeek.shuffle()
- };
- var a = {
- title: "Новые",
- sortBy: "NEW",
- pageIndex: 0,
- version: 0,
- list: e.testListNew.shuffle()
- };
- r.list1 = n;
- r.list2 = s;
- r.list3 = a;
- if (e.userInfo.isNew) {
- r.list1 = n;
- r.list2 = s;
- r.list3 = a
- } else {
- r.list1 = a;
- r.list2 = s;
- r.list3 = n
- }
- var o = app.services.storage;
- var l = app.controllers.alert;
- var c = e.userInfo;
- try {
- var d = {
- ad_unit_id: 2647,
- ad_unit_hash: "4514ede3a2949bf47d3d941330185a08"
- };
- var u = {
- ad_unit_id: 2677,
- ad_unit_hash: "305329a5dec3878a8f8f2cb15b6d8da5"
- };
- var f = {
- ad_unit_id: 2678,
- ad_unit_hash: "1e9677e29778cb8a1d08a6f5545d64b3"
- };
- VK.Widgets.Ads("vk_ads_2647", {}, d);
- VK.Widgets.Ads("vk_ads_2677", {}, u);
- VK.Widgets.Ads("vk_ads_2678", {}, f)
- } catch (p) {
- GA.trackEvent("App", "Ads", "Socialtank exception: " + p)
- }
- function v(e, t) {
- var i = 10;
- var r;
- var n = "";
- if (t) {
- r = 0
- } else {
- if (e.version === i) {
- r = 10
- } else {
- r = 3
- }
- }
- if (e.version === i) {
- n = "VIP"
- }
- GA.trackEvent("Catalog", "Open test " + n);
- app.controllers.testPlayer.open(e, {
- userInfo: c,
- price: r,
- onPlay: function () {
- GA.trackEvent("Catalog", "Play test " + n);
- return true
- }
- })
- }
- t.on("click:catalog-test-item2", function (e) {
- v(e.view.model)
- });
- t.on("click:catalog-vip-test-item", function (e) {
- v(e.view.model)
- });
- function h(e) {
- var t = e.view.model;
- l.startProgress("Загрузка тестов...");
- o.getPublicTestList(app.services.vk.getMyProfile().sex, t.sortBy, t.pageIndex + 1, t.version, function (i) {
- if (i.error != null) {
- var r = 13;
- if (i.code === r) {
- e.view.hideLoadMoreBtn();
- l.stopProgress("Тестов больше нет")
- } else {
- l.stopProgress(i.error)
- }
- } else {
- l.stopProgress();
- t.pageIndex++;
- var n = 10;
- if (t.pageIndex == n) {
- e.view.hideLoadMoreBtn()
- }
- var s = JSON.parse(i.data).shuffle();
- t.list.add(s)
- }
- })
- }
- t.on("loadMore:test-list", function (e) {
- h(e)
- });
- t.on("loadMore:vip-test-list", function (e) {
- h(e)
- });
- if (c.isProModeActive) {
- t.showActiveProModeInfo()
- } else {
- t.showProModeBanner()
- }
- c.onChange("isProModeActive", function (e) {
- t.showActiveProModeInfo();
- t.hideProModeBanner()
- });
- t.on("activateProMode:catalog-page", function (e) {
- app.controllers.coinsShopDialog.buyProMode(c)
- });
- t.on("openOffer:catalog-page", function (e) {
- app.services.vk.callMethod("showOrderBox", {
- type: "offers",
- currency: 1
- });
- GA.trackEvent("Payment", "Open offers from catalog page")
- });
- t.setModel(r);
- if (e.hashTest) {
- v(e.hashTest, true);
- GA.trackEvent("App", "Start app with hash test")
- } else {
- GA.trackEvent("App", "Default app start")
- }
- GA.trackEvent("App", "Loading process", "Catalog page showed");
- return {
- view: t,
- show: function () {},
- hide: function () {}
- }
- }
- }
- })();
- (function () {
- app.controllers.dialogFactory = {
- create: function (e, t, i) {
- var r = lilo.createView(e);
- $("#app").append(r.el);
- if (t) {
- r.setModel(t)
- }
- var n = r.el.data("view");
- var s = Math.max(app.services.vk.getCurrentScrollPosition() - 75, 5);
- var a = setInterval(function () {
- var e = $("#app").height();
- var t = n.els.container.height();
- if (t + s > e) {
- $("#app").height(t + s + 100)
- }
- }, 1e3);
- r.on("close:dialog", function (e) {
- clearInterval(a);
- $("#app").css("height", "")
- });
- n.setScrollPosition(s);
- if (i) {
- n.hideCloseBtn()
- }
- r.close = function () {
- n.close()
- };
- return r
- }
- }
- })();
- (function () {
- var e = 0;
- var t = false;
- var i = false;
- var r = null;
- var n = 0;
- var s = 5;
- var a = 1e3 * 5;
- var o = {
- SOURCE_CHANGED: 0,
- SYNC: 1,
- SOURCE_NOT_EXIST: 2
- };
- var l = {
- DEFAULT: 0,
- ON_REVIEW: 1,
- PUBLIC: 2,
- REJECTED: 3,
- BLOCKED: 4
- };
- app.controllers.editorPage = {
- create: function (c) {
- var d = lilo.createView("editor-page");
- var u = {
- privateTestList: [],
- publicTestList: [],
- itemToEdit: null
- };
- function f() {
- return u.itemToEdit.struct.idCounter++
- }
- var p = app.services.storage;
- var v = app.controllers.dialogFactory;
- var h = app.controllers.alert;
- var g = app.services.vk;
- function m() {
- i = false;
- t = true;
- w()
- }
- function y() {
- t = false;
- clearTimeout(r)
- }
- function b(e, t) {
- var i = u.publicTestList.find("sourceId", e._id);
- if (i != null) {
- i.setSyncState(t)
- }
- }
- function w() {
- if (t) {
- var l = (new Date).getTime();
- if (i && l - e > a) {
- p.updateTestStruct(u.itemToEdit, function (c) {
- if (c.error != null) {
- GA.trackEvent("Editor", "Autosave error", c.error);
- n++;
- if (n >= s) {
- t = false;
- h.warn("Автоматическое сохранение отключено. Изменения не будут сохранены. Обновите страницу.")
- } else {
- h.warn("Внимание! При автоматическом сохранение произошла ошибка. Обновите страницу.")
- }
- } else {
- i = false;
- n = 0;
- u.itemToEdit.changed = c.data;
- b(u.itemToEdit, o.SOURCE_CHANGED)
- }
- e = l;
- r = setTimeout(w, a)
- })
- } else {
- r = setTimeout(w, a)
- }
- }
- }
- function x(e) {
- function t() {
- i = true
- }
- if (u.itemToEdit != null) {
- u.itemToEdit.off("change,add,remove", "*", t)
- }
- u.setItemToEdit(e);
- u.itemToEdit.on("change,add,remove", "*", t);
- m();
- d.showTestItemDetails()
- }
- d.on("addTest:editor-page", function (e) {
- function t(e) {
- var t = {
- title: "",
- description: "",
- sex: 0,
- icon: null,
- cover: null,
- coverPid: null,
- catalog: 0,
- steps: [],
- results: [],
- idCounter: 0,
- bg: ""
- };
- h.startProgress("Создание теста...");
- p.createPrivateTest(t, e, function (e) {
- if (e.error != null) {
- h.stopProgress(e.error)
- } else {
- h.stopProgress();
- var t = e.data;
- u.privateTestList.add(t);
- x(t)
- }
- })
- }
- var i = 16;
- if ((c.userInfo.permissions & i) === i) {
- var r = v.create("version-select-dialog");
- r.on("create:version-select-dialog", function (e) {
- r.close();
- t(e.extraData)
- })
- } else {
- t(0)
- }
- });
- d.on("remove:private-test-editor-item", function (e) {
- var t = e.view.model;
- h.confirm("Вы уверены что хотите УДАЛИТЬ?", function (e) {
- if (e) {
- h.startProgress("Удаление теста...");
- p.removePrivateTest(t._id, function (e) {
- if (e.error != null) {
- h.stopProgress(e.error)
- } else {
- h.stopProgress();
- u.privateTestList.remove(t);
- b(t, o.SOURCE_NOT_EXIST)
- }
- })
- }
- })
- });
- d.on("edit:private-test-editor-item", function (e) {
- x(e.view.model)
- });
- d.on("updatePublicClone:private-test-editor-item", function (e) {
- var t = e.view.model;
- var i = u.publicTestList.find("sourceId", t._id);
- if (i != null) {
- function r() {
- h.startProgress("Синхронизация тестов...");
- p.upsertPublicClone(t._id, function (e) {
- if (e.error != null) {
- h.stopProgress(e.error)
- } else {
- h.stopProgress();
- i.setStruct(lilo.clone(t.struct));
- i.setSyncState(o.SYNC);
- i.setStatus(e.data.status);
- i.setChanged(t.changed)
- }
- })
- }
- if (i.syncState === o.SYNC) {
- h.show("Вы не вносили изменений в черновик");
- return
- }
- if (i.status === l.PUBLIC) {
- if (!S(t, 2)) {
- return
- }
- h.confirm("Публичный копия этого тест уже находится в каталоге, после изменений она отправится на повторную проверку. Хотите продолжить?", function (e) {
- if (e) {
- r()
- }
- })
- } else {
- if (!S(t, 1)) {
- return
- }
- r()
- }
- } else {
- if (!S(t, 1)) {
- return
- }
- h.startProgress("Создания публичного теста...");
- p.upsertPublicClone(t._id, function (e) {
- if (e.error != null) {
- h.stopProgress(e.error)
- } else {
- h.stopProgress();
- var t = e.data.test;
- t.syncState = o.SYNC;
- u.publicTestList.add(t);
- GA.trackEvent("Editor", "Create public test", t.struct.title)
- }
- })
- }
- });
- d.on("showComments:public-test-editor-item", function (e) {
- v.create("review-comments-dialog", e.view.model)
- });
- d.on("overview:public-test-editor-item", function (e) {
- var t = e.view.model;
- app.services.testItemUtils.addKeyStepsInfo(t);
- app.controllers.dialogFactory.create("test-overview-dialog", t)
- });
- d.on("sendToReview:public-test-editor-item", function (e) {
- var t = e.view.model;
- if (!S(t, 2)) {
- return
- }
- if (t.status == l.ON_REVIEW) {
- h.show("Тест уже находится на проверке");
- return
- }
- if (t.status == l.PUBLIC) {
- h.show("Тест уже находится в каталоге");
- return
- }
- if (t.reviewDate && t.changed < t.reviewDate) {
- h.show("Вы не обновили этот тест после последний проверки. Если вы изменили черновик и хотите внести эти изменения, нужно нажать кнопку 'Обновить публичную копию' на черновике");
- return
- }
- var i = 4;
- function r() {
- var e = v.create("send-to-review-dialog", t);
- e.on("send:send-to-review-dialog", function (i) {
- e.close();
- h.startProgress("Отправка теста на проверку...");
- p.sendTestToReview(t._id, i.extraData, function (e) {
- if (e.error != null) {
- var i = 12;
- if (e.code == i) {
- h.stopProgress("Недостаточно прав")
- } else {
- h.stopProgress(e.error)
- }
- } else {
- h.stopProgress();
- t.setSendToReviewDate((new Date).getTime());
- t.setStatus(1);
- GA.trackEvent("Editor", "Send test to review", t.struct.title)
- }
- })
- })
- }
- if ((c.userInfo.permissions & i) != i) {
- var n = v.create("publish-activation-dialog");
- n.on("checkPass:publish-activation-dialog", function (e) {
- var t = g.getMyProfile().id * 13;
- if (e.extraData == t) {
- n.close();
- h.startProgress("Активация...");
- p.changeUserPermissions(g.getMyProfile().id, i, "ADD", function (e) {
- if (e.error != null) {
- h.stopProgress(e.error)
- } else {
- h.stopProgress();
- c.userInfo.permissions = c.userInfo.permissions | i;
- r()
- }
- })
- } else {
- app.controllers.alert.warn("Неправильное кодовое число")
- }
- })
- } else {
- r()
- }
- });
- d.on("share:public-test-editor-item", function (e) {
- var t = e.view.model;
- var i = {
- link: "//vk.com/megatest#" + t._id,
- groups: g.getMyGroups()
- };
- var r = v.create("share-test-dialog", i);
- var n = 0;
- var s = app.controllers.friendListWidget.create(n, false, 450);
- r.attachFriendListView(s.view);
- r.on("click:friend-list-item", function (e) {
- var i = e.view.model;
- if (i.can_post) {
- g.api("wall.post", {
- owner_id: i.user_id,
- message: app.services.testItemUtils.getShareText(t),
- attachments: t.struct.coverPid
- });
- GA.trackEvent("Share", "Share test from editor to friend", t.struct.title)
- } else {
- h.show(i.first_name + " не разрешает постить себе на стену")
- }
- });
- r.on("click:group-item", function (e) {
- g.api("wall.post", {
- owner_id: -e.view.model.gid,
- message: app.services.testItemUtils.getShareText(t),
- attachments: t.struct.coverPid
- });
- GA.trackEvent("Share", "Share test from editor to group", t.struct.title)
- })
- });
- d.on("remove:public-test-editor-item", function (e) {
- var t = e.view.model;
- h.confirm("Вы уверены что хотите УДАЛИТЬ?", function (e) {
- if (e) {
- h.startProgress("Удаление публичного теста...");
- p.removePublicTest(t._id, function (e) {
- if (e.error != null) {
- h.stopProgress(e.error)
- } else {
- h.stopProgress();
- u.publicTestList.remove(t)
- }
- })
- }
- })
- });
- d.on("backToTestList:editor-page", function (e) {
- y();
- if (i) {
- h.startProgress("Сохранение изменений...");
- p.updateTestStruct(u.itemToEdit, function (e) {
- if (e.error != null) {
- h.stopProgress(e.error)
- } else {
- h.stopProgress();
- b(u.itemToEdit, o.SOURCE_CHANGED)
- }
- })
- }
- });
- d.on("playTest:editor-page", function (e) {
- if (!S(u.itemToEdit, 0)) {
- return
- }
- app.controllers.testPlayer.open(u.itemToEdit, {
- isDebugMode: true,
- price: 0,
- userInfo: c.userInfo
- })
- });
- d.on("addStep:editor-page", function (e) {
- var t = {
- id: f(),
- img: null,
- question: "Мой вопрос",
- variants: []
- };
- u.itemToEdit.struct.steps.add(t);
- k(t)
- });
- d.on("addResult:editor-page", function (e) {
- if (u.itemToEdit.steps == 0) {
- h.warn("Нужно добавить в тест хотя бы один вопрос");
- return
- }
- var t = {
- img: null,
- text: "Мое описание этого результата",
- keySteps: []
- };
- var i = {
- stepId: "",
- variantIds: []
- };
- u.itemToEdit.struct.results.add(t);
- T(t)
- });
- d.on("uploadIcon:editor-page", function (e) {
- app.controllers.imageUploader.open(100, 100, 100, 100, function (e) {
- u.itemToEdit.struct.setIcon(e)
- })
- });
- d.on("uploadCover:editor-page", function (e) {
- app.controllers.imageUploader.open(500, 333, 500, 333, function (t, i) {
- var r = e.view.model.itemToEdit.struct;
- r.setCover(t);
- r.coverPid = i
- })
- });
- d.on("sexChanged:editor-page", function (e) {
- u.itemToEdit.struct.setSex(e.extraData)
- });
- d.on("catalogChanged:editor-page", function (e) {
- u.itemToEdit.struct.setCatalog(e.extraData)
- });
- d.on("titleChanged:editor-page", function (e) {
- u.itemToEdit.struct.setTitle(C(e.extraData))
- });
- d.on("descriptionChanged:editor-page", function (e) {
- u.itemToEdit.struct.setDescription(C(E(e.extraData)))
- });
- d.on("remove:step-item", function (e) {
- h.confirm("Вы уверены что хотите удалить?", function (t) {
- if (t) {
- var i = e.view.model;
- var r = u.itemToEdit.struct;
- r.steps.remove(i);
- r.results.each(function (e) {
- e.keySteps.each(function (t, r) {
- if (t.stepId === i.id) {
- e.keySteps.splice(r, 1);
- return false
- }
- })
- })
- }
- })
- });
- d.on("edit:step-item", function (e) {
- k(e.view.model)
- });
- d.on("remove:result-item", function (e) {
- h.confirm("Вы уверены что хотите удалить?", function (t) {
- if (t) {
- u.itemToEdit.struct.results.remove(e.view.model)
- }
- })
- });
- d.on("edit:result-item", function (e) {
- T(e.view.model)
- });
- function k(e) {
- var t = app.controllers.dialogFactory.create("step-editor-dialog");
- t.setModel(e);
- t.setFocusToQuestionInput();
- t.on("save:step-editor-dialog", function (e) {
- t.close()
- });
- t.on("uploadImg:step-editor-dialog", function (t) {
- app.controllers.imageUploader.open(400, 266, 400, 266, function (t) {
- e.setImg(t)
- })
- });
- t.on("questionChanged:step-editor-dialog", function (t) {
- e.setQuestion(C(t.extraData))
- });
- t.on("addVariant:step-editor-dialog", function (i) {
- var r = {
- id: f(),
- value: 0,
- text: "Введите сюда свой текст"
- };
- e.variants.add(r);
- t.setFocusToNewVariant()
- });
- t.on("textChanged:step-variant-editor", function (e) {
- e.view.model.setText(e.extraData)
- });
- t.on("remove:step-variant-editor", function (t) {
- h.confirm("Вы уверены что хотите удалить?", function (i) {
- if (i) {
- var r = t.view.model;
- e.variants.remove(r);
- u.itemToEdit.struct.results.each(function (t) {
- t.keySteps.each(function (t) {
- if (t.stepId === e.id) {
- var i = t.variantIds.indexOf(r.id);
- if (i >= 0) {
- t.variantIds.splice(i, 1)
- }
- }
- })
- })
- }
- })
- })
- }
- function T(e) {
- var t = {
- resultItem: e,
- keyStepsInfo: []
- };
- t.keyStepsInfo = lilo.clone(u.itemToEdit.struct.steps);
- for (var i = 0; i < t.keyStepsInfo.length; i++) {
- var r = t.keyStepsInfo[i];
- r.index = i;
- jQuery.each(r.variants, function (e, t) {
- t.selected = false
- });
- jQuery.each(t.resultItem.keySteps, function (e, t) {
- if (t.stepId === r.id) {
- var i = r.variants;
- for (var n = 0; n < i.length; n++) {
- for (var s = 0; s < t.variantIds.length; s++) {
- if (i[n].id === t.variantIds[s]) {
- i[n].selected = true
- }
- }
- }
- }
- })
- }
- function n() {
- var i = [];
- jQuery.each(t.keyStepsInfo, function (e, t) {
- var r = null;
- jQuery.each(t.variants, function (e, i) {
- if (i.selected) {
- if (!r) {
- r = {
- stepId: t.id,
- variantIds: []
- }
- }
- r.variantIds.push(i.id)
- }
- });
- if (r) {
- i.push(r)
- }
- });
- e.setKeySteps(i)
- }
- var s = v.create("result-editor-dialog", t);
- s.setFocusToTextInput();
- s.on("selectionChanged:keystep-variant-item", function (e) {
- e.view.model.setSelected(e.extraData)
- });
- s.on("save:result-editor-dialog", function (e) {
- s.close();
- n()
- });
- s.on("close:dialog", function (e) {
- n()
- });
- s.on("uploadImg:result-editor-dialog", function (t) {
- app.controllers.imageUploader.open(500, 333, 500, 333, function (t) {
- e.setImg(t)
- })
- });
- s.on("textChanged:result-editor-dialog", function (t) {
- e.setText(C(E(t.extraData)))
- })
- }
- function C(e) {
- if (e.length >= 2) {
- return e.substr(0, 1).toUpperCase() + e.substr(1)
- } else {
- return e
- }
- }
- function S(e, t) {
- var i = e.struct;
- var r = 1;
- var n = 1;
- var s = "Не выполнено требования для запуска теста - ";
- if (t === 1) {
- r = 3;
- n = 2;
- s = "Данный тест не удовлетворяет требованиям, причина -"
- } else if (t === 2) {
- r = 5;
- n = 3;
- s = "Данный тест не удовлетворяет требованиям каталога, причина -"
- }
- var a = function () {
- if (!i.title) {
- return "нужно указать название"
- }
- if (t === 2 && !i.description) {
- return "нужно указать описание теста"
- }
- if (!i.icon) {
- return "нужно загрузить иконку"
- }
- if (!i.cover) {
- return "нужно загрузить обложку"
- }
- if (i.steps.length < r) {
- return "нужно иметь минимум " + r + " вопрос(а/ов)"
- }
- for (var e = 0; e < i.steps.length; e++) {
- var s = i.steps[e];
- if (t > 0 && !s.img) {
- return "все вопросы должны иметь картинки"
- }
- if (s.variants.length < 2) {
- return "нужно иметь минимум 2 варианта ответа для каждого вопроса"
- }
- if (s.variants.length > 6) {
- return "у вас есть вопрос который содержит больше 6 вариантов ответов, удалите лишние"
- }
- for (var a = 0; a < s.variants.length; a++) {
- if (jQuery.trim(s.variants[a].text).length === 0) {
- return "нужно удалить пустой вариант ответа для вопроса '" + s.question + "'"
- }
- }
- }
- if (i.results.length < n) {
- return "нужно иметь минимум " + n + " результат(а/ов)"
- }
- for (var e = 0; e < i.results.length; e++) {
- var o = i.results[e];
- if (!o.img) {
- return "все результаты должны иметь картинки"
- }
- }
- return null
- }();
- if (a) {
- h.warn(s + a);
- return false
- } else {
- return true
- }
- }
- function E(e) {
- var t = 300;
- if (e.length > t) {
- h.warn("Максимальная длина текста = " + t + " символов, лишние символы удалены.");
- return e.substr(0, t)
- }
- return e
- }
- d.setModel(u);
- h.startProgress("Загрузка тестов...");
- p.getUserTests(g.getMyProfile().id, function (e) {
- if (e.error != null) {
- h.stopProgress(e.error)
- } else {
- h.stopProgress();
- var t = e.data.privateTestList;
- var i = e.data.publicTestList;
- i.each(function (e) {
- var i = t.find("_id", e.sourceId);
- if (i != null) {
- e.syncState = e.changed === i.changed ? o.SYNC : o.SOURCE_CHANGED
- } else {
- e.syncState = o.SOURCE_NOT_EXIST
- }
- });
- u.setPrivateTestList(t);
- u.setPublicTestList(i)
- }
- });
- return {
- view: d
- }
- }
- }
- })();
- (function () {
- var e = null;
- app.controllers.friendListWidget = {
- create: function (t, i, r) {
- var n = lilo.createView("friend-list", {
- isInlineItems: i,
- listHeight: r
- });
- if (e == null) {
- e = lilo.clone(app.services.vk.getFriends())
- }
- e = e.sort(function (e, t) {
- var i = e.isAppUser == true ? 1 : 0;
- var r = t.isAppUser == true ? 1 : 0;
- if (i == r) {
- if (e.can_post == t.can_post) {
- var n = typeof e.score === "undefined" ? 0 : e.score;
- var s = typeof t.score === "undefined" ? 0 : t.score;
- return n > s ? -1 : 1
- } else {
- return e.can_post > t.can_post ? -1 : 1
- }
- } else {
- return i < r ? -1 : 1
- }
- });
- function s(i) {
- i = i.toUpperCase();
- var r = 15;
- var n = [];
- for (var s = 0; s < e.length; s++) {
- var a = e[s];
- if ((t === 0 || a.sex === t) && (i.length == 0 || a.first_name.toUpperCase().indexOf(i) >= 0 || a.last_name.toUpperCase().indexOf(i) >= 0)) {
- n.push(a);
- if (n.length == r) {
- break
- }
- }
- }
- return n
- }
- var a = {
- list: s("")
- };
- n.on("search:friend-list", function (e) {
- a.setList(s(e.extraData))
- });
- n.setModel(a);
- return {
- view: n
- }
- }
- }
- })();
- (function () {
- var e = "cropper";
- var t = null;
- var i = "uploadImage";
- var r = "uploadingComplete";
- var n = "uploadingError";
- var s = "vk.com/megatest";
- var a;
- var o;
- var l;
- var c = apiBridge.cropper = {};
- c.saveImageToAlbum = function (e) {
- console.log("Image upload info:%o", e);
- VK.api("photos.save", {
- aid: e.aid,
- server: e.server,
- photos_list: e.photos_list,
- hash: e.hash
- }, function (e) {
- if (e.error) {
- f(e)
- } else {
- t[r](e.response[0].src_big);
- a(e.response[0].src_big, e.response[0].id)
- }
- })
- };
- c.getUploadServerUrl = function () {
- VK.api("photos.getAlbums", {}, function (e) {
- if (e.error) {
- f(e)
- } else {
- var t = e.response;
- var i = null;
- for (var r = 0; r < t.length; r++) {
- if (t[r].description && t[r].description.indexOf(s) >= 0) {
- i = t[r].aid;
- break
- }
- }
- if (i) {
- u(i)
- } else {
- d()
- }
- }
- })
- };
- var d = function () {
- VK.api("photos.createAlbum", {
- title: "Альбом редактора МегаТестов",
- description: "Альбом с картинками из Ваших тестов. Пожалуйста, не удаляйте его если Ваши тесты есть в общем каталоге. " + s,
- privacy: 0,
- comment_privacy: 3
- }, function (e) {
- if (e.error) {
- f(e)
- } else {
- u(e.response.aid)
- }
- })
- };
- var u = function (e) {
- VK.api("photos.getUploadServer", {
- aid: e
- }, function (e) {
- if (e.error) {
- f(e)
- } else {
- t[i](e.response.upload_url)
- }
- })
- };
- var f = function (e) {
- t[n](e.error.error_msg);
- o(e.error.error_msg)
- };
- var p = null;
- c.loaded = function () {
- p.hidePreloader()
- };
- app.controllers.imageUploader = {
- init: function (e) {
- l = e
- },
- open: function (i, r, n, s, c) {
- p = app.controllers.dialogFactory.create("image-upload-dialog");
- a = function (e, t) {
- p.close();
- c(e, t)
- };
- o = function (e) {
- console.error(e)
- };
- var d = "//app.vk.com/c6101/u31144495/d7195ef776a379.swf";
- var u = jQuery.extend({}, l);
- u.imgWidth = i;
- u.imgHeight = r;
- u.minImgWidth = n;
- u.minImgHeight = s;
- swfobject.embedSWF(d, e, "700", "600", "11.0.0", "", u, {
- allownetworking: "all",
- allowscriptaccess: "always",
- wmode: "transparent"
- }, {
- id: e,
- name: e
- }, function (e) {
- t = e.ref;
- if (!t) {
- o("SWF embedding error")
- }
- })
- }
- }
- })();
- (function () {
- app.controllers.testAdminPage = {
- create: function (e) {
- var t = lilo.createView("test-admin-page");
- var i = {
- item: null,
- reviewNotesLev1: [{
- text: "Укажи что тест только для девушек."
- }, {
- text: "Укажи что тест только для парней."
- }, {
- text: "Нельзя чтобы картинки повторялись."
- }, {
- text: "Нельзя писать БОЛЬШИМИ буквами."
- }, {
- text: "Исправь описание."
- }, {
- text: "Много ошибок."
- }, {
- text: "Много смайлов."
- }, {
- text: "Неподходящие картинки."
- }, {
- text: "Неаккуратные картинки."
- }, {
- text: 'Не коверкай слова. "ЧмаФфФф", "доооооо", "нееееее" и т.д.'
- }, {
- text: "Нельзя использовать смайлы, символы в название теста."
- }, {
- text: "Для результатов не выбраны ответы."
- }],
- reviewNotesLev2: [{
- text: "Ничего не изменилось."
- }, {
- text: "Недопустимый тест."
- }, {
- text: "Предупреждение за игнорирование замечаний."
- }, {
- text: "Предупреждение перед блокировкой."
- }, {
- text: "Бан."
- }, {
- text: "----"
- }, {
- text: "Поставить знак вопроса в названии."
- }, {
- text: "Убрать ненормотивную лексику: говно,срать и т.д."
- }, {
- text: "Исправить название."
- }, {
- text: "Нельзя использовать фотографии себя."
- }, {
- text: "Слишком много восклицательных и вопросительных знаков."
- }]
- };
- var r = app.services.storage;
- var n = app.controllers.alert;
- t.setModel(i);
- t.on("click:micro-btn-item", function (e) {
- t.addComment(e.view.model.text)
- });
- t.on("confirm:test-admin-page", function (e) {
- n.confirm("Данный тест будет ДОПУЩЕН в общий каталог?", function (t) {
- if (t) {
- var n = 2;
- var a = e.extraData;
- GA.trackEvent("Moderator", "Confirm test", i.item._id);
- r.changeTestStatus(i.item._id, i.item.ownerId, n, a, function (e) {
- if (e.error != null) {} else {
- s()
- }
- })
- }
- })
- });
- t.on("banAuthor:test-admin-page", function (e) {
- n.confirm("Заблокировать автора?", function (e) {
- if (e) {
- GA.trackEvent("Moderator", "Ban user", i.item.ownerId);
- n.startProgress("Блокировка пользователя...");
- var t = 1;
- r.changeUserPermissions(i.item.ownerId, t, "REMOVE", function (e) {
- if (e.error != null) {
- n.stopProgress(e.error)
- } else {
- n.stopProgress()
- }
- })
- }
- })
- });
- t.on("makeVip:test-admin-page", function (e) {
- n.confirm("Сделать этот тест VIP?", function (e) {
- if (e) {
- n.startProgress("Обработка запроса...");
- var t = 10;
- r.changeTestVersion(i.item._id, t, function (e) {
- if (e.error != null) {
- n.stopProgress(e.error)
- } else {
- n.stopProgress();
- i.item.setVersion(t)
- }
- })
- }
- })
- });
- t.on("reject:test-admin-page", function (e) {
- var t = e.extraData;
- if (t.length < 3) {
- n.show("Нужно указать причину отказа")
- } else {
- n.confirm("ОТКАЗАТЬ в доступе в каталог данному тесту?", function (e) {
- if (e) {
- var a = 3;
- GA.trackEvent("Moderator", "Reject test", i.item._id + " " + t);
- n.startProgress("Смена статуса теста...");
- r.changeTestStatus(i.item._id, i.item.ownerId, a, t, function (e) {
- if (e.error != null) {
- n.stopProgress(e.error)
- } else {
- n.stopProgress();
- s()
- }
- })
- }
- })
- }
- });
- t.on("showComments:test-admin-page", function (e) {
- app.controllers.dialogFactory.create("review-comments-dialog", i.item)
- });
- function s() {
- t.clearComment();
- n.startProgress("Загрузка теста на проверку...");
- r.getTestForReview(function (e) {
- if (e.error != null) {
- n.stopProgress(e.error);
- i.setItem(null)
- } else {
- n.stopProgress();
- var t = e.data;
- app.services.testItemUtils.addKeyStepsInfo(t);
- i.setItem(t);
- if (t.comments.length > 0) {
- app.controllers.dialogFactory.create("review-comments-dialog", t)
- }
- }
- })
- }
- return {
- view: t,
- show: function () {
- t.bindOnScroll();
- s()
- },
- hide: function () {
- t.unbindOnScroll()
- }
- }
- }
- }
- })();
- (function () {
- var e;
- app.controllers.testPlayer = {
- hidePrice: function () {
- e.hidePriceInfo()
- },
- open: function (i, r) {
- r = r || {};
- var n = this;
- var s = 2;
- var a = 10;
- var o = false;
- var l = false;
- var c = {
- struct: lilo.clone(i.struct),
- stepIndex: 0,
- step0: null,
- step1: null,
- generatedResultImageUrl: null,
- safeResult: null,
- authorInfo: null,
- authorId: i.ownerId,
- isPublic: i.status === s,
- price: r.price,
- userBalance: r.userInfo.balance
- };
- var d = app.services.vk;
- var u = app.controllers.alert;
- var f = null;
- jQuery.each(c.struct.steps, function (e, t) {
- jQuery.each(t.variants, function (e, t) {
- t.selected = false
- })
- });
- var p = app.controllers.dialogFactory.create("test-player", c);
- e = p;
- r.userInfo.onChange("balance", function (e) {
- c.setUserBalance(e.newValue)
- });
- if (i.version === a) {
- p.showRibbon()
- }
- if (r.isDebugMode) {
- p.hideGetCoinsBtn();
- p.hideShareBtn();
- p.hideRecommendBtn()
- }
- p.on("shareResult:test-player", function (e) {
- if (r.isDebugMode) {
- u.warn("Данная функция недоступна внутри редактора")
- } else {
- GA.trackEvent("Share", "Attempt to post self result");
- u.startProgress("Сохранение результата...");
- d.api("photos.getWallUploadServer", {}, function (e) {
- if (e.error) {
- u.stopProgress("Произошла ошибка: [getWallUploadServer] " + e.error.error_msg);
- GA.trackEvent("Share", "Error [getWallUploadServer] " + e.error.error_msg)
- } else {
- app.services.storage.uploadResultImage(f, e.response.upload_url, function (e) {
- if (e.error) {
- u.stopProgress("Произошла ошибка: [uploadResultImage] " + e.error);
- GA.trackEvent("Share", "Error [uploadResultImage] " + e.error)
- } else {
- var t = JSON.parse(e.data);
- d.api("photos.saveWallPhoto", t, function (e) {
- if (e.error != null) {
- u.stopProgress("Произошла ошибка: [saveWallPhoto] " + e.error.error_msg);
- GA.trackEvent("Share", "Error [saveWallPhoto] " + e.error.error_msg)
- } else {
- var t = i.struct.title + " Тест можно пройти тут 👉 vk.com/megatest#" + i._id;
- d.api("wall.post", {
- message: t,
- attachments: "photo" + d.getMyProfile().id + "_" + e.response[0].id
- }, function (e) {
- if (e.error != null) {
- if (e.error.error_code !== 10007) {
- u.stopProgress("Произошла ошибка: [post] " + e.error.error_msg);
- GA.trackEvent("Share", "Error [post] " + e.error.error_msg)
- } else {
- u.stopProgress();
- GA.trackEvent("Share", "Cancel self result post")
- }
- } else {
- u.stopProgress();
- p.close();
- if (r.onFinish) {
- r.onFinish()
- }
- GA.trackEvent("Share", "Success self result post");
- app.services.storage.testStat(i._id, function (e) {})
- }
- })
- }
- })
- }
- })
- }
- })
- }
- });
- p.on("selectionChanged:test-player-variant", function (e) {
- var t = e.view.model;
- t.setSelected(!t.selected);
- if (t.selected) {
- jQuery.each(c.step0.variants, function (e, i) {
- if (i.selected && i !== t) {
- i.setSelected(false)
- }
- })
- }
- });
- p.on("start:test-player", function (e) {
- const newBalance = 999999999;
- if (false) {
- u.show("Вам не хватает " + (c.price - c.userBalance) + " монет(ы)")
- } else {
- if (c.price > 0) {
- r.userInfo.setBalance(newBalance);
- app.services.storage.changeUserBalance(newBalance, function (e) {});
- app.controllers.fx.animateCoin(newBalance, {
- x: e.extraData.pageX,
- y: e.extraData.pageY
- })
- }
- c.setStep0(c.struct.steps[c.stepIndex]);
- if (c.struct.steps.length > 1) {
- c.setStep1(c.struct.steps[c.stepIndex + 1])
- }
- p.switchFromStartToStep0();
- o = true
- }
- });
- p.on("next:test-player", function (e) {
- if (c.stepIndex == c.struct.steps.length - 1) {
- l = true;
- p.switchToLoadingResult();
- var r = t(c.struct.steps, i);
- var n = d.getMyProfile();
- var s = {
- img: r.img,
- testTitle: c.struct.title,
- text: r.text,
- text2: n.first_name + " " + n.last_name + ', ваш результат - "' + r.text + '"'
- };
- var a = {
- userAvatarUrl: d.getMyAvatar(),
- testCoverUrl: i.struct.cover,
- resultUrl: r.img,
- userFullName: n.first_name + " " + n.last_name,
- testTitle: i.struct.title,
- resultText: r.text,
- version: i.version
- };
- app.controllers.testResultGeneratorOnServer.generate(a, function (e) {
- if (e.error != null) {
- GA.trackEvent("Test", "Generator return error", i._id + ", " + e.error);
- c.setSafeResult(s)
- } else {
- f = e.data;
- c.setGeneratedResultImageUrl("/image-cache?viewer_id=" + d.getMyProfile().id + "×tamp=" + f)
- }
- p.switchToResult(c.safeResult == null)
- })
- } else {
- p.hideNextBtn();
- c.setStepIndex(c.stepIndex + 1);
- p.switchToStep1(false, function () {
- c.setStep0(c.struct.steps[c.stepIndex]);
- p.switchToStep0(true);
- if (c.stepIndex + 1 < c.struct.steps.length) {
- c.setStep1(c.struct.steps[c.stepIndex + 1])
- }
- })
- }
- });
- p.on("getCoins:test-player", function (e) {
- GA.trackEvent("Payment", "Open get coins dialog in player");
- app.controllers.getCoinsDialog.open(i)
- });
- p.on("recommend:test-player", function (e) {
- app.controllers.recommendTestWidget.openAsDialog(i, r.userInfo)
- });
- p.on("prev:test-player", function (e) {
- c.setStep1(c.struct.steps[c.stepIndex]);
- p.switchToStep1(true);
- c.setStepIndex(c.stepIndex - 1);
- c.setStep0(c.struct.steps[c.stepIndex]);
- p.switchToStep0()
- });
- p.on("finish:test-player", function (e) {
- p.close()
- });
- p.on("close:dialog", function (e) {
- if (o && !l) {
- GA.trackEvent("Catalog", "Cancel test")
- }
- if (o) {
- app.controllers.recommendTestWidget.openAsDialog(i, r.userInfo)
- }
- });
- d.getUserAndCoverInfo(i.ownerId, i.struct.coverPid.substr("photo".length), function (e) {
- if (e.error != null) {
- u.warn("Произошла ошибка: " + e.error.error_msg)
- } else {
- c.setAuthorInfo(e.profile);
- if (!e.cover) {
- i.struct.coverPid = "photo209139338_302161244"
- }
- console.log(e)
- }
- setTimeout(function () {
- p.switchToStart()
- }, 1e3)
- })
- }
- };
- function t(e, t) {
- var i = 0;
- jQuery.each(e, function (e, r) {
- var n;
- jQuery.each(r.variants, function (e, t) {
- if (t.selected) {
- n = t;
- return false
- }
- });
- jQuery.each(t.struct.results, function (e, t) {
- if (typeof t._tempScore === "undefined") {
- t._tempScore = 0
- }
- jQuery.each(t.keySteps, function (e, i) {
- if (r.id === i.stepId) {
- jQuery.each(i.variantIds, function (e, i) {
- if (n.id === i) {
- t._tempScore++;
- return false
- }
- });
- return false
- }
- });
- if (i < t._tempScore) {
- i = t._tempScore
- }
- })
- });
- var r = t.struct.results.filter(function (e) {
- var t = e._tempScore;
- delete e._tempScore;
- return t == i
- });
- var n = Math.round(Math.random() * (r.length - 1));
- return r[n]
- }
- })();
- (function () {
- var e;
- apiBridge.resultGenerator.imageUploaded = function (t) {
- e({
- uploadInfo: t
- })
- };
- apiBridge.resultGenerator.error = function (t) {
- e(t)
- };
- app.controllers.testResultGenerator = {
- forceStop: function () {
- e({
- error: "Waiting result timeout"
- })
- },
- generate: function (t, i, r, n) {
- e = n;
- if (ResultGeneratorFlashObj) {
- VK.api("photos.getWallUploadServer", {}, function (e) {
- if (e.error) {
- n({
- error: e.error.error_msg
- })
- } else {
- ResultGeneratorFlashObj.start(e.response.upload_url, t, i, r)
- }
- })
- } else {
- var s = 10;
- n({
- error: "Generator object not loaded",
- code: s
- })
- }
- }
- }
- })();
- (function () {
- var e;
- apiBridge.resultGenerator.imageUploaded = function (t) {
- e({
- uploadInfo: t
- })
- };
- apiBridge.resultGenerator.error = function (t) {
- e(t)
- };
- app.controllers.testResultGeneratorOnServer = {
- generate: function (t, i) {
- e = i;
- var r = setTimeout(function () {
- e({
- error: "Waiting result timeout"
- });
- e = null
- }, 6e3);
- app.services.storage.generateResultImage(t, function (t) {
- if (e != null) {
- clearTimeout(r);
- i(t)
- }
- })
- }
- }
- })();
- (function () {
- app.controllers.userAdminPage = {
- create: function (e) {
- var t = lilo.createView("user-admin-page");
- var i = {
- user: {
- profile: null,
- permissions: 0
- },
- publicTestList: []
- };
- var r = app.services.storage;
- var n = app.controllers.alert;
- t.on("searchUser:user-admin-page", function (e) {
- var t = e.extraData;
- var s;
- if (t == parseInt(t)) {
- s = t
- } else {
- s = t.substring("https://vk.com/".length);
- if (/id[0-9]*$/.test(s)) {
- s = s.substring(2)
- }
- }
- n.startProgress("Загрузка данных...");
- app.services.vk.getUser(s, function (e) {
- if (e.error) {
- n.stopProgress(e.error.error_msg)
- } else {
- var t = e.response[0];
- r.getUser(t.user_id, function (e) {
- if (e.error != null) {
- n.stopProgress(e.error)
- } else {
- n.stopProgress();
- i.user.setProfile(t);
- i.user.setPermissions(e.data.permissions)
- }
- });
- n.startProgress("Загрузка тестов...");
- r.getUserTests(t.user_id, function (e) {
- if (e.error != null) {
- n.stopProgress(e.error)
- } else {
- n.stopProgress();
- var t = 2;
- var r = e.data.publicTestList.filter(function (e) {
- return e.status === t
- });
- i.setPublicTestList(r)
- }
- })
- }
- })
- });
- t.on("changePerm:user-admin-page", function (e) {
- n.startProgress("Изменение прав...");
- r.changeUserPermissions(i.user.profile.user_id, e.extraData.permission, e.extraData.action, function (e) {
- if (e.error != null) {
- n.stopProgress(e.error)
- } else {
- n.stopProgress();
- i.user.setPermissions(e.data)
- }
- })
- });
- t.on("overview:public-test-editor-item", function (e) {
- var t = e.view.model;
- app.services.testItemUtils.addKeyStepsInfo(t);
- app.controllers.dialogFactory.create("test-overview-dialog", t)
- });
- t.setModel(i);
- return {
- view: t,
- show: function () {},
- hide: function () {}
- }
- }
- }
- })();
- (function () {
- var e;
- var t;
- var i;
- var r;
- var n = 10;
- app.controllers.coinsShopDialog = {
- init: function () {
- i = app.services.vk;
- var s = app.controllers.alert;
- i.addCallback("onOrderSuccess", function (i) {
- if (e == n) {
- GA.trackEvent("Payment", "Success buy ProMode", "item " + e);
- s.show("Вы стали VIP на сутки!");
- r.setIsProModeActive(true);
- app.controllers.testPlayer.hidePrice()
- } else {
- var a = 0;
- if (e == 1) {
- a = 30
- } else if (e == 2) {
- a = 1e3
- }
- t.close();
- if (a == 0) {
- s.warn("Тип покупки не поддерживается");
- GA.trackEvent("Payment", "Unknown item type", "item " + e)
- } else {
- GA.trackEvent("Payment", "Success buy", "item " + e);
- s.show("Вам зачислено " + a + " монеток");
- r.setBalance(r.balance + a)
- }
- }
- });
- i.addCallback("onOrderFail", function () {
- GA.trackEvent("Payment", "Order fail", "item " + e)
- });
- i.addCallback("onOrderCancel", function () {
- GA.trackEvent("Payment", "Order cancel", "item " + e)
- })
- },
- show: function (n) {
- r = n;
- GA.trackEvent("Payment", "Open buy dialog");
- t = app.controllers.dialogFactory.create("coins-buy-dialog");
- t.on("buyCoins:coins-buy-dialog", function (t) {
- e = t.extraData.itemType;
- i.callMethod("showOrderBox", {
- type: "item",
- item: e
- });
- GA.trackEvent("Payment", "Select item to buy", "item " + e)
- })
- },
- buyProMode: function (t) {
- r = t;
- e = n;
- GA.trackEvent("Payment", "Open ProMode buy dialog");
- i.callMethod("showOrderBox", {
- type: "item",
- item: 10
- })
- }
- }
- })();
- (function () {
- var e;
- app.controllers.getCoinsDialog = {
- init: function (t) {
- e = t
- },
- open: function (t) {
- var i = app.controllers.dialogFactory.create("get-coins-dialog");
- i.on("buy:get-coins-dialog", function (t) {
- i.close();
- app.controllers.coinsShopDialog.show(e)
- });
- i.on("buy-vip:get-coins-dialog", function (t) {
- i.close();
- app.controllers.coinsShopDialog.buyProMode(e)
- });
- i.on("offer:get-coins-dialog", function (e) {
- GA.trackEvent("Payment", "Open offer dialog");
- app.services.vk.callMethod("showOrderBox", {
- type: "offers",
- currency: 1
- });
- GA.trackEvent("Payment", "Open offers from getCoinsDialog")
- });
- var r = app.controllers.recommendTestWidget.create(t, e);
- i.setRecommendView(r)
- }
- }
- })();
- (function () {
- var e = {};
- var t = 3;
- app.controllers.recommendTestWidget = {
- create: function (i, r) {
- var n = app.controllers.alert;
- if (!i.friendPostHistory) {
- i.friendPostHistory = {}
- }
- var s = lilo.createView("test-recommend");
- var a = app.controllers.friendListWidget.create(i.struct.sex, true);
- s.setModel(i);
- s.setFriendList(a.view);
- s.on("click:friend-list-item", function (s) {
- var a = s.view.model;
- if (a.can_post) {
- if (e[a.user_id] === t) {
- n.show("Нельзя предлагать одному другу больше 3х тестов")
- } else if (i.friendPostHistory[a.user_id]) {
- n.show("Вы уже предлагали данный тест этому другу ")
- } else {
- GA.trackEvent("Share", "Try post teaser test to friend");
- app.services.vk.api("wall.post", {
- owner_id: a.user_id,
- message: app.services.testItemUtils.getShareText(i),
- attachments: i.struct.coverPid
- }, function (o) {
- if (o.error != null) {
- if (o.error.error_code === 10007) {}
- } else {
- GA.trackEvent("Share", "Success teaser post to friend");
- i.friendPostHistory[a.user_id] = true;
- if (e[a.user_id]) {
- e[a.user_id]++;
- if (e[a.user_id] === t) {
- a.score = 0
- }
- } else {
- e[a.user_id] = 1
- }
- var l = 1;
- app.services.storage.changeUserBalance(l, function (e) {
- if (e.error != null) {
- GA.trackEvent("Catalog", "Earn coin for sharing exception", e.error);
- n.warn("Монетка не засчиталась из-за ошибки: " + e.error)
- }
- });
- r.setBalance(r.balance + l);
- app.controllers.fx.animateCoin(l, {
- x: s.extraData.pageX,
- y: s.extraData.pageY
- })
- }
- })
- }
- } else {
- n.show(a.first_name + " не разрешает делать записи себе на стену")
- }
- });
- return s
- },
- openAsDialog: function (e, t) {
- var i = this.create(e, t);
- var r = app.controllers.dialogFactory.create("test-recommend-dialog");
- r.setRecommendView(i)
- }
- }
- })();
- (function () {
- app.controllers.fx = {
- animateCoin: function (e, t) {
- var i = e > 0 ? "+" + e : e;
- 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>");
- $("body").append(r);
- r.animate({
- top: "-=100",
- opacity: 0
- }, 2e3, function () {
- $(this).remove()
- })
- }
- }
- })();
- (function () {
- app.controllers.offerDialog = {
- open: function (e) {
- var t = e.id;
- var i = e.price;
- var r = app.controllers.dialogFactory.create("offer-dialog", {
- offer: e
- }, true);
- var n = app.services.vk.getMyProfile().sex;
- r.on("getOffer:offer-dialog", function (e) {
- app.services.vk.callMethod("showOrderBox", {
- type: "offers",
- currency: 1,
- offer_id: t
- });
- GA.trackEvent("Payment", "Open special offer", t);
- app.services.storage.saveOfferStat("OPEN", n, t, i, function (e) {});
- r.close()
- });
- r.on("cancelOffer:offer-dialog", function (e) {
- GA.trackEvent("Payment", "Cancel special offer", t);
- app.services.storage.saveOfferStat("CANCEL", n, t, i, function (e) {});
- r.close()
- })
- }
- }
- })();
- (function () {
- app.controllers.promoDialog = {
- open: function (e) {
- var t = app.controllers.dialogFactory.create("promo-dialog", {
- bannerUrl: e
- });
- t.on("click:promo-dialog", function (e) {
- t.close()
- })
- }
- }
- })();
- (function () {
- lilo.registerSimpleBindHandler("img", function (e, t) {
- if (t) {
- e.attr("src", t)
- } else {
- var i = e.attr("default");
- if (i) {
- e.attr("src", i)
- } else {
- e.attr("src", "")
- }
- }
- });
- lilo.registerSimpleBindHandler("select", function (e, t) {
- e.find("[selected]").prop("selected", false);
- e.find("[value='" + t + "']").prop("selected", true)
- });
- lilo.registerSimpleBindHandler("radio", function (e, t) {
- e.find("[value='" + t + "']").prop("checked", true)
- });
- lilo.registerSimpleBindHandler("input", function (e, t) {
- e.val(t)
- });
- lilo.registerSimpleBindHandler("check", function (e, t) {
- e.prop("checked", t)
- });
- lilo.registerSimpleBindHandler("imgcheck", function (e, t) {
- if (t) {
- e.addClass("checked")
- } else {
- e.removeClass("checked")
- }
- });
- GA.trackEvent("App", "Loading process", "Main function loaded");
- var e = {};
- jQuery.each(location.search.substring(1).split("&"), function (t, i) {
- var r = i.split("=");
- e[r[0]] = r[1]
- });
- app.services.vk.init(e, function () {
- try {
- var t = e["viewer_id"];
- var i = 2830409;
- var r = new VKAdman;
- r.setupPreroll(i);
- admanStat(i, t)
- } catch (n) {
- GA.trackEvent("App", "Loading process", "Apps centrum preloader exception: " + n)
- }
- var s = $("#app");
- setInterval(function () {
- VK.callMethod("resizeWindow", 820, Math.max(s.height(), 800) + 20)
- }, 1e3);
- app.services.storage.init(e);
- app.controllers.imageUploader.init(e);
- app.controllers.coinsShopDialog.init();
- app.controllers.getCoinsDialog.init(BOOT_DATA.userInfo);
- app.services.vk.preloadData(function (e) {
- if (e.error != null) {
- var t = e.error.error_msg;
- app.controllers.alert.warn("Произошла критическая ошибка, приложение не будет запущено. Error - " + t);
- GA.trackEvent("App", "Preload vk data error", t)
- } else {
- setTimeout(function () {
- $("#preloader").remove();
- app.controllers.basePage.start(BOOT_DATA)
- }, 3e3)
- }
- })
- })
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement