fix(code-style): Adjust JS code to our code style

This resolves 68 ESLint warnings about invalid code style.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
pull/48735/head
Ferdinand Thiessen 12 months ago
parent 5be832344e
commit e8c1e2c611
No known key found for this signature in database
GPG Key ID: 45FAE7268762B400
  1. 4
      apps/comments/src/comments-activity-tab.ts
  2. 6
      apps/files/src/store/viewConfig.ts
  3. 2
      apps/files/src/views/FilesList.vue
  4. 9
      apps/files_external/src/actions/enterCredentialsAction.ts
  5. 3
      apps/files_external/src/actions/inlineStorageCheckAction.ts
  6. 1
      apps/files_sharing/src/files_views/shares.spec.ts
  7. 4
      apps/files_sharing/src/mixins/ShareRequests.js
  8. 2
      apps/files_sharing/src/models/Share.ts
  9. 6
      apps/files_sharing/src/utils/GeneratePassword.ts
  10. 1
      apps/files_sharing/src/views/SharingDetailsTab.vue
  11. 12
      apps/files_sharing/src/views/SharingTab.vue
  12. 4
      apps/files_versions/src/files_versions_tab.js
  13. 9
      apps/files_versions/src/views/VersionTab.vue
  14. 9
      apps/settings/src/admin.js
  15. 4
      apps/settings/src/components/AuthToken.vue
  16. 3
      apps/settings/src/components/BasicSettings/BackgroundJob.vue
  17. 17
      apps/settings/src/components/Encryption.vue
  18. 1
      apps/settings/src/components/Markdown.vue
  19. 14
      apps/settings/src/components/PersonalInfo/BirthdaySection.vue
  20. 12
      apps/settings/src/components/PersonalInfo/DetailsSection.vue
  21. 3
      apps/settings/src/components/Users/NewUserDialog.vue
  22. 13
      apps/settings/src/main-apps-users-management.ts
  23. 10
      apps/settings/src/main-declarative-settings-forms.ts
  24. 12
      apps/settings/src/mixins/UserRowMixin.js
  25. 4
      apps/settings/src/utils/userUtils.ts
  26. 5
      apps/systemtags/src/services/api.ts
  27. 9
      apps/systemtags/src/services/files.ts
  28. 3
      apps/user_status/src/UserStatus.vue
  29. 4
      apps/user_status/src/services/statusService.js
  30. 21
      core/js/tests/html-domparser.js
  31. 6
      core/src/OCP/loader.js
  32. 4
      core/src/install.js
  33. 10
      core/src/jquery/avatar.js
  34. 2
      core/src/services/UnifiedSearchService.js
  35. 2
      core/src/systemtags/systemtagmodel.js
  36. 6
      tests/karma.config.js

@ -24,7 +24,7 @@ export function registerCommentsPlugins() {
if (!ActivityTabPluginView) {
const { default: ActivityCommentAction } = await import('./views/ActivityCommentAction.vue')
/** @ts-expect-error Types are broken for Vue2 */
// @ts-expect-error Types are broken for Vue2
ActivityTabPluginView = Vue.extend(ActivityCommentAction)
}
ActivityTabPluginInstance = new ActivityTabPluginView({
@ -50,7 +50,7 @@ export function registerCommentsPlugins() {
const { data: comments } = await getComments({ resourceType: 'files', resourceId: fileInfo.id }, { limit, offset })
logger.debug('Loaded comments', { fileInfo, comments })
const { default: CommentView } = await import('./views/ActivityCommentEntry.vue')
/** @ts-expect-error Types are broken for Vue2 */
// @ts-expect-error Types are broken for Vue2
const CommentsViewObject = Vue.extend(CommentView)
return comments.map((comment) => ({

@ -59,8 +59,8 @@ export const useViewConfigStore = function(...args) {
* Set the sorting key AND sort by ASC
* The key param must be a valid key of a File object
* If not found, will be searched within the File attributes
* @param key
* @param view
* @param key Key to sort by
* @param view View to set the sorting key for
*/
setSortingBy(key = 'basename', view = 'files') {
// Save new config
@ -70,7 +70,7 @@ export const useViewConfigStore = function(...args) {
/**
* Toggle the sorting direction
* @param view
* @param view view to set the sorting order for
*/
toggleSortingDirection(view = 'files') {
const config = this.getConfig(view) || { sorting_direction: 'asc' }

@ -410,7 +410,7 @@ export default defineComponent({
showCustomEmptyView() {
return !this.loading && this.isEmptyDir && this.currentView?.emptyView !== undefined
}
},
},
watch: {

@ -23,8 +23,15 @@ type CredentialResponse = {
password?: string,
}
/**
* Set credentials for external storage
*
* @param node The node for which to set the credentials
* @param login The username
* @param password The password
*/
async function setCredentials(node: Node, login: string, password: string): Promise<null|true> {
const configResponse = await axios.put(generateUrl('apps/files_external/userglobalstorages/{id}', node.attributes), {
const configResponse = await axios.put(generateUrl('apps/files_external/userglobalstorages/{id}', { id: node.attributes.id }), {
backendOptions: { user: login, password },
}) as AxiosResponse<StorageConfig>

@ -30,7 +30,8 @@ export const action = new FileAction({
/**
* Use this function to check the storage availability
* We then update the node attributes directly.
* @param node
*
* @param node The node to render inline
*/
async renderInline(node: Node) {
let config = null as unknown as StorageConfig

@ -3,6 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/* eslint-disable n/no-extraneous-import */
/* eslint-disable @typescript-eslint/no-explicit-any */
import type { OCSResponse } from '@nextcloud/typings/ocs'
import { Folder, Navigation, View, getNavigation } from '@nextcloud/files'
import { beforeEach, describe, expect, test, vi } from 'vitest'

@ -26,10 +26,10 @@ export default {
* @param {string} [data.password] password to protect public link Share with
* @param {number} [data.permissions] 1 = read; 2 = update; 4 = create; 8 = delete; 16 = share; 31 = all (default: 31, for public shares: 1)
* @param {boolean} [data.sendPasswordByTalk] send the password via a talk conversation
* @param {string} [data.expireDate] expire the shareautomatically after
* @param {string} [data.expireDate] expire the share automatically after
* @param {string} [data.label] custom label
* @param {string} [data.attributes] Share attributes encoded as json
* @param data.note
* @param {string} data.note custom note to recipient
* @return {Share} the new share
* @throws {Error}
*/

@ -314,7 +314,7 @@ export default class Share {
/**
* Get the shared item id
*/
*/
get fileSource(): number {
return this._share.file_source
}

@ -13,9 +13,9 @@ const config = new Config()
const passwordSet = 'abcdefgijkmnopqrstwxyzABCDEFGHJKLMNPQRSTWXYZ23456789'
/**
* Generate a valid policy password or
* request a valid password if password_policy
* is enabled
* Generate a valid policy password or request a valid password if password_policy is enabled
*
* @param {boolean} verbose If enabled the the status is shown to the user via toast
*/
export default async function(verbose = false): Promise<string> {
// password policy is enabled, let's request a pass

@ -247,6 +247,7 @@
import { emit } from '@nextcloud/event-bus'
import { getLanguage } from '@nextcloud/l10n'
import { ShareType } from '@nextcloud/sharing'
import moment from '@nextcloud/moment'
import NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'

@ -82,15 +82,19 @@
</template>
<script>
import axios from '@nextcloud/axios'
import { getCurrentUser } from '@nextcloud/auth'
import { orderBy } from '@nextcloud/files'
import { loadState } from '@nextcloud/initial-state'
import { generateOcsUrl } from '@nextcloud/router'
import { CollectionList } from 'nextcloud-vue-collections'
import axios from '@nextcloud/axios'
import moment from '@nextcloud/moment'
import NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'
import Config from '../services/ConfigService.ts'
import { shareWithTitle } from '../utils/SharedWithMe.js'
import Config from '../services/ConfigService.ts'
import Share from '../models/Share.ts'
import ShareTypes from '../mixins/ShareTypes.js'
import SharingEntryInternal from '../components/SharingEntryInternal.vue'
@ -241,7 +245,7 @@ export default {
updateExpirationSubtitle(share) {
const expiration = moment(share.expireDate).unix()
this.$set(this.sharedWithMe, 'subtitle', t('files_sharing', 'Expires {relativetime}', {
relativetime: OC.Util.relativeModifiedDate(expiration * 1000),
relativetime: moment(expiration * 1000).fromNow(),
}))
// share have expired
@ -310,7 +314,7 @@ export default {
// interval update
this.expirationInterval = setInterval(this.updateExpirationSubtitle, 10000, share)
}
} else if (this.fileInfo && this.fileInfo.shareOwnerId !== undefined ? this.fileInfo.shareOwnerId !== OC.currentUser : false) {
} else if (this.fileInfo && this.fileInfo.shareOwnerId !== undefined ? this.fileInfo.shareOwnerId !== getCurrentUser().uid : false) {
// Fallback to compare owner and current user.
this.sharedWithMe = {
displayName: this.fileInfo.shareOwner,

@ -7,14 +7,14 @@ import Vue from 'vue'
import { translate as t, translatePlural as n } from '@nextcloud/l10n'
import VersionTab from './views/VersionTab.vue'
import VTooltip from 'v-tooltip'
import VTooltipPlugin from 'v-tooltip'
// eslint-disable-next-line n/no-missing-import, import/no-unresolved
import BackupRestore from '@mdi/svg/svg/backup-restore.svg?raw'
Vue.prototype.t = t
Vue.prototype.n = n
Vue.use(VTooltip)
Vue.use(VTooltipPlugin)
// Init Sharing tab component
const View = Vue.extend(VersionTab)

@ -177,7 +177,7 @@ export default {
/**
* Handle restored event from Version.vue
*
* @param {import('../utils/versions.ts').Version} version
* @param {import('../utils/versions.ts').Version} version The version to restore
*/
async handleRestore(version) {
// Update local copy of fileInfo as rendering depends on it.
@ -217,7 +217,7 @@ export default {
/**
* Handle label-updated event from Version.vue
* @param {import('../utils/versions.ts').Version} version
* @param {import('../utils/versions.ts').Version} version The version to update
*/
handleLabelUpdateRequest(version) {
this.showVersionLabelForm = true
@ -226,7 +226,7 @@ export default {
/**
* Handle label-updated event from Version.vue
* @param {string} newLabel
* @param {string} newLabel The new label
*/
async handleLabelUpdate(newLabel) {
const oldLabel = this.editedVersion.label
@ -246,8 +246,7 @@ export default {
/**
* Handle deleted event from Version.vue
*
* @param {import('../utils/versions.ts').Version} version
* @param {string} newName
* @param {import('../utils/versions.ts').Version} version The version to delete
*/
async handleDelete(version) {
const index = this.versions.indexOf(version)

@ -3,11 +3,12 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { generateUrl } from '@nextcloud/router'
import $ from 'jquery'
window.addEventListener('DOMContentLoaded', () => {
$('#loglevel').change(function() {
$.post(OC.generateUrl('/settings/admin/log/level'), { level: $(this).val() }, () => {
$.post(generateUrl('/settings/admin/log/level'), { level: $(this).val() }, () => {
OC.Log.reload()
})
})
@ -48,7 +49,7 @@ window.addEventListener('DOMContentLoaded', () => {
OC.msg.startSaving('#mail_settings_msg')
$.ajax({
url: OC.generateUrl('/settings/admin/mailsettings'),
url: generateUrl('/settings/admin/mailsettings'),
type: 'POST',
data: $('#mail_general_settings_form').serialize(),
success: () => {
@ -68,7 +69,7 @@ window.addEventListener('DOMContentLoaded', () => {
OC.msg.startSaving('#mail_settings_msg')
$.ajax({
url: OC.generateUrl('/settings/admin/mailsettings/credentials'),
url: generateUrl('/settings/admin/mailsettings/credentials'),
type: 'POST',
data: $('#mail_credentials_settings').serialize(),
success: () => {
@ -94,7 +95,7 @@ window.addEventListener('DOMContentLoaded', () => {
OC.msg.startAction('#sendtestmail_msg', t('settings', 'Sending…'))
$.ajax({
url: OC.generateUrl('/settings/admin/mailtest'),
url: generateUrl('/settings/admin/mailtest'),
type: 'POST',
success: () => {
OC.msg.finishedSuccess('#sendtestmail_msg', t('settings', 'Email sent'))

@ -175,8 +175,8 @@ export default defineComponent({
return this.token.type === TokenType.PERMANENT_TOKEN
},
/**
* Object ob the current user agend used by the token
* @return Either an object containing user agent information or null if unknown
* Object ob the current user agent used by the token
* This either returns an object containing user agent information or `null` if unknown
*/
client() {
// pretty format sync client user agent

@ -56,6 +56,7 @@
@update:checked="onBackgroundJobModeChanged">
{{ t('settings', 'Cron (Recommended)') }}
</NcCheckboxRadioSwitch>
<!-- eslint-disable-next-line vue/no-v-html The translation is sanitized-->
<em v-html="cronLabel" />
</NcSettingsSection>
</template>
@ -111,7 +112,7 @@ export default {
desc += '<br>' + t('settings', 'The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details.', {
linkstart: '<a target="_blank" rel="noreferrer nofollow" class="external" href="https://www.php.net/manual/en/book.posix.php">',
linkend: '</a>',
}, undefined, { escape: false, sanitize: false })
}, undefined, { escape: false })
}
return desc
},

@ -53,7 +53,15 @@
</template>
</div>
<div v-else-if="externalBackendsEnabled" v-html="migrationMessage" />
<div v-else-if="externalBackendsEnabled">
{{
t(
'settings',
'You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the "Default encryption module" and run {command}',
{ command: '"occ encryption:migrate"' },
)
}}
</div>
</div>
</NcSettingsSection>
</template>
@ -92,13 +100,6 @@ export default {
defaultCheckedModule: Object.entries(encryptionModules).find((module) => module[1].default)[0],
}
},
computed: {
migrationMessage() {
return t('settings', 'You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the "Default encryption module" and run {command}', {
command: '"occ encryption:migrate"',
})
},
},
methods: {
displayWarning() {
if (!this.encryptionEnabled) {

@ -4,6 +4,7 @@
-->
<template>
<!-- eslint-disable-next-line vue/no-v-html This is rendered markdown so should be "safe" -->
<div class="settings-markdown" v-html="renderMarkdown" />
</template>

@ -8,13 +8,11 @@
:input-id="inputId"
:readable="birthdate.readable" />
<template>
<NcDateTimePickerNative :id="inputId"
type="date"
label=""
:value="value"
@input="onInput" />
</template>
<NcDateTimePickerNative :id="inputId"
type="date"
label=""
:value="value"
@input="onInput" />
<p class="property__helper-text-message">
{{ t('settings', 'Enter your date of birth') }}
@ -66,7 +64,7 @@ export default {
get() {
return new Date(this.birthdate.value)
},
/** @param {Date} value */
/** @param {Date} value The date to set */
set(value) {
const day = value.getDate().toString().padStart(2, '0')
const month = (value.getMonth() + 1).toString().padStart(2, '0')

@ -20,6 +20,7 @@
<div class="details__quota">
<CircleSlice :size="20" />
<div class="details__quota-info">
<!-- eslint-disable-next-line vue/no-v-html -->
<p class="details__quota-text" v-html="quotaText" />
<NcProgressBar size="medium"
:value="usageRelative"
@ -32,8 +33,9 @@
<script>
import { loadState } from '@nextcloud/initial-state'
import NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'
import { t } from '@nextcloud/l10n'
import NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'
import Account from 'vue-material-design-icons/Account.vue'
import CircleSlice from 'vue-material-design-icons/CircleSlice3.vue'
@ -64,12 +66,14 @@ export default {
computed: {
quotaText() {
if (quota === SPACE_UNLIMITED) {
return t('settings', 'You are using <strong>{usage}</strong>', { usage })
return t('settings', 'You are using {s}{usage}{/s}', { usage, s: '<strong>', '/s': '</strong>' }, undefined, { escape: false })
}
return t(
'settings',
'You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)',
{ usage, totalSpace, usageRelative },
'You are using {s}{usage}{/s} of {s}{totalSpace}{/s} ({s}{usageRelative}%{/s})',
{ usage, totalSpace, usageRelative, s: '<strong>', '/s': '</strong>' },
undefined,
{ escape: false },
)
},
},

@ -135,6 +135,7 @@
</template>
<script>
import { formatFileSize, parseFileSize } from '@nextcloud/files'
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import NcDialog from '@nextcloud/vue/dist/Components/NcDialog.js'
import NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js'
@ -317,7 +318,7 @@ export default {
const validQuota = OC.Util.computerFileSize(quota)
if (validQuota !== null && validQuota >= 0) {
// unify format output
quota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota))
quota = formatFileSize(parseFileSize(quota))
this.newUser.quota = { id: quota, label: quota }
return this.newUser.quota
}

@ -4,9 +4,9 @@
*/
import Vue from 'vue'
import VTooltip from 'v-tooltip'
import VTooltipPlugin from 'v-tooltip'
import { sync } from 'vuex-router-sync'
import { translate as t, translatePlural as n } from '@nextcloud/l10n'
import { t, n } from '@nextcloud/l10n'
import SettingsApp from './views/SettingsApp.vue'
import router from './router/index.ts'
@ -14,19 +14,18 @@ import { useStore } from './store/index.js'
import { getCSPNonce } from '@nextcloud/auth'
import { PiniaVuePlugin, createPinia } from 'pinia'
Vue.use(VTooltip, { defaultHtml: false })
const store = useStore()
sync(store, router)
// CSP config for webpack dynamic chunk loading
// eslint-disable-next-line camelcase
__webpack_nonce__ = getCSPNonce()
const store = useStore()
sync(store, router)
// bind to window
Vue.prototype.t = t
Vue.prototype.n = n
Vue.use(PiniaVuePlugin)
Vue.use(VTooltipPlugin, { defaultHtml: false })
const pinia = createPinia()

@ -5,9 +5,10 @@
import type { ComponentInstance } from 'vue'
import { loadState } from '@nextcloud/initial-state'
import { translate as t, translatePlural as n } from '@nextcloud/l10n'
import { t, n } from '@nextcloud/l10n'
import Vue from 'vue'
import DeclarativeSection from './components/DeclarativeSettings/DeclarativeSection.vue'
import logger from './logger'
interface DeclarativeFormField {
id: string,
@ -34,12 +35,10 @@ interface DeclarativeForm {
fields: Array<DeclarativeFormField>,
}
const forms = loadState('settings', 'declarative-settings-forms', []) as Array<DeclarativeForm>
console.debug('Loaded declarative forms:', forms)
const forms = loadState<DeclarativeForm[]>('settings', 'declarative-settings-forms', [])
/**
*
* @param forms
* @param forms The forms to render
*/
function renderDeclarativeSettingsSections(forms: Array<DeclarativeForm>): ComponentInstance[] {
Vue.mixin({ methods: { t, n } })
@ -57,5 +56,6 @@ function renderDeclarativeSettingsSections(forms: Array<DeclarativeForm>): Compo
}
document.addEventListener('DOMContentLoaded', () => {
logger.debug('Loaded declarative forms', { forms })
renderDeclarativeSettingsSections(forms)
})

@ -3,6 +3,8 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { formatFileSize } from '@nextcloud/files'
export default {
props: {
user: {
@ -68,11 +70,10 @@ export default {
/* QUOTA MANAGEMENT */
usedSpace() {
if (this.user.quota.used) {
return t('settings', '{size} used', { size: OC.Util.humanFileSize(this.user.quota.used) })
}
return t('settings', '{size} used', { size: OC.Util.humanFileSize(0) })
const quotaUsed = this.user.quota.used > 0 ? this.user.quota.used : 0
return t('settings', '{size} used', { size: formatFileSize(quotaUsed, true) })
},
usedQuota() {
let quota = this.user.quota.quota
if (quota > 0) {
@ -84,11 +85,12 @@ export default {
}
return isNaN(quota) ? 0 : quota
},
// Mapping saved values to objects
userQuota() {
if (this.user.quota.quota >= 0) {
// if value is valid, let's map the quotaOptions or return custom quota
const humanQuota = OC.Util.humanFileSize(this.user.quota.quota)
const humanQuota = formatFileSize(this.user.quota.quota)
const userQuota = this.quotaOptions.find(quota => quota.id === humanQuota)
return userQuota || { id: humanQuota, label: humanQuota }
} else if (this.user.quota.quota === 'default') {

@ -18,8 +18,8 @@ export const defaultQuota = {
/**
* Return `true` if the logged in user does not have permissions to view the
* data of `user`
* @param user
* @param user.id
* @param user The user to check
* @param user.id Id of the user
*/
export const isObfuscated = (user: { id: string, [key: string]: unknown }) => {
const keys = Object.keys(user)

@ -52,8 +52,9 @@ export const fetchLastUsedTagIds = async (): Promise<number[]> => {
}
/**
* @param tag
* @return created tag id
* Create a tag and return the Id of the newly created tag.
*
* @param tag The tag to create
*/
export const createTag = async (tag: Tag | ServerTag): Promise<number> => {
const path = '/systemtags'

@ -6,6 +6,7 @@
import type { FileStat, ResponseDataDetailed } from 'webdav'
import type { ServerTagWithId, Tag, TagWithId } from '../types.js'
import { t } from '@nextcloud/l10n'
import { davClient } from './davClient.js'
import { createTag, fetchTagsPayload } from './api.js'
import { formatTag, parseTags } from '../utils.js'
@ -27,9 +28,11 @@ export const fetchTagsForFile = async (fileId: number): Promise<TagWithId[]> =>
}
/**
* @param tag
* @param fileId
* @return created tag id
* Create a tag and apply it to a given file (by id).
* This returns the id of the newly created tag.
*
* @param tag The tag to create
* @param fileId Id of the file to tag
*/
export const createTagForFile = async (tag: Tag, fileId: number): Promise<number> => {
const tagToCreate = formatTag(tag)

@ -36,6 +36,7 @@
</template>
<script>
import { getCurrentUser } from '@nextcloud/auth'
import { subscribe, unsubscribe } from '@nextcloud/event-bus'
import { Fragment } from 'vue-frag'
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
@ -159,7 +160,7 @@ export default {
}
},
handleUserStatusUpdated(state) {
if (OC.getCurrentUser().uid === state.userId) {
if (getCurrentUser()?.uid === state.userId) {
this.$store.dispatch('setStatusFromObject', {
status: state.status,
icon: state.icon,

@ -21,7 +21,7 @@ const fetchCurrentStatus = async () => {
/**
* Fetches the current user-status
*
* @param {string} userId
* @param {string} userId Id of the user to fetch the status
* @return {Promise<object>}
*/
const fetchBackupStatus = async (userId) => {
@ -89,7 +89,7 @@ const clearMessage = async () => {
/**
* Revert the automated status
*
* @param {string} messageId
* @param {string} messageId ID of the message to revert
* @return {Promise<object>}
*/
const revertToBackupStatus = async (messageId) => {

@ -16,10 +16,8 @@
(function(DOMParser) {
"use strict";
var
DOMParser_proto = DOMParser.prototype
, real_parseFromString = DOMParser_proto.parseFromString
;
var DOMParser_proto = DOMParser.prototype;
var real_parseFromString = DOMParser_proto.parseFromString;
// Firefox/Opera/IE throw errors on unsupported types
try {
@ -32,15 +30,12 @@
DOMParser_proto.parseFromString = function(markup, type) {
if (/^\s*text\/html\s*(?:;|$)/i.test(type)) {
var
doc = document.implementation.createHTMLDocument("")
;
if (markup.toLowerCase().indexOf('<!doctype') > -1) {
doc.documentElement.innerHTML = markup;
}
else {
doc.body.innerHTML = markup;
}
var doc = document.implementation.createHTMLDocument("");
if (markup.toLowerCase().indexOf('<!doctype') > -1) {
doc.documentElement.innerHTML = markup;
} else {
doc.body.innerHTML = markup;
}
return doc;
} else {
return real_parseFromString.apply(this, arguments);

@ -3,6 +3,8 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { generateFilePath } from '@nextcloud/router'
const loadedScripts = {}
const loadedStylesheets = {}
/**
@ -25,7 +27,7 @@ export default {
}
loadedScripts[key] = true
return new Promise(function(resolve, reject) {
const scriptPath = OC.filePath(app, 'js', file)
const scriptPath = generateFilePath(app, 'js', file)
const script = document.createElement('script')
script.src = scriptPath
script.setAttribute('nonce', btoa(OC.requestToken))
@ -49,7 +51,7 @@ export default {
}
loadedStylesheets[key] = true
return new Promise(function(resolve, reject) {
const stylePath = OC.filePath(app, 'css', file)
const stylePath = generateFilePath(app, 'css', file)
const link = document.createElement('link')
link.href = stylePath
link.type = 'text/css'

@ -5,6 +5,8 @@
import $ from 'jquery'
import { translate as t } from '@nextcloud/l10n'
import { linkTo } from '@nextcloud/router'
import { getToken } from './OC/requesttoken.js'
import getURLParameter from './Util/get-url-parameter.js'
@ -129,7 +131,7 @@ window.addEventListener('DOMContentLoaded', function() {
}
$('#adminpass').strengthify({
zxcvbn: OC.linkTo('core', 'vendor/zxcvbn/dist/zxcvbn.js'),
zxcvbn: linkTo('core', 'vendor/zxcvbn/dist/zxcvbn.js'),
titles: [
t('core', 'Very weak password'),
t('core', 'Weak password'),

@ -3,10 +3,10 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { getCurrentUser } from '@nextcloud/auth'
import { generateUrl } from '@nextcloud/router'
import $ from 'jquery'
import OC from '../OC/index.js'
/**
* This plugin inserts the right avatar for the user, depending on, whether a
* custom avatar is uploaded - which it uses then - or not, and display a
@ -90,8 +90,8 @@ $.fn.avatar = function(user, size, ie8fix, hidedefault, callback, displayname) {
let url
// If this is our own avatar we have to use the version attribute
if (user === OC.getCurrentUser().uid) {
url = OC.generateUrl(
if (user === getCurrentUser()?.uid) {
url = generateUrl(
'/avatar/{user}/{size}?v={version}',
{
user,
@ -99,7 +99,7 @@ $.fn.avatar = function(user, size, ie8fix, hidedefault, callback, displayname) {
version: oc_userconfig.avatar.version,
})
} else {
url = OC.generateUrl(
url = generateUrl(
'/avatar/{user}/{size}',
{
user,

@ -82,7 +82,7 @@ export function search({ type, query, cursor, since, until, limit, person, extra
* Get the list of active contacts
*
* @param {object} filter filter contacts by string
* @param filter.searchTerm
* @param {string} filter.searchTerm the query
* @return {object} {request: Promise}
*/
export async function getContacts({ searchTerm }) {

@ -2,7 +2,7 @@
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-or-later
* @param OC
* @param {object} OC The OC namespace
*/
(function(OC) {

@ -41,14 +41,8 @@ module.exports = function(config) {
// up with the global namespace/classes/state
'dist/files_sharing-additionalScripts.js',
'dist/files_sharing-files_sharing_tab.js',
'dist/files_sharing-files_sharing.js',
'dist/files_sharing-main.js',
'apps/files_sharing/js/files_drop.js',
'apps/files_sharing/js/public.js',
'apps/files_sharing/js/sharedfilelist.js',
'apps/files_sharing/js/templates.js',
],
testFiles: ['apps/files_sharing/tests/js/*.js']
},
'files_trashbin',
];

Loading…
Cancel
Save