summaryrefslogtreecommitdiffstats
path: root/core/src/OC
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2019-04-29 17:42:27 +0200
committerChristoph Wurst <christoph@winzerhof-wurst.at>2019-05-02 11:30:00 +0200
commit766ba99f2120129c5777adf885669917d5c0e7e4 (patch)
tree5781202aeb851dcfc788513c30e21f1cc23285e7 /core/src/OC
parentce11b1ee9f15b16581760831c9f357be99a56bfd (diff)
downloadnextcloud-server-766ba99f2120129c5777adf885669917d5c0e7e4.tar.gz
nextcloud-server-766ba99f2120129c5777adf885669917d5c0e7e4.zip
Move the OC routing helper functions to the bundle
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'core/src/OC')
-rw-r--r--core/src/OC/index.js14
-rw-r--r--core/src/OC/routing.js146
2 files changed, 160 insertions, 0 deletions
diff --git a/core/src/OC/index.js b/core/src/OC/index.js
index 789b5b22fa7..308324ff4bd 100644
--- a/core/src/OC/index.js
+++ b/core/src/OC/index.js
@@ -27,6 +27,14 @@ import ContactsMenu from './contactsmenu'
import Dialogs from './dialogs'
import EventSource from './eventsource'
import L10N from './l10n'
+import {
+ generateUrl,
+ filePath,
+ linkTo,
+ linkToOCS,
+ linkToRemote,
+ linkToRemoteBase,
+} from './routing'
import msg from './msg'
import Notification from './notification'
import PasswordConfirmation from './password-confirmation'
@@ -51,6 +59,12 @@ export default {
Plugins,
search,
Util,
+ generateUrl,
+ filePath,
redirect,
reload,
+ linkTo,
+ linkToOCS,
+ linkToRemote,
+ linkToRemoteBase,
}
diff --git a/core/src/OC/routing.js b/core/src/OC/routing.js
new file mode 100644
index 00000000000..e2038e4d03e
--- /dev/null
+++ b/core/src/OC/routing.js
@@ -0,0 +1,146 @@
+/*
+ * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import _ from 'underscore'
+import OC from './index'
+
+/**
+ * Get an absolute url to a file in an app
+ * @param {string} app the id of the app the file belongs to
+ * @param {string} file the file path relative to the app folder
+ * @return {string} Absolute URL to a file
+ */
+export const linkTo = (app, file) => filePath(app, '', file)
+
+/**
+ * Creates a relative url for remote use
+ * @param {string} service id
+ * @return {string} the url
+ */
+export const linkToRemoteBase = service => OC.getRootPath() + '/remote.php/' + service
+
+/**
+ * @brief Creates an absolute url for remote use
+ * @param {string} service id
+ * @return {string} the url
+ */
+export const linkToRemote = service => window.location.protocol + '//' + window.location.host + linkToRemoteBase(service)
+
+/**
+ * Gets the base path for the given OCS API service.
+ * @param {string} service name
+ * @param {int} version OCS API version
+ * @return {string} OCS API base path
+ */
+export const linkToOCS = (service, version) => {
+ version = (version !== 2) ? 1 : 2
+ return window.location.protocol + '//' + window.location.host + OC.getRootPath() + '/ocs/v' + version + '.php/' + service + '/'
+}
+
+/**
+ * Generates the absolute url for the given relative url, which can contain parameters.
+ * Parameters will be URL encoded automatically.
+ * @param {string} url
+ * @param [params] params
+ * @param [options] options
+ * @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)
+ * @return {string} Absolute URL for the given relative URL
+ */
+export const generateUrl = (url, params, options) => {
+ const defaultOptions = {
+ escape: true
+ },
+ allOptions = options || {};
+ _.defaults(allOptions, defaultOptions);
+
+ const _build = function (text, vars) {
+ vars = vars || [];
+ return text.replace(/{([^{}]*)}/g,
+ function (a, b) {
+ var r = (vars[b]);
+ if (allOptions.escape) {
+ return (typeof r === 'string' || typeof r === 'number') ? encodeURIComponent(r) : encodeURIComponent(a);
+ } else {
+ return (typeof r === 'string' || typeof r === 'number') ? r : a;
+ }
+ }
+ );
+ };
+ if (url.charAt(0) !== '/') {
+ url = '/' + url;
+
+ }
+
+ if (oc_config.modRewriteWorking === true) {
+ return OC.getRootPath() + _build(url, params);
+ }
+
+ return OC.getRootPath() + '/index.php' + _build(url, params);
+}
+
+/**
+ * Get the absolute url for a file in an app
+ * @param {string} app the id of the app
+ * @param {string} type the type of the file to link to (e.g. css,img,ajax.template)
+ * @param {string} file the filename
+ * @return {string} Absolute URL for a file in an app
+ */
+export const filePath = (app, type, file) => {
+ const isCore = OC.coreApps.indexOf(app) !== -1
+ let link = OC.getRootPath()
+ if (file.substring(file.length - 3) === 'php' && !isCore) {
+ link += '/index.php/apps/' + app;
+ if (file !== 'index.php') {
+ link += '/'
+ if (type) {
+ link += encodeURI(type + '/')
+ }
+ link += file
+ }
+ } else if (file.substring(file.length - 3) !== 'php' && !isCore) {
+ link = OC.appswebroots[app];
+ if (type) {
+ link += '/' + type + '/'
+ }
+ if (link.substring(link.length - 1) !== '/') {
+ link += '/'
+ }
+ link += file
+ } else {
+ if ((app === 'settings' || app === 'core' || app === 'search') && type === 'ajax') {
+ link += '/index.php/'
+ } else {
+ link += '/'
+ }
+ if (!isCore) {
+ link += 'apps/'
+ }
+ if (app !== '') {
+ app += '/'
+ link += app
+ }
+ if (type) {
+ link += type + '/'
+ }
+ link += file
+ }
+ return link
+}