It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: http://www.ksu.edu.tw/utility/bulletinBoard/rss.aspx?language=cht

  1. <!DOCTYPE html>
  2.  
  3. <html lang="zh-Hant-TW" prefix="og: http://ogp.me/ns#">
  4. <head><title>
  5. 所有公告
  6. </title><meta name="keywords" content="崑山科技大學,Kun Shan University,崑山,崑山科大,昆山,昆山科大,科技大学,科大,university" /><meta name="description" content="崑山科技大學是台灣南部地區歷史最悠久的科技大學,學風興盛人文薈萃,為台灣專業技術教育與應用的領航者。" /><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="ie=edge" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><meta name="google-site-verification" content="VK360FuyZf73yebl4swzTG3QT8wxuid83yLyOI0584k" /><meta http-equiv="Content-Security-Policy" content="default-src &#39;self&#39; https:;script-src &#39;self&#39; https: &#39;unsafe-inline&#39; &#39;unsafe-eval&#39;;script-src-elem &#39;self&#39; https: &#39;unsafe-inline&#39; &#39;unsafe-eval&#39;;img-src &#39;self&#39; http: data:;" /><link rel="icon" href="/resource/image/icon/favicon.ico" type="image/ico" />
  7.  <link href="/resource/css/all.min.css?v=pbgNlzjB80zH9kBySW8aSWg4iVA6wRp372Cd55wOdbA1" rel="stylesheet"/>
  8. </head>
  9. <body>
  10.  <div id="ap" class="loading-open">
  11.    <header class="d-flex flex-column">
  12.      <div class="nav-tools order-0">
  13.        <div class="row no-gutters">
  14.  
  15.          <div class="col-5">
  16.            <a href="#accesskeyC" tabindex="1" class="sr-only sr-only-focusable" data-v-bind_title="[oLanuagePackage.base.to_content_zone]"> 移到主要內容</a>
  17.            <a href="#accesskeyU" id="accesskeyU" data-v-bind_title="[oLanuagePackage.base.to_tools_zone]" tabindex="1" class="accesskey-u" accesskey="U">:::</a>
  18.            <a href="/siteMap/" tabindex="1" title="即將轉換頁面至網站地圖頁面"><i class="fas fa-sitemap fa-fw"></i> 網站導覽</a>
  19.          </div>
  20.          
  21.          <div class="col-7 text-right">
  22.            <span class="nav-other d-md-inline d-none">
  23.  
  24.              <!--<a href="https://recruit.ksu.edu.tw/recruitinfo/119.html#group-news" class="" tabindex="1" target="_blank" rel="noopener" title="前往四技申請入學報到說明 (另開視窗)">四技申請入學</a>|-->
  25.              <a href="https://recruit.ksu.edu.tw/" class="" tabindex="1" target="_blank" rel="noopener" title="前往招生暨新生資訊網 (另開視窗)">招生暨新生資訊網</a>|
  26.            </span>
  27.            <div class="nav-search d-inline">
  28.              <a href="/search/" tabindex="1" title="即將轉換頁面至搜尋網站內容頁面"><i class="fas fa-search"></i> 搜尋</a>
  29.              <div class="language-place d-inline">
  30.                <i class="fas fa-globe"></i>|
  31.                <a data-v-bind_href="[oWWWLink.Eng]" tabindex="1" title="Go to English Website"> ENG</a>|
  32.                <a data-v-bind_href="[oWWWLink.Cht]" tabindex="1" title="即將轉換頁面至繁體中文網站"> 繁</a>|
  33.                <a data-v-bind_href="[oWWWLink.Chs]" tabindex="1" title="即将转换页面至简体中文网站"> 简</a>
  34.              </div>
  35.            </div>
  36.          </div>
  37.  
  38.        </div>
  39.      </div>
  40.  
  41.      <nav class="navbar navbar-light navbar-expand-lg flex-column nav-main-menu order-1">
  42.        <div class="ml-auto">
  43.          <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#nav-menu">
  44.            <span class="navbar-toggler-icon"></span>
  45.            <span class="text-hide">navbar-toggler</span>
  46.          </button>
  47.  
  48.          <div id="nav-menu" class="nav-menu collapse navbar-collapse">
  49.            <ul class="navbar-nav">
  50.              <li class="nav-item d-flex align-items-center" data-v-for="o in oHeaderMenu.oItem">
  51.                <a data-v-bind_href="[oWebLink.Cht + o.cUrl]" data-v-bind_title="[oLanuagePackage.base.goto_page + o.cName]" tabindex="1">{{o.cName}}</a>
  52.              </li>
  53.            </ul>
  54.          </div>
  55.        </div>
  56.  
  57.        <div>
  58.          <a class="navbar-brand" href="/" title="回學校首頁" tabindex="1">
  59.            <h1 class="text-hide"><img data-v-bind_src="[`/resource/image/logo/animation/0${Math.floor(Math.random() * 4)+1}.gif?2023`]" src="#" class="ksu-logo" alt="崑山科技大學 LOGO" /></h1>
  60.          </a>
  61.        </div>        
  62.      </nav>
  63.  
  64.      <medium-menu-component
  65.        id="mediumMenu"
  66.        data-v-bind_o-data="oMediumMenu"
  67.        data-v-bind_o-lanuage-package="oLanuagePackage">
  68.      </medium-menu-component>
  69.  
  70.      <carousel-component
  71.        id="carousel"
  72.        data-v-bind_data="carouselData"
  73.        data-v-bind_o-lanuage-package="oLanuagePackage">
  74.      </carousel-component>
  75.  
  76.    </header>
  77.    
  78. <div class="bulletin">
  79. <div class="container">
  80. <a href="#accesskeyC" id="accesskeyC" data-v-bind_title="[oLanuagePackage.base.to_content_zone]" accesskey="C" class="accesskey-c">:::</a>
  81. <div class="row">
  82. <div class="col-lg-12 col-12">
  83. <div class="section-title">
  84. <h2>{{oLanuagePackage.bulletin.list}}</h2>
  85. </div>
  86. </div>
  87. </div>
  88. <div class="row">
  89. <div class="ksu-bulletin col-12">
  90. <div data-v-for="item in bulletinBoardList" class="media bulletin-item mb-4 mt-2 align-items-stretch">
  91. <div class="item-circle-date d-flex align-self-center mr-4" data-v-bind_class="{'pin':(item.bNotPin == false)}">
  92. <div class="month">{{item.cENStartMonth}}.<br />
  93. {{item.cENStartDay}}</div>
  94. </div>
  95. <div class="media-body align-self-start">
  96. <div class="row post-information no-gutters">
  97. <div class="col-md-8 col-12 post-date my-1">{{oLanuagePackage.bulletin.date}}:{{item.cStart}}</div>
  98. <div class="col-md-4 col-12 post-man my-1">{{oLanuagePackage.bulletin.contact_name}}:{{item.cContactName}}</div>
  99. </div>
  100. <h3 class="my-3 post-subject">
  101. <a data-v-bind_href="['/bulletinBoard/detail/' + item.iAutoIndex ]" data-v-bind_title="oLanuagePackage.bulletin.show_detail">{{item.cSubject}}</a>
  102. </h3>
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. <pagination-component
  108. data-v-bind_page-query-string="paginationQueryString"
  109. data-v-bind_total-rows="paginationTotalPages"
  110. data-v-bind_now-page="paginationNowPage"
  111. data-v-on_child-change-page-event="changePage"
  112. data-v-bind_o-lanuage-package="oLanuagePackage"></pagination-component>
  113. </div>
  114. </div>
  115.  
  116.    <footer class="ksu-footer-info">
  117.      <a href="#accesskeyB" id="accesskeyB" data-v-bind_title="[oLanuagePackage.base.to_footer_zone]" class="accesskey-b" accesskey="B" tabindex="8">:::</a>
  118.      <div class="container">
  119.        <div class="row align-items-end">
  120.          <div class="col-12 col-lg-auto order-last order-lg-first">
  121.            <img src="/resource/image/logo/footer-logo.svg" width="150" class="print-logo d-print-block" alt="KSU Logo" />
  122.          </div>
  123.          <div class="col-12 col-lg ksu-link-info order-first order-lg-last d-print-none">
  124.            
  125.            <div class="row">
  126.              <div class="col-4 col-lg col-lg-auto text-center text-lg-left"><a href="//web.ksu.edu.tw/about/page/28838" title="前往隱私權說明" tabindex="99">隱私政策</a></div>
  127.              <div class="col-4 col-lg col-lg-auto text-center text-lg-left"><a href="//web.ksu.edu.tw/about/page/28840" title="前往個人資料保護說明" tabindex="99">個資保護</a></div>
  128.              <div class="col-4 col-lg col-lg-auto text-center text-lg-left"><a href="//web.ksu.edu.tw/about/page/28839" title="前往資訊安全說明" tabindex="99">資安政策</a></div>
  129.              <div class="col-4 col-lg col-lg-auto text-center text-lg-left"><a href="//my.ksu.edu.tw/ap/feedback/" target="_blank" rel="noopener" title="前往意見溝通 (另開視窗)" tabindex="99">意見溝通</a></div>
  130.              <div class="col-4 col-lg col-lg-auto text-center text-lg-left"><a href="//web.ksu.edu.tw/about/page/28827" title="前往交通資訊" tabindex="99">交通資訊</a></div>
  131.              <div class="col-4 col-lg col-lg-auto text-center text-lg-left"><a href="//web.ksu.edu.tw/about/page/28830" title="前往校內分機" tabindex="99">校內分機</a></div>
  132.              <div class="col-4 col-lg col-lg-auto text-center text-lg-left"><a href="//web.ksu.edu.tw/DAIT000/page/42335" title="前往公開資料" tabindex="99">公開資料</a></div>
  133.            </div>
  134.          
  135.          </div>
  136.        </div>
  137.        <div class="row d-print-none">
  138.          <div class="col-md-6 col-12 ksu-address">
  139.            <div class="row">
  140.              <div class="col-12 col-md-auto">
  141.                <p>710303 台南市永康區崑大路 195 號 (06)272-7175<br/>
  142.                  校園安全事件 24 小時緊急聯絡電話(06)205-0354</p>
  143.              </div>
  144.              <div class="community-link col-12 col-md-auto">
  145.                <ul class="list-inline">
  146.                  <li class="list-inline-item mx-2"><a href="https://www.facebook.com/ksu.edu.tw/" title="Facebook (另開視窗)" target="_blank" tabindex="99"><i class="fab fa-facebook"></i><span class="text-hide">Facebook</span></a></li>
  147.                  <li class="list-inline-item mx-2"><a href="https://www.instagram.com/my_ksu_ig/" title="Instagram (另開視窗)" target="_blank" tabindex="99"><i class="fab fa-instagram"></i><span class="text-hide">Instagram</span></a></li>
  148.                  <li class="list-inline-item mx-2"><a href="https://www.youtube.com/channel/UCVVzBCLeGda5iSp5dycAwwA" title="Youtube (另開視窗)" target="_blank" tabindex="99"><i class="fab fa-youtube"></i><span class="text-hide">Youtube</span></a></li>
  149.                </ul>
  150.              </div>
  151.            </div>
  152.          </div>
  153.          <div class="col-md-6 2col-12 text-right ksu-address">
  154.            <div class="row">
  155.              <div class="col-8 col-md-12 order-first order-md-last">
  156.                <p class="text-lg-right"><i class="fas fa-cloud fa-fw"></i> WWW-02 / <i class="fas fa-globe-americas fa-fw"></i> CHT<br/>
  157.                  copyright &copy; 2018 崑山科技大學</p>
  158.              </div>
  159.              <div class="col-4 col-md-12 order-last order-md-first">
  160.                <a href="https://accessibility.moda.gov.tw/Applications/Detail?category=20240325101328" title="無障礙網站" tabindex="99">
  161.                  <img src="/resource/image/other/accessibility.png" class="accessibility-img" width="100" height="35" alt="通過A檢測等級無障礙網頁檢測" />
  162.                </a>
  163.              </div>
  164.            </div>
  165.            
  166.          </div>
  167.        </div>
  168.      </div>
  169.    </footer>
  170.  
  171.    <modal-component id="allSiteModal">
  172.      <span slot="header">{{modal.title}}</span>
  173.      <p data-v-html="modal.content"></p>
  174.      <div slot="footer">
  175.        <button type="button" class="btn btn-secondary" data-dismiss="modal">{{oLanuagePackage.base.close}}</button>
  176.      </div>
  177.    </modal-component>
  178.  
  179.    
  180.  
  181.  </div>
  182.  
  183.  <div class="loading-screen">
  184.    <img src="/resource/image/logo/logo.svg?2018" alt="崑山 logo " />
  185.    <div>若遲未顯示,請按下F5重載。</div>
  186.    <noscript>本網頁必須支援 JavaScript 以正常瀏覽。</noscript>
  187.  </div>
  188.  <script>
  189.                    var cLanguage = "cht";
  190.                    if (!/Edge/.test(navigator.userAgent) && document.documentMode !== undefined) {
  191.                      var ver = document.documentMode;
  192.                      if(ver < 11){
  193.                        window.location.href = '//www.ksu.edu.tw/error/updateYourBrowser.html';
  194.                      }
  195.                    }
  196.                </script>
  197.  
  198.  <script src="/resource/scripts/all.min.js?v=DWz0souiCEQ5dqBszwNhktn01oaf5Iw-3Db1y8pddyM1"></script>
  199.  
  200.  <script>
  201.    if (!/Edge/.test(navigator.userAgent) && document.documentMode !== undefined) {
  202.      document.write('<script src="/resource/scripts/polyfill.js"><\/script>');
  203.    }
  204.  </script>
  205.  
  206.  
  207. <script type="text/x-template" id="modal-component">
  208. <div class="modal fade" v-bind:id="id" tabindex="-1" role="dialog" :aria-labelledby="id" aria-hidden="true">
  209. <div class="modal-dialog modal-lg" role="document">
  210. <div class="modal-content">
  211. <div class="modal-header">
  212. <h2 class="modal-title"><slot name="header"></slot></h2>
  213. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  214. <span aria-hidden="true">&times;</span>
  215. </button>
  216. </div>
  217. <div class="modal-body"><slot></slot></div>
  218. <div class="modal-footer"><slot name="footer"></slot></div>
  219. </div>
  220. </div>
  221. </div>
  222. </script>
  223. <script>
  224. Vue.component("modal-component", {
  225. template: "#modal-component",
  226. props: {
  227. id: {
  228. type: String
  229. }
  230. }
  231. });
  232. </script>
  233.  
  234.  
  235. <script type="text/x-template" id="carousel-component">
  236. <div v-bind:id="id" class="carousel slide ksu-carousel order-3 order-md-4" data-ride="carousel">
  237. <div class="carousel-inner">
  238. <div v-for="(item,index) in data" class="carousel-item" :class="{'active':(index === 0)}" v-if="" data-interval="20000">
  239. <template v-if="item.cHref !== '' && item.bShowSubject === false">
  240. <a
  241. :href="item.cHref"
  242. :title="[oLanuagePackage.carousel.goto_url + ':' + item.cHref + oLanuagePackage.base.open_window]"
  243. tabindex="1"
  244. target="_blank">
  245. <picture>
  246. <source media="(max-width: 480px)" v-bind:srcset="item.cSmallImagePath">
  247. <source media="(max-width: 768px)" v-bind:srcset="item.cMediumImagePath">
  248. <img class="d-block img-fluid" loading="lazy" v-bind:src="item.cLargeImagePath" v-bind:alt="[oLanuagePackage.carousel.carousel_images + ':' + item.cSubject]">
  249. </picture>
  250. </a>
  251. </template>
  252. <template v-else-if="item.cHref === '' && item.bShowSubject === false">
  253. <picture>
  254. <source media="(max-width: 480px)" v-bind:srcset="item.cSmallImagePath">
  255. <source media="(max-width: 768px)" v-bind:srcset="item.cMediumImagePath">
  256. <img class="d-block img-fluid" loading="lazy" v-bind:src="item.cLargeImagePath" v-bind:alt="[oLanuagePackage.carousel.carousel_images + ':' + item.cSubject]">
  257. </picture>
  258. </template>
  259. <template v-else-if="item.cHref !== '' && item.bShowSubject === true">
  260. <a
  261. :href="item.cHref"
  262. :title="[oLanuagePackage.carousel.goto_url + ':' + item.cHref + oLanuagePackage.base.open_window]"
  263. tabindex="1"
  264. target="_blank">
  265. <picture>
  266. <source media="(max-width: 480px)" v-bind:srcset="item.cSmallImagePath">
  267. <source media="(max-width: 768px)" v-bind:srcset="item.cMediumImagePath">
  268. <img class="d-block img-fluid" loading="lazy" v-bind:src="item.cLargeImagePath" v-bind:alt="[oLanuagePackage.carousel.carousel_images + ':' + item.cSubject]">
  269. </picture>
  270. </a>
  271. <div class="carousel-caption d-none d-md-block">
  272. <div class="container carousel-centent">
  273. <h2><a :href="item.cHref" :title="[oLanuagePackage.carousel.goto_url + ':' + item.cHref]" tabindex="1">{{item.cSubject}}</a></h2>
  274. </div>
  275. </div>
  276. </template>
  277. <template v-else>
  278. <picture>
  279. <source media="(max-width: 480px)" v-bind:srcset="item.cSmallImagePath">
  280. <source media="(max-width: 768px)" v-bind:srcset="item.cMediumImagePath">
  281. <img class="d-block img-fluid" loading="lazy" v-bind:src="item.cLargeImagePath" v-bind:alt="[oLanuagePackage.carousel.carousel_images + ':' + item.cSubject]">
  282. </picture>
  283. <div class="carousel-caption d-none d-md-block">
  284. <div class="container carousel-centent">
  285. <h2>{{item.cSubject}}</h2>
  286. </div>
  287. </div>
  288. </template>
  289. </div>
  290. </div>
  291. <a class="carousel-control-prev" href="#carousel" role="button" data-slide="prev" :title="oLanuagePackage.carousel.prev" v-if="data.length > 1" tabindex="1">
  292. <i class="fas fa-chevron-circle-left carousel-control-icon" aria-hidden="true"></i>
  293. <span class="sr-only">Previous</span>
  294. </a>
  295. <a class="carousel-control-next" href="#carousel" role="button" data-slide="next" :title="oLanuagePackage.carousel.next" v-if="data.length > 1" tabindex="1">
  296. <i class="fas fa-chevron-circle-right carousel-control-icon" aria-hidden="true"></i>
  297. <span class="sr-only">Next</span>
  298. </a>
  299. <ol class="carousel-indicators">
  300. <li v-for="(item,index) in data" data-target="#carousel" :data-slide-to="index" :class="[{'active':(index === 0)},'flex-fill']"></li>
  301. </ol>
  302. </div>
  303. </script>
  304. <script>
  305. Vue.use(VueLazyload, {
  306. loading: '/resource/image/carousel/carousel-lazyload.png',
  307. })
  308.  
  309. Vue.component("carousel-component", {
  310. template: "#carousel-component",
  311. props: {
  312. id: {
  313. type: String
  314. },
  315. data: {
  316. type: Array,
  317. },
  318. oLanuagePackage: {
  319. type: Object
  320. }
  321. }
  322. });
  323. </script>
  324.  
  325.  
  326. <script id="medium-menu-component" type="text/x-template">
  327.  <div :id="id" class="ksu-submenu order-4 order-md-3">
  328.    <div class="container">
  329.      <div id="accordion" class="submenu d-md-flex flex-md-row" role="tablist">
  330.  
  331.        <div v-if="getLanuage() === 'cht'" class="submenu-item d-md-flex justify-content-md-around">
  332.          <div class="submenu-header" role="tab" >
  333.            <a class="collapsed" data-toggle="collapse" href="https://web.ksu.edu.tw/NAEOYCC/bulletin/" @click="gotoUrl('https://web.ksu.edu.tw/NAEOYCC/bulletin/')" aria-expanded="false" tabindex="1">永康社區大學</a>
  334.          </div>
  335.        </div>
  336.  
  337.        <div class="submenu-item d-md-flex justify-content-md-around" v-for="(oGroup, i) in oData" v-if="oGroup.bIsDefault !== true">
  338.          <div class="submenu-header" role="tab" :id="['heading' + i]">
  339.            <a class="collapsed" data-toggle="collapse" :href="['#collapseMenu' + i]" aria-expanded="false" :aria-controls="['collapseMenu' + i]" tabindex="1" @focus="showTab($event)">{{oGroup.cName}}</a>
  340.          </div>
  341.  
  342.          <div :id="['collapseMenu' + i]" class="submenu-content collapse" role="tabpanel"  :aria-labelledby="['heading' + i]" data-parent="#accordion">
  343.            <div class="container">
  344.              <ul>
  345.                <li v-for="oItem in oGroup.oItem" @focus="showTab($event)" v-html="linkType(oItem)"></li>
  346.              </ul>
  347.            </div>
  348.          </div>
  349.        </div>
  350.  
  351.        <div v-if="getLanuage() === 'cht'" class="submenu-item d-md-flex justify-content-md-around">
  352.          <div class="submenu-header" role="tab" >
  353.            <a class="collapsed" data-toggle="collapse" href="https://web.ksu.edu.tw/related/page/39529" @click="gotoUrl('https://web.ksu.edu.tw/related/page/39529')" target="_blank" aria-expanded="false" tabindex="1">法定公開資訊</a>
  354.          </div>
  355.        </div>
  356.  
  357.      </div>
  358.    </div>
  359.  </div>
  360. </script>
  361. <script>
  362.    Vue.component("medium-menu-component", {
  363.    template: "#medium-menu-component",
  364.    props: {
  365.      id: {
  366.        type: String
  367.      },
  368.      oData: {
  369.        type: Array
  370.      },
  371.      oLanuagePackage: {
  372.        type: Object
  373.      }
  374.    },
  375.    methods: {
  376.      linkType: function (oItem) {
  377.        var self = this;
  378.        var cUrl = "";
  379.        var cExtension = oItem.cUrl.substring(oItem.cUrl.length - 4, oItem.cUrl.length);
  380.        var cExtensionTitle = "";
  381.  
  382.        if (cExtension === ".pdf" || cExtension === ".zip") {
  383.          cExtensionTitle = cExtension
  384.        }
  385.  
  386.        if (oItem.cUrl.substring(0, 1) == "/") {
  387.          cUrl = "<a href='" + oItem.cUrl + "' title='" + self.oLanuagePackage.base.goto_page + oItem.cName + cExtensionTitle + "' tabindex='1'>" + oItem.cName + "</a>";
  388.        } else {
  389.          cUrl = "<a href='" + oItem.cUrl + "' title='" + self.oLanuagePackage.base.goto_page + oItem.cName + cExtensionTitle + " " + self.oLanuagePackage.base.open_window +  "' tabindex='1' target='_blank' rel='noopener'>" + oItem.cName + "</a>";
  390.        }
  391.        return cUrl;
  392.      },
  393.      showTab: function (event) {
  394.        $(event.target.attributes.href.textContent).collapse("show");
  395.      },
  396.      getLanuage: function () {
  397.        return cLanguage;
  398.      },
  399.      gotoUrl: function (cUrl) {
  400.        location.href = cUrl;
  401.      }
  402.    }
  403.  
  404.  });
  405. </script>
  406.  
  407.  
  408. <script id="pagination-component" type="text/x-template">
  409. <div class="pagination-toolbar row">
  410. <div class="col-6 col-lg-8">
  411. <nav aria-label="navigation">
  412. <ul class="pagination justify-content-start">
  413. <li class="page-item" :class="{'disabled':(nowPage === 1)}">
  414. <a class="page-link" aria-label="Frist"
  415. :href="cURL(1)"
  416. @click="changePage(1,$event)"
  417. :title="oLanuagePackage.pagination.frist">
  418. <i aria-hidden="true" class="fa fa-angle-double-left"></i>
  419. <span class="sr-only">Frist</span>
  420. </a>
  421. </li>
  422. <li class="page-item" :class="{'disabled':(nowPage === 1)}">
  423. <a class="page-link" aria-label="Previous"
  424. :href="cURL(nowPage - 1)"
  425. @click="changePage(nowPage - 1,$event)"
  426. :title="oLanuagePackage.pagination.prev">
  427. <i aria-hidden="true" class="fa fa-angle-left"></i>
  428. <span class="sr-only">Previous</span>
  429. </a>
  430. </li>
  431. <li v-for="page in pagesItem" class="page-item page-number" :class="{'active': (nowPage == (page))}">
  432. <a class="page-link"
  433. @click="changePage(page,$event)"
  434. :href="cURL(page)"
  435. :title="[oLanuagePackage.pagination.goto_page + ':' + page ]">{{page}}</a>
  436. </li>
  437. <li class="page-item" :class="{'disabled':(nowPage === totalPages || totalRows === 0)}">
  438. <a class="page-link" aria-label="Next"
  439. :href="cURL(nowPage + 1)"
  440. @click="changePage(nowPage + 1,$event)"
  441. :title="oLanuagePackage.pagination.next">
  442. <i aria-hidden="true" class="fa fa-angle-right"></i>
  443. <span class="sr-only">Next</span>
  444. </a>
  445. </li>
  446. <li class="page-item" :class="{'disabled':(nowPage === totalPages || totalRows === 0)}">
  447. <a class="page-link" aria-label="Last"
  448. :href="cURL(totalPages)"
  449. @click="changePage(totalPages,$event)"
  450. :title="oLanuagePackage.pagination.last">
  451. <i aria-hidden="true" class="fa fa-angle-double-right"></i>
  452. <span class="sr-only">Last</span>
  453. </a>
  454. </li>
  455. </ul>
  456. </nav>
  457. </div>
  458. <div class="col-6 col-lg-2 text-right">
  459. <label class="col-form-label">{{oLanuagePackage.pagination.total_rows}}:{{totalRows}}</label>
  460. </div>
  461. <div class="col-2 col-lg-2 d-none d-lg-block">
  462. <select class="form-control" @change="selectChangePage($event)">
  463. <option selected>{{oLanuagePackage.pagination.goto_page}}</option>
  464. <option v-for="page in totalPages" v-bind:value="page" >{{page}}</option>
  465. </select>
  466. </div>
  467. </div>
  468. </script>
  469.  
  470. <script>
  471. Vue.component("pagination-component", {
  472. template: "#pagination-component",
  473. props: {
  474. pageStep: {
  475. type: Number,
  476. default: 3
  477. },
  478. perPageRows: {
  479. type: Number,
  480. default: 10
  481. },
  482. nowPage: {
  483. type: Number,
  484. default: 1
  485. },
  486. totalRows: {
  487. type: Number
  488. },
  489. pageQueryString: {
  490. type: String,
  491. default: "page"
  492. },
  493. oLanuagePackage: {
  494. type: Object
  495. }
  496. },
  497. data: function () {
  498. return {
  499. totalPages: 0,
  500. pagesItem: [],
  501. }
  502. },
  503. watch: {
  504. //分頁清單監視總筆數更動,則重新計算總頁數
  505. totalRows: function (val) {
  506. this.totalPages = parseInt(Math.ceil(val / this.perPageRows));
  507. this.pageItemInit(this.nowPage);
  508. },
  509. nowPage: function (val) {
  510. this.pageItemInit(val);
  511. },
  512. },
  513. mounted: function () {
  514. this.pageItemInit(this.nowPage);
  515. },
  516. methods: {
  517. cURL: function (page) {
  518. var url = "";
  519. if (location.pathname.match(/\d+/) == null) {
  520. url = location.pathname + page
  521. } else {
  522. url = location.pathname.replace(/\d+/, page);
  523. }
  524. return url;
  525. },
  526. //切換頁面的方法
  527. changePage: function (page, event) {
  528. event.preventDefault();
  529. //若要切換的頁面是現在的頁面則不做任何事
  530. if (this.nowPage == page) {
  531. return;
  532. }
  533. //若要切換的頁面比總頁數多 或 比第一頁少則不做任何事
  534. if (page < 1 || page > this.totalPages) {
  535. return;
  536. }
  537.  
  538. //使用網址方式轉切頁
  539. if (history.pushState) {
  540. this.setFakeUrl(page)
  541. }
  542.  
  543. this.$emit('child-change-page-event', page);
  544. },
  545. selectChangePage: function (event) {
  546. var page = parseInt(event.target.selectedOptions[0].value)
  547. if (!isNaN(page) && page != this.nowPage) {
  548. this.changePage(page, event);
  549. }
  550. },
  551. setFakeUrl: function (page) {
  552. var url = "";
  553. if (location.pathname.match(/\d+/) == null) {
  554. url = location.pathname + page
  555. } else {
  556. url = location.pathname.replace(/\d+/, page);
  557. }
  558. var state = { site: "ksu", page: page };
  559. history.pushState(state, null, url);
  560. },
  561. //將可選擇的頁碼清單塞入陣列中供前端迴圈產出 HTML
  562. pageItemAdd: function (iStart, iEnd) {
  563. this.pagesItem = [];
  564. for (var i = iStart; i < iEnd; i++) {
  565. this.pagesItem.push(i);
  566. }
  567. },
  568. //演算出可選擇的頁碼清單避免頁碼過長問題
  569. pageItemInit: function (nowPage) {
  570. if (this.totalPages < this.pageStep * 2 + 4) {
  571. this.pageItemAdd(1, this.totalPages + 1);
  572. }
  573. else if (nowPage < this.pageStep * 2 + 1) {
  574. this.pageItemAdd(1, this.pageStep * 2 + 2);
  575. }
  576. else if (nowPage > this.totalPages - this.pageStep * 2) {
  577. this.pageItemAdd(this.totalPages - (this.pageStep * 2), this.totalPages + 1);
  578. }
  579. else {
  580. this.pageItemAdd(nowPage - this.pageStep, nowPage + this.pageStep + 1);
  581. }
  582. },
  583. }
  584. });
  585. </script>
  586.  
  587.  <script>var vm=new Vue({el:"#ap",mixins:[init],data:{bulletinBoardList:[],paginationTotalPages:0,paginationNowPage:1,paginationQueryString:"page"},mounted:function(){var n=this;n.$nextTick(function(){location.pathname.match(/\d+/)!==null?this.allPromise(parseInt(location.pathname.match(/\d+/)[0])).then(function(){n.closeLoading()}):n.allPromise(1).then(function(){n.closeLoading()})})},methods:{changePage:function(n){var t=this;t.getBulletinBoardData(n)},getBulletinBoardData:function(n){var t=this,i=new FormData,r=1;return n!==undefined&&(r=n),i.append("bIsIndexBulletinBoard",!1),i.append("cLanguage",cLanguage),i.append("iPerPageRows",10),i.append("iNowPage",r),fetch("/data/ap/w3BulletinBoard/webServices/ajaxBulletinBoardList.ashx",{method:"POST",body:i}).catch(function(n){t.setError({cTitle:t.oLanuagePackage.error.ajax_bulletin,cMessage:n})}).then(function(n){return n.json()}).then(function(n){n.bIsError?t.setError({cTitle:t.oLanuagePackage.error.ajax_bulletin,cMessage:n.cMessage}):(t.bulletinBoardList=n.oDataTable,t.paginationTotalPages=n.iRows,t.paginationNowPage=r)})},allPromise:function(n){var t=this;return t.aryFetch.push(t.getBulletinBoardData(n)),Promise.all(t.aryFetch)}}});</script>
  588.  
  589.  <script async src="https://www.googletagmanager.com/gtag/js?id=G-H6LS320PXT"></script>
  590.  <script>
  591.    window.dataLayer = window.dataLayer || [];
  592.    function gtag() { dataLayer.push(arguments); }
  593.    gtag('js', new Date());
  594.  
  595.    gtag('config', 'G-H6LS320PXT');
  596.  </script>
  597.  
  598. </body>
  599. </html>
  600.  
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda