feat(WIP): processing 작업
This commit is contained in:
+1
-1
@@ -60,7 +60,7 @@ return [
|
|||||||
'hwe/b_myGenInfo.php',
|
'hwe/b_myGenInfo.php',
|
||||||
'hwe/b_myKingdomInfo.php',
|
'hwe/b_myKingdomInfo.php',
|
||||||
'hwe/b_myPage.php',
|
'hwe/b_myPage.php',
|
||||||
'hwe/b_processing.php',
|
'hwe/v_processing.php',
|
||||||
'hwe/b_tournament.php',
|
'hwe/b_tournament.php',
|
||||||
'hwe/b_troop.php',
|
'hwe/b_troop.php',
|
||||||
'hwe/c_auction.php',
|
'hwe/c_auction.php',
|
||||||
|
|||||||
@@ -475,18 +475,9 @@ abstract class BaseCommand{
|
|||||||
|
|
||||||
abstract public function run():bool;
|
abstract public function run():bool;
|
||||||
|
|
||||||
public function getJSPlugins():array {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
public function exportJSVars():array {
|
public function exportJSVars():array {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
public function getCSSFiles():array {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
public function getForm():string{
|
|
||||||
throw new \sammo\MustNotBeReachedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLastTurn():LastTurn{
|
public function getLastTurn():LastTurn{
|
||||||
return $this->generalObj->getLastTurn();
|
return $this->generalObj->getLastTurn();
|
||||||
|
|||||||
@@ -170,13 +170,6 @@ class che_강행 extends Command\GeneralCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getJSPlugins(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'defaultSelectCityByMap'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function exportJSVars(): array
|
public function exportJSVars(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
@@ -185,25 +178,4 @@ class che_강행 extends Command\GeneralCommand
|
|||||||
'distanceList' => \sammo\JSCitiesBasedOnDistance($this->generalObj->getCityID(), 3),
|
'distanceList' => \sammo\JSCitiesBasedOnDistance($this->generalObj->getCityID(), 3),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public function getForm(): string
|
|
||||||
{
|
|
||||||
$currentCityID = $this->generalObj->getCityID();
|
|
||||||
$currentCityName = CityConst::byID($currentCityID)->name;
|
|
||||||
|
|
||||||
ob_start();
|
|
||||||
?>
|
|
||||||
<?= \sammo\getMapHtml() ?><br>
|
|
||||||
선택된 도시로 강행합니다.<br>
|
|
||||||
최대 3칸내 도시로만 강행이 가능합니다.<br>
|
|
||||||
목록을 선택하거나 도시를 클릭하세요.<br>
|
|
||||||
<?= $currentCityName ?> => <div id="setDestCityIDForm"></div><br>
|
|
||||||
<?= \sammo\optionsForCities() ?><br>
|
|
||||||
</select> <input type=button id="commonSubmit" value="<?= $this->getName() ?>"><br>
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<?= printCitiesBasedOnDistance($currentCityID, 3) ?>
|
|
||||||
<?php
|
|
||||||
return ob_get_clean();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -12,6 +12,7 @@ use \sammo\GameUnitConst;
|
|||||||
use \sammo\LastTurn;
|
use \sammo\LastTurn;
|
||||||
use \sammo\Command;
|
use \sammo\Command;
|
||||||
|
|
||||||
|
use function sammo\getMapTheme;
|
||||||
use function \sammo\printCitiesBasedOnDistance;
|
use function \sammo\printCitiesBasedOnDistance;
|
||||||
use function sammo\tryUniqueItemLottery;
|
use function sammo\tryUniqueItemLottery;
|
||||||
|
|
||||||
@@ -177,17 +178,12 @@ class che_이동 extends Command\GeneralCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getJSPlugins(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'defaultSelectCityByMap'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function exportJSVars(): array
|
public function exportJSVars(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'cities' => \sammo\JSOptionsForCities()
|
'cities' => \sammo\JSOptionsForCities(),
|
||||||
|
'mapTheme' => getMapTheme(),
|
||||||
|
'distanceList' => \sammo\JSCitiesBasedOnDistance($this->generalObj->getCityID(), 1),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,23 @@
|
|||||||
#container {
|
#container {
|
||||||
width: 500px;
|
width: 500px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
margin-bottom: 100px;
|
|
||||||
|
.world_map {
|
||||||
|
width: 500px;
|
||||||
|
height: calc((500px + 20px) * 500 / 700);
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_title {
|
||||||
|
transform-origin: 0px 0px;
|
||||||
|
transform: scale(calc(500 / 700));
|
||||||
|
margin-bottom: calc(-20px * 200 / 700);
|
||||||
|
}
|
||||||
|
|
||||||
|
.map_body {
|
||||||
|
transform-origin: 0px 0px;
|
||||||
|
transform: scale(calc(500 / 700));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -449,7 +449,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
if (listReqArgCommand.has(commandName)) {
|
if (listReqArgCommand.has(commandName)) {
|
||||||
document.location.href = stringifyUrl({
|
document.location.href = stringifyUrl({
|
||||||
url: "b_processing.php",
|
url: "v_processing.php",
|
||||||
query: {
|
query: {
|
||||||
command: commandName,
|
command: commandName,
|
||||||
turnList: turnList.join("_"),
|
turnList: turnList.join("_"),
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ $(function ($) {
|
|||||||
const $command = $('#chiefCommandList option:selected');
|
const $command = $('#chiefCommandList option:selected');
|
||||||
if ($command.data('reqarg')) {
|
if ($command.data('reqarg')) {
|
||||||
document.location.href = stringifyUrl({
|
document.location.href = stringifyUrl({
|
||||||
url: 'b_processing.php',
|
url: 'v_processing.php',
|
||||||
query: {
|
query: {
|
||||||
command: unwrap_any<string>($command.val()),
|
command: unwrap_any<string>($command.val()),
|
||||||
turnList: turnList.join('_'),
|
turnList: turnList.join('_'),
|
||||||
|
|||||||
@@ -1,15 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<table style="width: 1000px; margin: auto" class="bg0">
|
<div class="bg0">
|
||||||
<tr>
|
<button type="button" class="btn btn-primary back_btn" @click="back">
|
||||||
<td style="text-align: left">
|
돌아가기
|
||||||
{{title}}<br /><button
|
</button>
|
||||||
type="button"
|
<div></div>
|
||||||
class="btn btn-primary"
|
</div>
|
||||||
@click="back"
|
|
||||||
>돌아가기</button><br />
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|||||||
@@ -44,6 +44,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import "@/../css/map.css";
|
||||||
import { reloadWorldMap, loadMapOption, MapCityParsed } from "@/map";
|
import { reloadWorldMap, loadMapOption, MapCityParsed } from "@/map";
|
||||||
import { defineComponent, onMounted, PropType, ref } from "vue";
|
import { defineComponent, onMounted, PropType, ref } from "vue";
|
||||||
import { v4 as uuidv4 } from "uuid";
|
import { v4 as uuidv4 } from "uuid";
|
||||||
|
|||||||
+5
-1
@@ -1,12 +1,13 @@
|
|||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import $ from 'jquery';
|
import $ from 'jquery';
|
||||||
import { extend, isNumber, merge } from 'lodash';
|
import { isNumber, merge } from 'lodash';
|
||||||
import { convColorValue, convertDictById, stringFormat } from '@/common_legacy';
|
import { convColorValue, convertDictById, stringFormat } from '@/common_legacy';
|
||||||
import { InvalidResponse } from '@/defs';
|
import { InvalidResponse } from '@/defs';
|
||||||
import { unwrap } from "@util/unwrap";
|
import { unwrap } from "@util/unwrap";
|
||||||
import { convertFormData } from '@util/convertFormData';
|
import { convertFormData } from '@util/convertFormData';
|
||||||
import { exportWindow } from '@util/exportWindow';
|
import { exportWindow } from '@util/exportWindow';
|
||||||
import { htmlReady } from './util/htmlReady';
|
import { htmlReady } from './util/htmlReady';
|
||||||
|
import { initTooltip } from './legacy/initTooltip';
|
||||||
|
|
||||||
declare const serverNick: string;
|
declare const serverNick: string;
|
||||||
declare const serverID: string;
|
declare const serverID: string;
|
||||||
@@ -506,6 +507,9 @@ export async function reloadWorldMap(option: loadMapOption, drawTarget = '.world
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setMouseWork(obj: MapCityDrawable) {
|
function setMouseWork(obj: MapCityDrawable) {
|
||||||
|
|
||||||
|
initTooltip($(drawTarget));
|
||||||
|
|
||||||
const $tooltip = $(drawTarget + ' .city_tooltip');
|
const $tooltip = $(drawTarget + ' .city_tooltip');
|
||||||
const $tooltip_city = $tooltip.find('.city_name');
|
const $tooltip_city = $tooltip.find('.city_name');
|
||||||
const $tooltip_nation = $tooltip.find('.nation_name');
|
const $tooltip_nation = $tooltip.find('.nation_name');
|
||||||
|
|||||||
@@ -1,34 +1,38 @@
|
|||||||
<template>
|
<template>
|
||||||
<MapLegacyTemplate
|
<TopBackBar :title="commandName" />
|
||||||
:isDetailMap="false"
|
<div class="bg0">
|
||||||
:clickableAll="true"
|
<MapLegacyTemplate
|
||||||
:neutralView="true"
|
:isDetailMap="false"
|
||||||
:useCachedMap="true"
|
:clickableAll="true"
|
||||||
:mapTheme="mapTheme"
|
:neutralView="true"
|
||||||
v-model="selectedCityObj"
|
:useCachedMap="true"
|
||||||
/>
|
:mapTheme="mapTheme"
|
||||||
<div>
|
v-model="selectedCityObj"
|
||||||
선택된 도시로 강행합니다.<br />
|
/>
|
||||||
최대 3칸내 도시로만 강행이 가능합니다.<br />
|
|
||||||
목록을 선택하거나 도시를 클릭하세요.<br />
|
<div>
|
||||||
</div>
|
선택된 도시로 강행합니다.<br />
|
||||||
<div class="row">
|
최대 3칸내 도시로만 강행이 가능합니다.<br />
|
||||||
<div class="col">
|
목록을 선택하거나 도시를 클릭하세요.<br />
|
||||||
<CitySelect :cities="citiesMap" :modelValue="selectedCityID" />
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="row">
|
||||||
<b-button @click="submit">{{ commandName }}</b-button>
|
<div class="col">
|
||||||
|
<CitySelect :cities="citiesMap" :modelValue="selectedCityID" />
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<b-button @click="submit">{{ commandName }}</b-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<CityBasedOnDistance
|
||||||
|
:citiesMap="citiesMap"
|
||||||
|
:distanceList="distanceList"
|
||||||
|
@selected="selected"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<CityBasedOnDistance
|
<BottomBar :title="commandName" />
|
||||||
:citiesMap="citiesMap"
|
|
||||||
:distanceList="distanceList"
|
|
||||||
@selected="selected"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import "@/../css/map.css";
|
|
||||||
import MapLegacyTemplate, {
|
import MapLegacyTemplate, {
|
||||||
MapCityParsed,
|
MapCityParsed,
|
||||||
} from "@/components/MapLegacyTemplate.vue";
|
} from "@/components/MapLegacyTemplate.vue";
|
||||||
@@ -37,17 +41,20 @@ import CityBasedOnDistance from "@/processing/CitiesBasedOnDistance.vue";
|
|||||||
import { defineComponent, ref } from "vue";
|
import { defineComponent, ref } from "vue";
|
||||||
import { unwrap } from "@/util/unwrap";
|
import { unwrap } from "@/util/unwrap";
|
||||||
import { Args } from "@/processing/args";
|
import { Args } from "@/processing/args";
|
||||||
|
import TopBackBar from "@/components/TopBackBar.vue";
|
||||||
|
import BottomBar from "@/components/BottomBar.vue";
|
||||||
declare const mapTheme: string;
|
declare const mapTheme: string;
|
||||||
declare const cities: [number, string][];
|
declare const cities: [number, string][];
|
||||||
declare const currentCity: number;
|
declare const currentCity: number;
|
||||||
declare const distanceList: Record<number, number[]>;
|
declare const distanceList: Record<number, number[]>;
|
||||||
declare const commandName: string;
|
declare const commandName: string;
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "che_강행",
|
|
||||||
components: {
|
components: {
|
||||||
MapLegacyTemplate,
|
MapLegacyTemplate,
|
||||||
CitySelect,
|
CitySelect,
|
||||||
CityBasedOnDistance,
|
CityBasedOnDistance,
|
||||||
|
TopBackBar,
|
||||||
|
BottomBar,
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
selectedCityObj(city: MapCityParsed) {
|
selectedCityObj(city: MapCityParsed) {
|
||||||
@@ -55,7 +62,6 @@ export default defineComponent({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
console.log("start!");
|
|
||||||
const citiesMap = new Map<
|
const citiesMap = new Map<
|
||||||
number,
|
number,
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,104 @@
|
|||||||
|
<template>
|
||||||
|
<TopBackBar :title="commandName" />
|
||||||
|
<div class="bg0">
|
||||||
|
<MapLegacyTemplate
|
||||||
|
:isDetailMap="false"
|
||||||
|
:clickableAll="true"
|
||||||
|
:neutralView="true"
|
||||||
|
:useCachedMap="true"
|
||||||
|
:mapTheme="mapTheme"
|
||||||
|
v-model="selectedCityObj"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
선택된 도시로 이동합니다.<br />
|
||||||
|
인접 도시로만 이동이 가능합니다.<br />
|
||||||
|
목록을 선택하거나 도시를 클릭하세요.<br />
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<CitySelect :cities="citiesMap" :modelValue="selectedCityID" />
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<b-button @click="submit">{{ commandName }}</b-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<CityBasedOnDistance
|
||||||
|
:citiesMap="citiesMap"
|
||||||
|
:distanceList="distanceList"
|
||||||
|
@selected="selected"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<BottomBar :title="commandName" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import MapLegacyTemplate, {
|
||||||
|
MapCityParsed,
|
||||||
|
} from "@/components/MapLegacyTemplate.vue";
|
||||||
|
import CitySelect from "@/processing/CitySelect.vue";
|
||||||
|
import CityBasedOnDistance from "@/processing/CitiesBasedOnDistance.vue";
|
||||||
|
import { defineComponent, ref } from "vue";
|
||||||
|
import { unwrap } from "@/util/unwrap";
|
||||||
|
import { Args } from "@/processing/args";
|
||||||
|
import TopBackBar from "@/components/TopBackBar.vue";
|
||||||
|
import BottomBar from "@/components/BottomBar.vue";
|
||||||
|
declare const mapTheme: string;
|
||||||
|
declare const cities: [number, string][];
|
||||||
|
declare const currentCity: number;
|
||||||
|
declare const distanceList: Record<number, number[]>;
|
||||||
|
declare const commandName: string;
|
||||||
|
export default defineComponent({
|
||||||
|
components: {
|
||||||
|
MapLegacyTemplate,
|
||||||
|
CitySelect,
|
||||||
|
CityBasedOnDistance,
|
||||||
|
TopBackBar,
|
||||||
|
BottomBar,
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
selectedCityObj(city: MapCityParsed) {
|
||||||
|
this.selectedCityID = city.id;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
setup() {
|
||||||
|
const citiesMap = new Map<
|
||||||
|
number,
|
||||||
|
{
|
||||||
|
name: string;
|
||||||
|
info?: string;
|
||||||
|
}
|
||||||
|
>();
|
||||||
|
for (const [id, name] of cities) {
|
||||||
|
citiesMap.set(id, { name });
|
||||||
|
}
|
||||||
|
console.log(citiesMap);
|
||||||
|
|
||||||
|
const selectedCityID = ref(currentCity);
|
||||||
|
|
||||||
|
function selected(cityID: number) {
|
||||||
|
selectedCityID.value = cityID;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function submit(e: Event) {
|
||||||
|
const event = new CustomEvent<Args>("customSubmit", {
|
||||||
|
detail: {
|
||||||
|
destCityID: selectedCityID.value,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
unwrap(e.target).dispatchEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
mapTheme: ref(mapTheme),
|
||||||
|
citiesMap: ref(citiesMap),
|
||||||
|
selectedCityID,
|
||||||
|
selectedCityObj: ref(undefined as MapCityParsed | undefined),
|
||||||
|
distanceList,
|
||||||
|
commandName,
|
||||||
|
selected,
|
||||||
|
submit,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -1 +1,2 @@
|
|||||||
export { default as che_강행 } from "./che_강행.vue";
|
export { default as che_강행 } from "./che_강행.vue";
|
||||||
|
export { default as che_이동 } from "./che_이동.vue";
|
||||||
@@ -72,9 +72,6 @@ async function submitCommand<T>(isChiefTurn: boolean, turnList: number[], comman
|
|||||||
|
|
||||||
declare const entryInfo: ['General', keyof typeof GeneralActions] | ['Nation', keyof typeof NationActions];
|
declare const entryInfo: ['General', keyof typeof GeneralActions] | ['Nation', keyof typeof NationActions];
|
||||||
|
|
||||||
console.log('entry', entryInfo);
|
|
||||||
|
|
||||||
auto500px();
|
|
||||||
const app: App<Element> | undefined = (function () {
|
const app: App<Element> | undefined = (function () {
|
||||||
//NOTE: route를 쓴다?
|
//NOTE: route를 쓴다?
|
||||||
const groupName = entryInfo[0];
|
const groupName = entryInfo[0];
|
||||||
@@ -96,7 +93,7 @@ const app: App<Element> | undefined = (function () {
|
|||||||
console.error('알수')
|
console.error('알수')
|
||||||
return undefined;
|
return undefined;
|
||||||
}());
|
}());
|
||||||
console.log(app);
|
|
||||||
if (app === undefined) {
|
if (app === undefined) {
|
||||||
console.error(`모듈이 지정되지 않음`, entryInfo);
|
console.error(`모듈이 지정되지 않음`, entryInfo);
|
||||||
}
|
}
|
||||||
@@ -110,3 +107,6 @@ else {
|
|||||||
|
|
||||||
app.use(BootstrapVue3).component('v-multiselect', Multiselect).mount('#container');
|
app.use(BootstrapVue3).component('v-multiselect', Multiselect).mount('#container');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
auto500px();
|
||||||
@@ -63,8 +63,6 @@ if (!$commandObj->hasPermissionToReserve()) {
|
|||||||
die_redirect();
|
die_redirect();
|
||||||
}
|
}
|
||||||
|
|
||||||
$jsList = $commandObj->getJSPlugins();
|
|
||||||
$cssList = $commandObj->getCSSFiles();
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
@@ -74,7 +72,7 @@ $cssList = $commandObj->getCSSFiles();
|
|||||||
<title><?= $commandObj->getName() ?></title>
|
<title><?= $commandObj->getName() ?></title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=500" />
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printJS('d_shared/base_map.js') ?>
|
<?= WebUtil::printJS('d_shared/base_map.js') ?>
|
||||||
<?= WebUtil::printStaticValues([
|
<?= WebUtil::printStaticValues([
|
||||||
@@ -87,9 +85,6 @@ $cssList = $commandObj->getCSSFiles();
|
|||||||
'entryInfo' => [$isChiefTurn?'Nation':'General', $commandType]
|
'entryInfo' => [$isChiefTurn?'Nation':'General', $commandType]
|
||||||
])?>
|
])?>
|
||||||
<?= WebUtil::printStaticValues($commandObj->exportJSVars(), false) ?>
|
<?= WebUtil::printStaticValues($commandObj->exportJSVars(), false) ?>
|
||||||
<script>
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?php
|
<?php
|
||||||
foreach ($cssList as $css) {
|
foreach ($cssList as $css) {
|
||||||
Reference in New Issue
Block a user