- Timestamp:
- 2017-03-29T22:38:36+13:00 (7 years ago)
- Location:
- main/trunk/greenstone3/web/interfaces/default/js
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone3/web/interfaces/default/js/javascript-global-functions.js
r31545 r31547 422 422 } 423 423 424 // No function overloading in JavaScript. Can pass a custom object, however, see 425 // http://stackoverflow.com/questions/456177/function-overloading-in-javascript-best-practices 426 function callMetadataServerGET(callingFunction, url, responseFunction, opts) 427 { 428 var async_setting = true; // Internal processing of 'read' operations (get meta) is not order dependent 429 424 // This method performs an AJAX call after working out, based on parameters and internal decision-making code, 425 // if it's using GET or POST, 426 // asynchronous or synchronous AJAX, 427 // jQuery's .ajax() method or gsajaxapi.js' regular JavaScript way of calling AJAX (necessary functions 428 // now ported from GS2 to GS3) 429 // and whether it needs to transmit the payload in URL or data structure (Java object) form. 430 // In the past, the AJAX calls to metadataserver.pl only dealt with URLs and used jQuery .ajax(). As a 431 // consequence of this particular combination, the calls in the past were all GET operations. 432 // 433 // - payload param: contains both the URL form and the data object form of the package to transmit over 434 // AJAX to metadataserver.pl. Based on the parameters and some internal variables, callMetadataServer() 435 // determines which to use. 436 // - opts param: No function overloading in JavaScript. Can pass a custom object, however can pass opts, 437 // see http://stackoverflow.com/questions/456177/function-overloading-in-javascript-best-practices 438 function callMetadataServer(callingFunction, payload, responseFunction, opts) 439 { 440 441 // async AJAX by default for get operations: because internal processing of 'read' operations (get meta) 442 // is not order dependent. 443 // Set/remove operations will switch to synchronous AJAX, unless opt["forceSync"] is set otherwise 444 var async_setting = true; 445 var method = "GET"; // GET was the default before 446 447 // Set to false if you wish to use the regular JavaScript AJAX way in gsajaxapi.js (will use payload.url) 448 // Set to true if using jQuery AJAX (will use payload.data). 449 var _use_jQuery_ajax_not_gsajaxapi = true; 450 451 // _use_payload_in_data_not_url_form is determined based on vars method and _use_jQuery_ajax_not_gsajaxapi 452 // If using AJAX with payload data (with jQuery) rather than using URLs containing data (payload in url): 453 // using data will allow us to use jQuery to POST stuff too. 454 // For gsajaxapi, payload to be transmitted over AJAX must be in URL form, whether GET or POST. 455 // For jQuery, AJAX calls ended up as GET when the payload is in URL form. 456 // Default used to be payload in url form. To get the default back, 457 // set method = "GET" (above, but also in calling functions!) and set the default here below 458 // for _use_payload_in_data_not_url_form to false. 459 var _use_payload_in_data_not_url_form = false; 460 461 var _modifyingMeta = false; 462 463 var url = payload["url"]; // for jQuery GET, and for GET and POST using JavaScript AJAX 464 var data = payload["data"]; // for jQuery POST 465 466 467 // check for any caller overrides 468 if(opts != null) { 469 //if(opts["use_payload_in_data_not_url_form"] != null) { 470 // _use_payload_in_data_not_url_form = opts["use_payload_in_data_not_url_form"]; 471 //} 472 if(opts["requestMethod"] != null) { 473 method = opts["requestMethod"]; 474 } 475 } 476 477 // sync or async? Generally, synchronous AJAX for set-meta operations, and asynchronous for get-meta ops 478 var metaServerCommand = (data["s1.a"] == null) ? data["a"] : data["s1.a"]; 479 if(metaServerCommand.indexOf("set-") != -1 || metaServerCommand.indexOf("remove-") != -1) { 480 _modifyingMeta = true; 481 async_setting = false; // for 'write' operations (set/remove meta), we force sequential processing of the internal operation. 482 483 // for meta modification operatons, should we make the method=POST?????? 484 // method = "POST"; 485 } 486 // check for any overrides by calling code that knows what it's doing 487 if (opts != null && opts["forceSync"] != null) { 488 async_setting = (!opts["forceSync"]); 489 } 490 491 if(_use_jQuery_ajax_not_gsajaxapi) { 492 if(method == "POST") { 493 _use_payload_in_data_not_url_form = true; 494 } // if GET, can use payload in URL form or in data form for jQuery AJAX 495 // to put it another way: can't do jQuery POST operations with payload in URL form 496 497 } else { // using gsajaxapi.js, which only accepts the payload in URL form, whether GET or POST 498 _use_payload_in_data_not_url_form = false; 499 } 500 501 // use the URL form or the data form to transmit the payload over AJAX? 502 // Payload in data form implies jQuery AJAX, not gsajaxapi calls, 503 // since we can't use gsajaxapi.js AJAX GET/POST calls without payload in URL form 504 if(_use_payload_in_data_not_url_form) { // using data payload to do AJAX (regardless of request method) 505 506 //method = "POST"; 507 508 // for get-meta operations, go directly through metadata-server.pl 509 // for set-meta ops, should go via GS3 authentication, which is off the GS3 library servlet 510 url = (_modifyingMeta) ? gs.xsltParams.library_name : "cgi-bin/metadata-server.pl"; 511 512 } else { // uses data encoded into URL, rather than a data structure. 513 data = null; // we're using the URL as payload, don't duplicate the payload to be transmitted into data 514 515 url = payload["url"]; // payload["url"] contains the URL + data encoded in URL form 516 // URL is already correct for get-meta vs meta-modification operations. 517 // For meta-modification ops, it will through GS3 authentication first rather than metadata-server.pl 518 519 } 520 521 // finally, can do the AJAX call 522 523 console.log("*** Away to call: " + url); 524 var ajaxResponse = async_setting ? "*** No response received yet, async ajax request" : null; 525 526 527 if(_use_jQuery_ajax_not_gsajaxapi) { 528 // ajax calls default to using method GET, we want to do POST operations for get-meta and set-meta requests 529 // since get-meta-array and especially set-meta-array can be large, e.g. for user comments. 530 $.ajax({url: url, async: async_setting, type: method, data: data}) 531 .success(function(response) { 532 ajaxResponse = response; 533 console.log("** (" + callingFunction + ") Response received from server: " + ajaxResponse); 534 535 //var xml = $.parseXML(response); 536 //console.log(xml); 537 538 if(responseFunction != null) { 539 540 responseFunction(response); 541 } 542 }) 543 .error(function() { 544 console.log("(" + callingFunction + ") Failed"); 545 }); 546 } 547 else { 548 // USES GSAJAXAPI.JS to do AJAX. In this case, the payload must be in URL form 549 550 var splitURL = url.split("?"); 551 url = splitURL[0]; // base URL 552 var params = splitURL[1]; // query-string 553 554 // Don't need to delete objects created with 'new' in JavaScript. Garbage collection will do it. 555 // http://stackoverflow.com/questions/4869712/new-without-delete-on-same-variable-in-javascript 556 var gsapi = new GSAjaxAPI(url); 557 558 // ajax calls default to using method GET, we want to do POST operations for get-meta and set-meta requests 559 // since get-meta-array and especially set-meta-array can be large, e.g. for user comments. 560 561 if(async_setting) { 562 gsapi.urlPostAsync(url, params, responseFunction); 563 } else { 564 ajaxResponse = gsapi.urlPostSync(url, params); 565 ajaxResponse = ajaxResponse; 566 } 567 568 console.log("*** (" + callingFunction + ") Response from server: " + ajaxResponse); 569 570 } 571 572 console.log("*** Finished ajax call to: " + url); 573 console.log("*** Got response: " + ajaxResponse); 574 575 return ajaxResponse; 576 } 577 578 // Prepare the payload (data package) to transmit to metadataserver.pl over AJAX. 579 // These next 2 functions prepare both the URL version of the payload and the data object version of 580 // of the payload. Then calling functions, and the callMetadataServer() function they call, will control 581 // and determine which of the two forms ultimately gets used. 582 // UNUSED: http://stackoverflow.com/questions/8648892/convert-url-parameters-to-a-javascript-object 583 function getBasicDataForMetadataServer(metaServerCommand, collection, site, documentID, metadataName, metamode, metadataValue, prevMetadataValue, metaPosition) { 584 585 // if we're doing set- or remove- metadata operations, 586 // then we need change the data params that will make up the query string 587 // to make sure we go through GS3's authentication 588 // 1. prefix meta names with s1, 589 // 2. use s1.collection for collectionName since c is a special param name for GS2Construct 590 // 3. Additional parameters for rerouting through Authentication: a=g&rt=r&ro=1&s=ModifyMetadata 591 592 var modifyingMeta = false; 593 var prefix = ""; 594 var colPropName = "c"; 595 var baseURL = "cgi-bin/metadata-server.pl?"; 596 597 // if we need authentication: 598 if(metaServerCommand.indexOf("set-") != -1 || metaServerCommand.indexOf("remove-") != -1) { 599 modifyingMeta = true; 600 prefix = "s1."; 601 colPropName = prefix+"collection"; // "s1.collection" 602 baseURL = gs.xsltParams.library_name + "?a=g&rt=r&ro=1&s=ModifyMetadata&"; 603 } 604 605 606 // 1. when using jQuery to POST, need to invoke AJAX with a data structure rather than a URL 607 var data = {}; 608 609 // customizable portion of ajax call 610 data[prefix+"a"] = metaServerCommand; 611 data[colPropName] = collection; 612 data[prefix+"site"] = site; 613 data[prefix+"d"] = documentID; 614 data[prefix+"metaname"] = metadataName; 615 data[prefix+"metapos"] = metadataPosition; 616 data[prefix+"metavalue"] = metadataValue; 617 data[prefix+"prevmetavalue"] = prevMetadataValue; 618 data[prefix+"metamode"] = metamode; 619 620 if(modifyingMeta) { 621 // fixed portion of url: add the a=g&rt=r&ro=1&s=ModifyMetadata part of the GS3 URL for 622 // going through authentication. Don't prefix "s1." to these! 623 data["a"] = "g"; 624 data["rt"] = "r"; 625 data["ro"] = "1"; 626 data["s"] = "ModifyMetadata"; 627 } 628 629 // 2. Construct the URL version of the metadata-server.pl operation: 630 // for GET requests, the URL can contain the data. 631 // Regular JavaScript AJAX code in gsajaxapi.js can also POST data in URL form, but not jQuery's .ajax(). 632 633 430 634 // If doing set- or remove- (not get-) metadata, then rewrite URLs to call GS2Construct's ModfiyMetadata service instead (which will ensure this only works when authenticated). 431 635 // From: … … 434 638 // <gs3server>/library?a=g&rt=r&ro=1&s=ModifyMetadata&s1.a=set-archives-metadata&s1.collection=smallcol&s1.site=localsite&s1.d=HASH01454f31011f6b6b26eaf8d7&s1.metaname=Title&s1.metavalue=Moo&s1.prevmetavalue=Blabla&s1.metamode=override 435 639 436 // if we're doing a set- or remove- metadata operations, then we'll be changing the URL to make sure we go through GS3's authentication 437 if(url.indexOf("set-") != -1 || url.indexOf("remove-") != -1) { 438 439 url = url.replace("&c=", "&collection="); // c is a special param name for GS2Construct 440 url = url.replace(/(&|\?)([^=]*=)/g, "$1"+"s1.$2"); // prefix param names with "s1." 441 url = url.replace("cgi-bin/metadata-server.pl?", gs.xsltParams.library_name + "?a=g&rt=r&ro=1&s=ModifyMetadata&"); 442 443 //console.log("@@@@@ URL is " + url); 444 445 async_setting = false; // for 'write' operations (set/remove meta), we force sequential processing of the internal operation. 446 447 } // otherwise, such as for get- metadata operation, we proceed as before, which will not require authentication 448 449 if (opts != null && opts["forceSync"] != null) { 450 async_setting = (!opts["forceSync"]); 451 } 452 453 console.log("Away to call: " + url); 454 var ajaxResponse = null; 455 456 $.ajax(url, {async: async_setting}) 457 .success(function(response) 458 { 459 console.log("(" + callingFunction + ") Response received from server: " + ajaxResponse); 460 461 ajaxResponse = response; 462 463 //var xml = $.parseXML(response); 464 //console.log(xml); 465 466 if(responseFunction != null) 467 { 468 469 responseFunction(response); 470 } 471 }) 472 .error(function() 473 { 474 console.log("(" + callingFunction + ") Failed"); 475 }); 476 477 console.log("Finished ajax call to: " + url); 478 479 console.log("Got response: " + ajaxResponse); 480 return ajaxResponse; 481 } 482 483 484 // No function overloading in JavaScript. Can pass a custom object, however, see 485 // http://stackoverflow.com/questions/456177/function-overloading-in-javascript-best-practices 486 function callMetadataServer(callingFunction, url, responseFunction, opts) 487 { 488 var async_setting = true; // Internal processing of 'read' operations (get meta) is not order dependent 489 490 // If doing set- or remove- (not get-) metadata, then rewrite URLs to call GS2Construct's ModfiyMetadata service instead (which will ensure this only works when authenticated). 491 // From: 492 // <gs3server>/cgi-bin/metadata-server.pl?a=set-archives-metadata&c=smallcol&site=localsite&d=HASH01454f31011f6b6b26eaf8d7&metaname=Title&metavalue=Moo&prevmetavalue=Blabla&metamode=override 493 // To: 494 // <gs3server>/library?a=g&rt=r&ro=1&s=ModifyMetadata&s1.a=set-archives-metadata&s1.collection=smallcol&s1.site=localsite&s1.d=HASH01454f31011f6b6b26eaf8d7&s1.metaname=Title&s1.metavalue=Moo&s1.prevmetavalue=Blabla&s1.metamode=override 495 496 // if we're doing a set- or remove- metadata operations, then we'll be changing the URL to make sure we go through GS3's authentication 497 if(url.indexOf("set-") != -1 || url.indexOf("remove-") != -1) { 498 499 url = url.replace("&c=", "&collection="); // c is a special param name for GS2Construct 500 url = url.replace(/(&|\?)([^=]*=)/g, "$1"+"s1.$2"); // prefix param names with "s1." 501 url = url.replace("cgi-bin/metadata-server.pl?", gs.xsltParams.library_name + "?a=g&rt=r&ro=1&s=ModifyMetadata&"); 502 503 //console.log("@@@@@ URL is " + url); 504 505 async_setting = false; // for 'write' operations (set/remove meta), we force sequential processing of the internal operation. 506 507 } // otherwise, such as for get- metadata operation, we proceed as before, which will not require authentication 508 509 if (opts != null) { 510 if(opts["forceSync"] != null) { 511 async_setting = (!opts["forceSync"]); 512 } 513 } 514 515 console.log("Away to call: " + url); 516 var ajaxResponse = "No response received yet, async ajax request"; 517 518 var splitURL = url.split("?"); 519 url = splitURL[0]; 520 var params = splitURL[1]; 521 var gsapi = new GSAjaxAPI(url); 522 523 // ajax calls default to using method GET, we want to do POST operations for get-meta and set-meta requests 524 // since get-meta-array and especially set-meta-array can be large, e.g. for user comments. 525 526 if(async_setting) { 527 gsapi.urlPostAsync(url, params, responseFunction); 528 } else { 529 ajaxResponse = gsapi.urlPostSync(url, params); 530 } 531 532 console.log("(" + callingFunction + ") Response received from server: " + ajaxResponse); 533 534 console.log("Finished ajax call to: " + url); 535 536 console.log("Got response: " + ajaxResponse); 537 return ajaxResponse; 538 } 539 640 var extraParams = ""; 641 642 if(metadataValue != null) { 643 extraParams += "&"+prefix+"metavalue=" + metadataValue; 644 } 645 646 if(metadataPosition != null) 647 { 648 extraParams += "&"+prefix+"metapos=" + metadataPosition; 649 } 650 651 if(prevMetadataValue != null) { 652 extraParams += "&"+prefix+"prevmetavalue=" + prevMetadataValue; 653 } 654 655 var url = baseURL + prefix+"a=" + metaServerCommand + "&"+colPropName+"=" + collection + "&"+prefix+"site=" + site + "&"+prefix+"d=" + documentID + "&"+prefix+"metaname=" + metadataName + extraParams + "&"+prefix+"metamode=" + metamode; 656 657 // 3. Return both the constructed url & data variants of the payload to be transmitted over ajax 658 var payload = { 659 url: url, 660 data: data 661 }; 662 663 return payload; 664 } 665 666 // See description for getBasicDataForMetadataServer() 667 function getComplexDataForMetadataServer(metaServerCommand, collection, site, docArray, metamode, where) { 668 669 var docArrayJSON = JSON.stringify(docArray); 670 671 // if we're doing set- or remove- metadata operations, 672 // then we need change the data params that will make up the query string 673 // to make sure we go through GS3's authentication 674 // 1. prefix meta names with s1, 675 // 2. use s1.collection for collectionName since c is a special param name for GS2Construct 676 // 3. Additional parameters for rerouting through Authentication: a=g&rt=r&ro=1&s=ModifyMetadata 677 678 var modifyingMeta = false; 679 var prefix = ""; 680 var colPropName = "c"; 681 var baseURL = "cgi-bin/metadata-server.pl?"; 682 683 // if we need authentication: 684 if(metaServerCommand.indexOf("set-") != -1 || metaServerCommand.indexOf("remove-") != -1) { 685 modifyingMeta = true; 686 prefix = "s1."; 687 colPropName = prefix+"collection"; // "s1.collection" 688 baseURL = gs.xsltParams.library_name + "?a=g&rt=r&ro=1&s=ModifyMetadata&"; 689 } 690 691 // 1. when using jQuery to POST, need to invoke AJAX with a data structure rather than a URL 692 var data = {}; 693 694 // customizable portion of ajax call 695 data[prefix+"a"] = metaServerCommand; 696 data[colPropName] = collection; 697 data[prefix+"site"] = site; 698 data[prefix+"json"] = docArrayJSON; 699 700 if(where != null) { 701 data[prefix+"where"] = where; 702 } 703 if (metamode!=null) { 704 data[prefix+"metamode"] = metamode; 705 } 706 707 if(modifyingMeta) { 708 // fixed portion of url: add the a=g&rt=r&ro=1&s=ModifyMetadata part of the GS3 URL for 709 // going through authentication. Don't prefix "s1." to these! 710 data["a"] = "g"; 711 data["rt"] = "r"; 712 data["ro"] = "1"; 713 data["s"] = "ModifyMetadata"; 714 } 715 716 717 // 2. URL for when doing AJAX in URL mode. GET with jQuery allows the data to be part of the URL, but 718 // not jQuery POST. But our regular JavaScript AJAX code in gsajaxapi.js allows GET and POST with URLs 719 // containing the data. 720 721 var params = prefix+"a=" + escape(metaServerCommand); //"a=set-metadata-array"; 722 if(where != null) { 723 params += "&"+prefix+"where=" + escape(where); // if where not specified, meta-server will default to setting index meta 724 //} else { 725 // params += "&"+prefix+"where=import|archives|index"; 726 } 727 params += "&"+colPropName+"="+escape(collection); 728 params += "&"+prefix+"site="+escape(site); 729 params += "&"+prefix+"json="+escape(docArrayJSON); 730 731 if (metamode!=null) { 732 params += "&"+prefix+"metamode=" + escape(metamode); 733 } 734 735 // 3. Return both the constructed url & data variants of the payload to be transmitted over ajax 736 var payload = { 737 url: baseURL + params, 738 data: data 739 }; 740 741 return payload; 742 } 540 743 541 744 /************************* … … 543 746 *************************/ 544 747 748 // callMetadataServerURLMode("setImportMetadata", "cgi-bin/metadata-server.pl?a=set-import-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue + "&prevmetavalue=" + prevMetadataValue + "&metamode=" + metamode, responseFunction); 749 545 750 gs.functions.setImportMetadata = function(collection, site, documentID, metadataName, metadataValue, prevMetadataValue, metamode, responseFunction) 546 { 547 callMetadataServer("setImportMetadata", "cgi-bin/metadata-server.pl?a=set-import-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue + "&prevmetavalue=" + prevMetadataValue + "&metamode=" + metamode, responseFunction); 751 { 752 753 callMetadataServer( 754 "setImportMetadata", 755 getBasicDataForMetadataServer("set-import-metadata", collection, site, documentID, metadataName, metamode, metadataValue, prevMetadataValue, null /*metapos*/), 756 responseFunction); 757 548 758 } 549 759 550 760 gs.functions.setArchivesMetadata = function(collection, site, documentID, metadataName, metadataPosition, metadataValue, prevMetadataValue, metamode, responseFunction) 551 761 { 552 if(metadataPosition != null) 553 { 554 callMetadataServer("setArchivesMetadata", "cgi-bin/metadata-server.pl?a=set-archives-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metapos=" + metadataPosition + "&metavalue=" + metadataValue + "&metamode=" + metamode, responseFunction); 555 } 556 else if(prevMetadataValue != null) 557 { 558 callMetadataServer("setArchivesMetadata", "cgi-bin/metadata-server.pl?a=set-archives-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue + "&prevmetavalue=" + prevMetadataValue + "&metamode=" + metamode, responseFunction); 559 } 560 else 561 { 562 callMetadataServer("setArchivesMetadata", "cgi-bin/metadata-server.pl?a=set-archives-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue + "&metamode=" + metamode, responseFunction); 563 } 762 if(metadataPosition != null) { 763 prevMetadataValue = null; // to force the same ultimate behaviour as in the old version of this code 764 } 765 766 callMetadataServer( 767 "setArchivesMetadata", 768 getBasicDataForMetadataServer("set-archives-metadata", collection, site, documentID, metadataName, metamode, metadataValue, prevMetadataValue, metadataPosition), 769 responseFunction); 770 564 771 } 565 772 566 773 gs.functions.setIndexMetadata = function(collection, site, documentID, metadataName, metadataPosition, metadataValue, prevMetadataValue, metamode, responseFunction) 567 774 { 568 if(metadataPosition != null) 569 { 570 callMetadataServer("setIndexMetadata", "cgi-bin/metadata-server.pl?a=set-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metapos=" + metadataPosition + "&metavalue=" + metadataValue + "&metamode=" + metamode, responseFunction); 571 } 572 else if(prevMetadataValue != null) 573 { 574 callMetadataServer("setIndexMetadata", "cgi-bin/metadata-server.pl?a=set-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue + "&prevmetavalue=" + prevMetadataValue + "&metamode=" + metamode, responseFunction); 575 } 775 if(metadataPosition != null) { 776 prevMetadataValue = null; // to force the same ultimate behaviour as in the old version of this code 777 } 778 779 // old version of this function would only call callMetadataServer if either metapos 780 // or prevMetaValue had a value. So sticking to the same behaviour in rewriting this function. 781 if(metadataPosition != null || prevMetadataValue != null) { 782 783 callMetadataServer( 784 "setIndexMetadata", 785 getBasicDataForMetadataServer("set-metadata", collection, site, documentID, metadataName, metamode, metadataValue, prevMetadataValue, metadataPosition), 786 responseFunction); 787 } 576 788 } 577 789 … … 583 795 for(var i = 0; i < nameArray.length; i++) 584 796 { 585 callMetadataServer(nameArray[i], "cgi-bin/metadata-server.pl?a=" + functionArray[i] + "&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue + "&metamode=" + metamode, responseFunction); 797 // previous version of this function did not allow setting metapos or prevMetavalue 798 // so leaving the behaviour the same along with function signature. 799 callMetadataServer( 800 nameArray[i], 801 getBasicDataForMetadataServer(functionArray[i], collection, site, documentID, metadataName, metamode, metadataValue, null /*prevMetadataValue*/, null /*metadataPosition*/), 802 responseFunction); 586 803 } 587 804 } … … 591 808 // separated by |. If null, it is assumed to be index which is the original default 592 809 // behaviour of calling set-metadata-array. E.g. where=import|archives|index 593 // THIS METHOD IS SYNCHRONOUS 810 // THIS METHOD IS SYNCHRONOUS by default. Set forceSync to false to override this default behaviour 594 811 gs.functions.setMetadataArray = function(collection, site, docArray, metamode, where, responseFunction, forceSync) 595 { 596 var docArrayJSON = JSON.stringify(docArray); 597 598 var params = "a=" + escape("set-metadata-array"); //"a=set-metadata-array"; 599 if(where != null) { 600 params += "&where=" + escape(where); // if where not specified, meta-server will default to setting index meta 601 //} else { 602 // params += "&where=import|archives|index"; 603 } 604 params += "&c="+escape(collection); 605 params += "&site="+escape(site); 606 params += "&json="+escape(docArrayJSON); 607 608 if (metamode!=null) { 609 params += "&metamode=" + escape(metamode); 610 } 812 { 813 814 var payload = getComplexDataForMetadataServer("set-metadata-array", collection, site, docArray, metamode, where); 611 815 612 816 // set operations are generally synchronous, but allow calling function to force ajax call … … 615 819 forceSync = true; 616 820 } 617 618 var response = callMetadataServer("Setting metadata in "+where, "cgi-bin/metadata-server.pl?"+params, responseFunction, {"forceSync": forceSync}); 619 821 822 //console.log("cgi-bin/metadata-server.pl?"+params); 823 824 var response = callMetadataServer("Setting metadata in "+where, payload, responseFunction, {"forceSync": forceSync, "requestMethod": "POST"}); 825 620 826 return response; 621 // return this.urlPostSync(mdserver,params); // gsajaxapi.js version for GS2622 827 } 623 828 … … 632 837 gs.functions.getMetadataArray = function(collection, site, docArray, where, responseFunction, forceSync) 633 838 { 634 var docArrayJSON = JSON.stringify(docArray); 635 636 var params = "a=" + escape("get-metadata-array"); //"a=set-metadata-array"; 637 if(where != null) { 638 params += "&where=" + escape(where); // if where not specified, meta-server will default to setting index meta 639 //} else { 640 // params += "&where=import|archives|index"; 641 } 642 params += "&c="+escape(collection); 643 params += "&site="+escape(site); 644 params += "&json="+escape(docArrayJSON); 645 839 var payload = getComplexDataForMetadataServer("get-metadata-array", collection, site, docArray, null /*metamode*/, where); 840 646 841 // get operations are generally asynchronous, but allow calling function to force ajax call 647 // to be synchronous or not. Default is synchronous, as it was for GS2842 // to be synchronous or not. Default for get-metadata-array is synchronous, as it was for GS2 648 843 if(forceSync == null) { 649 844 forceSync = true; … … 652 847 // http://stackoverflow.com/questions/456177/function-overloading-in-javascript-best-practices 653 848 // https://www.w3schools.com/js/js_objects.asp 654 var response = callMetadataServer("Getting metadata from "+where, "cgi-bin/metadata-server.pl?"+params, responseFunction, {"forceSync":forceSync});849 var response = callMetadataServer("Getting metadata from "+where, payload, responseFunction, {"forceSync":forceSync, "requestMethod": "POST"}); 655 850 656 851 return response; 657 //return this.urlPostSync(mdserver,params); // gsajaxapi.js version for GS2658 852 } 659 853 … … 661 855 gs.functions.getImportMetadata = function(collection, site, documentID, metadataName, responseFunction) 662 856 { 663 var url = "cgi-bin/metadata-server.pl?a=get-import-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName; 664 callMetadataServer("getImportMetadata", url, function(responseText) 665 { 857 var payload = getBasicDataForMetadataServer("get-import-metadata", collection, site, documentID, metadataName); 858 callMetadataServer("getImportMetadata", payload, function(responseText) { 666 859 var metadata = new GSMetadata(collection, site, documentID, metadataName, null, null, responseText); 667 860 if(responseFunction != null) … … 672 865 } 673 866 674 gs.functions.getArchivesMetadata = function(collection, site, documentID, metadataName, metadataPosition, responseFunction) 675 { 676 var url = "cgi-bin/metadata-server.pl?a=get-archives-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName; 677 if(metadataPosition != null) 678 { 679 url += "&metapos=" + metadataPosition; 680 } 681 682 callMetadataServer("getArchivesMetadata", url, function(responseText) 683 { 684 var metadata = new GSMetadata(collection, site, documentID, metadataName, null, metadataPosition, responseText); // indexPos, archivesPos, metaval (responseText) 685 if(responseFunction != null) 686 { 687 responseFunction(metadata); 688 } 689 }); 867 gs.functions.getArchivesMetadata = function(collection, site, documentID, metadataName, metadataPosition, responseFunction) 868 { 869 var payload = getBasicDataForMetadataServer("get-archives-metadata", collection, site, documentID, metadataName, null /*metamode*/, null /*metavalue*/, null /*prevmetavalue*/, metadataPosition); 870 871 callMetadataServer("getArchivesMetadata", payload, function(responseText) { 872 var metadata = new GSMetadata(collection, site, documentID, metadataName, null, metadataPosition, responseText); // indexPos, archivesPos, metaval (responseText) 873 if(responseFunction != null) 874 { 875 responseFunction(metadata); 876 } 877 }); 690 878 } 691 879 692 880 gs.functions.getIndexMetadata = function(collection, site, documentID, metadataName, metadataPosition, responseFunction) 693 881 { 694 var url = "cgi-bin/metadata-server.pl?a=get-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName; 695 if(metadataPosition != null) 696 { 697 url += "&metapos=" + metadataPosition; 698 } 699 700 callMetadataServer("getIndexMetadata", url, function(responseText) 701 { 702 var metadata = new GSMetadata(collection, site, documentID, metadataName, metadataPosition, null, responseText); // indexPos, archivesPos, metaval (responseText) 703 704 if(responseFunction != null) 705 { 706 responseFunction(metadata); 707 } 708 }); 882 var payload = getBasicDataForMetadataServer("get-metadata", collection, site, documentID, metadataName, null /*metamode*/, null /*metavalue*/, null /*prevmetavalue*/, metadataPosition); 883 884 callMetadataServer("getIndexMetadata", payload, function(responseText) { 885 var metadata = new GSMetadata(collection, site, documentID, metadataName, metadataPosition, null, responseText); // indexPos, archivesPos, metaval (responseText) 886 887 if(responseFunction != null) 888 { 889 responseFunction(metadata); 890 } 891 }); 709 892 } 710 893 … … 715 898 gs.functions.removeImportMetadata = function(collection, site, documentID, metadataName, metadataValue, responseFunction) 716 899 { 717 callMetadataServer("removeImportMetadata", "cgi-bin/metadata-server.pl?a=remove-import-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metavalue=" + metadataValue + "&metaname=" + metadataName, responseFunction); 900 callMetadataServer( 901 "removeImportMetadata", 902 getBasicDataForMetadataServer("remove-import-metadata", collection, site, documentID, metadataName, null /*metamode*/, metadataValue, null /*prevmetavalue*/, null /*metapos*/), 903 responseFunction); 718 904 } 719 905 720 906 gs.functions.removeArchivesMetadata = function(collection, site, documentID, metadataName, metadataPosition, metadataValue, responseFunction) 721 { 722 if(metadataPosition != null) 723 {724 callMetadataServer("removeArchiveMetadata", "cgi-bin/metadata-server.pl?a=remove-archives-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metapos=" + metadataPosition, responseFunction); 725 } 726 else if(metadataValue != null) 727 {728 callMetadataServer("removeArchiveMetadata", "cgi-bin/metadata-server.pl?a=remove-archives-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metavalue=" + metadataValue + "&metaname=" + metadataName, responseFunction);729 }907 { 908 if(metadataPosition != null) { 909 metadataValue = null; // retaining behaviour of previous version of this function removeArchivesMetadata() 910 } 911 912 callMetadataServer( 913 "removeArchiveMetadata", 914 getBasicDataForMetadataServer("remove-archives-metadata", collection, site, documentID, metadataName, null /*metamode*/, metadataValue, null /*prevmetavalue*/, metadataPosition), 915 responseFunction); 730 916 } 731 917 732 918 gs.functions.removeIndexMetadata = function(collection, site, documentID, metadataName, metadataPosition, metadataValue, responseFunction) 733 919 { 734 if(metadataPosition != null) 735 {736 callMetadataServer("removeIndexMetadata", "cgi-bin/metadata-server.pl?a=remove-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metapos=" + metadataPosition, responseFunction); 737 } 738 else if(metadataValue != null) 739 {740 callMetadataServer("removeIndexMetadata", "cgi-bin/metadata-server.pl?a=remove-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metavalue=" + metadataValue + "&metaname=" + metadataName, responseFunction);741 }920 if(metadataPosition != null) { 921 metadataValue = null; // retaining behaviour of previous version of this function removeIndexMetadata() 922 } 923 924 callMetadataServer( 925 "removeIndexMetadata", 926 getBasicDataForMetadataServer("remove-metadata", collection, site, documentID, metadataName, null /*metamode*/, metadataValue, null /*prevmetavalue*/, metadataPosition), 927 responseFunction); 742 928 } 743 929 … … 749 935 for(var i = 0; i < nameArray.length; i++) 750 936 { 751 callMetadataServer(nameArray[i], "cgi-bin/metadata-server.pl?a=" + functionArray[i] + "&c=" + collection + "&site=" + site + "&d=" + documentID + "&metavalue=" + metadataValue + "&metaname=" + metadataName, responseFunction); 752 } 753 } 937 callMetadataServer( 938 nameArray[i], 939 getBasicDataForMetadataServer(functionArray[i], collection, site, documentID, metadataName, null /*metamode*/, metadataValue, null /*prevmetavalue*/, null /*metapos*/), 940 responseFunction); 941 } 942 } -
main/trunk/greenstone3/web/interfaces/default/js/user_comments.js
r31543 r31547 77 77 } 78 78 79 function loadedUserComments( xmlHttpObj)79 function loadedUserComments(data) 80 80 { 81 81 // don't bother displaying comments if we're not on a document page … … 88 88 } 89 89 90 var json_result_str = xmlHttpObj.responseText; 90 // data is xmlHttpRequest Object if gsajaxapi is used for the ajax call. 91 // And data is a string if jQuery AJAX was used. 92 // Using JavaScript's feature sensing to detect which of the two we're dealing with: 93 var json_result_str = (data.responseText) ? data.responseText : data; 94 // http://stackoverflow.com/questions/6286542/how-can-i-check-if-a-var-is-a-string-in-javascript 95 //var json_result_str = (typeof data !== 'string') ? data.responseText : data; 96 //alert("Type of ajax get result: " + typeof (data)); 97 91 98 // alert(json_result_str); 92 99 console.log("Got to display: " + json_result_str); … … 280 287 281 288 //var result = gs.functions.setMetadataArray(gs.variables["c"], gs.variables["site"], docArray, "accumulate", "import|archives|index"); 282 gs.functions.setMetadataArray(gs.variables["c"], gs.variables["site"], docArray, "accumulate", "import|archives|index", function( xmlHttpObj) { return doneUpdatingMetatada(xmlHttpObj, _username, _timestamp, _comment); }, false); // false for asynchronous,289 gs.functions.setMetadataArray(gs.variables["c"], gs.variables["site"], docArray, "accumulate", "import|archives|index", function(ajaxResult) { return doneUpdatingMetatada(ajaxResult, _username, _timestamp, _comment); }, false); // false for asynchronous, 283 290 // this is ok since we're disabling the comment submit button, so no further set-meta-array calls can be 284 291 // made until the ajax call returns and the callback is called which re-enables the submit button … … 289 296 } 290 297 291 function doneUpdatingMetatada( xmlHttpObj, _username, _timestamp, _comment)298 function doneUpdatingMetatada(data, _username, _timestamp, _comment) 292 299 { 293 var result = xmlHttpObj.responseText; 300 301 // data is xmlHttpRequest Object if gsajaxapi is used for the ajax call. 302 // And data is a string if jQuery AJAX was used. 303 // Using JavaScript's feature sensing to detect which of the two we're dealing with: 304 var result = (data.responseText) ? data.responseText : data; 305 // http://stackoverflow.com/questions/6286542/how-can-i-check-if-a-var-is-a-string-in-javascript 306 //var result = (typeof data !== 'string') ? data.responseText : data; 307 // alert("Type of ajax set result: " + typeof(data)); 308 294 309 //alert("Received post response to setMeta: " + result); // just the HTML page 295 310
Note:
See TracChangeset
for help on using the changeset viewer.