design.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645
  1. //delete = delets from DB
  2. //remove = removes from HTML
  3. //save = save to DB
  4. //add = changes HTML
  5. //get = get from DB
  6. //new = changes HTML
  7. var pictureWidth = 1280;
  8. var pictureHeight = 720;
  9. function overlayOn(value, showimage=false) {
  10. if(showimage){
  11. url = "https://centurio.work/customers/evva/universal-storage/ui/?iframe&path=Stationsbilder/Gesamtbilder/Station3"
  12. }
  13. else{
  14. url = "https://centurio.work/customers/evva/universal-storage/ui/?iframe"
  15. }
  16. document.getElementById("overlay").style.display = "block";
  17. var iframe = $('#overlaycontentsize').append("<iframe id='overlaycontent' src='" + url + "' width='900' height='600'></iframe>");
  18. iframe.find("#overlaycontent").bind('load',{"ka": value}, function(event){
  19. var ref = this.contentWindow.ref;
  20. //You can think that ref = $(this.contentWindow.test) but thery are different
  21. //they are two diferent references this might be a bug
  22. ref.bind('getUrl',{"xyz": event.data.ka}, function(event, extra1){
  23. var data = event.data
  24. overlayOff();
  25. //fill input with url
  26. if(!showimage){
  27. $(data.xyz).parent().parent().find(".abbreviationInput").val(extra1.url)
  28. }
  29. else{
  30. clearForm();
  31. //hide current image
  32. var newSrc = extra1.url + "?rand=" + Math.random();
  33. image = new Image();
  34. $("#sliceImg").hide("puff")
  35. //show new image and perform a resize of the rectangle
  36. image.onload = function() {
  37. $("#sliceImg").hide("puff", function() {
  38. $(this).attr("src", newSrc).show("fold");
  39. resizeAllRect();
  40. fillFormName(extra1.url.substring(extra1.url.lastIndexOf('/') + 1).replace(/\.[^/.]+$/, ""));
  41. });
  42. }
  43. image.src = newSrc;
  44. // $("#sliceImg").attr("src",extra1.url + "?rand=" + Math.random() )
  45. // resizeAllRect()
  46. }
  47. });
  48. });
  49. }
  50. function overlayOnImg(data) {
  51. var url = new URL("" + data, document.baseURI).href
  52. document.getElementById("overlay").style.display = "block";
  53. const imageext = ["png", "jpg", "svg"]
  54. const movieext = ["mp4"]
  55. var ext = url.substr(url.lastIndexOf('.') + 1);
  56. if(imageext.includes(ext)){
  57. $('#overlaycontentsize').load(url, function(){
  58. var width = $(this).children("svg").attr("width")
  59. var height = $(this).children("svg").attr("height")
  60. $(this).children("svg").attr("viewBox","0 0 " + width + " " + height);
  61. $(this).children("svg").attr("width",window.innerWidth * 0.7);
  62. $(this).children("svg").attr("height",window.innerHeight *0.7);
  63. });
  64. }
  65. else if(movieext.includes(ext)){
  66. $('#overlaycontentsize').append("<video id='overlaycontent' controls> <source src=" + url + " type=\"video/mp4\">Your browser does not support the video tag.</video>");
  67. }
  68. else{
  69. $('#overlaycontentsize').append("<iframe id='overlaycontent' src=" + url + "></iframe>");
  70. }
  71. }
  72. function overlayOff() {
  73. document.getElementById("overlay").style.display = "none";
  74. $('#overlaycontentsize').text("");
  75. document.getElementById("overlayNotClickable").style.display = "none";
  76. $('#overlaycontentsizeNotClickable').text("");
  77. }
  78. function saveStation() { //Save 2 DB
  79. if (confirm('Are you really, really, REALLY sure you want to create a New Station?')) {
  80. $.ajax({
  81. type: "POST",
  82. url: "../server/",
  83. success: function(res) {
  84. location.reload();
  85. }
  86. });
  87. }
  88. }
  89. function getStations(stationID , patternID ){ //Get DB 2 HTML
  90. $('#stations').text("");
  91. $.ajax({
  92. type: "GET",
  93. url: "../server/",
  94. dataType: "xml",
  95. success: function(xml) {
  96. $(xml).find('station').each(function(index){
  97. var clone = document.importNode(document.querySelector('#line').content,true);
  98. $('[data-class=station]',clone).text($(this).attr('id'));
  99. $('[data-class=pattern] a',clone).before("[");
  100. $('[data-class=pattern] a',clone).text("Add Pattern");
  101. $('[data-class=pattern] a',clone).after("]");
  102. $('[data-class=pattern] a',clone).attr('href','javascript:newPattern('+ $(this).attr('id') + ');');
  103. $('[data-class=duplicate]',clone).text("");
  104. $('[data-class=delete]',clone).text("");
  105. $('#stations').append(clone);
  106. var curstation=$(this).attr('id');
  107. $(this).find('pattern').each(function(index){
  108. var clonePattern = document.importNode(document.querySelector('#line').content,true);
  109. $('[data-class=pattern] a',clonePattern).text($(this).attr('value'));
  110. $('[data-class=pattern] a',clonePattern).attr('href','javascript:getPattern(' + curstation + ','+ $(this).attr('id') + ');');
  111. $('[data-class=date]',clonePattern).text($.format.date(Date.parse($(this).attr('changed')), 'yyyy/MM/dd HH:mm:ss'));
  112. $('[data-class=duplicate] a',clonePattern).attr('href','javascript:duplicatePattern(' + curstation + ','+ $(this).attr('id') + ');');
  113. $('[data-class=delete] a',clonePattern).attr('href','javascript:deletePattern(' + curstation + ','+ $(this).attr('id') + ');');
  114. if (patternID != null && patternID == $(this).attr('id')){
  115. $('tr',clonePattern).css("background-color","#99cce6");
  116. }
  117. $('#stations').append(clonePattern);
  118. });
  119. });
  120. }
  121. });
  122. }
  123. function newPattern(stationID) { //HTML
  124. getPattern(stationID);
  125. }
  126. function getPattern(stationID, patternID){ //Get DB 2 HTML
  127. getStations(stationID, patternID)
  128. if (patternID == null){
  129. $('#patternform').attr('onsubmit', "savePattern("+stationID+")");
  130. $('#pattern_ID').text("");
  131. $('#pattern_description').val("");
  132. $('#imageListing').text("");
  133. $('#images').css("display", "none");
  134. $('#remove_pattern').css("display", "none");
  135. $('#error').css("display", "none");
  136. $('#replacements').css("display", "none");
  137. }
  138. else{
  139. $('#patternform').attr('onsubmit', "saveChangedPattern("+stationID+","+ patternID +")");
  140. $('#pattern_ID').text(patternID);
  141. getImages(stationID, patternID);
  142. $('#remove_pattern').css("display", "block");
  143. $('#remove_pattern').attr('onclick', "javascript:deletePattern("+stationID+","+ patternID +")");
  144. getError(stationID, patternID);
  145. getReplaceImages(stationID, patternID);
  146. $.ajax({
  147. type: "GET",
  148. url: "../server/"+stationID+ "/" + patternID,
  149. dataType: "xml",
  150. success: function(xml) {
  151. $(xml).find('pattern').each(function(index){
  152. var pattern = $(this).attr('value').split(".")
  153. for(var i = 0; i < pattern.length; i++)
  154. {
  155. if(i == 0){
  156. $("#patternInput .patternPartInput").val(pattern[i]);
  157. $("#patternInput .patternPartInput").attr('size', pattern[i].length);
  158. }
  159. else{
  160. var clone = document.importNode(document.querySelector('#patternClone').content,true);
  161. $('[data-class=part]',clone).val(pattern[i]);
  162. $('[data-class=part]',clone).limitkeypress({ rexp: keypressRegex() });
  163. $('[data-class=part]',clone).attr('size', pattern[i].length);
  164. $("#patternInput").append(clone);
  165. }
  166. }
  167. $('#pattern').val($(this).attr('value'));
  168. $('#pattern_description').val($(this).attr('description'));
  169. });
  170. }
  171. });
  172. }
  173. $('#pattern_details').css("display", "block");
  174. $('#pattern_station').text(stationID);
  175. $('#pattern_description').text("");
  176. //Reset Pattern
  177. $('#patternInput').text("");
  178. var clone = document.importNode(document.querySelector('#patternClone').content,true);
  179. $('[data-class=part]',clone).limitkeypress({rexp: keypressRegex()});
  180. $("#patternInput").append(clone);
  181. }
  182. function keypressRegex(){ //Helper Function
  183. return /^.{1,10}$/;
  184. //return /^[A-Za-z0-9\*]*$/; //Ohne Sonderzeichen
  185. }
  186. function removePatternPart(value) { //HTML
  187. if($( ".patternPart" ).length > 1)
  188. value.parent().remove();
  189. }
  190. function addPatternPart(useLast, curclass) { //HTML
  191. var clone = document.importNode(document.querySelector('#patternClone').content,true);
  192. $('[data-class=part]',clone).val("*");
  193. $('[data-class=part]',clone).limitkeypress({rexp: keypressRegex()});
  194. if(useLast){
  195. $("#" + curclass).children(".patternPart").last().after(clone);
  196. $("#" + curclass).last().children(".patternPartInput").focus();
  197. }else{
  198. $(':focus').parent().after(clone);
  199. $(':focus').parent().next().children(".patternPartInput").focus();
  200. }
  201. }
  202. function getPatternString(){ //Helper Function
  203. var val = "";
  204. var first = true;
  205. $(".patternPartInput").each(function() {
  206. if(first){
  207. first = false
  208. val += $(this).val()
  209. }
  210. else{
  211. val += "." + $(this).val()
  212. }
  213. });
  214. return val;
  215. }
  216. function savePattern(stationID) { //Save 2 DB
  217. var xmlDocument = $.parseXML("<pattern/>");
  218. $(xmlDocument).find("pattern").attr('id','0');
  219. $(xmlDocument).find("pattern").attr('value',getPatternString());
  220. $(xmlDocument).find("pattern").attr('description',$('#pattern_description').val());
  221. $(xmlDocument).find("pattern").attr('changed',new Date().toISOString());
  222. $.ajax({
  223. type: "POST",
  224. headers: {"content-id": "pattern"},
  225. data: (new XMLSerializer()).serializeToString(xmlDocument),
  226. contentType: "application/xml; charset=utf-8",
  227. url: "../server/"+stationID,
  228. success: function(res) {
  229. getPattern(stationID, res.id)
  230. },
  231. error: function (request, status, error) {
  232. alert(request.responseText + status + error);
  233. }
  234. });
  235. }
  236. function saveChangedPattern(stationID, patternID) { //Save 2 DB
  237. var xmlDocument = $.parseXML("<pattern/>");
  238. $(xmlDocument).find("pattern").attr('id',$('#pattern_ID').text());
  239. $(xmlDocument).find("pattern").attr('value',getPatternString());
  240. $(xmlDocument).find("pattern").attr('description',$('#pattern_description').val());
  241. $(xmlDocument).find("pattern").attr('changed',new Date().toISOString());
  242. //Save Pattern
  243. $.ajax({
  244. type: "PUT",
  245. headers: {"content-id": "pattern"},
  246. data: (new XMLSerializer()).serializeToString(xmlDocument),
  247. contentType: "application/xml; charset=utf-8",
  248. url: "../server/"+stationID + "/" + patternID,
  249. //processData: false,
  250. success: function(res) {
  251. },
  252. error: function (request, status, error) {
  253. alert(request.responseText + status + error);
  254. }
  255. });
  256. //Update Labels
  257. $(".imageInput").each(function() {
  258. //Optimization only update if lable changed
  259. if($(this).val() != $(this).attr("origValue"))
  260. $.ajax({
  261. type: "PUT",
  262. data: { 'label' : $(this).val()},
  263. headers: {"content-id": "label"},
  264. url: "../server/"+stationID + "/" + patternID + "/images/" + $(this).parent().find(".imageID").text() +"/" + $('#image_language option:selected').text(),
  265. success: function(res) {
  266. },
  267. error: function (request, status, error) {
  268. alert(request.responseText + status + error);
  269. }
  270. });
  271. });
  272. //Update Image Ordering
  273. var order = []
  274. $(".imageID").each(function() {
  275. order.push(parseInt($(this).text()))
  276. });
  277. $.ajax({
  278. type: "PUT",
  279. data: JSON.stringify(order),
  280. headers: {"content-id": "orderlist"},
  281. contentType: "application/json",
  282. url: "../server/"+stationID + "/" + patternID + "/images/reorder/" + $('#image_language option:selected').text(),
  283. success: function(res) {
  284. },
  285. error: function (request, status, error) {
  286. alert(request.responseText + status + error);
  287. }
  288. });
  289. //Update Error
  290. var errorList = $.parseXML("<error/>");
  291. $(".errorInput").each(function() {
  292. $(errorList).find("error").append("<reason>" +$(this).val()+"</reason>")
  293. });
  294. $.ajax({
  295. type: "PUT",
  296. headers: {"content-id": "error"},
  297. data: (new XMLSerializer()).serializeToString(errorList),
  298. contentType: "application/xml; charset=utf-8",
  299. url: "../server/"+stationID + "/" + patternID + "/error",
  300. success: function(res) {
  301. },
  302. error: function (request, status, error) {
  303. alert(request.responseText + status + error);
  304. }
  305. });
  306. //Update Replacement
  307. var replaceList = $.parseXML("<replacement/>");
  308. $(".replaceInput").each(function() {
  309. //console.log($(this).find('.abbreviation').val())
  310. //console.log($(this).find('.url').val())
  311. $(replaceList).find("replacement").append("<item>" + "<abbreviation>" + $(this).find('.abbreviation').val() + "</abbreviation>" + "<url>" + $(this).find('.url').val() + "</url>"+"</item>")
  312. });
  313. $.ajax({
  314. type: "PUT",
  315. headers: {"content-id": "replacement"},
  316. data: (new XMLSerializer()).serializeToString(replaceList),
  317. contentType: "application/xml; charset=utf-8",
  318. url: "../server/"+stationID + "/" + patternID + "/replacement",
  319. success: function(res) {
  320. },
  321. error: function (request, status, error) {
  322. alert(request.responseText + status + error);
  323. }
  324. });
  325. getPattern(stationID, patternID)
  326. }
  327. function deletePattern(stationID, patternID) { //Delete From DB
  328. if (confirm('Are you really, really, REALLY sure!')) {
  329. $.ajax({
  330. type: "DELETE",
  331. url: "../server/" + stationID + "/" + patternID,
  332. success: function(res) {
  333. location.reload();
  334. }
  335. });
  336. }
  337. }
  338. function duplicatePattern(stationID, patternID){ //Get DB 2 HTML
  339. $.ajax({
  340. type: "PUT",
  341. headers: {"content-id": "patternID"},
  342. data: { "patternID":patternID},
  343. contentType: "application/json",
  344. url: "../server/"+stationID + "/" + patternID,
  345. success: function(res) {
  346. getPattern(stationID, res["id"])
  347. },
  348. error: function (request, status, error) {
  349. alert(request.responseText + status + error);
  350. }
  351. });
  352. }
  353. function getImages(stationID, patternID){ //Get From DB 2 HTML
  354. $('#images').css("display", "block");
  355. $('#imageListing').text("");
  356. $('#imgUpload').attr("action", "../server/" + stationID + "/" + patternID + "/images");
  357. $('#addExternalImageUrl').val("");
  358. $('#addExternalImage').attr("onclick", "addExternalImage(" + stationID + "," + patternID + ")");
  359. //Image preview needs pattern
  360. $.ajax({
  361. type: "GET",
  362. url: "../server/"+stationID+ "/" + patternID,
  363. dataType: "xml",
  364. success: function(xml) {
  365. pattern = xml.getElementsByTagName('pattern')[0].getAttribute("value");
  366. //get all images
  367. $.ajax({
  368. type: "GET",
  369. url: "../server/"+stationID+ "/" + patternID + "/images",
  370. dataType: "xml",
  371. success: function(xml) {
  372. var count = 0;
  373. $(xml).find('image').each(function(index){
  374. curID = $(this).attr('id')
  375. $(this).find('variant').each(function(){
  376. if($(this).attr('lang') == $('#image_language option:selected').text()){
  377. ++count;
  378. var clone = document.importNode(document.querySelector('#imagePreview').content,true);
  379. var imgsrcsingle = "../images/uploads/"+stationID+ "/" + patternID + "/" + curID + "/"+ $(this).attr('lang') + ".svg";
  380. var imgsrc = imgsrcsingle + "?" + Date.now();
  381. //$('[data-class=image]',clone).append('<img id="theImg" src="' + imgsrc +'" onclick="overlayOnImg(\'' +imgsrcsingle + '\')" height="100px" />')
  382. //$('[data-class=image]',clone).append('<object class="theImg" id="theImg" data="' + imgsrc +'" onclick="overlayOnImg(\'' +imgsrcsingle + '\')" height="100px" />')
  383. //managing that internal and external pictures look the same
  384. $('[data-class=image]',clone).load(imgsrc, function(){
  385. var width = $(this).children("svg").attr("width")
  386. var height = $(this).children("svg").attr("height")
  387. $(this).children("svg").attr("viewBox","0 0 " + pictureWidth + " " + pictureHeight + "");
  388. $(this).children("svg").attr("width","200");
  389. $(this).children("svg").attr("height","100");
  390. });
  391. $('[data-class=image]',clone).attr("onclick", "overlayOnImg('" + imgsrcsingle + "')" );
  392. //Image Preview
  393. $('[data-class=showimage]',clone).attr("href", "imageReplacement.php?___image___="+stationID+ "/" + patternID + "/" + curID + "/"+ $(this).attr('lang') + ".svg" +"&ProductCode=" + pattern + "&Station=" + "Station" + stationID);
  394. //$('[data-class=image]',clone).append('<object class="theImg" id="theImg" data="' + imgsrc +'" onclick="overlayOnImg(\'' +imgsrcsingle + '\')" height="100px" />')
  395. //$('[data-class=image]',clone).append('<div style="background-image: url(' + imgsrc+ ')" height="100px" />')
  396. $('[data-class=label]',clone).val($(this).attr('label'));
  397. $('[data-class=label]',clone).attr("origValue", $(this).attr('label'));
  398. $('[data-class=imageId]',clone).text(curID);
  399. $('[data-class=imageId]',clone).attr("class", "imageID")
  400. $('[data-class=options] a',clone).attr('href','javascript:deleteImage(' + stationID + ','+ patternID + ',' + curID + ',"' + $(this).attr('lang') + '");');
  401. $('#imageListing').append(clone);
  402. }
  403. });
  404. });
  405. $('#image_count').text(count);
  406. /*
  407. $(".image").each(function() {
  408. alert("mhm");
  409. $(this).children().attr("viewBox","0 0 " + "300" + " 300");
  410. });
  411. */
  412. }
  413. });
  414. }
  415. });
  416. new Sortable(document.getElementById('imageListing'),{
  417. handle: '.handle',
  418. animation: 150
  419. });
  420. new Sortable(document.getElementById('replaceImages'),{
  421. handle: '.handle2',
  422. animation: 150
  423. });
  424. }
  425. function addExternalImage(stationID, patternID){
  426. var extImage = $.parseXML("<externalImage/>");
  427. $(extImage).find("externalImage").append("<url>" + $('#addExternalImageUrl').val() +"</url>");
  428. $(extImage).find("externalImage").append("<lang>" + $('#image_language option:selected').text() + "</lang>");
  429. console.log(extImage);
  430. $.ajax({
  431. type: "POST",
  432. headers: {"content-id": "externalImage"},
  433. data: (new XMLSerializer()).serializeToString(extImage),
  434. contentType: "application/xml; charset=utf-8",
  435. url: "../server/" + stationID + "/" + patternID + "/images",
  436. success: function(res) {
  437. getPattern(stationID, patternID)
  438. }
  439. });
  440. }
  441. function deleteImage(stationID, patternID, imageID, lang) { //Delete From DB
  442. $.ajax({
  443. type: "DELETE",
  444. url: "../server/" + stationID + "/" + patternID + "/images/" + imageID + "/" + lang,
  445. success: function(res) {
  446. getPattern(stationID, patternID)
  447. }
  448. });
  449. }
  450. function addError() { //HTML
  451. //Will be added from DB on save
  452. var clone = document.importNode(document.querySelector('#errorCode').content,true);
  453. $('#errorCodes').append(clone);
  454. }
  455. function getError(stationID, patternID){ //Get From DB 2 HTML
  456. $('#error').css("display", "block");
  457. $('#errorCodes').text("");
  458. $.ajax({
  459. type: "GET",
  460. url: "../server/"+stationID+ "/" + patternID + "/error",
  461. dataType: "xml",
  462. success: function(xml) {
  463. $(xml).find('reason').each(function(index){
  464. var clone = document.importNode(document.querySelector('#errorCode').content,true);
  465. $('[data-class=errorInput]',clone).val($(this).text());
  466. $('#errorCodes').append(clone);
  467. });
  468. }
  469. });
  470. }
  471. function removeError(value) { //HTML
  472. //Will be removed from DB on save
  473. value.parent().parent().parent().remove();
  474. }
  475. function addBlankReplacement() { //HTML
  476. //Will be added from DB on save
  477. var clone = document.importNode(document.querySelector('#imageReplacements').content,true);
  478. $('#replaceImages').append(clone);
  479. }
  480. function getReplaceImages(stationID, patternID){ //Get From DB 2 HTML
  481. $('#replacements').css("display", "block");
  482. $('#replaceImages').text("");
  483. $.ajax({
  484. type: "GET",
  485. url: "../server/"+stationID+ "/" + patternID + "/replacement",
  486. dataType: "xml",
  487. success: function(xml) {
  488. $(xml).find('item').each(function(index){
  489. var clone = document.importNode(document.querySelector('#imageReplacements').content,true);
  490. $('[data-class=abbreviation]',clone).val($(this).find('abbreviation').text());
  491. $('[data-class=url]',clone).val($(this).find('url').text());
  492. $('#replaceImages').append(clone);
  493. });
  494. }
  495. });
  496. }
  497. function removeReplacement(value) { //HTML
  498. //Will be removed from DB on save
  499. value.parent().parent().parent().remove();
  500. }
  501. //Go to next PatternInput on . or space keydown
  502. $(window).keydown(function(e) {
  503. if ((e.which === 32 || e.which === 190) && $(':focus').attr('class') === "patternPartInput") {
  504. e.preventDefault();
  505. addPatternPart(false);
  506. }
  507. });
  508. $(document).ready(function() {
  509. getStations(); //Get all Stations
  510. $("#image_language" ).change(function() {
  511. getImages($('#pattern_station').text(), $('#pattern_ID').text())
  512. });
  513. $(document).on('submit', '#patternform', function() { //prevent page reload on form submit
  514. return false;
  515. });
  516. $('.patternPartInput').limitkeypress({rexp: keypressRegex()});
  517. });