Ignore:
Timestamp:
2014-08-07T13:06:38+12:00 (10 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

File:
1 edited

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)
Note: See TracChangeset for help on using the changeset viewer.