diff --git a/js/ui/mxgraph/src/js/util/mxUrlConverter.js b/js/ui/mxgraph/src/js/util/mxUrlConverter.js new file mode 100644 index 0000000..6aae50e --- /dev/null +++ b/js/ui/mxgraph/src/js/util/mxUrlConverter.js @@ -0,0 +1,151 @@ +/** + * Copyright (c) 2006-2015, JGraph Ltd + * Copyright (c) 2006-2015, Gaudenz Alder + */ +/** + * + * Class: mxUrlConverter + * + * Converts relative and absolute URLs to absolute URLs with protocol and domain. + */ +var mxUrlConverter = function() +{ + // Empty constructor +}; + +/** + * Variable: enabled + * + * Specifies if the converter is enabled. Default is true. + */ +mxUrlConverter.prototype.enabled = true; + +/** + * Variable: baseUrl + * + * Specifies the base URL to be used as a prefix for relative URLs. + */ +mxUrlConverter.prototype.baseUrl = null; + +/** + * Variable: baseDomain + * + * Specifies the base domain to be used as a prefix for absolute URLs. + */ +mxUrlConverter.prototype.baseDomain = null; + +/** + * Function: updateBaseUrl + * + * Private helper function to update the base URL. + */ +mxUrlConverter.prototype.updateBaseUrl = function() +{ + this.baseDomain = location.protocol + '//' + location.host; + this.baseUrl = this.baseDomain + location.pathname; + var tmp = this.baseUrl.lastIndexOf('/'); + + // Strips filename etc + if (tmp > 0) + { + this.baseUrl = this.baseUrl.substring(0, tmp + 1); + } +}; + +/** + * Function: isEnabled + * + * Returns . + */ +mxUrlConverter.prototype.isEnabled = function() +{ + return this.enabled; +}; + +/** + * Function: setEnabled + * + * Sets . + */ +mxUrlConverter.prototype.setEnabled = function(value) +{ + this.enabled = value; +}; + +/** + * Function: getBaseUrl + * + * Returns . + */ +mxUrlConverter.prototype.getBaseUrl = function() +{ + return this.baseUrl; +}; + +/** + * Function: setBaseUrl + * + * Sets . + */ +mxUrlConverter.prototype.setBaseUrl = function(value) +{ + this.baseUrl = value; +}; + +/** + * Function: getBaseDomain + * + * Returns . + */ +mxUrlConverter.prototype.getBaseDomain = function() +{ + return this.baseDomain; +}, + +/** + * Function: setBaseDomain + * + * Sets . + */ +mxUrlConverter.prototype.setBaseDomain = function(value) +{ + this.baseDomain = value; +}, + +/** + * Function: isRelativeUrl + * + * Returns true if the given URL is relative. + */ +mxUrlConverter.prototype.isRelativeUrl = function(url) +{ + return url.substring(0, 2) != '//' && url.substring(0, 7) != 'http://' && url.substring(0, 8) != 'https://' && url.substring(0, 10) != 'data:image'; +}; + +/** + * Function: convert + * + * Converts the given URL to an absolute URL with protol and domain. + * Relative URLs are first converted to absolute URLs. + */ +mxUrlConverter.prototype.convert = function(url) +{ + if (this.isEnabled() && this.isRelativeUrl(url)) + { + if (this.getBaseUrl() == null) + { + this.updateBaseUrl(); + } + + if (url.charAt(0) == '/') + { + url = this.getBaseDomain() + url; + } + else + { + url = this.getBaseUrl() + url; + } + } + + return url; +};