Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
29e1a63d
Commit
29e1a63d
authored
Dec 15, 2017
by
Phil Hughes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Export JS classes as modules
#38869
parent
c96e2edc
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
466 additions
and
503 deletions
+466
-503
app/assets/javascripts/activities.js
app/assets/javascripts/activities.js
+1
-1
app/assets/javascripts/commits.js
app/assets/javascripts/commits.js
+1
-1
app/assets/javascripts/dispatcher.js
app/assets/javascripts/dispatcher.js
+5
-5
app/assets/javascripts/main.js
app/assets/javascripts/main.js
+0
-9
app/assets/javascripts/merge_request.js
app/assets/javascripts/merge_request.js
+2
-2
app/assets/javascripts/merge_request_tabs.js
app/assets/javascripts/merge_request_tabs.js
+324
-329
app/assets/javascripts/notifications_dropdown.js
app/assets/javascripts/notifications_dropdown.js
+21
-27
app/assets/javascripts/notifications_form.js
app/assets/javascripts/notifications_form.js
+44
-49
app/assets/javascripts/pager.js
app/assets/javascripts/pager.js
+65
-69
spec/javascripts/activities_spec.js
spec/javascripts/activities_spec.js
+0
-1
spec/javascripts/commits_spec.js
spec/javascripts/commits_spec.js
+0
-1
spec/javascripts/merge_request_tabs_spec.js
spec/javascripts/merge_request_tabs_spec.js
+2
-2
spec/javascripts/pager_spec.js
spec/javascripts/pager_spec.js
+1
-7
No files found.
app/assets/javascripts/activities.js
View file @
29e1a63d
/* eslint-disable no-param-reassign, class-methods-use-this */
/* eslint-disable no-param-reassign, class-methods-use-this */
/* global Pager */
import
Cookies
from
'
js-cookie
'
;
import
Cookies
from
'
js-cookie
'
;
import
Pager
from
'
./pager
'
;
import
{
localTimeAgo
}
from
'
./lib/utils/datetime_utility
'
;
import
{
localTimeAgo
}
from
'
./lib/utils/datetime_utility
'
;
export
default
class
Activities
{
export
default
class
Activities
{
...
...
app/assets/javascripts/commits.js
View file @
29e1a63d
/* eslint-disable func-names, wrap-iife, consistent-return,
/* eslint-disable func-names, wrap-iife, consistent-return,
no-return-assign, no-param-reassign, one-var-declaration-per-line, no-unused-vars,
no-return-assign, no-param-reassign, one-var-declaration-per-line, no-unused-vars,
prefer-template, object-shorthand, prefer-arrow-callback */
prefer-template, object-shorthand, prefer-arrow-callback */
/* global Pager */
import
{
pluralize
}
from
'
./lib/utils/text_utility
'
;
import
{
pluralize
}
from
'
./lib/utils/text_utility
'
;
import
{
localTimeAgo
}
from
'
./lib/utils/datetime_utility
'
;
import
{
localTimeAgo
}
from
'
./lib/utils/datetime_utility
'
;
import
Pager
from
'
./pager
'
;
export
default
(
function
()
{
export
default
(
function
()
{
const
CommitsList
=
{};
const
CommitsList
=
{};
...
...
app/assets/javascripts/dispatcher.js
View file @
29e1a63d
...
@@ -7,8 +7,8 @@ import IssuableForm from './issuable_form';
...
@@ -7,8 +7,8 @@ import IssuableForm from './issuable_form';
import
LabelsSelect
from
'
./labels_select
'
;
import
LabelsSelect
from
'
./labels_select
'
;
/* global MilestoneSelect */
/* global MilestoneSelect */
import
NewBranchForm
from
'
./new_branch_form
'
;
import
NewBranchForm
from
'
./new_branch_form
'
;
/* global NotificationsForm */
import
NotificationsForm
from
'
./notifications_form
'
;
/* global NotificationsDropdown */
import
notificationsDropdown
from
'
./notifications_dropdown
'
;
import
groupAvatar
from
'
./group_avatar
'
;
import
groupAvatar
from
'
./group_avatar
'
;
import
GroupLabelSubscription
from
'
./group_label_subscription
'
;
import
GroupLabelSubscription
from
'
./group_label_subscription
'
;
/* global LineHighlighter */
/* global LineHighlighter */
...
@@ -414,7 +414,7 @@ import Activities from './activities';
...
@@ -414,7 +414,7 @@ import Activities from './activities';
const
newGroupChildWrapper
=
document
.
querySelector
(
'
.js-new-project-subgroup
'
);
const
newGroupChildWrapper
=
document
.
querySelector
(
'
.js-new-project-subgroup
'
);
shortcut_handler
=
new
ShortcutsNavigation
();
shortcut_handler
=
new
ShortcutsNavigation
();
new
NotificationsForm
();
new
NotificationsForm
();
n
ew
N
otificationsDropdown
();
notificationsDropdown
();
new
ProjectsList
();
new
ProjectsList
();
if
(
newGroupChildWrapper
)
{
if
(
newGroupChildWrapper
)
{
...
@@ -617,7 +617,7 @@ import Activities from './activities';
...
@@ -617,7 +617,7 @@ import Activities from './activities';
break
;
break
;
case
'
profiles
'
:
case
'
profiles
'
:
new
NotificationsForm
();
new
NotificationsForm
();
n
ew
N
otificationsDropdown
();
notificationsDropdown
();
break
;
break
;
case
'
projects
'
:
case
'
projects
'
:
new
Project
();
new
Project
();
...
@@ -640,7 +640,7 @@ import Activities from './activities';
...
@@ -640,7 +640,7 @@ import Activities from './activities';
case
'
show
'
:
case
'
show
'
:
new
Star
();
new
Star
();
new
ProjectNew
();
new
ProjectNew
();
n
ew
N
otificationsDropdown
();
notificationsDropdown
();
break
;
break
;
case
'
wikis
'
:
case
'
wikis
'
:
new
Wikis
();
new
Wikis
();
...
...
app/assets/javascripts/main.js
View file @
29e1a63d
...
@@ -34,16 +34,11 @@ import { getLocationHash, visitUrl } from './lib/utils/url_utility';
...
@@ -34,16 +34,11 @@ import { getLocationHash, visitUrl } from './lib/utils/url_utility';
import
'
./behaviors/
'
;
import
'
./behaviors/
'
;
// everything else
// everything else
import
'
./activities
'
;
import
'
./admin
'
;
import
loadAwardsHandler
from
'
./awards_handler
'
;
import
loadAwardsHandler
from
'
./awards_handler
'
;
import
bp
from
'
./breakpoints
'
;
import
bp
from
'
./breakpoints
'
;
import
'
./confirm_danger_modal
'
;
import
'
./confirm_danger_modal
'
;
import
Flash
,
{
removeFlashClickListener
}
from
'
./flash
'
;
import
Flash
,
{
removeFlashClickListener
}
from
'
./flash
'
;
import
'
./gl_dropdown
'
;
import
'
./gl_dropdown
'
;
import
'
./gl_field_error
'
;
import
'
./gl_field_errors
'
;
import
'
./gl_form
'
;
import
initTodoToggle
from
'
./header
'
;
import
initTodoToggle
from
'
./header
'
;
import
initImporterStatus
from
'
./importer_status
'
;
import
initImporterStatus
from
'
./importer_status
'
;
import
'
./layout_nav
'
;
import
'
./layout_nav
'
;
...
@@ -54,11 +49,7 @@ import './merge_request';
...
@@ -54,11 +49,7 @@ import './merge_request';
import
'
./merge_request_tabs
'
;
import
'
./merge_request_tabs
'
;
import
'
./milestone_select
'
;
import
'
./milestone_select
'
;
import
'
./notes
'
;
import
'
./notes
'
;
import
'
./notifications_dropdown
'
;
import
'
./notifications_form
'
;
import
'
./pager
'
;
import
'
./preview_markdown
'
;
import
'
./preview_markdown
'
;
import
'
./project_import
'
;
import
'
./projects_dropdown
'
;
import
'
./projects_dropdown
'
;
import
'
./render_gfm
'
;
import
'
./render_gfm
'
;
import
'
./right_sidebar
'
;
import
'
./right_sidebar
'
;
...
...
app/assets/javascripts/merge_request.js
View file @
29e1a63d
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
import
'
vendor/jquery.waitforimages
'
;
import
'
vendor/jquery.waitforimages
'
;
import
TaskList
from
'
./task_list
'
;
import
TaskList
from
'
./task_list
'
;
import
'
./merge_request_tabs
'
;
import
MergeRequestTabs
from
'
./merge_request_tabs
'
;
import
IssuablesHelper
from
'
./helpers/issuables_helper
'
;
import
IssuablesHelper
from
'
./helpers/issuables_helper
'
;
import
{
addDelimiter
}
from
'
./lib/utils/text_utility
'
;
import
{
addDelimiter
}
from
'
./lib/utils/text_utility
'
;
...
@@ -51,7 +51,7 @@ import { addDelimiter } from './lib/utils/text_utility';
...
@@ -51,7 +51,7 @@ import { addDelimiter } from './lib/utils/text_utility';
if
(
window
.
mrTabs
)
{
if
(
window
.
mrTabs
)
{
window
.
mrTabs
.
unbindEvents
();
window
.
mrTabs
.
unbindEvents
();
}
}
window
.
mrTabs
=
new
gl
.
MergeRequestTabs
(
this
.
opts
);
window
.
mrTabs
=
new
MergeRequestTabs
(
this
.
opts
);
};
};
MergeRequest
.
prototype
.
showAllCommits
=
function
()
{
MergeRequest
.
prototype
.
showAllCommits
=
function
()
{
...
...
app/assets/javascripts/merge_request_tabs.js
View file @
29e1a63d
...
@@ -63,11 +63,10 @@ import syntaxHighlight from './syntax_highlight';
...
@@ -63,11 +63,10 @@ import syntaxHighlight from './syntax_highlight';
//
//
/* eslint-enable max-len */
/* eslint-enable max-len */
(()
=>
{
// Store the `location` object, allowing for easier stubbing in tests
// Store the `location` object, allowing for easier stubbing in tests
let
location
=
window
.
location
;
let
location
=
window
.
location
;
class
MergeRequestTabs
{
export
default
class
MergeRequestTabs
{
constructor
({
action
,
setUrl
,
stubLocation
}
=
{})
{
constructor
({
action
,
setUrl
,
stubLocation
}
=
{})
{
const
mergeRequestTabs
=
document
.
querySelector
(
'
.js-tabs-affix
'
);
const
mergeRequestTabs
=
document
.
querySelector
(
'
.js-tabs-affix
'
);
...
@@ -442,8 +441,4 @@ import syntaxHighlight from './syntax_highlight';
...
@@ -442,8 +441,4 @@ import syntaxHighlight from './syntax_highlight';
$tabs
.
trigger
(
'
affix.bs.affix
'
);
$tabs
.
trigger
(
'
affix.bs.affix
'
);
}
}
}
}
}
}
window
.
gl
=
window
.
gl
||
{};
window
.
gl
.
MergeRequestTabs
=
MergeRequestTabs
;
})();
app/assets/javascripts/notifications_dropdown.js
View file @
29e1a63d
/* eslint-disable func-names, space-before-function-paren, wrap-iife, one-var, no-var, one-var-declaration-per-line, no-unused-vars, consistent-return, prefer-arrow-callback, no-else-return, max-len */
import
Flash
from
'
./flash
'
;
import
Flash
from
'
./flash
'
;
(
function
()
{
export
default
function
notificationsDropdown
()
{
this
.
NotificationsDropdown
=
(
function
()
{
$
(
document
).
on
(
'
click
'
,
'
.update-notification
'
,
function
updateNotificationCallback
(
e
)
{
function
NotificationsDropdown
()
{
$
(
document
).
off
(
'
click
'
,
'
.update-notification
'
).
on
(
'
click
'
,
'
.update-notification
'
,
function
(
e
)
{
var
form
,
label
,
notificationLevel
;
e
.
preventDefault
();
e
.
preventDefault
();
if
(
$
(
this
).
is
(
'
.is-active
'
)
&&
$
(
this
).
data
(
'
notification-level
'
)
===
'
custom
'
)
{
if
(
$
(
this
).
is
(
'
.is-active
'
)
&&
$
(
this
).
data
(
'
notification-level
'
)
===
'
custom
'
)
{
return
;
return
;
}
}
notificationLevel
=
$
(
this
).
data
(
'
notification-level
'
);
label
=
$
(
this
).
data
(
'
notification-title
'
);
const
notificationLevel
=
$
(
this
).
data
(
'
notification-level
'
);
form
=
$
(
this
).
parents
(
'
.notification-form:first
'
);
const
form
=
$
(
this
).
parents
(
'
.notification-form:first
'
);
form
.
find
(
'
.js-notification-loading
'
).
toggleClass
(
'
fa-bell fa-spin fa-spinner
'
);
form
.
find
(
'
.js-notification-loading
'
).
toggleClass
(
'
fa-bell fa-spin fa-spinner
'
);
form
.
find
(
'
#notification_setting_level
'
).
val
(
notificationLevel
);
form
.
find
(
'
#notification_setting_level
'
).
val
(
notificationLevel
);
return
form
.
submit
();
form
.
submit
();
});
});
$
(
document
).
off
(
'
ajax:success
'
,
'
.notification-form
'
).
on
(
'
ajax:success
'
,
'
.notification-form
'
,
function
(
e
,
data
)
{
$
(
document
).
on
(
'
ajax:success
'
,
'
.notification-form
'
,
(
e
,
data
)
=>
{
if
(
data
.
saved
)
{
if
(
data
.
saved
)
{
return
$
(
e
.
currentTarget
).
closest
(
'
.js-notification-dropdown
'
).
replaceWith
(
data
.
html
);
$
(
e
.
currentTarget
).
closest
(
'
.js-notification-dropdown
'
).
replaceWith
(
data
.
html
);
}
else
{
}
else
{
return
new
Flash
(
'
Failed to save new settings
'
,
'
alert
'
);
Flash
(
'
Failed to save new settings
'
,
'
alert
'
);
}
}
});
});
}
}
return
NotificationsDropdown
;
})();
}).
call
(
window
);
app/assets/javascripts/notifications_form.js
View file @
29e1a63d
/* eslint-disable func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, one-var, one-var-declaration-per-line, newline-per-chained-call, comma-dangle, consistent-return, prefer-arrow-callback, max-len */
export
default
class
NotificationsForm
{
(
function
()
{
constructor
()
{
this
.
NotificationsForm
=
(
function
()
{
function
NotificationsForm
()
{
this
.
toggleCheckbox
=
this
.
toggleCheckbox
.
bind
(
this
);
this
.
toggleCheckbox
=
this
.
toggleCheckbox
.
bind
(
this
);
this
.
removeEventListeners
();
this
.
initEventListeners
();
this
.
initEventListeners
();
}
}
NotificationsForm
.
prototype
.
removeEventListeners
=
function
()
{
initEventListeners
()
{
return
$
(
document
).
off
(
'
change
'
,
'
.js-custom-notification-event
'
);
$
(
document
).
on
(
'
change
'
,
'
.js-custom-notification-event
'
,
this
.
toggleCheckbox
);
};
}
toggleCheckbox
(
e
)
{
const
$checkbox
=
$
(
e
.
currentTarget
);
const
$parent
=
$checkbox
.
closest
(
'
.checkbox
'
);
NotificationsForm
.
prototype
.
initEventListeners
=
function
()
{
this
.
saveEvent
(
$checkbox
,
$parent
);
return
$
(
document
).
on
(
'
change
'
,
'
.js-custom-notification-event
'
,
this
.
toggleCheckbox
);
}
};
NotificationsForm
.
prototype
.
toggleCheckbox
=
function
(
e
)
{
// eslint-disable-next-line class-methods-use-this
var
$checkbox
,
$parent
;
showCheckboxLoadingSpinner
(
$parent
)
{
$checkbox
=
$
(
e
.
currentTarget
);
$parent
.
addClass
(
'
is-loading
'
)
$parent
=
$checkbox
.
closest
(
'
.checkbox
'
);
.
find
(
'
.custom-notification-event-loading
'
)
return
this
.
saveEvent
(
$checkbox
,
$parent
);
.
removeClass
(
'
fa-check
'
)
};
.
addClass
(
'
fa-spin fa-spinner
'
)
.
removeClass
(
'
is-done
'
);
}
NotificationsForm
.
prototype
.
showCheckboxLoadingSpinner
=
function
(
$parent
)
{
saveEvent
(
$checkbox
,
$parent
)
{
return
$parent
.
addClass
(
'
is-loading
'
).
find
(
'
.custom-notification-event-loading
'
).
removeClass
(
'
fa-check
'
).
addClass
(
'
fa-spin fa-spinner
'
).
removeClass
(
'
is-done
'
);
const
form
=
$parent
.
parents
(
'
form:first
'
);
};
NotificationsForm
.
prototype
.
saveEvent
=
function
(
$checkbox
,
$parent
)
{
var
form
;
form
=
$parent
.
parents
(
'
form:first
'
);
return
$
.
ajax
({
return
$
.
ajax
({
url
:
form
.
attr
(
'
action
'
),
url
:
form
.
attr
(
'
action
'
),
method
:
form
.
attr
(
'
method
'
),
method
:
form
.
attr
(
'
method
'
),
dataType
:
'
json
'
,
dataType
:
'
json
'
,
data
:
form
.
serialize
(),
data
:
form
.
serialize
(),
beforeSend
:
(
function
(
_this
)
{
beforeSend
:
()
=>
{
return
function
()
{
this
.
showCheckboxLoadingSpinner
(
$parent
);
return
_this
.
showCheckboxLoadingSpinner
(
$parent
);
},
};
}).
done
((
data
)
=>
{
})(
this
)
}).
done
(
function
(
data
)
{
$checkbox
.
enable
();
$checkbox
.
enable
();
if
(
data
.
saved
)
{
if
(
data
.
saved
)
{
$parent
.
find
(
'
.custom-notification-event-loading
'
).
toggleClass
(
'
fa-spin fa-spinner fa-check is-done
'
);
$parent
.
find
(
'
.custom-notification-event-loading
'
).
toggleClass
(
'
fa-spin fa-spinner fa-check is-done
'
);
return
setTimeout
(
function
()
{
setTimeout
(()
=>
{
return
$parent
.
removeClass
(
'
is-loading
'
).
find
(
'
.custom-notification-event-loading
'
).
toggleClass
(
'
fa-spin fa-spinner fa-check is-done
'
);
$parent
.
removeClass
(
'
is-loading
'
)
.
find
(
'
.custom-notification-event-loading
'
)
.
toggleClass
(
'
fa-spin fa-spinner fa-check is-done
'
);
},
2000
);
},
2000
);
}
}
});
});
};
}
}
return
NotificationsForm
;
})();
}).
call
(
window
);
app/assets/javascripts/pager.js
View file @
29e1a63d
import
{
getParameterByName
}
from
'
~/lib/utils/common_utils
'
;
import
{
getParameterByName
}
from
'
~/lib/utils/common_utils
'
;
import
{
removeParams
}
from
'
./lib/utils/url_utility
'
;
import
{
removeParams
}
from
'
./lib/utils/url_utility
'
;
(()
=>
{
const
ENDLESS_SCROLL_BOTTOM_PX
=
400
;
const
ENDLESS_SCROLL_BOTTOM_PX
=
400
;
const
ENDLESS_SCROLL_FIRE_DELAY_MS
=
1000
;
const
ENDLESS_SCROLL_FIRE_DELAY_MS
=
1000
;
const
Pager
=
{
export
default
{
init
(
limit
=
0
,
preload
=
false
,
disable
=
false
,
prepareData
=
$
.
noop
,
callback
=
$
.
noop
)
{
init
(
limit
=
0
,
preload
=
false
,
disable
=
false
,
prepareData
=
$
.
noop
,
callback
=
$
.
noop
)
{
this
.
url
=
$
(
'
.content_list
'
).
data
(
'
href
'
)
||
removeParams
([
'
limit
'
,
'
offset
'
]);
this
.
url
=
$
(
'
.content_list
'
).
data
(
'
href
'
)
||
removeParams
([
'
limit
'
,
'
offset
'
]);
this
.
limit
=
limit
;
this
.
limit
=
limit
;
...
@@ -72,7 +71,4 @@ import { removeParams } from './lib/utils/url_utility';
...
@@ -72,7 +71,4 @@ import { removeParams } from './lib/utils/url_utility';
},
},
});
});
},
},
};
};
window
.
Pager
=
Pager
;
})();
spec/javascripts/activities_spec.js
View file @
29e1a63d
/* eslint-disable no-unused-expressions, no-prototype-builtins, no-new, no-shadow, max-len */
/* eslint-disable no-unused-expressions, no-prototype-builtins, no-new, no-shadow, max-len */
import
'
vendor/jquery.endless-scroll
'
;
import
'
vendor/jquery.endless-scroll
'
;
import
'
~/pager
'
;
import
Activities
from
'
~/activities
'
;
import
Activities
from
'
~/activities
'
;
(()
=>
{
(()
=>
{
...
...
spec/javascripts/commits_spec.js
View file @
29e1a63d
import
'
vendor/jquery.endless-scroll
'
;
import
'
vendor/jquery.endless-scroll
'
;
import
'
~/pager
'
;
import
CommitsList
from
'
~/commits
'
;
import
CommitsList
from
'
~/commits
'
;
describe
(
'
Commits List
'
,
()
=>
{
describe
(
'
Commits List
'
,
()
=>
{
...
...
spec/javascripts/merge_request_tabs_spec.js
View file @
29e1a63d
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
/* global Notes */
/* global Notes */
import
*
as
urlUtils
from
'
~/lib/utils/url_utility
'
;
import
*
as
urlUtils
from
'
~/lib/utils/url_utility
'
;
import
'
~/merge_request_tabs
'
;
import
MergeRequestTabs
from
'
~/merge_request_tabs
'
;
import
'
~/commit/pipelines/pipelines_bundle
'
;
import
'
~/commit/pipelines/pipelines_bundle
'
;
import
'
~/breakpoints
'
;
import
'
~/breakpoints
'
;
import
'
~/lib/utils/common_utils
'
;
import
'
~/lib/utils/common_utils
'
;
...
@@ -32,7 +32,7 @@ import 'vendor/jquery.scrollTo';
...
@@ -32,7 +32,7 @@ import 'vendor/jquery.scrollTo';
);
);
beforeEach
(
function
()
{
beforeEach
(
function
()
{
this
.
class
=
new
gl
.
MergeRequestTabs
({
stubLocation
:
stubLocation
});
this
.
class
=
new
MergeRequestTabs
({
stubLocation
:
stubLocation
});
setLocation
();
setLocation
();
this
.
spies
=
{
this
.
spies
=
{
...
...
spec/javascripts/pager_spec.js
View file @
29e1a63d
/* global fixture */
/* global fixture */
import
*
as
utils
from
'
~/lib/utils/url_utility
'
;
import
*
as
utils
from
'
~/lib/utils/url_utility
'
;
import
'
~/pager
'
;
import
Pager
from
'
~/pager
'
;
describe
(
'
pager
'
,
()
=>
{
describe
(
'
pager
'
,
()
=>
{
const
Pager
=
window
.
Pager
;
it
(
'
is defined on window
'
,
()
=>
{
expect
(
window
.
Pager
).
toBeDefined
();
});
describe
(
'
init
'
,
()
=>
{
describe
(
'
init
'
,
()
=>
{
const
originalHref
=
window
.
location
.
href
;
const
originalHref
=
window
.
location
.
href
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment