/** * @copyright (c) 2017 Arthur Schiwon * * @author Christoph Wurst * @author John Molakvoæ * * @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 . * */ import _ from 'underscore' import $ from 'jquery' import OC from '../OC/index' export function query(options) { options = options || {} const dismissOptions = options.dismiss || {} $.ajax({ type: 'GET', url: options.url || OC.linkToOCS('core', 2) + 'whatsnew?format=json', success: options.success || function(data, statusText, xhr) { onQuerySuccess(data, statusText, xhr, dismissOptions) }, error: options.error || onQueryError, }) } export function dismiss(version, options) { options = options || {} $.ajax({ type: 'POST', url: options.url || OC.linkToOCS('core', 2) + 'whatsnew', data: { version: encodeURIComponent(version) }, success: options.success || onDismissSuccess, error: options.error || onDismissError, }) // remove element immediately $('.whatsNewPopover').remove() } function onQuerySuccess(data, statusText, xhr, dismissOptions) { console.debug('querying Whats New data was successful: ' + statusText) console.debug(data) if (xhr.status !== 200) { return } let item, menuItem, text, icon const div = document.createElement('div') div.classList.add('popovermenu', 'open', 'whatsNewPopover', 'menu-left') const list = document.createElement('ul') // header item = document.createElement('li') menuItem = document.createElement('span') menuItem.className = 'menuitem' text = document.createElement('span') text.innerText = t('core', 'New in') + ' ' + data.ocs.data.product text.className = 'caption' menuItem.appendChild(text) icon = document.createElement('span') icon.className = 'icon-close' icon.onclick = function() { dismiss(data.ocs.data.version, dismissOptions) } menuItem.appendChild(icon) item.appendChild(menuItem) list.appendChild(item) // Highlights for (const i in data.ocs.data.whatsNew.regular) { const whatsNewTextItem = data.ocs.data.whatsNew.regular[i] item = document.createElement('li') menuItem = document.createElement('span') menuItem.className = 'menuitem' icon = document.createElement('span') icon.className = 'icon-checkmark' menuItem.appendChild(icon) text = document.createElement('p') text.innerHTML = _.escape(whatsNewTextItem) menuItem.appendChild(text) item.appendChild(menuItem) list.appendChild(item) } // Changelog URL if (!_.isUndefined(data.ocs.data.changelogURL)) { item = document.createElement('li') menuItem = document.createElement('a') menuItem.href = data.ocs.data.changelogURL menuItem.rel = 'noreferrer noopener' menuItem.target = '_blank' icon = document.createElement('span') icon.className = 'icon-link' menuItem.appendChild(icon) text = document.createElement('span') text.innerText = t('core', 'View changelog') menuItem.appendChild(text) item.appendChild(menuItem) list.appendChild(item) } div.appendChild(list) document.body.appendChild(div) } function onQueryError(x, t, e) { console.debug('querying Whats New Data resulted in an error: ' + t + e) console.debug(x) } function onDismissSuccess(data) { // noop } function onDismissError(data) { console.debug('dismissing Whats New data resulted in an error: ' + data) }