script_long.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. checkRoute();
  2. let userBasics = JSON.parse(localStorage.getItem('user_profile')) || [];
  3. (function() {
  4. if(userBasics !== []){
  5. $('.userName').html(`<h2 class="user-name text-white mt-4 fw-bold">Hi ${userBasics.user_info.userName}</h2>`);
  6. }
  7. })();
  8. function checkRoute() {
  9. let jwt_token = get_jwt_token();
  10. if(jwt_token == undefined) {
  11. window.location.replace("login.html");
  12. }
  13. axios({
  14. method: 'post',
  15. url: 'https://www.choozmo.com:8887/user_profile',
  16. headers: {
  17. 'accept': 'text/html',
  18. 'Authorization': `Bearer ${jwt_token}`
  19. }
  20. }).then(res => {
  21. console.log(res.data);
  22. if(res.status !== 200) {
  23. window.location.replace("login.html");
  24. }
  25. var userName='';
  26. userName+=`<h2 class="user-name text-white mt-lg-3 mt-xl-1 fw-bold">Hi ${res.data.user_info.userName}</h2>`;
  27. $('.userName').html(userName);
  28. }).catch(err => {
  29. console.log(err);
  30. window.location.replace("login.html");
  31. });
  32. }
  33. const btnLoginPage = document.querySelector('.btn-login');
  34. const btnUserProfile = document.querySelector('.btn-userProfile');
  35. const btnLogout = document.querySelector('.btn-logout');
  36. function loginControl() {
  37. btnLoginPage.style.display = 'none';
  38. btnLogout.style.display = 'block';
  39. btnUserProfile.style.display = 'block';
  40. }
  41. loginControl();
  42. let lan = localStorage.getItem('lan');
  43. $('.dropdown-toggle').click(() => {
  44. lan = localStorage.getItem('lan');
  45. checkLan();
  46. });
  47. checkLan();
  48. function checkLan() {
  49. if(lan == 'en') {
  50. $('.btn-makev').css('display', 'none');
  51. $('.btn-makelong').css('display', 'none');
  52. } else {
  53. $('.btn-makev').css('display', 'block');
  54. $('.btn-makelong').css('display', 'block');
  55. }
  56. }
  57. var client_id = Date.now()
  58. var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
  59. var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
  60. return new bootstrap.Tooltip(tooltipTriggerEl)
  61. });
  62. var myModal = new bootstrap.Modal(document.getElementById('history'), {
  63. keyboard: false
  64. })
  65. var avatarModal = new bootstrap.Modal(document.getElementById('avatarmega'), {
  66. keyboard: false
  67. })
  68. var modalImg = document.querySelector("#avatarmega .modal-img");
  69. var modalTitle = document.querySelector("#avatarmega .modal-title");
  70. var avatarSelector = document.getElementById("avatar");
  71. var card = document.getElementsByClassName('card');
  72. card = [...card];
  73. avatarSelector.addEventListener('change', avatarChange);
  74. avatarChange();
  75. function addCardListener() {
  76. for (let i = 0; i < card.length; i++) {
  77. card[i].addEventListener('click', openavatarModel);
  78. }
  79. }
  80. addCardListener();
  81. function avatarChange() {
  82. var value = avatarSelector.options[avatarSelector.selectedIndex].text;
  83. $('.owl-carousel').trigger('to.owl.carousel', avatarSelector.selectedIndex);
  84. for (let i = 0; i < card.length; i++) {
  85. card[i].classList.remove('active');
  86. if (card[i].dataset.avatar == value) {
  87. card[i].classList.add('active');
  88. }
  89. }
  90. }
  91. function openavatarModel() {
  92. console.log(this.dataset.img);
  93. modalImg.setAttribute("src", `static/img/${this.dataset.img}.webp`);
  94. modalTitle.textContent = `${this.dataset.avatar}`;
  95. avatarModal.show();
  96. }
  97. $('input[type=file]').on('change', prepareUpload);
  98. function prepareUpload(event) {
  99. files = event.target.files;
  100. var data = new FormData();
  101. //data.append('file', $('.img_up1').prop('files')[0]);
  102. data.append('file', files[0]);
  103. // append other variables to data if you want: data.append('field_name_x', field_value_x);
  104. $(this).next().text('');
  105. $(this).next().html('<img src="static/img/Spinner-1s-181px.gif">');
  106. $.ajax({
  107. type: 'POST',
  108. processData: false, // important
  109. contentType: false, // important
  110. data: data,
  111. url: 'https://www.choozmo.com:8887/uploadfile',
  112. dataType: 'json',
  113. success: function (jsonData) {
  114. event.target.previousSibling.value = jsonData.msg;
  115. $(this).prev().val(jsonData.msg);
  116. event.target.nextSibling.innerHTML = '';
  117. event.target.nextSibling.textContent = '上傳檔案';
  118. //console.log($(this).next());
  119. //$(this).next().html('上傳檔案');
  120. //$(this).next().text('上傳檔案');
  121. },
  122. error: function (error) {
  123. event.target.nextSibling.innerHTML = '';
  124. event.target.nextSibling.textContent = '上傳檔案';
  125. alert('圖片錯誤');
  126. }
  127. });
  128. }
  129. const button = document.querySelector('.next');
  130. const buttonSend = document.querySelector('#sendBTN');
  131. $("#sendBTN").click(function () {
  132. buttonSend.setAttribute('disabled', '');
  133. setTimeout(function () {
  134. buttonSend.removeAttribute('disabled')
  135. }, 4000);
  136. avatar = $('.avatar').val();
  137. name_title = $('.title_new').val();
  138. imgARR = [];
  139. txtARR = [];
  140. var step;
  141. txtARR.push($('.fs-txtarea').val());
  142. let imgIdx = document.querySelectorAll(".imgsrc").length;
  143. for (let i = 1; i < (imgIdx + 1); i++) {
  144. if ($(`.imgsrc${i}`).val() != "") {
  145. imgARR.push($(`.imgsrc${i}`).val())
  146. }
  147. }
  148. multiLang = 0
  149. if ($('#multiLang').prop("checked")) {multiLang = 1;}
  150. dataOBJ = { "name": name_title, "text_content": txtARR, "image_urls": imgARR, "avatar": avatar,"multiLang":multiLang, "client_id": client_id }
  151. objstr = JSON.stringify(dataOBJ);
  152. console.log(dataOBJ)
  153. jwt_token = get_jwt_token()
  154. var xhr = new XMLHttpRequest();
  155. xhr.open("POST", "https://www.choozmo.com:8887/make_anchor_video_long");
  156. xhr.setRequestHeader("accept", "application/json");
  157. xhr.setRequestHeader("Authorization","Bearer "+jwt_token)
  158. xhr.setRequestHeader("Content-Type", "application/json");
  159. xhr.onreadystatechange = function () {
  160. if (xhr.readyState === 4) {
  161. responseOBJ = JSON.parse(xhr.responseText)
  162. if (responseOBJ.msg=='ok'){
  163. let title = "資料已送出";
  164. let text = '資料已傳送,請耐心等候';
  165. if (lan == 'en') { // 英文版訊息
  166. title = "Submitted Successfully!";
  167. text = 'We are working on your video. You will get notfication in line group when your video is done.';
  168. }
  169. Swal.fire({
  170. title: title,
  171. icon: 'success',
  172. text: text,
  173. confirmButtonColor: '#3085d6',
  174. });
  175. } else {
  176. let title = '發生錯誤';
  177. let text;
  178. if(lan == 'en') {
  179. title = 'Error';
  180. text = responseOBJ.msg.eng;
  181. } else {
  182. text = responseOBJ.msg.zh;
  183. }
  184. Swal.fire({
  185. title: title,
  186. icon: 'error',
  187. text: text,
  188. confirmButtonColor: '#3085d6',
  189. });
  190. }
  191. }
  192. };
  193. var data = renderXHR_data(dataOBJ)
  194. console.log(data)
  195. result = xhr.send(objstr);
  196. });
  197. var loaded_data = ''
  198. function openNav() {
  199. document.getElementById("mySidenav").style.width = "250px";
  200. document.querySelector('.loader').style.display = "block";
  201. let jwt_token = get_jwt_token();
  202. axios({
  203. method: 'post',
  204. url: 'https://www.choozmo.com:8887/history_input',
  205. headers: {
  206. 'accept': 'application/json',
  207. 'Authorization': `Bearer ${jwt_token}`
  208. }
  209. }).then(res => {
  210. console.log(res.data);
  211. loaded_data = res.data;
  212. var historyList = document.querySelector('.historyList');
  213. historyList.innerHTML = '';
  214. for (var obj of loaded_data) {
  215. var list = document.createElement('li');
  216. list.id = obj.id;
  217. // div-imgfr
  218. var divImgfr = document.createElement('div');
  219. divImgfr.classList.add('item_imgfr');
  220. var img = document.createElement('img');
  221. img.setAttribute('src', obj['image_urls'][0]);
  222. divImgfr.appendChild(img);
  223. // div-content
  224. var contentBox = document.createElement('div');
  225. contentBox.classList.add('content-box');
  226. var boxTitle = document.createElement('p');
  227. boxTitle.classList.add('box-title');
  228. boxTitle.textContent = obj.name;
  229. boxTitle.id = obj.id;
  230. console.log(loaded_data);
  231. boxTitle.setAttribute('onclick', `direct(${obj.id})`);
  232. var boxLink = document.createElement('span');
  233. boxLink.classList.add('box-link');
  234. boxLink.setAttribute("data-url", obj.link);
  235. boxLink.setAttribute('onclick', 'view()');
  236. boxLink.innerHTML = '<i class="fas fa-play-circle me-1"></i>觀看影片';
  237. contentBox.appendChild(boxTitle);
  238. contentBox.appendChild(boxLink);
  239. list.classList.add("historyList-item");
  240. list.setAttribute('onclick', `direct(${obj.id})`);
  241. list.appendChild(divImgfr);
  242. list.appendChild(contentBox);
  243. historyList.appendChild(list);
  244. }
  245. document.querySelector('.loader').style.display = "none";
  246. }).catch(err => {
  247. console.log(err);
  248. });
  249. }
  250. function closeNav() {
  251. document.getElementById("mySidenav").style.width = "250px";
  252. }
  253. function view() {
  254. event.stopPropagation();
  255. console.log(event.target);
  256. if (event.target.nodeName === 'I') {
  257. return;
  258. } else {
  259. window.open(`http://${event.target.dataset.url}`, '_blank');
  260. }
  261. }
  262. function renderXHR_data(jsonObj) {
  263. XHRstring = ''
  264. for (const [key, value] of Object.entries(jsonObj)) {
  265. console.log(value)
  266. if (typeof (value) == "object") {
  267. XHRstring += (key+'=['+value.join(',')+']&')
  268. }
  269. else {
  270. XHRstring += (key + '=' + value + '&')
  271. }
  272. }
  273. XHRstring = XHRstring.substring(0, XHRstring.length - 1);
  274. return XHRstring
  275. }
  276. function get_jwt_token(){
  277. jwt_raw = document.cookie.split(';').filter(s=>s.includes('jwt_token'))[0];
  278. if(!jwt_raw) {return}
  279. return jwt_raw.split('=')[1];
  280. }
  281. function direct(id) {
  282. location.href = `make_video.html?id=${id}`;
  283. }
  284. function load_data(tid, loaded_data, draft = false) {
  285. if(!tid) {
  286. return;
  287. }
  288. var title = document.getElementById("title");
  289. var linker = document.getElementById("linker");
  290. myModal.hide();
  291. if(!draft) {
  292. linker.setAttribute('href', `http://${loaded_data.find(item => item.id == tid).link}`)
  293. linker.setAttribute('target', '_blank')
  294. $("#linker").html(`http://${loaded_data.find(item => item.id == tid).link}`)
  295. $("#linker").show();
  296. $(".linker__box").show();
  297. }
  298. console.log(loaded_data);
  299. let historyItem = loaded_data.filter(item => item.id == tid)[0];
  300. console.log(historyItem.title);
  301. if(draft) {
  302. $(".title_new").val(historyItem.title);
  303. $("#avatar").val(historyItem.avatar);
  304. } else {
  305. $(".title_new").val(loaded_data.find(item => item.id == tid).name);
  306. $("#avatar").val(historyItem.avatar);
  307. }
  308. let txtlength = historyItem.text_content.length;
  309. let imglength = historyItem.image_urls.length;
  310. //subtitleInputs.innerHTML = '';
  311. imgInputs.innerHTML = '';
  312. for (let i = 0; i < imglength; i++) {
  313. var imginput = document.createElement("input");
  314. imginput.setAttribute('type', 'text');
  315. imginput.setAttribute('name', `m${i + 1}`);
  316. imginput.classList.add('imgsrc', `imgsrc${i + 1}`);
  317. imginput.value = historyItem.image_urls[i];
  318. imginput.setAttribute('placeholder', `${i + 1}`);
  319. imgInputs.appendChild(imginput);
  320. var imgupload = document.createElement("input");
  321. imgupload.setAttribute('id', `img${i + 1}`);
  322. imgupload.setAttribute('type', `file`);
  323. imgupload.classList.add('img_uploader', 'img_up');
  324. imgInputs.appendChild(imgupload);
  325. var imguploadlabel = document.createElement("label");
  326. imguploadlabel.setAttribute('for', `img${i + 1}`);
  327. imguploadlabel.classList.add('upload-btn');
  328. imguploadlabel.textContent = '上傳檔案';
  329. if(lan == 'en') {
  330. imguploadlabel.textContent = 'Upload';
  331. }
  332. imguploadlabel.setAttribute('set-lan', `html:upload_file`);
  333. imgInputs.appendChild(imguploadlabel);
  334. }
  335. setTimeout(() => {
  336. JsLoadingOverlay.hide();
  337. }, 0);
  338. }
  339. getpathId();
  340. function getMode() {
  341. let id = window.location.search.split('?').pop();
  342. let mode = id.split('=')[0];
  343. if(mode == 'draftid') {
  344. /* JsLoadingOverlay.show({
  345. "overlayBackgroundColor": "#FFFFFF",
  346. "overlayOpacity": "0.9",
  347. "spinnerIcon": "ball-circus",
  348. "spinnerColor": "#B9DDF3",
  349. "spinnerSize": "2x",
  350. "overlayIDName": "overlay",
  351. "spinnerIDName": "spinner",
  352. "offsetX": 0,
  353. "offsetY": 0,
  354. "containerID": null,
  355. "lockScroll": false,
  356. "overlayZIndex": 9998,
  357. "spinnerZIndex": 9999
  358. }); */
  359. getDraftData();
  360. } else if(mode == 'id') {
  361. /* JsLoadingOverlay.show({
  362. "overlayBackgroundColor": "#FFFFFF",
  363. "overlayOpacity": "0.9",
  364. "spinnerIcon": "ball-circus",
  365. "spinnerColor": "#B9DDF3",
  366. "spinnerSize": "2x",
  367. "overlayIDName": "overlay",
  368. "spinnerIDName": "spinner",
  369. "offsetX": 0,
  370. "offsetY": 0,
  371. "containerID": null,
  372. "lockScroll": false,
  373. "overlayZIndex": 9998,
  374. "spinnerZIndex": 9999
  375. }); */
  376. getData();
  377. }
  378. return id.split('=')[1];
  379. //load_data(id);
  380. }
  381. getMode();
  382. function getpathId(){
  383. let id = window.location.search.split('?').pop();
  384. return id.split('=')[1];
  385. }
  386. function getData() {
  387. let jwt_token = get_jwt_token();
  388. axios({
  389. method: 'post',
  390. url: 'https://www.choozmo.com:8887/history_input',
  391. headers: {
  392. 'accept': 'application/json',
  393. 'Authorization': `Bearer ${jwt_token}`
  394. }
  395. }).then(res => {
  396. loaded_data = res.data;
  397. console.log(loaded_data);
  398. const id = getpathId();
  399. load_data(id, loaded_data);
  400. }).catch(err => {
  401. console.log(err);
  402. });
  403. }
  404. //var subtitleInputs = document.querySelector(".subtitle-inputs");
  405. var imgInputs = document.querySelector(".img-inputs");
  406. let length = 5;
  407. function initial() {
  408. for (let i = 0; i < length; i++) {
  409. //rendertxtBlock(i + 1);
  410. renderimgBlock(i + 1);
  411. }
  412. }
  413. initial();
  414. var addimgbtn = document.querySelector(".addimg");
  415. addimgbtn.addEventListener('click', addimgBlock);
  416. function addimgBlock() {
  417. let newimgIdx = document.querySelectorAll(".imgsrc").length + 1;
  418. renderimgBlock(newimgIdx);
  419. }
  420. function renderimgBlock(i) {
  421. var imginput = document.createElement("input");
  422. imginput.setAttribute('type', 'text');
  423. imginput.setAttribute('name', `m${i}`);
  424. imginput.classList.add('imgsrc', `imgsrc${i}`);
  425. imginput.value = "";
  426. imginput.setAttribute('placeholder', `${i}`);
  427. imgInputs.appendChild(imginput);
  428. var imgupload = document.createElement("input");
  429. imgupload.setAttribute('id', `img${i}`);
  430. imgupload.setAttribute('type', `file`);
  431. imgupload.classList.add('img_uploader', 'img_up');
  432. imgInputs.appendChild(imgupload);
  433. var imguploadlabel = document.createElement("label");
  434. imguploadlabel.setAttribute('for', `img${i}`);
  435. imguploadlabel.classList.add('upload-btn');
  436. imguploadlabel.textContent = '上傳檔案';
  437. if(lan == 'en') {
  438. imguploadlabel.textContent = 'Upload';
  439. }
  440. imguploadlabel.setAttribute('set-lan', `html:upload_file`);
  441. imgInputs.appendChild(imguploadlabel);
  442. $('input[type=file]').on('change', prepareUpload);
  443. }
  444. $('.owl-carousel').owlCarousel({
  445. loop: true,
  446. margin: 10,
  447. nav: false,
  448. mouseDrag: true,
  449. touchDrag: true,
  450. smartSpeed: 1000,
  451. autoplay: true,
  452. autoplayTimeout: 8000,
  453. autoplayHoverPause: false,
  454. responsive: {
  455. 0: {
  456. items: 1
  457. },
  458. 600: {
  459. items: 2
  460. },
  461. 1000: {
  462. items: 4
  463. }
  464. }
  465. });
  466. $('.draft-btn').click(() => {
  467. let text = '儲存中...';
  468. if (lan == 'en') {
  469. text = 'Saving...';
  470. }
  471. $('.draft-btn').text(text);
  472. let jwt_token = get_jwt_token();
  473. let avatar = $('.avatar').val();
  474. let name_title = $('.title_new').val();
  475. let txtARR = [];
  476. let imgARR = [];
  477. var step;
  478. let contentIdx = document.querySelectorAll(".txtsrc").length;
  479. for (let i = 1; i < (contentIdx + 1); i++) {
  480. if ($(`.txtsrc${i}`).val() != "") {
  481. txtARR.push($(`.txtsrc${i}`).val())
  482. }
  483. }
  484. let imgIdx = document.querySelectorAll(".imgsrc").length;
  485. for (let i = 1; i < (imgIdx + 1); i++) {
  486. if ($(`.imgsrc${i}`).val() != "") {
  487. imgARR.push($(`.imgsrc${i}`).val())
  488. }
  489. }
  490. let multiLang = 0
  491. if ($('#multiLang').prop("checked")) {multiLang = 1;}
  492. let id = window.location.search.split('?').pop();
  493. let mode = id.split('=')[0];
  494. if(mode == 'draftid') {
  495. id = Number(id.split('=')[1]);
  496. } else {
  497. id = -1;
  498. }
  499. let dataOBJ = { "id": id, "title": name_title, "text_content": txtARR, "image_urls": imgARR, "avatar": avatar,"multiLang":multiLang }
  500. console.log(dataOBJ);
  501. axios({
  502. method: 'post',
  503. url: 'https://www.choozmo.com:8887/save_draft',
  504. headers: {
  505. 'accept': 'application/json',
  506. 'Authorization': `Bearer ${jwt_token}`,
  507. 'Content-Type': 'application/json',
  508. },
  509. data: dataOBJ
  510. }).then(res => {
  511. console.log(res.data);
  512. $('.draft-btn').text('存為草稿');
  513. let title = "儲存完成";
  514. if(lan == 'en') {
  515. title = 'Saved!'
  516. $('.draft-btn').text('Save as Draft');
  517. }
  518. Swal.fire({
  519. title: title,
  520. icon: 'success',
  521. confirmButtonColor: '#3085d6',
  522. });
  523. }).catch(err => {
  524. console.log(err);
  525. });
  526. });
  527. function getDraftData() {
  528. let token = get_jwt_token();
  529. axios({
  530. method: 'post',
  531. url: 'https://www.choozmo.com:8887/draft_list',
  532. headers: {
  533. 'accept': 'application/json',
  534. 'Authorization': `Bearer ${token}`
  535. }
  536. }).then(res => {
  537. console.log(res.data);
  538. let result = [...res.data];
  539. let id = getpathId();
  540. load_data(id, result, true);
  541. }).catch(err => {
  542. console.log(err);
  543. });
  544. }
  545. $(".copy").click(function(){
  546. const copyStr = $(this).next().text();
  547. copyToClipboard(copyStr);
  548. });
  549. const copyToClipboard = str => {
  550. const el = document.createElement('textarea');
  551. el.value = str;
  552. el.setAttribute('readonly', '');
  553. el.style.position = 'absolute';
  554. el.style.left = '-9999px';
  555. document.body.appendChild(el);
  556. el.select();
  557. document.execCommand('copy');
  558. document.body.removeChild(el);
  559. Swal.fire({
  560. toast: true,
  561. icon: 'success',
  562. position: 'top-end',
  563. title: 'Link copied!',
  564. timerProgressBar: true,
  565. showConfirmButton: false,
  566. timer: 1000,
  567. backdrop: false
  568. })
  569. };