Merge branch '25624-anticipate-obstacles-to-removing-turbolinks' into 'master'
Remove Turbolinks Closes #25624 See merge request !8570
This commit is contained in:
commit
538a6875d3
55 changed files with 88 additions and 168 deletions
1
Gemfile
1
Gemfile
|
@ -222,7 +222,6 @@ gem 'chronic_duration', '~> 0.10.6'
|
|||
gem 'sass-rails', '~> 5.0.6'
|
||||
gem 'coffee-rails', '~> 4.1.0'
|
||||
gem 'uglifier', '~> 2.7.2'
|
||||
gem 'gitlab-turbolinks-classic', '~> 2.5', '>= 2.5.6'
|
||||
|
||||
gem 'addressable', '~> 2.3.8'
|
||||
gem 'bootstrap-sass', '~> 3.3.0'
|
||||
|
|
|
@ -266,8 +266,6 @@ GEM
|
|||
mime-types (>= 1.16, < 3)
|
||||
posix-spawn (~> 0.3)
|
||||
gitlab-markup (1.5.1)
|
||||
gitlab-turbolinks-classic (2.5.6)
|
||||
coffee-rails
|
||||
gitlab_omniauth-ldap (1.2.1)
|
||||
net-ldap (~> 0.9)
|
||||
omniauth (~> 1.0)
|
||||
|
@ -891,7 +889,6 @@ DEPENDENCIES
|
|||
github-linguist (~> 4.7.0)
|
||||
gitlab-flowdock-git-hook (~> 1.0.1)
|
||||
gitlab-markup (~> 1.5.1)
|
||||
gitlab-turbolinks-classic (~> 2.5, >= 2.5.6)
|
||||
gitlab_omniauth-ldap (~> 1.2.1)
|
||||
gollum-lib (~> 4.2)
|
||||
gollum-rugged_adapter (~> 0.4.2)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, one-var, no-var, one-var-declaration-per-line, no-unused-vars, no-else-return, prefer-arrow-callback, camelcase, quotes, comma-dangle, max-len */
|
||||
/* global Turbolinks */
|
||||
|
||||
(function() {
|
||||
this.Admin = (function() {
|
||||
|
@ -42,10 +41,10 @@
|
|||
return $('.change-owner-link').show();
|
||||
});
|
||||
$('li.project_member').bind('ajax:success', function() {
|
||||
return Turbolinks.visit(location.href);
|
||||
return gl.utils.refreshCurrentPage();
|
||||
});
|
||||
$('li.group_member').bind('ajax:success', function() {
|
||||
return Turbolinks.visit(location.href);
|
||||
return gl.utils.refreshCurrentPage();
|
||||
});
|
||||
showBlacklistType = function() {
|
||||
if ($("input[name='blacklist_type']:checked").val() === 'file') {
|
||||
|
|
|
@ -24,9 +24,7 @@
|
|||
/*= require jquery.waitforimages */
|
||||
/*= require jquery.atwho */
|
||||
/*= require jquery.scrollTo */
|
||||
/*= require jquery.turbolinks */
|
||||
/*= require js.cookie */
|
||||
/*= require turbolinks */
|
||||
/*= require autosave */
|
||||
/*= require bootstrap/affix */
|
||||
/*= require bootstrap/alert */
|
||||
|
@ -64,7 +62,7 @@
|
|||
/*= require es6-promise.auto */
|
||||
|
||||
(function () {
|
||||
document.addEventListener('page:fetch', function () {
|
||||
document.addEventListener('beforeunload', function () {
|
||||
// Unbind scroll events
|
||||
$(document).off('scroll');
|
||||
// Close any open tooltips
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
BreakpointInstance.prototype.getBreakpointSize = function() {
|
||||
var $visibleDevice;
|
||||
$visibleDevice = this.visibleDevice;
|
||||
// TODO: Consider refactoring in light of turbolinks removal.
|
||||
// the page refreshed via turbolinks
|
||||
if (!$visibleDevice().length) {
|
||||
this.setup();
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, no-use-before-define, no-param-reassign, quotes, yoda, no-else-return, consistent-return, comma-dangle, object-shorthand, prefer-template, one-var, one-var-declaration-per-line, no-unused-vars, max-len, vars-on-top */
|
||||
/* global Breakpoints */
|
||||
/* global Turbolinks */
|
||||
|
||||
(function() {
|
||||
var bind = function(fn, me) { return function() { return fn.apply(me, arguments); }; };
|
||||
|
@ -127,7 +126,7 @@
|
|||
pageUrl += DOWN_BUILD_TRACE;
|
||||
}
|
||||
|
||||
return Turbolinks.visit(pageUrl);
|
||||
return gl.utils.visitUrl(pageUrl);
|
||||
}
|
||||
};
|
||||
})(this)
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
this.setupMapping();
|
||||
|
||||
this.cleanupWrapper = this.cleanup.bind(this);
|
||||
document.addEventListener('page:fetch', this.cleanupWrapper);
|
||||
document.addEventListener('beforeunload', this.cleanupWrapper);
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
|
@ -20,7 +20,7 @@
|
|||
|
||||
this.setupMapping();
|
||||
|
||||
document.removeEventListener('page:fetch', this.cleanupWrapper);
|
||||
document.removeEventListener('beforeunload', this.cleanupWrapper);
|
||||
}
|
||||
|
||||
setupMapping() {
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
/* global Turbolinks */
|
||||
|
||||
(() => {
|
||||
class FilteredSearchManager {
|
||||
constructor() {
|
||||
|
@ -15,13 +13,13 @@
|
|||
this.dropdownManager.setDropdown();
|
||||
|
||||
this.cleanupWrapper = this.cleanup.bind(this);
|
||||
document.addEventListener('page:fetch', this.cleanupWrapper);
|
||||
document.addEventListener('beforeunload', this.cleanupWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
this.unbindEvents();
|
||||
document.removeEventListener('page:fetch', this.cleanupWrapper);
|
||||
document.removeEventListener('beforeunload', this.cleanupWrapper);
|
||||
}
|
||||
|
||||
bindEvents() {
|
||||
|
@ -200,7 +198,9 @@
|
|||
paths.push(`search=${sanitized}`);
|
||||
}
|
||||
|
||||
Turbolinks.visit(`?scope=all&utf8=✓&${paths.join('&')}`);
|
||||
const parameterizedUrl = `?scope=all&utf8=✓&${paths.join('&')}`;
|
||||
|
||||
gl.utils.visitUrl(parameterizedUrl);
|
||||
}
|
||||
|
||||
getUsernameParams() {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, no-var, one-var, one-var-declaration-per-line, prefer-rest-params, max-len, vars-on-top, wrap-iife, no-unused-vars, quotes, no-shadow, no-cond-assign, prefer-arrow-callback, no-return-assign, no-else-return, camelcase, comma-dangle, no-lonely-if, guard-for-in, no-restricted-syntax, consistent-return, prefer-template, no-param-reassign, no-loop-func, no-mixed-operators */
|
||||
/* global fuzzaldrinPlus */
|
||||
/* global Turbolinks */
|
||||
|
||||
(function() {
|
||||
var GitLabDropdown, GitLabDropdownFilter, GitLabDropdownRemote,
|
||||
|
@ -723,7 +722,7 @@
|
|||
if ($el.length) {
|
||||
var href = $el.attr('href');
|
||||
if (href && href !== '#') {
|
||||
Turbolinks.visit(href);
|
||||
gl.utils.visitUrl(href);
|
||||
} else {
|
||||
$el.first().trigger('click');
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
/* eslint-disable no-param-reassign, func-names, no-var, camelcase, no-unused-vars, object-shorthand, space-before-function-paren, no-return-assign, comma-dangle, consistent-return, one-var, one-var-declaration-per-line, quotes, prefer-template, prefer-arrow-callback, wrap-iife, max-len */
|
||||
/* global Issuable */
|
||||
/* global Turbolinks */
|
||||
|
||||
((global) => {
|
||||
var issuable_created;
|
||||
|
@ -119,7 +118,7 @@
|
|||
issuesUrl = formAction;
|
||||
issuesUrl += "" + (formAction.indexOf('?') < 0 ? '?' : '&');
|
||||
issuesUrl += formData;
|
||||
return Turbolinks.visit(issuesUrl);
|
||||
return gl.utils.visitUrl(issuesUrl);
|
||||
};
|
||||
})(this),
|
||||
initResetFilters: function() {
|
||||
|
@ -130,7 +129,7 @@
|
|||
const baseIssuesUrl = target.href;
|
||||
|
||||
$form.attr('action', baseIssuesUrl);
|
||||
Turbolinks.visit(baseIssuesUrl);
|
||||
gl.utils.visitUrl(baseIssuesUrl);
|
||||
});
|
||||
},
|
||||
initChecks: function() {
|
||||
|
|
|
@ -95,7 +95,6 @@
|
|||
const newState = `${copySource}${this.currentLocation.search}${this.currentLocation.hash}`;
|
||||
|
||||
history.replaceState({
|
||||
turbolinks: true,
|
||||
url: newState,
|
||||
}, document.title, newState);
|
||||
return newState;
|
||||
|
|
|
@ -76,5 +76,11 @@
|
|||
hashIndex = url.indexOf('#');
|
||||
return hashIndex === -1 ? null : url.substring(hashIndex + 1);
|
||||
};
|
||||
|
||||
w.gl.utils.refreshCurrentPage = () => gl.utils.visitUrl(document.location.href);
|
||||
|
||||
w.gl.utils.visitUrl = (url) => {
|
||||
document.location.href = url;
|
||||
};
|
||||
})(window);
|
||||
}).call(this);
|
|
@ -171,7 +171,6 @@
|
|||
// This method is stubbed in tests.
|
||||
LineHighlighter.prototype.__setLocationHash__ = function(value) {
|
||||
return history.pushState({
|
||||
turbolinks: false,
|
||||
url: value
|
||||
// We're using pushState instead of assigning location.hash directly to
|
||||
// prevent the page from scrolling on the hashchange event
|
||||
|
|
|
@ -1,14 +1,7 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, prefer-arrow-callback */
|
||||
/* global Turbolinks */
|
||||
|
||||
(function() {
|
||||
Turbolinks.enableProgressBar();
|
||||
|
||||
$(document).on('page:fetch', function() {
|
||||
window.addEventListener('beforeunload', function() {
|
||||
$('.tanuki-logo').addClass('animate');
|
||||
});
|
||||
|
||||
$(document).on('page:change', function() {
|
||||
$('.tanuki-logo').removeClass('animate');
|
||||
});
|
||||
}).call(this);
|
||||
|
|
|
@ -184,12 +184,13 @@
|
|||
// Ensure parameters and hash come along for the ride
|
||||
newState += location.search + location.hash;
|
||||
|
||||
// TODO: Consider refactoring in light of turbolinks removal.
|
||||
|
||||
// Replace the current history state with the new one without breaking
|
||||
// Turbolinks' history.
|
||||
//
|
||||
// See https://github.com/rails/turbolinks/issues/363
|
||||
window.history.replaceState({
|
||||
turbolinks: true,
|
||||
url: newState,
|
||||
}, document.title, newState);
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
/* global notify */
|
||||
/* global notifyPermissions */
|
||||
/* global merge_request_widget */
|
||||
/* global Turbolinks */
|
||||
|
||||
((global) => {
|
||||
var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i += 1) { if (i in this && this[i] === item) return i; } return -1; };
|
||||
|
@ -69,13 +68,13 @@
|
|||
}
|
||||
|
||||
MergeRequestWidget.prototype.clearEventListeners = function() {
|
||||
return $(document).off('page:change.merge_request');
|
||||
return $(document).off('DOMContentLoaded');
|
||||
};
|
||||
|
||||
MergeRequestWidget.prototype.addEventListeners = function() {
|
||||
var allowedPages;
|
||||
allowedPages = ['show', 'commits', 'pipelines', 'changes'];
|
||||
$(document).on('page:change.merge_request', (function(_this) {
|
||||
$(document).on('DOMContentLoaded', (function(_this) {
|
||||
return function() {
|
||||
var page;
|
||||
page = $('body').data('page').split(':').last();
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, no-var, quotes, consistent-return, no-new, prefer-arrow-callback, no-return-assign, one-var, one-var-declaration-per-line, object-shorthand, comma-dangle, no-else-return, newline-per-chained-call, no-shadow, vars-on-top, prefer-template, max-len */
|
||||
/* global Cookies */
|
||||
/* global Turbolinks */
|
||||
/* global ProjectSelect */
|
||||
|
||||
(function() {
|
||||
|
@ -118,7 +117,7 @@
|
|||
var $form = $dropdown.closest('form');
|
||||
var action = $form.attr('action');
|
||||
var divider = action.indexOf('?') < 0 ? '?' : '&';
|
||||
Turbolinks.visit(action + '' + divider + '' + $form.serialize());
|
||||
gl.utils.visitUrl(action + '' + divider + '' + $form.serialize());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, prefer-arrow-callback, max-len */
|
||||
/* global Turbolinks */
|
||||
|
||||
(function() {
|
||||
this.ProjectImport = (function() {
|
||||
function ProjectImport() {
|
||||
setTimeout(function() {
|
||||
return Turbolinks.visit(location.href);
|
||||
return gl.utils.visitUrl(location.href);
|
||||
}, 5000);
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
this.find('.js-render-math').renderMath();
|
||||
};
|
||||
|
||||
$(document).on('ready page:load', function() {
|
||||
$(document).on('ready load', function() {
|
||||
return $('body').renderGFM();
|
||||
});
|
||||
}).call(this);
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, quotes, prefer-arrow-callback, consistent-return, object-shorthand, no-unused-vars, one-var, one-var-declaration-per-line, no-else-return, comma-dangle, max-len */
|
||||
/* global Mousetrap */
|
||||
/* global Turbolinks */
|
||||
/* global findFileURL */
|
||||
|
||||
(function() {
|
||||
|
@ -23,7 +22,7 @@
|
|||
Mousetrap.bind(['ctrl+shift+p', 'command+shift+p'], this.toggleMarkdownPreview);
|
||||
if (typeof findFileURL !== "undefined" && findFileURL !== null) {
|
||||
Mousetrap.bind('t', function() {
|
||||
return Turbolinks.visit(findFileURL);
|
||||
return gl.utils.visitUrl(findFileURL);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, max-len, no-var, one-var, no-restricted-syntax, vars-on-top, no-use-before-define, no-param-reassign, new-cap, no-underscore-dangle, wrap-iife, one-var-declaration-per-line, quotes, prefer-arrow-callback, consistent-return, prefer-template, no-mixed-operators */
|
||||
/* global Mousetrap */
|
||||
/* global Turbolinks */
|
||||
/* global ShortcutsNavigation */
|
||||
/* global sidebar */
|
||||
|
||||
|
@ -80,7 +79,7 @@
|
|||
ShortcutsIssuable.prototype.editIssue = function() {
|
||||
var $editBtn;
|
||||
$editBtn = $('.issuable-edit');
|
||||
return Turbolinks.visit($editBtn.attr('href'));
|
||||
return gl.utils.visitUrl($editBtn.attr('href'));
|
||||
};
|
||||
|
||||
ShortcutsIssuable.prototype.openSidebarDropdown = function(name) {
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
.on('click', sidebarToggleSelector, () => this.toggleSidebar())
|
||||
.on('click', pinnedToggleSelector, () => this.togglePinnedState())
|
||||
.on('click', 'html, body', (e) => this.handleClickEvent(e))
|
||||
.on('page:change', () => this.renderState())
|
||||
.on('DOMContentLoaded', () => this.renderState())
|
||||
.on('todo:toggle', (e, count) => this.updateTodoCount(count));
|
||||
this.renderState();
|
||||
}
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
destroy() {
|
||||
this.cancel();
|
||||
document.removeEventListener('visibilitychange', this.handleVisibilityChange);
|
||||
$(document).off('visibilitychange').off('page:before-unload');
|
||||
$(document).off('visibilitychange').off('beforeunload');
|
||||
}
|
||||
|
||||
/* private */
|
||||
|
@ -111,8 +111,9 @@
|
|||
}
|
||||
|
||||
initPageUnloadHandling() {
|
||||
// TODO: Consider refactoring in light of turbolinks removal.
|
||||
// prevent interval continuing after page change, when kept in cache by Turbolinks
|
||||
$(document).on('page:before-unload', () => this.cancel());
|
||||
$(document).on('beforeunload', () => this.cancel());
|
||||
}
|
||||
|
||||
handleVisibilityChange(e) {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
/* eslint-disable class-methods-use-this, no-new, func-names, prefer-template, no-unneeded-ternary, object-shorthand, space-before-function-paren, comma-dangle, quote-props, consistent-return, no-else-return, no-param-reassign, max-len */
|
||||
/* global UsersSelect */
|
||||
/* global Turbolinks */
|
||||
|
||||
((global) => {
|
||||
class Todos {
|
||||
|
@ -34,7 +33,7 @@
|
|||
|
||||
$('form.filter-form').on('submit', function (event) {
|
||||
event.preventDefault();
|
||||
Turbolinks.visit(this.action + '&' + $(this).serialize());
|
||||
gl.utils.visitUrl(this.action + '&' + $(this).serialize());
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -142,7 +141,7 @@
|
|||
};
|
||||
url = gl.utils.mergeUrlParams(pageParams, url);
|
||||
}
|
||||
return Turbolinks.visit(url);
|
||||
return gl.utils.visitUrl(url);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -156,7 +155,7 @@
|
|||
e.preventDefault();
|
||||
return window.open(todoLink, '_blank');
|
||||
} else {
|
||||
return Turbolinks.visit(todoLink);
|
||||
return gl.utils.visitUrl(todoLink);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, wrap-iife, max-len, quotes, consistent-return, no-var, one-var, one-var-declaration-per-line, no-else-return, prefer-arrow-callback, max-len */
|
||||
/* global Turbolinks */
|
||||
|
||||
(function() {
|
||||
this.TreeView = (function() {
|
||||
function TreeView() {
|
||||
|
@ -15,7 +15,7 @@
|
|||
e.preventDefault();
|
||||
return window.open(path, '_blank');
|
||||
} else {
|
||||
return Turbolinks.visit(path);
|
||||
return gl.utils.visitUrl(path);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -57,7 +57,7 @@
|
|||
} else if (e.which === 13) {
|
||||
path = $('.tree-item.selected .tree-item-file-name a').attr('href');
|
||||
if (path) {
|
||||
return Turbolinks.visit(path);
|
||||
return gl.utils.visitUrl(path);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -149,7 +149,6 @@ content on the Users#show page.
|
|||
new_state = new_state.replace(/\/+$/, '');
|
||||
new_state += this._location.search + this._location.hash;
|
||||
history.replaceState({
|
||||
turbolinks: true,
|
||||
url: new_state
|
||||
}, document.title, new_state);
|
||||
return new_state;
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
gl.VueGlPagination = Vue.extend({
|
||||
props: {
|
||||
|
||||
// TODO: Consider refactoring in light of turbolinks removal.
|
||||
|
||||
/**
|
||||
This function will take the information given by the pagination component
|
||||
And make a new Turbolinks call
|
||||
|
@ -20,7 +22,7 @@
|
|||
Here is an example `change` method:
|
||||
|
||||
change(pagenum, apiScope) {
|
||||
Turbolinks.visit(`?scope=${apiScope}&p=${pagenum}`);
|
||||
gl.utils.visitUrl(`?scope=${apiScope}&p=${pagenum}`);
|
||||
},
|
||||
*/
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* global Vue, Turbolinks, gl */
|
||||
/* global Vue, gl */
|
||||
/* eslint-disable no-param-reassign */
|
||||
|
||||
((gl) => {
|
||||
|
@ -36,7 +36,7 @@
|
|||
},
|
||||
methods: {
|
||||
change(pagenum, apiScope) {
|
||||
Turbolinks.visit(`?scope=${apiScope}&p=${pagenum}`);
|
||||
gl.utils.visitUrl(`?scope=${apiScope}&p=${pagenum}`);
|
||||
},
|
||||
author(pipeline) {
|
||||
if (!pipeline.commit) return { avatar_url: '', web_url: '', username: '' };
|
||||
|
|
|
@ -7,12 +7,12 @@
|
|||
window.removeEventListener('beforeunload', removeIntervals);
|
||||
window.removeEventListener('focus', startIntervals);
|
||||
window.removeEventListener('blur', removeIntervals);
|
||||
document.removeEventListener('page:fetch', removeAll);
|
||||
document.removeEventListener('beforeunload', removeAll);
|
||||
};
|
||||
|
||||
window.addEventListener('beforeunload', removeIntervals);
|
||||
window.addEventListener('focus', startIntervals);
|
||||
window.addEventListener('blur', removeIntervals);
|
||||
document.addEventListener('page:fetch', removeAll);
|
||||
document.addEventListener('beforeunload', removeAll);
|
||||
};
|
||||
})(window.gl || (window.gl = {}));
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
@import "framework/modal.scss";
|
||||
@import "framework/nav.scss";
|
||||
@import "framework/pagination.scss";
|
||||
@import "framework/progress.scss";
|
||||
@import "framework/panels.scss";
|
||||
@import "framework/selects.scss";
|
||||
@import "framework/sidebar.scss";
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
html.turbolinks-progress-bar::before {
|
||||
background-color: $progress-color!important;
|
||||
height: 2px!important;
|
||||
box-shadow: 0 0 10px $progress-color, 0 0 5px $progress-color;
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
module JavascriptHelper
|
||||
def page_specific_javascript_tag(js)
|
||||
javascript_include_tag asset_path(js), { "data-turbolinks-track" => true }
|
||||
javascript_include_tag asset_path(js)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,4 +6,4 @@
|
|||
- providers.each do |provider|
|
||||
%span.light
|
||||
- has_icon = provider_has_icon?(provider)
|
||||
= link_to provider_image_tag(provider), omniauth_authorize_path(:user, provider), method: :post, class: (has_icon ? 'oauth-image-link' : 'btn'), "data-no-turbolink" => "true"
|
||||
= link_to provider_image_tag(provider), omniauth_authorize_path(:user, provider), method: :post, class: (has_icon ? 'oauth-image-link' : 'btn')
|
||||
|
|
|
@ -82,7 +82,7 @@
|
|||
rather than Git. Please convert
|
||||
= link_to 'them to Git,', 'https://www.atlassian.com/git/tutorials/migrating-overview'
|
||||
and go through the
|
||||
= link_to 'import flow', status_import_bitbucket_path, 'data-no-turbolink' => 'true'
|
||||
= link_to 'import flow', status_import_bitbucket_path
|
||||
again.
|
||||
|
||||
.js-importer-status{ data: { jobs_import_path: "#{jobs_import_bitbucket_path}", import_path: "#{import_bitbucket_path}" } }
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
- if content_for?(:page_specific_javascripts)
|
||||
= yield :page_specific_javascripts
|
||||
|
||||
= yield :project_javascripts
|
||||
|
||||
= csrf_meta_tags
|
||||
|
||||
- unless browser.safari?
|
||||
|
|
|
@ -4,9 +4,6 @@
|
|||
%body{ class: "#{user_application_theme}", data: { page: body_data_page, project: "#{@project.path if @project}", group: "#{@group.path if @group}" } }
|
||||
= Gon::Base.render_data
|
||||
|
||||
-# Ideally this would be inside the head, but turbolinks only evaluates page-specific JS in the body.
|
||||
= yield :scripts_body_top
|
||||
|
||||
= render "layouts/header/default", title: header_title
|
||||
= render 'layouts/page', sidebar: sidebar, nav: nav
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
- header_title project_title(@project) unless header_title
|
||||
- nav "project"
|
||||
|
||||
- content_for :scripts_body_top do
|
||||
- content_for :project_javascripts do
|
||||
- project = @target_project || @project
|
||||
- if @project_wiki && @page
|
||||
- preview_markdown_path = namespace_project_wiki_preview_markdown_path(project.namespace, project, @page.slug)
|
||||
|
|
|
@ -82,7 +82,7 @@
|
|||
= link_to unlink_profile_account_path(provider: provider), method: :delete, class: 'provider-btn' do
|
||||
Disconnect
|
||||
- else
|
||||
= link_to omniauth_authorize_path(:user, provider), method: :post, class: 'provider-btn not-active', "data-no-turbolink" => "true" do
|
||||
= link_to omniauth_authorize_path(:user, provider), method: :post, class: 'provider-btn not-active' do
|
||||
Connect
|
||||
%hr
|
||||
- if current_user.can_change_username?
|
||||
|
|
|
@ -108,10 +108,10 @@
|
|||
= render "projects/commit/change", type: 'cherry-pick', commit: @merge_request.merge_commit, title: @merge_request.title
|
||||
|
||||
:javascript
|
||||
var merge_request;
|
||||
|
||||
merge_request = new MergeRequest({
|
||||
action: "#{controller.action_name}"
|
||||
$(function () {
|
||||
new MergeRequest({
|
||||
action: "#{controller.action_name}"
|
||||
});
|
||||
});
|
||||
|
||||
var mrRefreshWidgetUrl = "#{mr_widget_refresh_url(@merge_request)}";
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
= icon('github', text: 'GitHub')
|
||||
%div
|
||||
- if bitbucket_import_enabled?
|
||||
= link_to status_import_bitbucket_path, class: "btn import_bitbucket #{'how_to_import_link' unless bitbucket_import_configured?}", "data-no-turbolink" => "true" do
|
||||
= link_to status_import_bitbucket_path, class: "btn import_bitbucket #{'how_to_import_link' unless bitbucket_import_configured?}" do
|
||||
= icon('bitbucket', text: 'Bitbucket')
|
||||
- unless bitbucket_import_configured?
|
||||
= render 'bitbucket_import_modal'
|
||||
|
|
|
@ -92,5 +92,5 @@
|
|||
new SubscriptionSelect();
|
||||
$('form.filter-form').on('submit', function (event) {
|
||||
event.preventDefault();
|
||||
Turbolinks.visit(this.action + '&' + $(this).serialize());
|
||||
gl.utils.visitUrl(this.action + '&' + $(this).serialize());
|
||||
});
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Remove turbolinks.
|
||||
merge_request: !8570
|
||||
author:
|
|
@ -501,6 +501,9 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
|
|||
|
||||
step 'I fill in merge request search with "Fe"' do
|
||||
fill_in 'issuable_search', with: "Fe"
|
||||
page.within '.merge-requests-holder' do
|
||||
find('.merge-request')
|
||||
end
|
||||
end
|
||||
|
||||
step 'I click the "Target branch" dropdown' do
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
});
|
||||
});
|
||||
return load = function() {
|
||||
return $(document).trigger('page:load');
|
||||
return $(document).trigger('load');
|
||||
};
|
||||
});
|
||||
}).call(this);
|
||||
|
|
|
@ -34,11 +34,5 @@
|
|||
$('#required5').val('1').change();
|
||||
return expect($('.submit')).not.toBeDisabled();
|
||||
});
|
||||
return it('is called on page:load event', function() {
|
||||
var spy;
|
||||
spy = spyOn($.fn, 'requiresInput');
|
||||
$(document).trigger('page:load');
|
||||
return expect(spy).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
}).call(this);
|
||||
|
|
|
@ -50,7 +50,6 @@
|
|||
secondTab.click();
|
||||
|
||||
expect(historySpy).toHaveBeenCalledWith({
|
||||
turbolinks: true,
|
||||
url: newState,
|
||||
}, document.title, newState);
|
||||
});
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
/* eslint-disable no-new */
|
||||
/* global Build */
|
||||
/* global Turbolinks */
|
||||
|
||||
//= require lib/utils/datetime_utility
|
||||
//= require lib/utils/url_utility
|
||||
//= require build
|
||||
//= require breakpoints
|
||||
//= require jquery.nicescroll
|
||||
//= require turbolinks
|
||||
|
||||
describe('Build', () => {
|
||||
const BUILD_URL = `${gl.TEST_HOST}/frontend-fixtures/builds-project/builds/1`;
|
||||
|
@ -167,7 +166,7 @@ describe('Build', () => {
|
|||
});
|
||||
|
||||
it('reloads the page when the build is done', () => {
|
||||
spyOn(Turbolinks, 'visit');
|
||||
spyOn(gl.utils, 'visitUrl');
|
||||
|
||||
jasmine.clock().tick(4001);
|
||||
const [{ success, context }] = $.ajax.calls.argsFor(1);
|
||||
|
@ -177,7 +176,7 @@ describe('Build', () => {
|
|||
append: true,
|
||||
});
|
||||
|
||||
expect(Turbolinks.visit).toHaveBeenCalledWith(BUILD_URL);
|
||||
expect(gl.utils.visitUrl).toHaveBeenCalledWith(BUILD_URL);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
/* global Turbolinks */
|
||||
|
||||
//= require turbolinks
|
||||
//= require lib/utils/url_utility
|
||||
//= require lib/utils/common_utils
|
||||
//= require filtered_search/filtered_search_token_keys
|
||||
//= require filtered_search/filtered_search_tokenizer
|
||||
|
@ -38,7 +36,7 @@
|
|||
it('should search with a single word', () => {
|
||||
getInput().value = 'searchTerm';
|
||||
|
||||
spyOn(Turbolinks, 'visit').and.callFake((url) => {
|
||||
spyOn(gl.utils, 'visitUrl').and.callFake((url) => {
|
||||
expect(url).toEqual(`${defaultParams}&search=searchTerm`);
|
||||
});
|
||||
|
||||
|
@ -48,7 +46,7 @@
|
|||
it('should search with multiple words', () => {
|
||||
getInput().value = 'awesome search terms';
|
||||
|
||||
spyOn(Turbolinks, 'visit').and.callFake((url) => {
|
||||
spyOn(gl.utils, 'visitUrl').and.callFake((url) => {
|
||||
expect(url).toEqual(`${defaultParams}&search=awesome+search+terms`);
|
||||
});
|
||||
|
||||
|
@ -58,7 +56,7 @@
|
|||
it('should search with special characters', () => {
|
||||
getInput().value = '~!@#$%^&*()_+{}:<>,.?/';
|
||||
|
||||
spyOn(Turbolinks, 'visit').and.callFake((url) => {
|
||||
spyOn(gl.utils, 'visitUrl').and.callFake((url) => {
|
||||
expect(url).toEqual(`${defaultParams}&search=~!%40%23%24%25%5E%26*()_%2B%7B%7D%3A%3C%3E%2C.%3F%2F`);
|
||||
});
|
||||
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
/* eslint-disable comma-dangle, no-param-reassign, no-unused-expressions, max-len */
|
||||
/* global Turbolinks */
|
||||
|
||||
/*= require jquery */
|
||||
/*= require gl_dropdown */
|
||||
/*= require turbolinks */
|
||||
/*= require lib/utils/common_utils */
|
||||
/*= require lib/utils/type_utility */
|
||||
//= require lib/utils/url_utility
|
||||
|
||||
(() => {
|
||||
const NON_SELECTABLE_CLASSES = '.divider, .separator, .dropdown-header, .dropdown-menu-empty-link';
|
||||
|
@ -113,13 +112,13 @@
|
|||
expect(this.dropdownContainerElement).toHaveClass('open');
|
||||
const randomIndex = Math.floor(Math.random() * (this.projectsData.length - 1)) + 0;
|
||||
navigateWithKeys('down', randomIndex, () => {
|
||||
spyOn(Turbolinks, 'visit').and.stub();
|
||||
spyOn(gl.utils, 'visitUrl').and.stub();
|
||||
navigateWithKeys('enter', null, () => {
|
||||
expect(this.dropdownContainerElement).not.toHaveClass('open');
|
||||
const link = $(`${ITEM_SELECTOR}:eq(${randomIndex}) a`, this.$dropdownMenuElement);
|
||||
expect(link).toHaveClass('is-active');
|
||||
const linkedLocation = link.attr('href');
|
||||
if (linkedLocation && linkedLocation !== '#') expect(Turbolinks.visit).toHaveBeenCalledWith(linkedLocation);
|
||||
if (linkedLocation && linkedLocation !== '#') expect(gl.utils.visitUrl).toHaveBeenCalledWith(linkedLocation);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
/* global Issuable */
|
||||
/* global Turbolinks */
|
||||
|
||||
//= require lib/utils/url_utility
|
||||
//= require issuable
|
||||
//= require turbolinks
|
||||
|
||||
(() => {
|
||||
const BASE_URL = '/user/project/issues?scope=all&state=closed';
|
||||
|
@ -42,39 +41,39 @@
|
|||
});
|
||||
|
||||
it('should contain only the default parameters', () => {
|
||||
spyOn(Turbolinks, 'visit');
|
||||
spyOn(gl.utils, 'visitUrl');
|
||||
|
||||
Issuable.filterResults($filtersForm);
|
||||
|
||||
expect(Turbolinks.visit).toHaveBeenCalledWith(BASE_URL + DEFAULT_PARAMS);
|
||||
expect(gl.utils.visitUrl).toHaveBeenCalledWith(BASE_URL + DEFAULT_PARAMS);
|
||||
});
|
||||
|
||||
it('should filter for the phrase "broken"', () => {
|
||||
spyOn(Turbolinks, 'visit');
|
||||
spyOn(gl.utils, 'visitUrl');
|
||||
|
||||
updateForm({ search: 'broken' }, $filtersForm);
|
||||
Issuable.filterResults($filtersForm);
|
||||
const params = `${DEFAULT_PARAMS}&search=broken`;
|
||||
|
||||
expect(Turbolinks.visit).toHaveBeenCalledWith(BASE_URL + params);
|
||||
expect(gl.utils.visitUrl).toHaveBeenCalledWith(BASE_URL + params);
|
||||
});
|
||||
|
||||
it('should keep query parameters after modifying filter', () => {
|
||||
spyOn(Turbolinks, 'visit');
|
||||
spyOn(gl.utils, 'visitUrl');
|
||||
|
||||
// initial filter
|
||||
updateForm({ milestone_title: 'v1.0' }, $filtersForm);
|
||||
|
||||
Issuable.filterResults($filtersForm);
|
||||
let params = `${DEFAULT_PARAMS}&milestone_title=v1.0`;
|
||||
expect(Turbolinks.visit).toHaveBeenCalledWith(BASE_URL + params);
|
||||
expect(gl.utils.visitUrl).toHaveBeenCalledWith(BASE_URL + params);
|
||||
|
||||
// update filter
|
||||
updateForm({ label_name: 'Frontend' }, $filtersForm);
|
||||
|
||||
Issuable.filterResults($filtersForm);
|
||||
params = `${DEFAULT_PARAMS}&milestone_title=v1.0&label_name=Frontend`;
|
||||
expect(Turbolinks.visit).toHaveBeenCalledWith(BASE_URL + params);
|
||||
expect(gl.utils.visitUrl).toHaveBeenCalledWith(BASE_URL + params);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -99,7 +99,6 @@
|
|||
});
|
||||
newState = this.subject('commits');
|
||||
expect(this.spies.history).toHaveBeenCalledWith({
|
||||
turbolinks: true,
|
||||
url: newState
|
||||
}, document.title, newState);
|
||||
});
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
/*= require lib/utils/common_utils */
|
||||
/*= require lib/utils/type_utility */
|
||||
/*= require fuzzaldrin-plus */
|
||||
/*= require turbolinks */
|
||||
/*= require jquery.turbolinks */
|
||||
|
||||
(function() {
|
||||
var addBodyAttributes, assertLinks, dashboardIssuesPath, dashboardMRsPath, groupIssuesPath, groupMRsPath, groupName, mockDashboardOptions, mockGroupOptions, mockProjectOptions, projectIssuesPath, projectMRsPath, projectName, userId, widget;
|
||||
|
|
|
@ -164,7 +164,7 @@
|
|||
const interval = this.smartInterval;
|
||||
|
||||
setTimeout(() => {
|
||||
$(document).trigger('page:before-unload');
|
||||
$(document).trigger('beforeunload');
|
||||
expect(interval.state.intervalId).toBeUndefined();
|
||||
expect(interval.getCurrentInterval()).toBe(interval.cfg.startingInterval);
|
||||
done();
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
// everything in application, however you may get better load performance if you
|
||||
// require the specific files that are being used in the spec that tests them.
|
||||
/*= require jquery */
|
||||
/*= require jquery.turbolinks */
|
||||
/*= require bootstrap */
|
||||
/*= require underscore */
|
||||
|
||||
|
|
49
vendor/assets/javascripts/jquery.turbolinks.js
vendored
49
vendor/assets/javascripts/jquery.turbolinks.js
vendored
|
@ -1,49 +0,0 @@
|
|||
// Generated by CoffeeScript 1.7.1
|
||||
|
||||
/*
|
||||
jQuery.Turbolinks ~ https://github.com/kossnocorp/jquery.turbolinks
|
||||
jQuery plugin for drop-in fix binded events problem caused by Turbolinks
|
||||
|
||||
The MIT License
|
||||
Copyright (c) 2012-2013 Sasha Koss & Rico Sta. Cruz
|
||||
*/
|
||||
|
||||
(function() {
|
||||
var $, $document;
|
||||
|
||||
$ = window.jQuery || (typeof require === "function" ? require('jquery') : void 0);
|
||||
|
||||
$document = $(document);
|
||||
|
||||
$.turbo = {
|
||||
version: '2.1.0',
|
||||
isReady: false,
|
||||
use: function(load, fetch) {
|
||||
return $document.off('.turbo').on("" + load + ".turbo", this.onLoad).on("" + fetch + ".turbo", this.onFetch);
|
||||
},
|
||||
addCallback: function(callback) {
|
||||
if ($.turbo.isReady) {
|
||||
callback($);
|
||||
}
|
||||
return $document.on('turbo:ready', function() {
|
||||
return callback($);
|
||||
});
|
||||
},
|
||||
onLoad: function() {
|
||||
$.turbo.isReady = true;
|
||||
return $document.trigger('turbo:ready');
|
||||
},
|
||||
onFetch: function() {
|
||||
return $.turbo.isReady = false;
|
||||
},
|
||||
register: function() {
|
||||
$(this.onLoad);
|
||||
return $.fn.ready = this.addCallback;
|
||||
}
|
||||
};
|
||||
|
||||
$.turbo.register();
|
||||
|
||||
$.turbo.use('page:load', 'page:fetch');
|
||||
|
||||
}).call(this);
|
Loading…
Reference in a new issue