Changeset 29173

Show
Ignore:
Timestamp:
07.08.2014 13:06:38 (5 years ago)
Author:
kjdon
Message:

document contnet editing stuff: making the visible metadata set list customizable, keeping the editing controls on the page even when scrolling, splitting the save button into save and rebuild, and allowing user choice over which buttons they have

Files:
1 modified

Legend:

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

    r28279 r29173  
    22var _linkCellMap = new Array(); 
    33var _onCells = new Array(); 
     4 
     5/* some vars for document editing */ 
     6/* 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 */ 
     7var dynamic_metadata_list = true; 
     8/* if true, will make the editing controls stay visible even on page scrolling */ 
     9var keep_editing_controls_visible = true; 
     10/* Here you can choose which save buttons you like. Choose from 'save', 'rebuild', 'saveandrebuild' */ 
     11var save_and_rebuild_buttons = ["saveandrebuild"]; 
    412 
    513/******************** 
     
    11241132    { 
    11251133        $("#editContentButton").html("Hide editor"); 
     1134        $("#editContentButtonDiv").attr("class", "ui-state-default ui-corner-all"); 
    11261135    } 
    11271136    else 
    11281137    { 
    11291138        $("#editContentButton").html("Edit content"); 
     1139        $("#editContentButtonDiv").attr("class", ""); 
    11301140    } 
    11311141     
     
    11511161} 
    11521162 
     1163/* override this function in other interface/site/collection if you want 
     1164   a different set of metadata sets  
     1165  Use in conjunction with the dynamic_metadata_list variable. */ 
     1166function setStaticMetadataSets(list) { 
     1167  addMetaSetToList(list, "All"); 
     1168} 
     1169 
    11531170function readyPageForEditing() 
    11541171{ 
     1172 
    11551173    if($("#metadataSetList").length) 
    11561174    { 
     
    11721190     
    11731191    var editBar = $("#editBarLeft"); 
    1174  
    1175     var saveButton = $("<button>", {"id": "saveButton", "class": "ui-state-default ui-corner-all"}); 
    1176     saveButton.click(save); 
    1177     saveButton.html("Save changes"); 
    1178     editBar.append(saveButton); 
    1179      
    11801192     
    11811193    var visibleMetadataList = $("<select>", {"id": "metadataSetList"}); 
    1182     var allOption = $("<option>All</option>"); 
    1183     visibleMetadataList.append(allOption); 
     1194    setStaticMetadataSets(visibleMetadataList); 
    11841195 
    11851196    var metadataListLabel = $("<span>", {"id": "metadataListLabel", "style": "margin-left:20px;"}); 
     
    11881199    editBar.append(visibleMetadataList); 
    11891200    visibleMetadataList.change(onVisibleMetadataSetChange); 
    1190      
     1201    editBar.append("<br>"); 
     1202    for (var i=0; i< save_and_rebuild_buttons.length; i++) { 
     1203      var button_type = save_and_rebuild_buttons[i]; 
     1204      if (button_type == "save") { 
     1205        var saveButton = $("<button>", {"id": "saveButton", "class": "ui-state-default ui-corner-all"}); 
     1206        saveButton.click(saveMetadataChanges); 
     1207        saveButton.html("Save changes"); 
     1208        editBar.append(saveButton); 
     1209      } else if(button_type == "rebuild") { 
     1210        var rebuildButton = $("<button>", {"id": "rebuildButton", "class": "ui-state-default ui-corner-all"}); 
     1211        rebuildButton.click(rebuildCollection); 
     1212        rebuildButton.html("Rebuild"); 
     1213        editBar.append(rebuildButton); 
     1214      } else if (button_type == "saveandrebuild") { 
     1215        var saveAndRebuildButton = $("<button>", {"id": "saveAndRebuildButton", "class": "ui-state-default ui-corner-all"}); 
     1216        saveAndRebuildButton.click(save); 
     1217        saveAndRebuildButton.html("Save and Rebuild"); 
     1218        editBar.append(saveAndRebuildButton); 
     1219 
     1220      } 
     1221    } 
    11911222    var statusBarDiv = $("<div>"); 
    11921223    editBar.append(statusBarDiv); 
     
    12021233} 
    12031234 
     1235 
     1236/* this is a cut down version of save() from documentmaker_scripts_util.js */ 
     1237function saveMetadataChanges() { 
     1238 
     1239  console.log("Saving metadata changes"); 
     1240  
     1241  // get collection name 
     1242  var collection = gs.cgiParams.c;; 
     1243 
     1244  // get document id 
     1245  var docID = gs.cgiParams.d; 
     1246 
     1247  var metadataChanges = new Array(); 
     1248  if (_deletedMetadata.length > 0) { 
     1249 
     1250    for(var i = 0; i < _deletedMetadata.length; i++) { 
     1251       
     1252      var currentRow = _deletedMetadata[i]; 
     1253       
     1254      //Get metadata name 
     1255      var cells = currentRow.getElementsByTagName("TD"); 
     1256      var nameCell = cells[0]; 
     1257      var name = nameCell.innerHTML; 
     1258      var valueCell = cells[1]; 
     1259      var value = valueCell.innerHTML; 
     1260      metadataChanges.push({type:'delete', docID:docID, name:name, value:value}); 
     1261      removeFromParent(currentRow); 
     1262    } 
     1263  } 
     1264 
     1265  var changes = de.Changes.getChangedEditableSections(); 
     1266  for(var i = 0; i < changes.length; i++) { 
     1267     
     1268    var changedElem = changes[i]; 
     1269         
     1270    //Get metadata name 
     1271    var row = changedElem.parentNode; 
     1272    var cells = row.getElementsByTagName("TD"); 
     1273    var nameCell = cells[0]; 
     1274    var name = nameCell.innerHTML; 
     1275    var value = changedElem.innerHTML; 
     1276    value = value.replace(/&nbsp;/g, " "); 
     1277     
     1278    var orig = changedElem.originalValue; 
     1279    if (orig) { 
     1280      orig = orig.replace(/&nbsp;/g, " "); 
     1281    } 
     1282    metadataChanges.push({collection:collection, docID:docID, name:name, value:value, orig:orig}); 
     1283    changedElem.originalValue = changedElem.innerHTML; 
     1284     
     1285  } 
     1286 
     1287  if (metadataChanges.length ==0) { 
     1288    console.log ("... No changes detected. "); 
     1289    return; 
     1290  } 
     1291 
     1292  var processChangesLoop = function(index) 
     1293    { 
     1294      var change = metadataChanges[index]; 
     1295       
     1296      var callbackFunction; 
     1297      if(index + 1 == metadataChanges.length) 
     1298    { 
     1299      callbackFunction = function(){console.log("Completed saving metadata changes. You must rebuild the collection for the changes to take effect.");}; 
     1300    } 
     1301      else 
     1302    { 
     1303      callbackFunction = function(){processChangesLoop(index + 1)}; 
     1304    } 
     1305      if (change.type == "delete") { 
     1306    gs.functions.removeArchivesMetadata(collection, gs.xsltParams.site_name, change.docID, change.name, null, change.value, function(){callbackFunction();}); 
     1307      } else { 
     1308    if(change.orig) 
     1309      { 
     1310        gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, change.orig, "override", function(){callbackFunction();}); 
     1311      } 
     1312    else 
     1313      { 
     1314        gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, null, "accumulate", function(){callbackFunction();}); 
     1315      } 
     1316      } 
     1317    } 
     1318  processChangesLoop(0); 
     1319  /* need to clear the changes from the page */ 
     1320  de.Changes.clear(); 
     1321  while (_deletedMetadata.length>0) { 
     1322    _deletedMetadata.pop(); 
     1323  } 
     1324     
     1325} 
     1326 
     1327 
     1328 
     1329 
     1330function rebuildCollection() { 
     1331 
     1332  console.log("rebuilding collection"); 
     1333  var collection = gs.cgiParams.c; 
     1334 
     1335  var collectionsArray = new Array(); 
     1336  collectionsArray.push(collection); 
     1337  buildCollections(collectionsArray); 
     1338} 
     1339 
    12041340/*************** 
    12051341* MENU SCRIPTS * 
    12061342***************/ 
     1343function moveScroller() { 
     1344  var move = function() { 
     1345    var editbar = $("#editBar"); 
     1346    var st = $(window).scrollTop(); 
     1347    var fa = $("#float-anchor").offset().top; 
     1348    if(st > fa) { 
     1349       
     1350      editbar.css({ 
     1351      position: "fixed", 
     1352        top: "0px", 
     1353        width: editbar.data("width"), 
     1354        //width: "30%" 
     1355            }); 
     1356    } else { 
     1357      editbar.data("width", editbar.css("width")); 
     1358      editbar.css({ 
     1359      position: "relative", 
     1360        top: "", 
     1361        width: "" 
     1362        }); 
     1363    } 
     1364  }; 
     1365  $(window).scroll(move); 
     1366  move(); 
     1367} 
     1368 
    12071369 
    12081370function floatMenu(enabled)