Spaces:
No application file
No application file
Mautic.contentVersions = {}; | |
Mautic.versionNamespace = ''; | |
Mautic.currentContentVersion = -1; | |
/** | |
* Setup versioning for the given namespace | |
* | |
* @param undoCallback function | |
* @param redoCallback function | |
* @param namespace | |
*/ | |
Mautic.prepareVersioning = function (undoCallback, redoCallback, namespace) { | |
// Check if localStorage is supported and if not, disable undo/redo buttons | |
if (!Mautic.isLocalStorageSupported()) { | |
mQuery('.btn-undo').prop('disabled', true); | |
mQuery('.btn-redo').prop('disabled', true); | |
return; | |
} | |
mQuery('.btn-undo') | |
.prop('disabled', false) | |
.on('click', function() { | |
Mautic.undoVersion(undoCallback); | |
}); | |
mQuery('.btn-redo') | |
.prop('disabled', false) | |
.on('click', function() { | |
Mautic.redoVersion(redoCallback); | |
}); | |
Mautic.currentContentVersion = -1; | |
if (!namespace) { | |
namespace = window.location.href; | |
} | |
if (typeof Mautic.contentVersions[namespace] == 'undefined') { | |
Mautic.contentVersions[namespace] = []; | |
} | |
Mautic.versionNamespace = namespace; | |
console.log(namespace); | |
}; | |
/** | |
* Clear versioning | |
* | |
* @param namespace | |
*/ | |
Mautic.clearVersioning = function () { | |
if (!Mautic.versionNamespace) { | |
throw 'Versioning not configured'; | |
} | |
if (typeof Mautic.contentVersions[Mautic.versionNamespace] !== 'undefined') { | |
delete Mautic.contentVersions[Mautic.versionNamespace]; | |
} | |
Mautic.versionNamespace = ''; | |
Mautic.currentContentVersion = -1; | |
}; | |
/** | |
* Store a version | |
* | |
* @param content | |
*/ | |
Mautic.storeVersion = function(content) { | |
if (!Mautic.versionNamespace) { | |
throw 'Versioning not configured'; | |
} | |
// Store the content | |
Mautic.contentVersions[Mautic.versionNamespace].push(content); | |
// Set the current location to the latest spot | |
Mautic.currentContentVersion = Mautic.contentVersions[Mautic.versionNamespace].length; | |
}; | |
/** | |
* Decrement a version | |
* | |
* @param callback | |
*/ | |
Mautic.undoVersion = function(callback) { | |
console.log('undo'); | |
if (!Mautic.versionNamespace) { | |
throw 'Versioning not configured'; | |
} | |
if (Mautic.currentContentVersion < 0) { | |
// Nothing to undo | |
return; | |
} | |
var version = Mautic.currentContentVersion - 1; | |
if (Mautic.getVersion(version, callback)) { | |
--Mautic.currentContentVersion; | |
}; | |
}; | |
/** | |
* Increment a version | |
* | |
* @param callback | |
*/ | |
Mautic.redoVersion = function(callback) { | |
console.log('redo'); | |
if (!Mautic.versionNamespace) { | |
throw 'Versioning not configured'; | |
} | |
if (Mautic.currentContentVersion < 0 || Mautic.contentVersions[Mautic.versionNamespace].length === Mautic.currentContentVersion) { | |
// Nothing to redo | |
return; | |
} | |
var version = Mautic.currentContentVersion + 1; | |
if (Mautic.getVersion(version, callback)) { | |
++Mautic.currentContentVersion; | |
}; | |
}; | |
/** | |
* Check for a given version and execute callback | |
* | |
* @param version | |
* @param command | |
* @returns {boolean} | |
*/ | |
Mautic.getVersion = function(version, callback) { | |
var content = false; | |
if (typeof Mautic.contentVersions[Mautic.versionNamespace][version] !== 'undefined') { | |
content = Mautic.contentVersions[Mautic.versionNamespace][version]; | |
} | |
if (false !== content && typeof callback == 'function') { | |
callback(content); | |
return true; | |
} | |
return false; | |
}; |