script_util2.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813
  1. // Check Route
  2. checkRoute();
  3. // let card;
  4. let userBasics = JSON.parse(localStorage.getItem('user_profile')) || [];
  5. console.log(userBasics);
  6. if(userBasics.length >0 && typeof(userBasics) !== 'string'){
  7. $('.userName').html(`<h2 class="user-name text-white mt-lg-3 mt-xl-1 fw-bold">Hi ${userBasics.user_info.userName}</h2>`);
  8. }
  9. function checkRoute() {
  10. let jwt_token = get_jwt_token();
  11. // if(jwt_token == undefined) {
  12. // window.location.replace("login.html");
  13. // }
  14. axios({
  15. method: 'post',
  16. url: 'https://www.choozmo.com:8887/user_profile',
  17. headers: {
  18. 'accept': 'text/html',
  19. 'Authorization': `Bearer ${jwt_token}`
  20. }
  21. }).then(res => {
  22. console.log(res.data);
  23. if(res.status !== 200) {
  24. window.location.replace("login.html");
  25. }
  26. var userName='';
  27. userName+=`<h2 class="user-name text-white mt-lg-3 mt-xl-1 fw-bold">Hi ${res.data.user_info.userName}</h2>`;
  28. $('.userName').html(userName);
  29. }).catch(err => {
  30. console.log(err);
  31. window.location.replace("login.html");
  32. });
  33. }
  34. // Nav btn control
  35. const btnLoginPage = document.querySelector('.btn-login');
  36. const btnUserProfile = document.querySelector('.btn-userProfile');
  37. const btnLogout = document.querySelector('.btn-logout');
  38. function loginControl() {
  39. btnLoginPage.style.display = 'none';
  40. btnLogout.style.display = 'block';
  41. btnUserProfile.style.display = 'block';
  42. }
  43. loginControl();
  44. // Check lan
  45. let lan = localStorage.getItem('lan');
  46. $('.dropdown-toggle').click(() => {
  47. lan = localStorage.getItem('lan');
  48. checkLan();
  49. });
  50. checkLan();
  51. function checkLan() {
  52. if(lan == 'en') {
  53. $('.btn-makev').css('display', 'none');
  54. $('.btn-makelong').css('display', 'none');
  55. $('.title_new').attr('placeholder', 'Title')
  56. } else {
  57. $('.btn-makev').css('display', 'block');
  58. $('.btn-makelong').css('display', 'block');
  59. }
  60. }
  61. // Get avatars
  62. function getAvatar() {
  63. let jwt_token = get_jwt_token();
  64. /* if(jwt_token == undefined) {
  65. window.location.replace("login.html");
  66. } */
  67. axios({
  68. method: 'post',
  69. url: 'https://www.choozmo.com:8887/get_avatar_by_role',
  70. headers: {
  71. 'accept': 'text/html',
  72. 'Authorization': `Bearer ${jwt_token}`
  73. }
  74. }).then(res => {
  75. console.log(res.data);
  76. let result = [...res.data];
  77. let str = '';
  78. let carStr = '';
  79. for(let i = 0; i < result.length; i++) {
  80. str += `<option value="${result[i].num}">${result[i].name}</option>`
  81. }
  82. for(let i = 0; i < result.length; i++) {
  83. carStr += `<div class="card item col" data-avatar="${result[i].name}" data-img="${result[i].name.toLowerCase()}">
  84. <div class="imgfr"><img src="static/img/${result[i].name.toLowerCase()}.webp" class="card-img-top" alt="..."></div>
  85. <div class="card-body">
  86. <h5 class="card-title">${result[i].name.toLowerCase()}</h5>
  87. </div>
  88. </div>`;
  89. }
  90. $('#avatar').html(`<option set-lan="html:p_choose_character" value="請選擇人物" selected="selected" disabled>>請選擇人物</option>${str}`);
  91. $('.avatar-cards').html(carStr);
  92. //card = document.getElementsByClassName('card');
  93. console.log(card);
  94. //addCardListener(card);
  95. //avatarChange();
  96. }).catch(err => {
  97. console.log(err);
  98. });
  99. }
  100. // getAvatar();
  101. // Card
  102. const card = document.getElementsByClassName('card');
  103. var client_id = Date.now()
  104. var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
  105. var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
  106. return new bootstrap.Tooltip(tooltipTriggerEl)
  107. });
  108. var myModal = new bootstrap.Modal(document.getElementById('history'), {
  109. keyboard: false
  110. })
  111. var avatarModal = new bootstrap.Modal(document.getElementById('avatarmega'), {
  112. keyboard: false
  113. })
  114. var modalImg = document.querySelector("#avatarmega .modal-img");
  115. var modalTitle = document.querySelector("#avatarmega .modal-title");
  116. var avatarSelector = document.getElementById("avatar");
  117. avatarSelector.addEventListener('change', avatarChange);
  118. function addCardListener() {
  119. for (let i = 0; i < card.length; i++) {
  120. card[i].addEventListener('click', openavatarModel);
  121. }
  122. }
  123. addCardListener()
  124. avatarChange()
  125. function avatarChange() {
  126. var value = avatarSelector.options[avatarSelector.selectedIndex].text;
  127. for (let i = 0; i < card.length; i++) {
  128. card[i].classList.remove('active');
  129. if (card[i].dataset.avatar == value) {
  130. card[i].classList.add('active');
  131. }
  132. }
  133. }
  134. function openavatarModel() {
  135. console.log(this.dataset.img);
  136. modalImg.setAttribute("src", `static/img/${this.dataset.img}.webp`);
  137. modalTitle.textContent = `${this.dataset.avatar}`;
  138. avatarModal.show();
  139. }
  140. // Upload
  141. $('input[type=file]').on('change', prepareUpload);
  142. $('.upload-btn').change(prepareUpload);
  143. function prepareUpload(event) {
  144. files = event.target.files;
  145. $(this).prev().val('');
  146. var data = new FormData();
  147. //data.append('file', $('.img_up1').prop('files')[0]);
  148. data.append('file', files[0]);
  149. // append other variables to data if you want: data.append('field_name_x', field_value_x);
  150. $(this).next().text('');
  151. $(this).next().html('<img src="static/img/Spinner-1s-181px.gif">');
  152. $.ajax({
  153. type: 'POST',
  154. processData: false, // important
  155. contentType: false, // important
  156. data: data,
  157. url: 'https://www.choozmo.com:8887/uploadfile',
  158. dataType: 'json',
  159. success: function (jsonData) {
  160. event.target.previousSibling.value = jsonData.msg;
  161. console.log(jsonData.msg);
  162. $(this).prev().val(jsonData.msg);
  163. if(jsonData.msg.zh) {
  164. $(this).prev().val(jsonData.msg.zh);
  165. event.target.previousSibling.value = jsonData.msg.zh;
  166. }
  167. const nextEl = event.target.nextSibling;
  168. nextEl.innerHTML = '';
  169. // nextEl.textContent = '上傳檔案';
  170. nextEl.style.backgroundImage = `url(http://${jsonData.msg})`;
  171. //console.log($(this).next());
  172. //$(this).next().html('上傳檔案');
  173. //$(this).next().text('上傳檔案');
  174. $(this).html('');
  175. },
  176. error: function (error) {
  177. const nextEl = event.target.nextSibling;
  178. nextEl.style.backgroundImage = `url(./img/upload_img.png)`;
  179. $(this).html('');
  180. alert('圖片錯誤');
  181. }
  182. });
  183. }
  184. const button = document.querySelector('.next');
  185. // Submit
  186. $(".next").click(function () {
  187. button.setAttribute('disabled', '');
  188. setTimeout(function () {
  189. button.removeAttribute('disabled')
  190. }, 10000);
  191. avatar = $('.avatar').val();
  192. name_title = $('.title_new').val();
  193. txtARR = [];
  194. imgARR = [];
  195. var step;
  196. let contentIdx = document.querySelectorAll(".txtsrc").length;
  197. for (let i = 1; i < (contentIdx + 1); i++) {
  198. if ($(`.txtsrc${i}`).val() != "") {
  199. txtARR.push($(`.txtsrc${i}`).val())
  200. }
  201. }
  202. let imgIdx = document.querySelectorAll(".imgsrc").length;
  203. for (let i = 1; i < (imgIdx + 1); i++) {
  204. if ($(`.imgsrc${i}`).val() != "") {
  205. imgARR.push($(`.imgsrc${i}`).val())
  206. }
  207. }
  208. multiLang = 0;
  209. if ($('#multiLang').prop("checked")) {multiLang = 1;}
  210. dataOBJ = { "name": name_title, "text_content": txtARR, "image_urls": imgARR, "avatar": avatar,"multiLang":multiLang, "client_id": client_id }
  211. objstr = JSON.stringify(dataOBJ);
  212. console.log(dataOBJ)
  213. jwt_token = get_jwt_token()
  214. var xhr = new XMLHttpRequest();
  215. xhr.open("POST", "https://www.choozmo.com:8887/make_anchor_video");
  216. xhr.setRequestHeader("accept", "application/json");
  217. xhr.setRequestHeader("Authorization","Bearer "+jwt_token)
  218. xhr.setRequestHeader("Content-Type", "application/json");
  219. xhr.onreadystatechange = function () {
  220. if (xhr.readyState === 4) {
  221. responseOBJ = JSON.parse(xhr.responseText)
  222. console.log(responseOBJ.msg);
  223. //let title = "資料已送出";
  224. let text;
  225. if(lan == 'en') {
  226. //title = 'Submitted Successfully!';
  227. text = responseOBJ.msg.eng;
  228. } else {
  229. text = responseOBJ.msg.zh;
  230. }
  231. Swal.fire({
  232. // title: title,
  233. icon: 'info',
  234. text: text,
  235. confirmButtonColor: '#3085d6',
  236. });
  237. }
  238. };
  239. var data = renderXHR_data(dataOBJ)
  240. console.log(data)
  241. result = xhr.send(objstr);
  242. });
  243. // Gen avatars
  244. $(".gen_avatar").click(function () {
  245. dataOBJ = { "imgurl": $('.img_src').val() }
  246. objstr = JSON.stringify(dataOBJ);
  247. console.log(dataOBJ)
  248. //alert('資料已送出! 請耐心等候')
  249. $.ajax({
  250. url: 'https://www.choozmo.com:8887/swapFace',
  251. dataType: 'json', // 預期從server接收的資料型態
  252. contentType: 'application/json; charset=utf-8', // 要送到server的資料型態
  253. type: 'post',
  254. data: objstr,
  255. success: function (suc_data) {
  256. alert(suc_data.msg)
  257. },
  258. //data:JSON.stringify({n1:"12",n2:"22"}),
  259. error: function (error) {
  260. console.error(error)
  261. }
  262. });
  263. });
  264. var loaded_data = ''
  265. function openNav() {
  266. document.getElementById("mySidenav").style.width = "250px";
  267. document.querySelector('.loader').style.display = "block";
  268. let jwt_token = get_jwt_token();
  269. axios({
  270. method: 'post',
  271. url: 'https://www.choozmo.com:8887/history_input',
  272. headers: {
  273. 'accept': 'application/json',
  274. 'Authorization': `Bearer ${jwt_token}`
  275. }
  276. }).then(res => {
  277. console.log(res.data);
  278. loaded_data = res.data;
  279. var historyList = document.querySelector('.historyList');
  280. historyList.innerHTML = '';
  281. for (var obj of loaded_data) {
  282. var list = document.createElement('li');
  283. list.id = obj.id;
  284. // div-imgfr
  285. var divImgfr = document.createElement('div');
  286. divImgfr.classList.add('item_imgfr');
  287. var img = document.createElement('img');
  288. img.setAttribute('src', obj['image_urls'][0]);
  289. divImgfr.appendChild(img);
  290. // div-content
  291. var contentBox = document.createElement('div');
  292. contentBox.classList.add('content-box');
  293. var boxTitle = document.createElement('p');
  294. boxTitle.classList.add('box-title');
  295. boxTitle.textContent = obj.name;
  296. boxTitle.id = obj.id;
  297. console.log(loaded_data);
  298. boxTitle.setAttribute('onclick', `direct(${obj.id})`);
  299. var boxLink = document.createElement('span');
  300. boxLink.classList.add('box-link');
  301. boxLink.setAttribute("data-url", obj.link);
  302. boxLink.setAttribute('onclick', 'view()');
  303. boxLink.innerHTML = '<i class="fas fa-play-circle me-1"></i>觀看影片';
  304. contentBox.appendChild(boxTitle);
  305. contentBox.appendChild(boxLink);
  306. list.classList.add("historyList-item");
  307. list.setAttribute('onclick', `direct(${obj.id})`);
  308. list.appendChild(divImgfr);
  309. list.appendChild(contentBox);
  310. historyList.appendChild(list);
  311. }
  312. document.querySelector('.loader').style.display = "none";
  313. }).catch(err => {
  314. console.log(err);
  315. });
  316. }
  317. function closeNav() {
  318. document.getElementById("mySidenav").style.width = "250px";
  319. }
  320. function view() {
  321. event.stopPropagation();
  322. console.log(event.target);
  323. if (event.target.nodeName === 'I') {
  324. return;
  325. } else {
  326. window.open(`http://${event.target.dataset.url}`, '_blank');
  327. }
  328. }
  329. function renderXHR_data(jsonObj) {
  330. XHRstring = ''
  331. for (const [key, value] of Object.entries(jsonObj)) {
  332. console.log(value)
  333. if (typeof (value) == "object") {
  334. XHRstring += (key+'=['+value.join(',')+']&')
  335. }
  336. else {
  337. XHRstring += (key + '=' + value + '&')
  338. }
  339. }
  340. XHRstring = XHRstring.substring(0, XHRstring.length - 1);
  341. return XHRstring
  342. }
  343. function get_jwt_token(){
  344. jwt_raw = document.cookie.split(';').filter(s=>s.includes('jwt_token'))[0];
  345. if(!jwt_raw) {return}
  346. return jwt_raw.split('=')[1];
  347. }
  348. function direct(id) {
  349. location.href = `make_video2.html?id=${id}`;
  350. }
  351. function load_data(tid, loaded_data, draft = false) {
  352. if(!tid) {
  353. return;
  354. }
  355. var title = document.getElementById("title");
  356. var linker = document.getElementById("linker");
  357. myModal.hide();
  358. if(!draft) {
  359. linker.setAttribute('href', `http://${loaded_data.find(item => item.id == tid).link}`)
  360. linker.setAttribute('target', '_blank')
  361. $("#linker").html(`http://${loaded_data.find(item => item.id == tid).link}`)
  362. $("#linker").show();
  363. $(".linker__box").show();
  364. }
  365. console.log(loaded_data);
  366. let historyItem = loaded_data.filter(item => item.id == tid)[0];
  367. console.log(historyItem.title);
  368. if(draft) {
  369. $(".title_new").val(historyItem.title);
  370. $("#avatar").val(historyItem.avatar);
  371. } else {
  372. $(".title_new").val(loaded_data.find(item => item.id == tid).name);
  373. $("#avatar").val(historyItem.avatar);
  374. }
  375. let txtlength = historyItem.text_content.length;
  376. let imglength = historyItem.image_urls.length;
  377. let flag = txtlength >= imglength ? txtlength : imglength;
  378. //subtitleInputs.innerHTML = '';
  379. // imgInputs.innerHTML = '';
  380. $('.img-inputTest').html('');
  381. for (let i = 0; i < flag; i++) {
  382. var input_sec = document.createElement('div');
  383. var img_box = document.createElement('div');
  384. input_sec.classList.add('input-sec', `input-sec${i+1}`, 'p-3', 'mb-3', 'text-end');
  385. img_box.classList.add('img-box');
  386. // text input
  387. var txtinput = document.createElement("input");
  388. txtinput.setAttribute('type', 'text');
  389. txtinput.setAttribute('name', `t${i+1}`);
  390. txtinput.classList.add('txtsrc', `txtsrc${i+1}`);
  391. txtinput.value = historyItem.text_content[i];
  392. txtinput.setAttribute('placeholder', `${i+1}`);
  393. input_sec.appendChild(txtinput);
  394. // img url input
  395. var imginput = document.createElement("input");
  396. imginput.setAttribute('type', 'text');
  397. imginput.setAttribute('name', `m${i+1}`);
  398. imginput.classList.add('imgsrc', `imgsrc${i+1}`);
  399. imginput.value = historyItem.image_urls[i];
  400. if(!historyItem.image_urls[i]) {
  401. imginput.value = "";
  402. }
  403. imginput.setAttribute('placeholder', '輸入圖片網址或上傳圖片');
  404. if(lan == 'en') {
  405. imginput.setAttribute('placeholder', 'Type in image link or upload image');
  406. }
  407. img_box.appendChild(imginput);
  408. // img upload input
  409. var imgupload = document.createElement("input");
  410. imgupload.setAttribute('id', `img${i+1}`);
  411. imgupload.setAttribute('type', `file`);
  412. imgupload.classList.add('img_uploader', 'img_up');
  413. imgupload.style.display = "none";
  414. img_box.appendChild(imgupload);
  415. // img upload label
  416. var imguploadlabel = document.createElement("label");
  417. imguploadlabel.setAttribute('for', `img${i+1}`);
  418. imguploadlabel.classList.add('upload-btn');
  419. // imguploadlabel.textContent = '上傳圖片';
  420. imguploadlabel.setAttribute('set-lan', `html:upload_file`);
  421. if(!historyItem.image_urls[i]) {
  422. imguploadlabel.style.backgroundImage = `url(static/img/upload_img.png)`;
  423. } else {
  424. imguploadlabel.style.backgroundImage = `url(${historyItem.image_urls[i]})`;
  425. }
  426. img_box.appendChild(imguploadlabel);
  427. imgupload.addEventListener('change', prepareUpload);
  428. input_sec.appendChild(img_box);
  429. document.querySelector('.img-inputTest').append(input_sec);
  430. }
  431. }
  432. getpathId();
  433. function getMode() {
  434. let id = window.location.search.split('?').pop();
  435. let mode = id.split('=')[0];
  436. if(mode == 'draftid') {
  437. /* JsLoadingOverlay.show({
  438. "overlayBackgroundColor": "#FFFFFF",
  439. "overlayOpacity": "0.9",
  440. "spinnerIcon": "ball-circus",
  441. "spinnerColor": "#B9DDF3",
  442. "spinnerSize": "2x",
  443. "overlayIDName": "overlay",
  444. "spinnerIDName": "spinner",
  445. "offsetX": 0,
  446. "offsetY": 0,
  447. "containerID": null,
  448. "lockScroll": false,
  449. "overlayZIndex": 9998,
  450. "spinnerZIndex": 9999
  451. }); */
  452. getDraftData();
  453. } else if(mode == 'id') {
  454. /* JsLoadingOverlay.show({
  455. "overlayBackgroundColor": "#FFFFFF",
  456. "overlayOpacity": "0.9",
  457. "spinnerIcon": "ball-circus",
  458. "spinnerColor": "#B9DDF3",
  459. "spinnerSize": "2x",
  460. "overlayIDName": "overlay",
  461. "spinnerIDName": "spinner",
  462. "offsetX": 0,
  463. "offsetY": 0,
  464. "containerID": null,
  465. "lockScroll": false,
  466. "overlayZIndex": 9998,
  467. "spinnerZIndex": 9999
  468. }); */
  469. getData();
  470. }
  471. return id.split('=')[1];
  472. //load_data(id);
  473. }
  474. getMode();
  475. function getpathId(){
  476. let id = window.location.search.split('?').pop();
  477. return id.split('=')[1];
  478. }
  479. function getData() {
  480. let jwt_token = get_jwt_token();
  481. axios({
  482. method: 'post',
  483. url: 'https://www.choozmo.com:8887/history_input',
  484. headers: {
  485. 'accept': 'application/json',
  486. 'Authorization': `Bearer ${jwt_token}`
  487. }
  488. }).then(res => {
  489. loaded_data = res.data;
  490. console.log(loaded_data);
  491. const id = getpathId();
  492. load_data(id, loaded_data);
  493. }).catch(err => {
  494. console.log(err);
  495. });
  496. }
  497. let length = 5;
  498. function initial() {
  499. for (let i = 0; i < length; i++) {
  500. renderInputSec(i+1) ;
  501. }
  502. console.log(document.querySelectorAll(".txtsrc").length + 1);
  503. }
  504. initial();
  505. // var addbtn = document.querySelector(".add");
  506. // var addimgbtn = document.querySelector(".addimg");
  507. // addbtn.addEventListener('click', addtxtBlock);
  508. // addimgbtn.addEventListener('click', addimgBlock);
  509. function addtxtBlock() {
  510. let newIdx = document.querySelectorAll(".txtsrc").length + 1;
  511. rendertxtBlock(newIdx);
  512. }
  513. function addimgBlock() {
  514. let newimgIdx = document.querySelectorAll(".imgsrc").length + 1;
  515. renderimgBlock(newimgIdx);
  516. }
  517. function rendertxtBlock(i) {
  518. var txtinput = document.createElement("input");
  519. txtinput.setAttribute('type', 'text');
  520. txtinput.setAttribute('name', `t${i}`);
  521. txtinput.value = "";
  522. txtinput.setAttribute('placeholder', `${i}`);
  523. txtinput.classList.add('txtsrc', `txtsrc${i}`)
  524. subtitleInputs.appendChild(txtinput);
  525. }
  526. function renderimgBlock(i) {
  527. var imginput = document.createElement("input");
  528. imginput.setAttribute('type', 'text');
  529. imginput.setAttribute('name', `m${i}`);
  530. imginput.classList.add('imgsrc', `imgsrc${i}`);
  531. imginput.value = "";
  532. imginput.setAttribute('placeholder', `${i}`);
  533. imgInputs.appendChild(imginput);
  534. var imgupload = document.createElement("input");
  535. imgupload.setAttribute('id', `img${i}`);
  536. imgupload.setAttribute('type', `file`);
  537. imgupload.classList.add('img_uploader', 'img_up');
  538. imgInputs.appendChild(imgupload);
  539. var imguploadlabel = document.createElement("label");
  540. imguploadlabel.setAttribute('for', `img${i}`);
  541. imguploadlabel.classList.add('upload-btn');
  542. imguploadlabel.textContent = '上傳檔案';
  543. if(lan == 'en') {
  544. imguploadlabel.textContent = 'Upload';
  545. }
  546. imguploadlabel.setAttribute('set-lan', `html:upload_file`);
  547. imgInputs.appendChild(imguploadlabel);
  548. $('input[type=file]').on('change', prepareUpload);
  549. }
  550. var addsecbtn = document.querySelector(".addsec");
  551. addsecbtn.addEventListener('click', addsecBlock);
  552. function addsecBlock() {
  553. let newsecIdx = document.querySelectorAll(".input-sec").length + 1;
  554. renderInputSec(newsecIdx);
  555. }
  556. function renderInputSec(i) {
  557. var input_sec = document.createElement('div');
  558. var img_box = document.createElement('div');
  559. input_sec.classList.add('input-sec', `input-sec${i}`, 'p-3', 'mb-3', 'text-end');
  560. img_box.classList.add('img-box');
  561. // text input
  562. var txtinput = document.createElement("input");
  563. txtinput.setAttribute('type', 'text');
  564. txtinput.setAttribute('name', `t${i}`);
  565. txtinput.classList.add('txtsrc', `txtsrc${i}`);
  566. txtinput.value = "";
  567. txtinput.setAttribute('placeholder', `台詞`);
  568. if(lan == 'en') {
  569. txtinput.setAttribute('placeholder', `Line`);
  570. }
  571. input_sec.appendChild(txtinput);
  572. // img url input
  573. var imginput = document.createElement("input");
  574. imginput.setAttribute('type', 'text');
  575. imginput.setAttribute('name', `m${i}`);
  576. imginput.classList.add('imgsrc', `imgsrc${i}`);
  577. imginput.value = "";
  578. imginput.setAttribute('placeholder', '輸入圖片網址或上傳圖片');
  579. if(lan == 'en') {
  580. imginput.setAttribute('placeholder', 'Type in image link or upload image');
  581. }
  582. img_box.appendChild(imginput);
  583. // img upload input
  584. var imgupload = document.createElement("input");
  585. imgupload.setAttribute('id', `img${i}`);
  586. imgupload.setAttribute('type', `file`);
  587. imgupload.classList.add('img_uploader', 'img_up');
  588. imgupload.style.display = "none";
  589. img_box.appendChild(imgupload);
  590. // img upload label
  591. var imguploadlabel = document.createElement("label");
  592. imguploadlabel.setAttribute('for', `img${i}`);
  593. imguploadlabel.classList.add('upload-btn');
  594. // imguploadlabel.textContent = '上傳圖片';
  595. imguploadlabel.setAttribute('set-lan', `html:upload_file`);
  596. img_box.appendChild(imguploadlabel);
  597. imgupload.addEventListener('change', prepareUpload);
  598. input_sec.appendChild(img_box);
  599. document.querySelector('.img-inputTest').append(input_sec);
  600. }
  601. $('.owl-carousel').owlCarousel({
  602. loop: true,
  603. margin: 10,
  604. nav: false,
  605. mouseDrag: true,
  606. touchDrag: true,
  607. smartSpeed: 1000,
  608. autoplay: true,
  609. autoplayTimeout: 8000,
  610. autoplayHoverPause: false,
  611. responsive: {
  612. 0: {
  613. items: 1
  614. },
  615. 600: {
  616. items: 2
  617. },
  618. 1000: {
  619. items: 4
  620. }
  621. }
  622. });
  623. // Handle draft
  624. $('.draft-btn').click(() => {
  625. let text = '儲存中...';
  626. if (lan == 'en') {
  627. text = 'Saving...';
  628. }
  629. $('.draft-btn').text(text);
  630. let jwt_token = get_jwt_token();
  631. let avatar = $('.avatar').val();
  632. let name_title = $('.title_new').val();
  633. let txtARR = [];
  634. let imgARR = [];
  635. var step;
  636. let contentIdx = document.querySelectorAll(".txtsrc").length;
  637. for (let i = 1; i < (contentIdx + 1); i++) {
  638. if ($(`.txtsrc${i}`).val() != "") {
  639. txtARR.push($(`.txtsrc${i}`).val())
  640. }
  641. }
  642. let imgIdx = document.querySelectorAll(".imgsrc").length;
  643. for (let i = 1; i < (imgIdx + 1); i++) {
  644. if ($(`.imgsrc${i}`).val() != "") {
  645. imgARR.push($(`.imgsrc${i}`).val())
  646. }
  647. }
  648. let multiLang = 0
  649. if ($('#multiLang').prop("checked")) {multiLang = 1;}
  650. let id = window.location.search.split('?').pop();
  651. let mode = id.split('=')[0];
  652. if(mode == 'draftid') {
  653. id = Number(id.split('=')[1]);
  654. } else {
  655. id = -1;
  656. }
  657. let dataOBJ = { "id": id, "title": name_title, "text_content": txtARR, "image_urls": imgARR, "avatar": avatar,"multiLang":multiLang }
  658. console.log(dataOBJ);
  659. axios({
  660. method: 'post',
  661. url: 'https://www.choozmo.com:8887/save_draft',
  662. headers: {
  663. 'accept': 'application/json',
  664. 'Authorization': `Bearer ${jwt_token}`,
  665. 'Content-Type': 'application/json',
  666. },
  667. data: dataOBJ
  668. }).then(res => {
  669. console.log(res.data);
  670. $('.draft-btn').text('存為草稿');
  671. let title = "儲存完成";
  672. if(lan == 'en') {
  673. title = 'Saved!'
  674. $('.draft-btn').text('Save as Draft');
  675. }
  676. Swal.fire({
  677. title: title,
  678. icon: 'success',
  679. confirmButtonColor: '#3085d6',
  680. });
  681. }).catch(err => {
  682. console.log(err);
  683. });
  684. });
  685. function getDraftData() {
  686. let token = get_jwt_token();
  687. axios({
  688. method: 'post',
  689. url: 'https://www.choozmo.com:8887/draft_list',
  690. headers: {
  691. 'accept': 'application/json',
  692. 'Authorization': `Bearer ${token}`
  693. }
  694. }).then(res => {
  695. console.log(res.data);
  696. let result = [...res.data];
  697. let id = getpathId();
  698. load_data(id, result, true);
  699. }).catch(err => {
  700. console.log(err);
  701. });
  702. }
  703. // Copy to clipboard
  704. $(".copy").click(function(){
  705. const copyStr = $(this).next().text();
  706. copyToClipboard(copyStr);
  707. });
  708. const copyToClipboard = str => {
  709. const el = document.createElement('textarea');
  710. el.value = str;
  711. el.setAttribute('readonly', '');
  712. el.style.position = 'absolute';
  713. el.style.left = '-9999px';
  714. document.body.appendChild(el);
  715. el.select();
  716. document.execCommand('copy');
  717. document.body.removeChild(el);
  718. Swal.fire({
  719. toast: true,
  720. icon: 'success',
  721. position: 'top-end',
  722. title: 'Link copied!',
  723. timerProgressBar: true,
  724. showConfirmButton: false,
  725. timer: 1000,
  726. backdrop: false
  727. })
  728. };
  729. $("#lang-manu").hide();
  730. $( "#changeLanguage" ).click(function() {
  731. $("#lang-manu").slideToggle();
  732. $("#lang-arrow").toggleClass("arrowdoup");
  733. });