16 changed files with 408 additions and 18 deletions
@ -0,0 +1,46 @@ |
|||
import axios from "axios"; |
|||
|
|||
export default class VipAPI { |
|||
|
|||
vip_prices = [{'human_duration':"НИКОГДА", 'money_price':0, 'img_url':'', 'period':'never', 'item_price':"нихуя"}] |
|||
vip_statistic = {} |
|||
freevip_players = -1; |
|||
vip_players = -1; |
|||
|
|||
async getVipPrices(stages) { |
|||
console.log(`[API] load: vip prices`); |
|||
stages.add("vip prices"); |
|||
return await axios.get(`/api/external/vip`) |
|||
.then(response => response.data) |
|||
.then(response => { |
|||
this.vip_prices = response; |
|||
this.vip_prices.forEach(price => { |
|||
price.img_url = require(`@/assets/images/vip/${price.img_url.replace("site_content/images/vip/", "")}`); |
|||
}) |
|||
}) |
|||
.catch(err => { |
|||
console.log(`[API] cannot request vip prices, err: ${err}`); |
|||
throw new Error("BLYA"); |
|||
}).finally(() => { |
|||
stages.remove("vip prices"); |
|||
}) |
|||
} |
|||
|
|||
async getVipStatistic(stages) { |
|||
console.log(`[API] load: vip statistic`); |
|||
stages.add("vip statistic"); |
|||
return await axios.get(`/api/stats?filter=donate`) |
|||
.then(response => response.data) |
|||
.then(response => { |
|||
this.vip_statistic = response['donate']; |
|||
this.freevip_players = response['freevip_players']; |
|||
this.vip_players = response['vip_players'] |
|||
}) |
|||
.catch(err => { |
|||
console.log(`[API] cannot request vip statistic, err: ${err}`); |
|||
throw new Error("BLYA"); |
|||
}).finally(() => { |
|||
stages.remove("vip statistic"); |
|||
}) |
|||
} |
|||
} |
After Width: | Height: | Size: 376 KiB |
After Width: | Height: | Size: 253 KiB |
After Width: | Height: | Size: 292 KiB |
After Width: | Height: | Size: 49 KiB |
@ -0,0 +1,57 @@ |
|||
<template> |
|||
<svg fill="currentColor" :height="h" :width="w" xmlns="http://www.w3.org/2000/svg" |
|||
viewBox="0 0 512 512" xml:space="preserve"> |
|||
<g> |
|||
<path class="st0" d="M217.238,233.975l-18.104,4.058c-0.496,0.11-0.688,0.414-0.578,0.916l5.057,22.603 |
|||
c0.11,0.503,0.413,0.688,0.909,0.578l18.118-4.051c7.743-1.729,11.932-7.647,10.306-14.894 |
|||
C231.292,235.814,224.995,232.246,217.238,233.975z"/> |
|||
<path class="st0" d="M479.546,265.761c-2.397-6.283-2.397-13.234,0-19.524l19.469-51.11c4.602-12.056,0.165-25.669-10.623-32.716 |
|||
l-45.798-29.906c-5.635-3.679-9.713-9.307-11.477-15.796l-14.288-52.805c-3.376-12.442-14.963-20.86-27.832-20.22l-54.63,2.728 |
|||
c-6.724,0.331-13.323-1.812-18.573-6.035L273.204,6.071c-10.044-8.095-24.359-8.095-34.404,0l-42.588,34.307 |
|||
c-5.25,4.223-11.849,6.366-18.573,6.035l-54.631-2.728c-12.868-0.64-24.456,7.778-27.832,20.22L80.89,116.709 |
|||
c-1.764,6.489-5.842,12.117-11.477,15.796l-45.798,29.906c-10.788,7.047-15.225,20.66-10.637,32.716l19.482,51.11 |
|||
c2.397,6.29,2.397,13.24,0,19.524l-19.482,51.117c-4.588,12.042-0.152,25.668,10.637,32.716l45.798,29.905 |
|||
c5.635,3.672,9.713,9.294,11.477,15.79l14.288,52.798c3.376,12.455,14.963,20.867,27.832,20.226l54.631-2.729 |
|||
c6.724-0.337,13.323,1.812,18.573,6.035l42.588,34.315c10.044,8.087,24.36,8.087,34.404,0l42.588-34.315 |
|||
c5.25-4.223,11.849-6.372,18.573-6.035l54.63,2.729c12.869,0.64,24.456-7.771,27.832-20.226l14.288-52.798 |
|||
c1.764-6.496,5.842-12.118,11.477-15.79l45.798-29.905c10.788-7.048,15.225-20.674,10.623-32.716L479.546,265.761z M167.54,283.266 |
|||
l-32.847,7.344c-0.496,0.11-0.689,0.414-0.565,0.924l7.454,33.342c0.166,0.744-0.234,1.364-0.978,1.53l-12.235,2.742 |
|||
c-0.744,0.166-1.364-0.227-1.529-0.971l-18.45-82.434c-0.165-0.751,0.234-1.364,0.978-1.529l53.197-11.904 |
|||
c0.759-0.166,1.364,0.22,1.544,0.971l2.397,10.74c0.166,0.752-0.22,1.358-0.978,1.53l-38.965,8.715 |
|||
c-0.496,0.11-0.688,0.42-0.578,0.923l4.836,21.604c0.111,0.497,0.414,0.689,0.91,0.579l32.847-7.344 |
|||
c0.758-0.173,1.378,0.22,1.543,0.964l2.398,10.74C168.684,282.481,168.298,283.094,167.54,283.266z M261.755,299.297l-13.861,3.107 |
|||
c-0.992,0.22-1.584-0.042-2.15-0.834l-23.642-29.464l-14.619,3.266c-0.496,0.11-0.688,0.42-0.578,0.923l7.247,32.344 |
|||
c0.166,0.75-0.234,1.364-0.978,1.529l-12.235,2.742c-0.758,0.165-1.364-0.228-1.53-0.971l-18.448-82.435 |
|||
c-0.166-0.744,0.22-1.364,0.978-1.53l32.847-7.344c15.611-3.5,29.416,4.299,32.764,19.282c2.494,11.119-1.956,21.163-10.885,26.97 |
|||
l25.614,30.595C262.968,298.243,262.637,299.104,261.755,299.297z M331.445,283.707l-53.197,11.904 |
|||
c-0.744,0.165-1.365-0.22-1.53-0.971l-18.435-82.434c-0.179-0.751,0.22-1.357,0.964-1.523l53.198-11.904 |
|||
c0.758-0.172,1.364,0.221,1.543,0.965l2.397,10.746c0.166,0.744-0.22,1.35-0.978,1.522l-38.964,8.715 |
|||
c-0.496,0.117-0.688,0.42-0.578,0.922l4.643,20.73c0.11,0.503,0.414,0.696,0.909,0.586l32.847-7.351 |
|||
c0.758-0.165,1.364,0.221,1.544,0.971l2.397,10.74c0.166,0.751-0.22,1.364-0.978,1.53l-32.847,7.35 |
|||
c-0.496,0.11-0.689,0.414-0.578,0.916l4.808,21.48c0.11,0.496,0.414,0.696,0.91,0.586l38.965-8.721 |
|||
c0.758-0.166,1.378,0.22,1.543,0.971l2.398,10.74C332.588,282.922,332.202,283.542,331.445,283.707z M402.65,267.779 |
|||
l-53.211,11.904c-0.744,0.165-1.364-0.221-1.529-0.972l-18.435-82.434c-0.179-0.751,0.22-1.357,0.964-1.53l53.212-11.898 |
|||
c0.744-0.172,1.35,0.214,1.529,0.965l2.397,10.74c0.166,0.751-0.22,1.357-0.964,1.53l-38.964,8.715 |
|||
c-0.51,0.11-0.702,0.42-0.592,0.923l4.643,20.729c0.11,0.503,0.414,0.696,0.923,0.586l32.847-7.351 |
|||
c0.744-0.172,1.35,0.221,1.53,0.972l2.397,10.733c0.166,0.758-0.22,1.364-0.964,1.536l-32.847,7.351 |
|||
c-0.51,0.11-0.703,0.413-0.592,0.909l4.808,21.48c0.11,0.503,0.414,0.702,0.924,0.586l38.964-8.715 |
|||
c0.744-0.165,1.364,0.221,1.53,0.972l2.398,10.74C403.78,266.994,403.394,267.614,402.65,267.779z"/> |
|||
</g> |
|||
</svg> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: "FreeSvg", |
|||
props: { |
|||
w: { |
|||
type: String, |
|||
default: "512px" |
|||
}, |
|||
h: { |
|||
type: String, |
|||
default: "60%" |
|||
} |
|||
} |
|||
} |
|||
</script> |
@ -0,0 +1,21 @@ |
|||
<template> |
|||
<svg fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" :width="w" :height="h"> |
|||
<path d="M 23.5 0 C 11.093 0 1 10.093 1 22.5 C 1 34.907 11.093 45 23.5 45 C 26.095 45 27.935594 44.704359 29.558594 44.443359 C 30.976594 44.215359 32.315 44 34 44 C 42.165 44 47.199047 49.603156 47.248047 49.660156 C 47.444047 49.882156 47.721 49.998047 48 49.998047 C 48.186 49.998047 48.374063 49.947844 48.539062 49.839844 C 48.955062 49.572844 49.113109 49.042797 48.912109 48.591797 C 48.802109 48.343797 46.085359 42.483891 35.193359 39.962891 L 34.896484 39.880859 C 32.204484 39.214859 30.0305 38.13025 28.4375 36.65625 C 26.3795 34.75425 25.986375 32.834266 25.984375 32.822266 C 25.892375 32.313266 25.416156 31.960906 24.910156 32.003906 C 24.394156 32.050906 24 32.482 24 33 C 24 33.102 24.006516 35.09075 24.353516 36.96875 C 24.055516 36.98975 23.773 37 23.5 37 C 15.505 37 9 30.495 9 22.5 C 9 14.505 15.505 8 23.5 8 C 31.495 8 38 14.505 38 22.5 C 38 23.096 37.962719 23.698828 37.886719 24.298828 C 36.000719 24.000828 34.125 24 34 24 C 33.418 24 33 24.499531 33 25.019531 C 33.012 25.562531 33.455047 25.999 33.998047 26 C 34.018047 26 36.098938 26.019797 37.960938 27.216797 C 41.047937 29.200797 41.786969 32.196656 41.792969 32.222656 C 41.885969 32.634656 42.228437 32.942188 42.648438 32.992188 C 43.065437 33.035188 43.474109 32.822359 43.662109 32.443359 C 45.213109 29.308359 46 25.962 46 22.5 C 46 10.093 35.907 0 23.5 0 z M 38.634766 32.001953 C 38.389703 31.987 38.19875 32.093594 38.09375 32.277344 C 37.88175 32.648344 38.039797 33.383437 38.466797 34.023438 C 38.899797 34.671437 39.266594 35 39.558594 35 C 39.826594 35 40.09475 34.664516 39.96875 33.853516 C 39.89375 33.369516 39.611484 32.317594 38.896484 32.058594 C 38.803984 32.025094 38.716453 32.006937 38.634766 32.001953 z M 35.367188 35 C 34.918187 35 34.544453 35.116797 34.314453 35.341797 C 33.724453 35.919797 33.989578 36.9355 34.892578 37.5625 C 35.287578 37.8355 35.855109 38 36.412109 38 C 36.979109 38 37.453094 37.830438 37.746094 37.523438 C 38.271094 36.963438 37.969563 36.170906 36.976562 35.503906 C 36.484563 35.173906 35.912187 35 35.367188 35 z"/> |
|||
</svg> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'QiwiSvg', |
|||
props: { |
|||
w: { |
|||
type: String, |
|||
default: "512px" |
|||
}, |
|||
h: { |
|||
type: String, |
|||
default: "60%" |
|||
} |
|||
} |
|||
} |
|||
</script> |
@ -1,11 +0,0 @@ |
|||
<template> |
|||
<md-tab id="vipView" md-label="VIP"> |
|||
<p>vip</p> |
|||
</md-tab> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'VipView' |
|||
} |
|||
</script> |
@ -0,0 +1,129 @@ |
|||
<template> |
|||
<md-dialog :md-active.sync="showBuyDialog"> |
|||
<div class="md-layout md-alignment-bottom-center" style="z-index: 1"> |
|||
<div class="md-layout-item md-size-5"/> |
|||
<div class="md-layout-item rounded-and-colored md-size-45 md-small-size-90"> |
|||
<h3 style="text-align: center; margin: 2% 0%">VIP {{price.human_duration}}</h3> |
|||
</div> |
|||
<div class="md-layout-item rounded-and-colored-circle md-size-5 clickable" v-on:click="closeVBD()"> |
|||
<h3 style="text-align: center; margin: 25% 0%">X</h3> |
|||
</div> |
|||
</div> |
|||
<div class="md-layout md-alignment-bottom-center" style="margin-top: -2.5%"> |
|||
<div class="md-layout-item md-size-50 server-info-rounded md-small-size-100"> |
|||
<div style="justify-content: center; display: flex; margin-top: 5.5%"> |
|||
<div style="max-width: 50%; float: left;"> |
|||
<img class="img-about-buy" :src="price.img_url"/> |
|||
</div> |
|||
<div style="max-width: 50%; float: left;"> |
|||
<p class="p-about-buy">VIP на {{price.human_duration}}</p> |
|||
<p class="p-about-buy">Цена в рублях: {{price.money_price}}</p> |
|||
<p class="p-about-buy">Цена в ТФ2 валюте: {{price.item_price}}</p> |
|||
<p class="p-about-buy">п.с принимается только чистыми</p> |
|||
</div> |
|||
</div> |
|||
<hr> |
|||
<div style="justify-content: center; display: flex; margin-top: 2.5%" v-if="$API.player.auth('steam')"> |
|||
<div style="max-width: 40%; float: left;" class="clickable" v-if="price.period !=='free'" v-on:click="buyWithQiwi(price.money_price)"> |
|||
<QiwiSvg class="img-vipextra"/> |
|||
<p class="p-vipbuy" style="margin-bottom: -5%">{{price.money_price}} рублей</p> |
|||
<p class="p-vipbuy-extra"></p> |
|||
</div> |
|||
<div style="max-width: 40%; float: left;" class="clickable" v-if="price.period !=='free'" v-on:click="buyWithSteam()"> |
|||
<SteamSvg class="img-vipextra"/> |
|||
<p class="p-vipbuy" style="margin-bottom: -5%">{{price.item_price}}</p> |
|||
<p class="p-vipbuy-extra"></p> |
|||
</div> |
|||
<div style="max-width: 40%; float: left;" class="clickable" v-if="price.period ==='free'" v-on:click="buyWithFree()"> |
|||
<FreeSvg class="img-vipextra"/> |
|||
<p class="p-vipbuy" style="margin-bottom: -5%">{{price.item_price}}</p> |
|||
<p class="p-vipbuy-extra"></p> |
|||
</div> |
|||
</div> |
|||
<div v-if="$API.player.auth('steam')"> |
|||
<p class="p-about-buy" style="text-align: center">после получения перезайди на сервер, если тебя не кикнуло автоматом</p> |
|||
</div> |
|||
<div v-else> |
|||
<h3 style="text-align: center; cursor: pointer; text-decoration-line: underline" v-on:click="openAW()">АВТОРИЗОВАТЬСЯ</h3> |
|||
<h4 style="text-align: center">иначе кому ты собрался его покупать</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<AuthWindow ref="aw" /> |
|||
</md-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import QiwiSvg from "@/components/Others/CustomSvg/QiwiSvg.vue"; |
|||
import SteamSvg from "@/components/Others/CustomSvg/SteamSvg.vue"; |
|||
import FreeSvg from "@/components/Others/CustomSvg/FreeSvg.vue"; |
|||
import AuthWindow from "@/components/TabsMenuElements/ProfileView/AuthWindow.vue"; |
|||
|
|||
export default { |
|||
name: 'VipBuyDialog', |
|||
components: {AuthWindow, FreeSvg, SteamSvg, QiwiSvg}, |
|||
data: () => ({ |
|||
showBuyDialog: false |
|||
}), |
|||
props: { |
|||
price: Object |
|||
}, |
|||
methods: { |
|||
openVBD() { |
|||
this.showBuyDialog = true; |
|||
}, |
|||
closeVBD() { |
|||
this.showBuyDialog = false; |
|||
}, |
|||
buyWithSteam() { |
|||
window.open("https://tf2.pblr-nyk.pro/api/profile/current/buyvip?buy_type=steam", "_blank"); |
|||
}, |
|||
buyWithQiwi(cost) { |
|||
console.log(this.$API.player.store); |
|||
window.open(`https://tf2.pblr-nyk.pro/api/profile/current/buyvip?buy_type=qiwi&steam64=${this.$API.player.store.steamids.steam64}&cost=${cost}`, "_blank") |
|||
}, |
|||
buyWithFree() { |
|||
|
|||
}, |
|||
openAW() { |
|||
this.$refs.aw.openAW(); |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style> |
|||
.img-vipextra { |
|||
max-width: 50%; |
|||
margin-left: auto; |
|||
margin-right: auto; |
|||
display: block; |
|||
color: #131213; |
|||
} |
|||
|
|||
.img-vipextra:hover { |
|||
color: #fd8846; |
|||
} |
|||
|
|||
.p-vipbuy { |
|||
text-align: center; font-size: 2em; color: #131213 |
|||
} |
|||
|
|||
.p-vipbuy-extra { |
|||
text-align: center; font-size: 1.5em; color: gray; |
|||
} |
|||
|
|||
.p-about-buy { |
|||
text-align: left; |
|||
color: #131213; |
|||
font-size: 1.5em; |
|||
} |
|||
|
|||
.img-about-buy { |
|||
margin-left: auto; |
|||
margin-right: auto; |
|||
display: block; |
|||
border-radius: 10px; |
|||
max-width: 60%; |
|||
} |
|||
</style> |
@ -0,0 +1,63 @@ |
|||
<template> |
|||
<div :class="ifItem()" style="padding-right: 2.5%; padding-left: 2.5%; cursor: pointer" v-on:click="$refs.vbd.openVBD()"> |
|||
<md-card class="md-card-vip"> |
|||
<md-card-media-cover md-solid> |
|||
<md-card-media md-ratio="1:1" class="md-card-media-vip"> |
|||
<img :src="getImg()" :alt="price.human_duration"> |
|||
</md-card-media> |
|||
<md-card-area class="md-card-area-vip"> |
|||
<md-card-header> |
|||
<span class="md-title" style="text-align: right; font-family: tf2build; border-bottom: 1px solid">VIP ({{price.human_duration}})</span> |
|||
<span class="md-subhead" style="text-align: right; font-family: tf2secondary">{{price.money_price}} P</span> |
|||
<span class="md-subhead" style="text-align: right; font-family: tf2secondary">{{price.item_price}}</span> |
|||
</md-card-header> |
|||
</md-card-area> |
|||
</md-card-media-cover> |
|||
</md-card> |
|||
<VipBuyDialog :price="price" ref="vbd"/> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import VipBuyDialog from "@/components/VipView/Components/VipBuyDialog.vue"; |
|||
|
|||
export default { |
|||
name: 'VipCard', |
|||
components: {VipBuyDialog}, |
|||
props: { |
|||
md_size: Number, |
|||
box_in_item: { |
|||
type:Boolean, |
|||
default: true |
|||
}, |
|||
price: { |
|||
type: Object |
|||
} |
|||
}, |
|||
methods: { |
|||
ifItem() { |
|||
return this.box_in_item?`md-layout-item md-size-${this.md_size} md-xsmall-size-90 md-small-size-50`:''; |
|||
}, |
|||
getImg() { |
|||
return this.price.img_url; |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style> |
|||
.md-card-vip { |
|||
border-radius: 15px; |
|||
margin: 7% 0%; |
|||
} |
|||
|
|||
.md-card-media-vip { |
|||
border-radius: 15px; |
|||
} |
|||
|
|||
.md-card-area-vip { |
|||
background: linear-gradient(to bottom, rgba(0, 0, 0, 0.02), rgba(0, 0, 0, 0.9)) !important; |
|||
border-bottom-left-radius: 15px; |
|||
border-bottom-right-radius: 15px; |
|||
} |
|||
</style> |
@ -0,0 +1,75 @@ |
|||
<template> |
|||
<md-tab id="vipView" md-label="VIP"> |
|||
<div class="md-layout md-alignment-bottom-center"> |
|||
<CharacterImage :size="10" :hide_if_small="true" :img_src="require(`@/assets/images/characters/mgesold.png`)" :audio_src="require(`@/assets/sounds/soldier_laughevil03.mp3`)"/> |
|||
</div> |
|||
<div class="md-layout md-alignment-bottom-center"> |
|||
<div class="md-layout-item md-size-30 md-small-size-100 md-alignment-bottom-center rounded-and-colored" style="z-index: 1"> |
|||
<h3 style="text-align: center; margin-top: 1%; margin-bottom: 0%; line-height: 1em">Покупка VIP</h3> |
|||
</div> |
|||
</div> |
|||
<div class="md-layout md-alignment-bottom-center" style="margin-top: -1.5%"> |
|||
<div class="md-layout-item md-size-60 md-small-size-100 md-alignment-bottom-center rounded-only"> |
|||
<h4 style="text-align: center">Нагибай всех благодаря нашей випке!(Смотри не перестарайся)</h4> |
|||
<h5 style="text-align: center; font-family: tf2secondary">Смотри не перестарайся</h5> |
|||
<hr width="90%"> |
|||
<div class="md-layout md-alignment-bottom-center"> |
|||
<div class="md-layout-item md-size-100 md-alignment-bottom-center"> |
|||
<div class="md-layout md-alignment-bottom-center md-gutter"> |
|||
<VipCard :md_size="30" v-for="price in $API.vip.vip_prices" :key="price.item_price" :price="price"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<hr width="90%"> |
|||
<div class="md-layout md-alignment-center-center" style="margin: 2%"> |
|||
<div :class="`md-layout-item md-size-${d_size} md-small-size-${s_size}`" style="margin: -5% 0%"> |
|||
<h4 style="text-align: center; font-family: tf2secondary">Что дает випка</h4> |
|||
</div> |
|||
</div> |
|||
<div class="md-layout md-alignment-center-center" style="margin: 2%"> |
|||
<div :class="`md-layout-item md-size-${d_size} md-small-size-${s_size}`"> |
|||
<p class="txt" v-for="gived in getVipStuff()" :key="rnd()+gived.substr(0,0)">> {{gived}}</p> |
|||
<p class="txt" style="color: #fd8846; text-decoration-line: underline; cursor: pointer" v-on:click="window.alert('nyk')">Подробнее...</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</md-tab> |
|||
</template> |
|||
|
|||
<script> |
|||
import VipCard from "@/components/VipView/Components/VipCard.vue"; |
|||
import CharacterImage from "@/components/Others/CharacterImage.vue"; |
|||
|
|||
export default { |
|||
name: 'VipView', |
|||
components: {VipCard, CharacterImage}, |
|||
props: { |
|||
d_size: { |
|||
type:Number, |
|||
default: 60 |
|||
}, |
|||
s_size: { |
|||
type:Number, |
|||
default: 90 |
|||
} |
|||
}, |
|||
methods: { |
|||
rnd() { |
|||
return Math.random().toString(36).slice(4); |
|||
}, |
|||
getVipStuff() { |
|||
return [ |
|||
'Одна випка на все наши сервера.', |
|||
'Резервный слот, и тебя не кикнет если сервер заполнится. Вас не кикнет за АФК.', |
|||
'Хук, позволяет летать по карте используя паутину.', |
|||
'Веревка, позволяет висеть как говно.', |
|||
'Раздатчик теперь играет музыку.', |
|||
'Менять свой класс используя команду !class игнорируя ограничения.', |
|||
'КД у RTD, всегда будет равное двум минутам.', |
|||
'"Бесплатные" аньюжки, каждая на каждый сервер, на каждый класс.']; |
|||
} |
|||
} |
|||
} |
|||
</script> |
Loading…
Reference in new issue