Ignore:
Timestamp:
2017-06-26T12:15:10+12:00 (7 years ago)
Author:
kjdon
Message:

trying to make document editing javascript more easy to follow. document_scripts now contains no editing functionality. Content editing (metadata and text) is now in documentedit_scripts.js, which also uses documentedit_scripts_util.js. documentmaker_scripts is for the functionality where sections are moved around?? not sure, as we have never got it working. this also uses documentedit_scripts_util.js (which was just renamed from documentmaker_scripts_util.js)

Location:
main/trunk/greenstone3/web/interfaces/default/js
Files:
1 added
2 edited
1 moved

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/web/interfaces/default/js/document_scripts.js

    r31740 r31748  
     1/** Javascript file for viewing documents */
     2
    13var _imageZoomEnabled = false;
    24// Choose which types of filtering you want: sectionnum, or sectiontitle or both
     
    810var _linkCellMap = new Array();
    911var _onCells = new Array();
    10 
    11 /* some vars for document editing */
    12 /* if true, will look through all the metadata for the document, and add each namespace into the list of metadata sets. If set to false, will only add in the ones defined in setStaticMetadataSets function (defined below) - override this function to make a custom list of sets */
    13 var dynamic_metadata_set_list = true;
    14 /* if true, will make the editing controls stay visible even on page scrolling */
    15 var keep_editing_controls_visible = true;
    16 /* Here you can choose which save buttons you like. Choose from 'save', 'rebuild', 'saveandrebuild' */
    17 var save_and_rebuild_buttons = ["saveandrebuild"];
    18 //var save_and_rebuild_buttons = ["save", "rebuild", "saveandrebuild"];
    1912
    2013
     
    2417var editableLastStates = new Array();
    2518
    26 /* What kind of metadata element selection do we provide?
    27    plain: just a text input box
    28    fixedlist: a drop down menu with a fixed list of options (provided by the availableMetadataElements list)
    29    autocomplete: a text input box with a list of suggestions to choose from (provided by the availableMetadataElements list). Allows additional input other than the fixed list
    30 */
    31 var new_metadata_field_input_type = "plain";
    32 /* Metadata elements to be used in the fixedlist/autocomplete options above */
    33 var availableMetadataElements = ["dc.Title", "dc.Subject"];
    34 /* metadata elements that have a list of values/suggestions */
    35 var autocompleteMetadata = new Array();
    36 /* for each metadata element specified here, one should provide an array of values. The name is the meta_name + "_values", but you must strip . and _ from the name.
    37 for example
    38 var autocompleteMetadata = ["dc.Subject"];
    39 var dcSubject_values = ["Kings", "Queens", "others"];
    40 */
    4119
    4220/********************
     
    11821160}
    11831161
    1184 /************************
    1185 *    CHANGES SCRIPTS    *
    1186 ************************/
    1187 
    1188 function addCKEEditableState(evt,stateArray)
    1189 {
    1190     // Event->Editor->CKE DOM Inline Element that editor was for->underlying jquery element
    1191     element = evt.editor.element.$;
    1192     nodeText = element.innerHTML;
    1193          stateArray.push({
    1194              editableNode : element,
    1195              initHTML : nodeText
    1196          });
    1197    
    1198 }
    1199 function addEditableState(editable,stateArray)
    1200 {
    1201 
    1202     if(editable.tagName == 'TEXTAREA')
    1203     {
    1204         nodeText = editable.value;
    1205     }
    1206     else
    1207     {
    1208         nodeText = editable.innerHTML;
    1209     }
    1210 
    1211         stateArray.push({
    1212                 editableNode : editable,
    1213                 initHTML : nodeText
    1214         });
    1215 
    1216 }
    1217 
    1218 function getLastEditableStates()
    1219 {   
    1220     editableLastStates = [];
    1221         $(".sectionText").each(function(){addEditableState(this,editableLastStates);});
    1222         $(".metaTableCellArea").each(function(){addEditableState(this,editableLastStates);});
    1223 
    1224 }
    1225 
    1226 function changesToUpdate()
    1227 {
    1228     var resultArray = new Array();
    1229     getLastEditableStates();
    1230     for (var j in editableLastStates)
    1231     {   
    1232         if (isNodeChanged(editableLastStates[j]))
    1233         {
    1234             resultArray.push(editableLastStates[j].editableNode);
    1235         }
    1236     }
    1237     return resultArray;
    1238 }
    1239 
    1240 
    1241 function isNodeChanged(StateToCheck){
    1242     for (var i in editableInitStates)
    1243     {
    1244         if ((StateToCheck.editableNode === editableInitStates[i].editableNode)) {
    1245         if ( StateToCheck.initHTML === editableInitStates[i].initHTML )
    1246         {
    1247             return false;
    1248         }
    1249         return true;
    1250         }
    1251    
    1252     }
    1253     return true;
    1254 }
    1255 /************************
    1256 * METADATA EDIT SCRIPTS *
    1257 ************************/
    1258 
    1259 function addEditMetadataLink(cell)
    1260 {
    1261     cell = $(cell);
    1262     var id = cell.attr("id").substring(6);
    1263     var metaTable = gs.jqGet("meta" + id);
    1264 
    1265     var row = cell.parent();
    1266     var newCell = $("<td>", {"style": "font-size:0.7em; padding:0px 10px", "class": "editMetadataButton"});
    1267     var linkSpan = $("<span>", {"class": "ui-state-default ui-corner-all", "style": "padding: 2px; float:left;"});
    1268    
    1269         var linkLabel = $("<span>"+gs.text.de.edit_metadata+"</span>");
    1270     var linkIcon = $("<span>", {"class": "ui-icon ui-icon-folder-collapsed"});
    1271     newCell.linkIcon = linkIcon;
    1272     newCell.linkLabel = linkLabel;
    1273    
    1274     var uList = $("<ul>", {"style": "outline: 0 none; margin:0px; padding:0px;"});
    1275     var labelItem = $("<li>", {"style": "float:left; list-style:none outside none;"});
    1276     var iconItem = $("<li>", {"style": "float:left; list-style:none outside none;"});
    1277 
    1278     uList.append(iconItem);
    1279     uList.append(labelItem);
    1280     labelItem.append(linkLabel);
    1281     iconItem.append(linkIcon);
    1282    
    1283     var newLink = $("<a>", {"href": "javascript:;"});
    1284     newLink.click(function()
    1285     {
    1286         if(metaTable.css("display") == "none")
    1287         {
    1288             linkLabel.html(gs.text.de.hide_metadata);
    1289             linkIcon.attr("class", "ui-icon ui-icon-folder-open");
    1290             metaTable.css("display", "block");
    1291             metaTable.metaNameField.css("display", "inline");
    1292             metaTable.addRowButton.css("display", "inline");
    1293         }
    1294         else
    1295         {
    1296             linkLabel.html(gs.text.de.edit_metadata);
    1297             linkIcon.attr("class", "ui-icon ui-icon-folder-collapsed");
    1298             metaTable.css("display", "none");
    1299             metaTable.metaNameField.css("display", "none");
    1300             metaTable.addRowButton.css("display", "none");
    1301         }
    1302     });
    1303 
    1304     newLink.append(uList);
    1305     linkSpan.append(newLink);
    1306     newCell.append(linkSpan);
    1307     row.append(newCell);
    1308    
    1309     addFunctionalityToTable(metaTable);
    1310     metaTable.metaNameField.css("display", "none");
    1311     metaTable.addRowButton.css("display", "none");
    1312 }
    1313 
    1314 function setEditingFeaturesVisible(visible)
    1315 {
    1316     if(visible)
    1317     {
    1318         $("#editContentButton").html(gs.text.de.hide_editor);
    1319         $("#editContentButtonDiv").attr("class", "ui-state-default ui-corner-all");
    1320     }
    1321     else
    1322     {
    1323         $("#editContentButton").html(gs.text.de.edit_content);
    1324         $("#editContentButtonDiv").attr("class", "");
    1325     }
    1326    
    1327     var visibility = (visible ? "" : "none");
    1328     $("#metadataListLabel, #metadataSetList").css("display", visibility);
    1329    
    1330     $(".editMetadataButton").each(function()
    1331     {
    1332         $(this).css("display", visibility);
    1333         $(this.linkLabel).html(gs.text.de.edit_metadata);
    1334         $(this.linkIcon).attr("class", "ui-icon ui-icon-folder-collapsed");
    1335     });
    1336    
    1337     $("table").each(function()
    1338     {
    1339         if($(this).attr("id") && $(this).attr("id").search(/^meta/) != -1)
    1340         {
    1341             $(this).css("display", "none");
    1342             $(this.metaNameField).css("display", "none");
    1343             $(this.addRowButton).css("display", "none");
    1344         }
    1345     });
    1346 }
    1347 
    1348 /* override this function in other interface/site/collection if you want
    1349    a different set of metadata sets
    1350   Use in conjunction with the dynamic_metadata_set_list variable. */
    1351 function setStaticMetadataSets(list) {
    1352   addOptionToList(list, "All", gs.text.de.all_metadata);
    1353 }
    1354 
    1355 function readyPageForEditing()
    1356 {
    1357     CKEDITOR.on('instanceReady', function(evt) {
    1358     addCKEEditableState(evt,editableInitStates);
    1359     });
    1360 
    1361     if($("#metadataSetList").length)
    1362     {
    1363         var setList = $("#metadataSetList");
    1364         if(!setList.css("display") || setList.css("display") == "")
    1365         {
    1366             setEditingFeaturesVisible(false);
    1367         }
    1368         else
    1369         {
    1370             setEditingFeaturesVisible(true);
    1371         }
    1372         return;
    1373     }
    1374 
    1375     $("#editContentButton").html(gs.text.de.hide_editor);
    1376     //wait for 0.5 sec to let ckeditor up
    1377     //setTimeout(function(){ $(".sectionText").each(function(){addEditableState(this,editableInitStates);}); }, 500);   
    1378     var editBar = $("#editBarLeft");
    1379    
    1380     var visibleMetadataList = $("<select>", {"id": "metadataSetList", "class": "ui-state-default"});
    1381     setStaticMetadataSets(visibleMetadataList);
    1382 
    1383     var metadataListLabel = $("<span>", {"id": "metadataListLabel", "style": "margin-left:20px;"});
    1384     metadataListLabel.html(gs.text.de.visible_metadata);
    1385     editBar.append(metadataListLabel);
    1386     editBar.append(visibleMetadataList);
    1387     visibleMetadataList.change(onVisibleMetadataSetChange);
    1388     editBar.append("<br>");
    1389     for (var i=0; i< save_and_rebuild_buttons.length; i++) {
    1390       var button_type = save_and_rebuild_buttons[i];
    1391       if (button_type == "save") {
    1392         var saveButton = $("<button>", {"id": "saveButton", "class": "ui-state-default ui-corner-all"});
    1393         saveButton.click(save);
    1394         saveButton.html(gs.text.de.save);
    1395         editBar.append(saveButton);
    1396       } else if(button_type == "rebuild") {
    1397         var rebuildButton = $("<button>", {"id": "rebuildButton", "class": "ui-state-default ui-corner-all"});
    1398         rebuildButton.click(rebuildCurrentCollection);
    1399         rebuildButton.html(gs.text.de.rebuild);
    1400         editBar.append(rebuildButton);
    1401       } else if (button_type == "saveandrebuild") {
    1402         var saveAndRebuildButton = $("<button>", {"id": "saveAndRebuildButton", "class": "ui-state-default ui-corner-all"});
    1403         saveAndRebuildButton.click(saveAndRebuild);
    1404         saveAndRebuildButton.html(gs.text.de.saverebuild);
    1405         editBar.append(saveAndRebuildButton);
    1406 
    1407       }
    1408     }
    1409     var statusBarDiv = $("<div>");
    1410     editBar.append(statusBarDiv);
    1411     _statusBar = new StatusBar(statusBarDiv[0]);
    1412    
    1413     var titleDivs = $(".sectionTitle");
    1414     for(var i = 0; i < titleDivs.length; i++)
    1415     {
    1416         addEditMetadataLink(titleDivs[i]);
    1417     }
    1418    
    1419     _baseURL = gs.xsltParams.library_name;
    1420     onVisibleMetadataSetChange(); // make sure that the selected item in the list is active
    1421 }
    1422 
    1423 // override the one in documentmaker_scripts_util
    1424 // currently not used if other one is present. need to get the js include order right
    1425 function enableSaveButtons(enabled) {
    1426   if (enabled) {
    1427     $("#saveButton, #rebuildButton, #saveAndRebuildButton").removeAttr("disabled");
    1428   } else {
    1429     $("#saveButton, #rebuildButton, #saveAndRebuildButton").attr("disabled", "disabled");
    1430   }
    1431 }
    1432 
    1433 /* this is a cut down version of save() from documentmaker_scripts_util.js
    1434  going back to using save, will delete this once everything working*/
    1435 function saveMetadataChangesOld() {
    1436 
    1437   console.log("Saving metadata changes");
    1438  
    1439   // get collection name
    1440   var collection = gs.cgiParams.c;;
    1441 
    1442   // get document id
    1443   var docID = gs.cgiParams.d;
    1444 
    1445   var metadataChanges = new Array();
    1446   if (_deletedMetadata.length > 0) {
    1447 
    1448     for(var i = 0; i < _deletedMetadata.length; i++) {
    1449      
    1450       var currentRow = _deletedMetadata[i];
    1451      
    1452       //Get metadata name
    1453       var cells = currentRow.getElementsByTagName("TD");
    1454       var nameCell = cells[0];
    1455       var name = nameCell.innerHTML;
    1456       var valueCell = cells[1];
    1457       var value = valueCell.innerHTML;
    1458       metadataChanges.push({type:'delete', docID:docID, name:name, value:value});
    1459       removeFromParent(currentRow);
    1460     }
    1461   }
    1462 
    1463   /*var changes = null;
    1464     //var changes = de.Changes.getChangedEditableSections();
    1465   for(var i = 0; i < changes.length; i++) {
    1466    
    1467     var changedElem = changes[i];
    1468        
    1469     //Get metadata name
    1470     var row = changedElem.parentNode;
    1471     var cells = row.getElementsByTagName("TD");
    1472     var nameCell = cells[0];
    1473     var name = nameCell.innerHTML;
    1474     var value = changedElem.innerHTML;
    1475     value = value.replace(/&nbsp;/g, " ");
    1476    
    1477     var orig = changedElem.originalValue;
    1478     if (orig) {
    1479       orig = orig.replace(/&nbsp;/g, " ");
    1480     }
    1481     metadataChanges.push({collection:collection, docID:docID, name:name, value:value, orig:orig});
    1482     changedElem.originalValue = changedElem.innerHTML;
    1483    
    1484   }
    1485 */
    1486   if (metadataChanges.length ==0) {
    1487       console.log(gs.text.de.no_changes);
    1488     return;
    1489   }
    1490 
    1491   var processChangesLoop = function(index)
    1492     {
    1493       var change = metadataChanges[index];
    1494      
    1495       var callbackFunction;
    1496       if(index + 1 == metadataChanges.length)
    1497     {
    1498       callbackFunction = function(){console.log("Completed saving metadata changes. You must rebuild the collection for the changes to take effect.");};
    1499     }
    1500       else
    1501     {
    1502       callbackFunction = function(){processChangesLoop(index + 1)};
    1503     }
    1504       if (change.type == "delete") {
    1505     gs.functions.removeArchivesMetadata(collection, gs.xsltParams.site_name, change.docID, change.name, null, change.value, function(){callbackFunction();});
    1506       } else {
    1507     if(change.orig)
    1508       {
    1509         gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, change.orig, "override", function(){callbackFunction();});
    1510       }
    1511     else
    1512       {
    1513         gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, null, "accumulate", function(){callbackFunction();});
    1514       }
    1515       }
    1516     }
    1517   processChangesLoop(0);
    1518   /* need to clear the changes from the page */
    1519   while (_deletedMetadata.length>0) {
    1520     _deletedMetadata.pop();
    1521   }
    1522    
    1523 }
    1524 
    1525 
    1526 
    15271162
    15281163
  • main/trunk/greenstone3/web/interfaces/default/js/documentedit_scripts_util.js

    r31747 r31748  
     1/** Javascript file containing useful functions used by both documentedit_scripts.js and documentmaker_scripts.js */
     2
     3
    14//Some "constants" to match the server constants
    25var SUCCESS = 1;
     
    69var COMPLETED = 11;
    710var HALTED = 12;
     11
     12var _transactions = new Array();
     13var _collectionsToBuild = new Array();
     14var _allContents = new Array();
     15var _deletedSections = new Array();
     16var _deletedMetadata = new Array();
     17var _undoOperations = new Array();
     18var _baseURL;
     19var _statusBar;
     20var _metadataSetList = new Array();
    821
    922function encodeDelimiters(meta_value) {
  • main/trunk/greenstone3/web/interfaces/default/js/documentmaker_scripts.js

    r29861 r31748  
    1 var _transactions = new Array();
    2 var _collectionsToBuild = new Array();
    3 var _allContents = new Array();
     1/** Javascript file for the document maker, which is where you can split documents up etc. Not used at the moment until we work out exactly what it does. */
     2/** requires documentedit_scripts_util.js and documentmaker_scripts_util.js */
     3/** does it also need documentedit_scripts.js?? */
     4
     5
     6//var _transactions = new Array();
     7//var _collectionsToBuild = new Array();
     8//var _allContents = new Array();
    49var _idCounter = 0;
    510var _indexCounter = 0;
    6 var _deletedSections = new Array();
    7 var _deletedMetadata = new Array();
    8 var _undoOperations = new Array();
    9 var _baseURL;
    10 var _statusBar;
    11 var _metadataSetList = new Array();
     11//var _deletedSections = new Array();
     12//var _deletedMetadata = new Array();
     13//var _undoOperations = new Array();
     14//var _baseURL;
     15//var _statusBar;
     16//var _metadataSetList = new Array();
    1217
    1318function initDocumentMaker()
Note: See TracChangeset for help on using the changeset viewer.