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
Léo-Paul Géneau
gitlab-ce
Commits
f7a3e8ff
Commit
f7a3e8ff
authored
Oct 10, 2018
by
Mike Greiling
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Prettify lib/utils modules
parent
9867eaf3
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
131 additions
and
89 deletions
+131
-89
app/assets/javascripts/lib/utils/ajax_cache.js
app/assets/javascripts/lib/utils/ajax_cache.js
+4
-3
app/assets/javascripts/lib/utils/axios_utils.js
app/assets/javascripts/lib/utils/axios_utils.js
+13
-10
app/assets/javascripts/lib/utils/bootstrap_linked_tabs.js
app/assets/javascripts/lib/utils/bootstrap_linked_tabs.js
+7
-3
app/assets/javascripts/lib/utils/cache.js
app/assets/javascripts/lib/utils/cache.js
+1
-1
app/assets/javascripts/lib/utils/datefix.js
app/assets/javascripts/lib/utils/datefix.js
+3
-4
app/assets/javascripts/lib/utils/notify.js
app/assets/javascripts/lib/utils/notify.js
+2
-2
app/assets/javascripts/lib/utils/pretty_time.js
app/assets/javascripts/lib/utils/pretty_time.js
+11
-9
app/assets/javascripts/lib/utils/regexp.js
app/assets/javascripts/lib/utils/regexp.js
+2
-1
app/assets/javascripts/lib/utils/simple_poll.js
app/assets/javascripts/lib/utils/simple_poll.js
+1
-1
app/assets/javascripts/lib/utils/sticky.js
app/assets/javascripts/lib/utils/sticky.js
+18
-6
app/assets/javascripts/lib/utils/text_markdown.js
app/assets/javascripts/lib/utils/text_markdown.js
+49
-25
app/assets/javascripts/lib/utils/text_utility.js
app/assets/javascripts/lib/utils/text_utility.js
+7
-10
app/assets/javascripts/lib/utils/tick_formats.js
app/assets/javascripts/lib/utils/tick_formats.js
+1
-1
app/assets/javascripts/lib/utils/users_cache.js
app/assets/javascripts/lib/utils/users_cache.js
+12
-13
No files found.
app/assets/javascripts/lib/utils/ajax_cache.js
View file @
f7a3e8ff
...
...
@@ -4,7 +4,7 @@ import Cache from './cache';
class
AjaxCache
extends
Cache
{
constructor
()
{
super
();
this
.
pendingRequests
=
{
};
this
.
pendingRequests
=
{};
}
override
(
endpoint
,
data
)
{
...
...
@@ -19,12 +19,13 @@ class AjaxCache extends Cache {
let
pendingRequest
=
this
.
pendingRequests
[
endpoint
];
if
(
!
pendingRequest
)
{
pendingRequest
=
axios
.
get
(
endpoint
)
pendingRequest
=
axios
.
get
(
endpoint
)
.
then
(({
data
})
=>
{
this
.
internalStorage
[
endpoint
]
=
data
;
delete
this
.
pendingRequests
[
endpoint
];
})
.
catch
(
(
e
)
=>
{
.
catch
(
e
=>
{
const
error
=
new
Error
(
`
${
endpoint
}
:
${
e
.
message
}
`
);
error
.
textStatus
=
e
.
message
;
...
...
app/assets/javascripts/lib/utils/axios_utils.js
View file @
f7a3e8ff
...
...
@@ -7,7 +7,7 @@ axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
// Maintain a global counter for active requests
// see: spec/support/wait_for_requests.rb
axios
.
interceptors
.
request
.
use
(
(
config
)
=>
{
axios
.
interceptors
.
request
.
use
(
config
=>
{
window
.
activeVueResources
=
window
.
activeVueResources
||
0
;
window
.
activeVueResources
+=
1
;
...
...
@@ -15,15 +15,18 @@ axios.interceptors.request.use((config) => {
});
// Remove the global counter
axios
.
interceptors
.
response
.
use
((
config
)
=>
{
window
.
activeVueResources
-=
1
;
return
config
;
},
(
e
)
=>
{
window
.
activeVueResources
-=
1
;
return
Promise
.
reject
(
e
);
});
axios
.
interceptors
.
response
.
use
(
config
=>
{
window
.
activeVueResources
-=
1
;
return
config
;
},
e
=>
{
window
.
activeVueResources
-=
1
;
return
Promise
.
reject
(
e
);
},
);
export
default
axios
;
...
...
app/assets/javascripts/lib/utils/bootstrap_linked_tabs.js
View file @
f7a3e8ff
...
...
@@ -93,9 +93,13 @@ export default class LinkedTabs {
const
newState
=
`
${
copySource
}${
this
.
currentLocation
.
search
}${
this
.
currentLocation
.
hash
}
`
;
window
.
history
.
replaceState
({
url
:
newState
,
},
document
.
title
,
newState
);
window
.
history
.
replaceState
(
{
url
:
newState
,
},
document
.
title
,
newState
,
);
return
newState
;
}
...
...
app/assets/javascripts/lib/utils/cache.js
View file @
f7a3e8ff
export
default
class
Cache
{
constructor
()
{
this
.
internalStorage
=
{
};
this
.
internalStorage
=
{};
}
get
(
key
)
{
...
...
app/assets/javascripts/lib/utils/datefix.js
View file @
f7a3e8ff
export
const
pad
=
(
val
,
len
=
2
)
=>
(
`0
${
val
}
`
).
slice
(
-
len
);
export
const
pad
=
(
val
,
len
=
2
)
=>
`0
${
val
}
`
.
slice
(
-
len
);
/**
* Formats dates in Pickaday
* @param {String} dateString Date in yyyy-mm-dd format
* @return {Date} UTC format
*/
export
const
parsePikadayDate
=
(
dateString
)
=>
{
export
const
parsePikadayDate
=
dateString
=>
{
const
parts
=
dateString
.
split
(
'
-
'
);
const
year
=
parseInt
(
parts
[
0
],
10
);
const
month
=
parseInt
(
parts
[
1
]
-
1
,
10
);
...
...
@@ -20,7 +19,7 @@ export const parsePikadayDate = (dateString) => {
* @param {Date} date UTC format
* @return {String} Date formated in yyyy-mm-dd
*/
export
const
pikadayToString
=
(
date
)
=>
{
export
const
pikadayToString
=
date
=>
{
const
day
=
pad
(
date
.
getDate
());
const
month
=
pad
(
date
.
getMonth
()
+
1
);
const
year
=
date
.
getFullYear
();
...
...
app/assets/javascripts/lib/utils/notify.js
View file @
f7a3e8ff
...
...
@@ -8,7 +8,7 @@ function notificationGranted(message, opts, onclick) {
return
notification
.
close
();
},
8000
);
return
notification
.
onclick
=
onclick
||
notification
.
close
;
return
(
notification
.
onclick
=
onclick
||
notification
.
close
)
;
}
function
notifyPermissions
()
{
...
...
@@ -21,7 +21,7 @@ function notifyMe(message, body, icon, onclick) {
var
opts
;
opts
=
{
body
:
body
,
icon
:
icon
icon
:
icon
,
};
// Let's check if the browser supports notifications
if
(
!
(
'
Notification
'
in
window
))
{
...
...
app/assets/javascripts/lib/utils/pretty_time.js
View file @
f7a3e8ff
...
...
@@ -27,10 +27,10 @@ export function parseSeconds(seconds, { daysPerWeek = 5, hoursPerDay = 8 } = {})
let
unorderedMinutes
=
Math
.
abs
(
seconds
/
MINUTES_PER_HOUR
);
return
_
.
mapObject
(
timePeriodConstraints
,
(
minutesPerPeriod
)
=>
{
return
_
.
mapObject
(
timePeriodConstraints
,
minutesPerPeriod
=>
{
const
periodCount
=
Math
.
floor
(
unorderedMinutes
/
minutesPerPeriod
);
unorderedMinutes
-=
(
periodCount
*
minutesPerPeriod
)
;
unorderedMinutes
-=
periodCount
*
minutesPerPeriod
;
return
periodCount
;
});
...
...
@@ -42,10 +42,14 @@ export function parseSeconds(seconds, { daysPerWeek = 5, hoursPerDay = 8 } = {})
*/
export
function
stringifyTime
(
timeObject
)
{
const
reducedTime
=
_
.
reduce
(
timeObject
,
(
memo
,
unitValue
,
unitName
)
=>
{
const
isNonZero
=
!!
unitValue
;
return
isNonZero
?
`
${
memo
}
${
unitValue
}${
unitName
.
charAt
(
0
)}
`
:
memo
;
},
''
).
trim
();
const
reducedTime
=
_
.
reduce
(
timeObject
,
(
memo
,
unitValue
,
unitName
)
=>
{
const
isNonZero
=
!!
unitValue
;
return
isNonZero
?
`
${
memo
}
${
unitValue
}${
unitName
.
charAt
(
0
)}
`
:
memo
;
},
''
,
).
trim
();
return
reducedTime
.
length
?
reducedTime
:
'
0m
'
;
}
...
...
@@ -55,7 +59,5 @@ export function stringifyTime(timeObject) {
*/
export
function
abbreviateTime
(
timeStr
)
{
return
timeStr
.
split
(
'
'
)
.
filter
(
unitStr
=>
unitStr
.
charAt
(
0
)
!==
'
0
'
)[
0
];
return
timeStr
.
split
(
'
'
).
filter
(
unitStr
=>
unitStr
.
charAt
(
0
)
!==
'
0
'
)[
0
];
}
app/assets/javascripts/lib/utils/regexp.js
View file @
f7a3e8ff
...
...
@@ -5,6 +5,7 @@
// Inspired by https://github.com/mishoo/UglifyJS/blob/2bc1d02363db3798d5df41fb5059a19edca9b7eb/lib/parse-js.js#L203
// Unicode 6.1
const
unicodeLetters
=
'
\\
u0041-
\\
u005A
\\
u0061-
\\
u007A
\\
u00AA
\\
u00B5
\\
u00BA
\\
u00C0-
\\
u00D6
\\
u00D8-
\\
u00F6
\\
u00F8-
\\
u02C1
\\
u02C6-
\\
u02D1
\\
u02E0-
\\
u02E4
\\
u02EC
\\
u02EE
\\
u0370-
\\
u0374
\\
u0376
\\
u0377
\\
u037A-
\\
u037D
\\
u0386
\\
u0388-
\\
u038A
\\
u038C
\\
u038E-
\\
u03A1
\\
u03A3-
\\
u03F5
\\
u03F7-
\\
u0481
\\
u048A-
\\
u0527
\\
u0531-
\\
u0556
\\
u0559
\\
u0561-
\\
u0587
\\
u05D0-
\\
u05EA
\\
u05F0-
\\
u05F2
\\
u0620-
\\
u064A
\\
u066E
\\
u066F
\\
u0671-
\\
u06D3
\\
u06D5
\\
u06E5
\\
u06E6
\\
u06EE
\\
u06EF
\\
u06FA-
\\
u06FC
\\
u06FF
\\
u0710
\\
u0712-
\\
u072F
\\
u074D-
\\
u07A5
\\
u07B1
\\
u07CA-
\\
u07EA
\\
u07F4
\\
u07F5
\\
u07FA
\\
u0800-
\\
u0815
\\
u081A
\\
u0824
\\
u0828
\\
u0840-
\\
u0858
\\
u08A0
\\
u08A2-
\\
u08AC
\\
u0904-
\\
u0939
\\
u093D
\\
u0950
\\
u0958-
\\
u0961
\\
u0971-
\\
u0977
\\
u0979-
\\
u097F
\\
u0985-
\\
u098C
\\
u098F
\\
u0990
\\
u0993-
\\
u09A8
\\
u09AA-
\\
u09B0
\\
u09B2
\\
u09B6-
\\
u09B9
\\
u09BD
\\
u09CE
\\
u09DC
\\
u09DD
\\
u09DF-
\\
u09E1
\\
u09F0
\\
u09F1
\\
u0A05-
\\
u0A0A
\\
u0A0F
\\
u0A10
\\
u0A13-
\\
u0A28
\\
u0A2A-
\\
u0A30
\\
u0A32
\\
u0A33
\\
u0A35
\\
u0A36
\\
u0A38
\\
u0A39
\\
u0A59-
\\
u0A5C
\\
u0A5E
\\
u0A72-
\\
u0A74
\\
u0A85-
\\
u0A8D
\\
u0A8F-
\\
u0A91
\\
u0A93-
\\
u0AA8
\\
u0AAA-
\\
u0AB0
\\
u0AB2
\\
u0AB3
\\
u0AB5-
\\
u0AB9
\\
u0ABD
\\
u0AD0
\\
u0AE0
\\
u0AE1
\\
u0B05-
\\
u0B0C
\\
u0B0F
\\
u0B10
\\
u0B13-
\\
u0B28
\\
u0B2A-
\\
u0B30
\\
u0B32
\\
u0B33
\\
u0B35-
\\
u0B39
\\
u0B3D
\\
u0B5C
\\
u0B5D
\\
u0B5F-
\\
u0B61
\\
u0B71
\\
u0B83
\\
u0B85-
\\
u0B8A
\\
u0B8E-
\\
u0B90
\\
u0B92-
\\
u0B95
\\
u0B99
\\
u0B9A
\\
u0B9C
\\
u0B9E
\\
u0B9F
\\
u0BA3
\\
u0BA4
\\
u0BA8-
\\
u0BAA
\\
u0BAE-
\\
u0BB9
\\
u0BD0
\\
u0C05-
\\
u0C0C
\\
u0C0E-
\\
u0C10
\\
u0C12-
\\
u0C28
\\
u0C2A-
\\
u0C33
\\
u0C35-
\\
u0C39
\\
u0C3D
\\
u0C58
\\
u0C59
\\
u0C60
\\
u0C61
\\
u0C85-
\\
u0C8C
\\
u0C8E-
\\
u0C90
\\
u0C92-
\\
u0CA8
\\
u0CAA-
\\
u0CB3
\\
u0CB5-
\\
u0CB9
\\
u0CBD
\\
u0CDE
\\
u0CE0
\\
u0CE1
\\
u0CF1
\\
u0CF2
\\
u0D05-
\\
u0D0C
\\
u0D0E-
\\
u0D10
\\
u0D12-
\\
u0D3A
\\
u0D3D
\\
u0D4E
\\
u0D60
\\
u0D61
\\
u0D7A-
\\
u0D7F
\\
u0D85-
\\
u0D96
\\
u0D9A-
\\
u0DB1
\\
u0DB3-
\\
u0DBB
\\
u0DBD
\\
u0DC0-
\\
u0DC6
\\
u0E01-
\\
u0E30
\\
u0E32
\\
u0E33
\\
u0E40-
\\
u0E46
\\
u0E81
\\
u0E82
\\
u0E84
\\
u0E87
\\
u0E88
\\
u0E8A
\\
u0E8D
\\
u0E94-
\\
u0E97
\\
u0E99-
\\
u0E9F
\\
u0EA1-
\\
u0EA3
\\
u0EA5
\\
u0EA7
\\
u0EAA
\\
u0EAB
\\
u0EAD-
\\
u0EB0
\\
u0EB2
\\
u0EB3
\\
u0EBD
\\
u0EC0-
\\
u0EC4
\\
u0EC6
\\
u0EDC-
\\
u0EDF
\\
u0F00
\\
u0F40-
\\
u0F47
\\
u0F49-
\\
u0F6C
\\
u0F88-
\\
u0F8C
\\
u1000-
\\
u102A
\\
u103F
\\
u1050-
\\
u1055
\\
u105A-
\\
u105D
\\
u1061
\\
u1065
\\
u1066
\\
u106E-
\\
u1070
\\
u1075-
\\
u1081
\\
u108E
\\
u10A0-
\\
u10C5
\\
u10C7
\\
u10CD
\\
u10D0-
\\
u10FA
\\
u10FC-
\\
u1248
\\
u124A-
\\
u124D
\\
u1250-
\\
u1256
\\
u1258
\\
u125A-
\\
u125D
\\
u1260-
\\
u1288
\\
u128A-
\\
u128D
\\
u1290-
\\
u12B0
\\
u12B2-
\\
u12B5
\\
u12B8-
\\
u12BE
\\
u12C0
\\
u12C2-
\\
u12C5
\\
u12C8-
\\
u12D6
\\
u12D8-
\\
u1310
\\
u1312-
\\
u1315
\\
u1318-
\\
u135A
\\
u1380-
\\
u138F
\\
u13A0-
\\
u13F4
\\
u1401-
\\
u166C
\\
u166F-
\\
u167F
\\
u1681-
\\
u169A
\\
u16A0-
\\
u16EA
\\
u16EE-
\\
u16F0
\\
u1700-
\\
u170C
\\
u170E-
\\
u1711
\\
u1720-
\\
u1731
\\
u1740-
\\
u1751
\\
u1760-
\\
u176C
\\
u176E-
\\
u1770
\\
u1780-
\\
u17B3
\\
u17D7
\\
u17DC
\\
u1820-
\\
u1877
\\
u1880-
\\
u18A8
\\
u18AA
\\
u18B0-
\\
u18F5
\\
u1900-
\\
u191C
\\
u1950-
\\
u196D
\\
u1970-
\\
u1974
\\
u1980-
\\
u19AB
\\
u19C1-
\\
u19C7
\\
u1A00-
\\
u1A16
\\
u1A20-
\\
u1A54
\\
u1AA7
\\
u1B05-
\\
u1B33
\\
u1B45-
\\
u1B4B
\\
u1B83-
\\
u1BA0
\\
u1BAE
\\
u1BAF
\\
u1BBA-
\\
u1BE5
\\
u1C00-
\\
u1C23
\\
u1C4D-
\\
u1C4F
\\
u1C5A-
\\
u1C7D
\\
u1CE9-
\\
u1CEC
\\
u1CEE-
\\
u1CF1
\\
u1CF5
\\
u1CF6
\\
u1D00-
\\
u1DBF
\\
u1E00-
\\
u1F15
\\
u1F18-
\\
u1F1D
\\
u1F20-
\\
u1F45
\\
u1F48-
\\
u1F4D
\\
u1F50-
\\
u1F57
\\
u1F59
\\
u1F5B
\\
u1F5D
\\
u1F5F-
\\
u1F7D
\\
u1F80-
\\
u1FB4
\\
u1FB6-
\\
u1FBC
\\
u1FBE
\\
u1FC2-
\\
u1FC4
\\
u1FC6-
\\
u1FCC
\\
u1FD0-
\\
u1FD3
\\
u1FD6-
\\
u1FDB
\\
u1FE0-
\\
u1FEC
\\
u1FF2-
\\
u1FF4
\\
u1FF6-
\\
u1FFC
\\
u2071
\\
u207F
\\
u2090-
\\
u209C
\\
u2102
\\
u2107
\\
u210A-
\\
u2113
\\
u2115
\\
u2119-
\\
u211D
\\
u2124
\\
u2126
\\
u2128
\\
u212A-
\\
u212D
\\
u212F-
\\
u2139
\\
u213C-
\\
u213F
\\
u2145-
\\
u2149
\\
u214E
\\
u2160-
\\
u2188
\\
u2C00-
\\
u2C2E
\\
u2C30-
\\
u2C5E
\\
u2C60-
\\
u2CE4
\\
u2CEB-
\\
u2CEE
\\
u2CF2
\\
u2CF3
\\
u2D00-
\\
u2D25
\\
u2D27
\\
u2D2D
\\
u2D30-
\\
u2D67
\\
u2D6F
\\
u2D80-
\\
u2D96
\\
u2DA0-
\\
u2DA6
\\
u2DA8-
\\
u2DAE
\\
u2DB0-
\\
u2DB6
\\
u2DB8-
\\
u2DBE
\\
u2DC0-
\\
u2DC6
\\
u2DC8-
\\
u2DCE
\\
u2DD0-
\\
u2DD6
\\
u2DD8-
\\
u2DDE
\\
u2E2F
\\
u3005-
\\
u3007
\\
u3021-
\\
u3029
\\
u3031-
\\
u3035
\\
u3038-
\\
u303C
\\
u3041-
\\
u3096
\\
u309D-
\\
u309F
\\
u30A1-
\\
u30FA
\\
u30FC-
\\
u30FF
\\
u3105-
\\
u312D
\\
u3131-
\\
u318E
\\
u31A0-
\\
u31BA
\\
u31F0-
\\
u31FF
\\
u3400-
\\
u4DB5
\\
u4E00-
\\
u9FCC
\\
uA000-
\\
uA48C
\\
uA4D0-
\\
uA4FD
\\
uA500-
\\
uA60C
\\
uA610-
\\
uA61F
\\
uA62A
\\
uA62B
\\
uA640-
\\
uA66E
\\
uA67F-
\\
uA697
\\
uA6A0-
\\
uA6EF
\\
uA717-
\\
uA71F
\\
uA722-
\\
uA788
\\
uA78B-
\\
uA78E
\\
uA790-
\\
uA793
\\
uA7A0-
\\
uA7AA
\\
uA7F8-
\\
uA801
\\
uA803-
\\
uA805
\\
uA807-
\\
uA80A
\\
uA80C-
\\
uA822
\\
uA840-
\\
uA873
\\
uA882-
\\
uA8B3
\\
uA8F2-
\\
uA8F7
\\
uA8FB
\\
uA90A-
\\
uA925
\\
uA930-
\\
uA946
\\
uA960-
\\
uA97C
\\
uA984-
\\
uA9B2
\\
uA9CF
\\
uAA00-
\\
uAA28
\\
uAA40-
\\
uAA42
\\
uAA44-
\\
uAA4B
\\
uAA60-
\\
uAA76
\\
uAA7A
\\
uAA80-
\\
uAAAF
\\
uAAB1
\\
uAAB5
\\
uAAB6
\\
uAAB9-
\\
uAABD
\\
uAAC0
\\
uAAC2
\\
uAADB-
\\
uAADD
\\
uAAE0-
\\
uAAEA
\\
uAAF2-
\\
uAAF4
\\
uAB01-
\\
uAB06
\\
uAB09-
\\
uAB0E
\\
uAB11-
\\
uAB16
\\
uAB20-
\\
uAB26
\\
uAB28-
\\
uAB2E
\\
uABC0-
\\
uABE2
\\
uAC00-
\\
uD7A3
\\
uD7B0-
\\
uD7C6
\\
uD7CB-
\\
uD7FB
\\
uF900-
\\
uFA6D
\\
uFA70-
\\
uFAD9
\\
uFB00-
\\
uFB06
\\
uFB13-
\\
uFB17
\\
uFB1D
\\
uFB1F-
\\
uFB28
\\
uFB2A-
\\
uFB36
\\
uFB38-
\\
uFB3C
\\
uFB3E
\\
uFB40
\\
uFB41
\\
uFB43
\\
uFB44
\\
uFB46-
\\
uFBB1
\\
uFBD3-
\\
uFD3D
\\
uFD50-
\\
uFD8F
\\
uFD92-
\\
uFDC7
\\
uFDF0-
\\
uFDFB
\\
uFE70-
\\
uFE74
\\
uFE76-
\\
uFEFC
\\
uFF21-
\\
uFF3A
\\
uFF41-
\\
uFF5A
\\
uFF66-
\\
uFFBE
\\
uFFC2-
\\
uFFC7
\\
uFFCA-
\\
uFFCF
\\
uFFD2-
\\
uFFD7
\\
uFFDA-
\\
uFFDC
'
;
const
unicodeLetters
=
'
\\
u0041-
\\
u005A
\\
u0061-
\\
u007A
\\
u00AA
\\
u00B5
\\
u00BA
\\
u00C0-
\\
u00D6
\\
u00D8-
\\
u00F6
\\
u00F8-
\\
u02C1
\\
u02C6-
\\
u02D1
\\
u02E0-
\\
u02E4
\\
u02EC
\\
u02EE
\\
u0370-
\\
u0374
\\
u0376
\\
u0377
\\
u037A-
\\
u037D
\\
u0386
\\
u0388-
\\
u038A
\\
u038C
\\
u038E-
\\
u03A1
\\
u03A3-
\\
u03F5
\\
u03F7-
\\
u0481
\\
u048A-
\\
u0527
\\
u0531-
\\
u0556
\\
u0559
\\
u0561-
\\
u0587
\\
u05D0-
\\
u05EA
\\
u05F0-
\\
u05F2
\\
u0620-
\\
u064A
\\
u066E
\\
u066F
\\
u0671-
\\
u06D3
\\
u06D5
\\
u06E5
\\
u06E6
\\
u06EE
\\
u06EF
\\
u06FA-
\\
u06FC
\\
u06FF
\\
u0710
\\
u0712-
\\
u072F
\\
u074D-
\\
u07A5
\\
u07B1
\\
u07CA-
\\
u07EA
\\
u07F4
\\
u07F5
\\
u07FA
\\
u0800-
\\
u0815
\\
u081A
\\
u0824
\\
u0828
\\
u0840-
\\
u0858
\\
u08A0
\\
u08A2-
\\
u08AC
\\
u0904-
\\
u0939
\\
u093D
\\
u0950
\\
u0958-
\\
u0961
\\
u0971-
\\
u0977
\\
u0979-
\\
u097F
\\
u0985-
\\
u098C
\\
u098F
\\
u0990
\\
u0993-
\\
u09A8
\\
u09AA-
\\
u09B0
\\
u09B2
\\
u09B6-
\\
u09B9
\\
u09BD
\\
u09CE
\\
u09DC
\\
u09DD
\\
u09DF-
\\
u09E1
\\
u09F0
\\
u09F1
\\
u0A05-
\\
u0A0A
\\
u0A0F
\\
u0A10
\\
u0A13-
\\
u0A28
\\
u0A2A-
\\
u0A30
\\
u0A32
\\
u0A33
\\
u0A35
\\
u0A36
\\
u0A38
\\
u0A39
\\
u0A59-
\\
u0A5C
\\
u0A5E
\\
u0A72-
\\
u0A74
\\
u0A85-
\\
u0A8D
\\
u0A8F-
\\
u0A91
\\
u0A93-
\\
u0AA8
\\
u0AAA-
\\
u0AB0
\\
u0AB2
\\
u0AB3
\\
u0AB5-
\\
u0AB9
\\
u0ABD
\\
u0AD0
\\
u0AE0
\\
u0AE1
\\
u0B05-
\\
u0B0C
\\
u0B0F
\\
u0B10
\\
u0B13-
\\
u0B28
\\
u0B2A-
\\
u0B30
\\
u0B32
\\
u0B33
\\
u0B35-
\\
u0B39
\\
u0B3D
\\
u0B5C
\\
u0B5D
\\
u0B5F-
\\
u0B61
\\
u0B71
\\
u0B83
\\
u0B85-
\\
u0B8A
\\
u0B8E-
\\
u0B90
\\
u0B92-
\\
u0B95
\\
u0B99
\\
u0B9A
\\
u0B9C
\\
u0B9E
\\
u0B9F
\\
u0BA3
\\
u0BA4
\\
u0BA8-
\\
u0BAA
\\
u0BAE-
\\
u0BB9
\\
u0BD0
\\
u0C05-
\\
u0C0C
\\
u0C0E-
\\
u0C10
\\
u0C12-
\\
u0C28
\\
u0C2A-
\\
u0C33
\\
u0C35-
\\
u0C39
\\
u0C3D
\\
u0C58
\\
u0C59
\\
u0C60
\\
u0C61
\\
u0C85-
\\
u0C8C
\\
u0C8E-
\\
u0C90
\\
u0C92-
\\
u0CA8
\\
u0CAA-
\\
u0CB3
\\
u0CB5-
\\
u0CB9
\\
u0CBD
\\
u0CDE
\\
u0CE0
\\
u0CE1
\\
u0CF1
\\
u0CF2
\\
u0D05-
\\
u0D0C
\\
u0D0E-
\\
u0D10
\\
u0D12-
\\
u0D3A
\\
u0D3D
\\
u0D4E
\\
u0D60
\\
u0D61
\\
u0D7A-
\\
u0D7F
\\
u0D85-
\\
u0D96
\\
u0D9A-
\\
u0DB1
\\
u0DB3-
\\
u0DBB
\\
u0DBD
\\
u0DC0-
\\
u0DC6
\\
u0E01-
\\
u0E30
\\
u0E32
\\
u0E33
\\
u0E40-
\\
u0E46
\\
u0E81
\\
u0E82
\\
u0E84
\\
u0E87
\\
u0E88
\\
u0E8A
\\
u0E8D
\\
u0E94-
\\
u0E97
\\
u0E99-
\\
u0E9F
\\
u0EA1-
\\
u0EA3
\\
u0EA5
\\
u0EA7
\\
u0EAA
\\
u0EAB
\\
u0EAD-
\\
u0EB0
\\
u0EB2
\\
u0EB3
\\
u0EBD
\\
u0EC0-
\\
u0EC4
\\
u0EC6
\\
u0EDC-
\\
u0EDF
\\
u0F00
\\
u0F40-
\\
u0F47
\\
u0F49-
\\
u0F6C
\\
u0F88-
\\
u0F8C
\\
u1000-
\\
u102A
\\
u103F
\\
u1050-
\\
u1055
\\
u105A-
\\
u105D
\\
u1061
\\
u1065
\\
u1066
\\
u106E-
\\
u1070
\\
u1075-
\\
u1081
\\
u108E
\\
u10A0-
\\
u10C5
\\
u10C7
\\
u10CD
\\
u10D0-
\\
u10FA
\\
u10FC-
\\
u1248
\\
u124A-
\\
u124D
\\
u1250-
\\
u1256
\\
u1258
\\
u125A-
\\
u125D
\\
u1260-
\\
u1288
\\
u128A-
\\
u128D
\\
u1290-
\\
u12B0
\\
u12B2-
\\
u12B5
\\
u12B8-
\\
u12BE
\\
u12C0
\\
u12C2-
\\
u12C5
\\
u12C8-
\\
u12D6
\\
u12D8-
\\
u1310
\\
u1312-
\\
u1315
\\
u1318-
\\
u135A
\\
u1380-
\\
u138F
\\
u13A0-
\\
u13F4
\\
u1401-
\\
u166C
\\
u166F-
\\
u167F
\\
u1681-
\\
u169A
\\
u16A0-
\\
u16EA
\\
u16EE-
\\
u16F0
\\
u1700-
\\
u170C
\\
u170E-
\\
u1711
\\
u1720-
\\
u1731
\\
u1740-
\\
u1751
\\
u1760-
\\
u176C
\\
u176E-
\\
u1770
\\
u1780-
\\
u17B3
\\
u17D7
\\
u17DC
\\
u1820-
\\
u1877
\\
u1880-
\\
u18A8
\\
u18AA
\\
u18B0-
\\
u18F5
\\
u1900-
\\
u191C
\\
u1950-
\\
u196D
\\
u1970-
\\
u1974
\\
u1980-
\\
u19AB
\\
u19C1-
\\
u19C7
\\
u1A00-
\\
u1A16
\\
u1A20-
\\
u1A54
\\
u1AA7
\\
u1B05-
\\
u1B33
\\
u1B45-
\\
u1B4B
\\
u1B83-
\\
u1BA0
\\
u1BAE
\\
u1BAF
\\
u1BBA-
\\
u1BE5
\\
u1C00-
\\
u1C23
\\
u1C4D-
\\
u1C4F
\\
u1C5A-
\\
u1C7D
\\
u1CE9-
\\
u1CEC
\\
u1CEE-
\\
u1CF1
\\
u1CF5
\\
u1CF6
\\
u1D00-
\\
u1DBF
\\
u1E00-
\\
u1F15
\\
u1F18-
\\
u1F1D
\\
u1F20-
\\
u1F45
\\
u1F48-
\\
u1F4D
\\
u1F50-
\\
u1F57
\\
u1F59
\\
u1F5B
\\
u1F5D
\\
u1F5F-
\\
u1F7D
\\
u1F80-
\\
u1FB4
\\
u1FB6-
\\
u1FBC
\\
u1FBE
\\
u1FC2-
\\
u1FC4
\\
u1FC6-
\\
u1FCC
\\
u1FD0-
\\
u1FD3
\\
u1FD6-
\\
u1FDB
\\
u1FE0-
\\
u1FEC
\\
u1FF2-
\\
u1FF4
\\
u1FF6-
\\
u1FFC
\\
u2071
\\
u207F
\\
u2090-
\\
u209C
\\
u2102
\\
u2107
\\
u210A-
\\
u2113
\\
u2115
\\
u2119-
\\
u211D
\\
u2124
\\
u2126
\\
u2128
\\
u212A-
\\
u212D
\\
u212F-
\\
u2139
\\
u213C-
\\
u213F
\\
u2145-
\\
u2149
\\
u214E
\\
u2160-
\\
u2188
\\
u2C00-
\\
u2C2E
\\
u2C30-
\\
u2C5E
\\
u2C60-
\\
u2CE4
\\
u2CEB-
\\
u2CEE
\\
u2CF2
\\
u2CF3
\\
u2D00-
\\
u2D25
\\
u2D27
\\
u2D2D
\\
u2D30-
\\
u2D67
\\
u2D6F
\\
u2D80-
\\
u2D96
\\
u2DA0-
\\
u2DA6
\\
u2DA8-
\\
u2DAE
\\
u2DB0-
\\
u2DB6
\\
u2DB8-
\\
u2DBE
\\
u2DC0-
\\
u2DC6
\\
u2DC8-
\\
u2DCE
\\
u2DD0-
\\
u2DD6
\\
u2DD8-
\\
u2DDE
\\
u2E2F
\\
u3005-
\\
u3007
\\
u3021-
\\
u3029
\\
u3031-
\\
u3035
\\
u3038-
\\
u303C
\\
u3041-
\\
u3096
\\
u309D-
\\
u309F
\\
u30A1-
\\
u30FA
\\
u30FC-
\\
u30FF
\\
u3105-
\\
u312D
\\
u3131-
\\
u318E
\\
u31A0-
\\
u31BA
\\
u31F0-
\\
u31FF
\\
u3400-
\\
u4DB5
\\
u4E00-
\\
u9FCC
\\
uA000-
\\
uA48C
\\
uA4D0-
\\
uA4FD
\\
uA500-
\\
uA60C
\\
uA610-
\\
uA61F
\\
uA62A
\\
uA62B
\\
uA640-
\\
uA66E
\\
uA67F-
\\
uA697
\\
uA6A0-
\\
uA6EF
\\
uA717-
\\
uA71F
\\
uA722-
\\
uA788
\\
uA78B-
\\
uA78E
\\
uA790-
\\
uA793
\\
uA7A0-
\\
uA7AA
\\
uA7F8-
\\
uA801
\\
uA803-
\\
uA805
\\
uA807-
\\
uA80A
\\
uA80C-
\\
uA822
\\
uA840-
\\
uA873
\\
uA882-
\\
uA8B3
\\
uA8F2-
\\
uA8F7
\\
uA8FB
\\
uA90A-
\\
uA925
\\
uA930-
\\
uA946
\\
uA960-
\\
uA97C
\\
uA984-
\\
uA9B2
\\
uA9CF
\\
uAA00-
\\
uAA28
\\
uAA40-
\\
uAA42
\\
uAA44-
\\
uAA4B
\\
uAA60-
\\
uAA76
\\
uAA7A
\\
uAA80-
\\
uAAAF
\\
uAAB1
\\
uAAB5
\\
uAAB6
\\
uAAB9-
\\
uAABD
\\
uAAC0
\\
uAAC2
\\
uAADB-
\\
uAADD
\\
uAAE0-
\\
uAAEA
\\
uAAF2-
\\
uAAF4
\\
uAB01-
\\
uAB06
\\
uAB09-
\\
uAB0E
\\
uAB11-
\\
uAB16
\\
uAB20-
\\
uAB26
\\
uAB28-
\\
uAB2E
\\
uABC0-
\\
uABE2
\\
uAC00-
\\
uD7A3
\\
uD7B0-
\\
uD7C6
\\
uD7CB-
\\
uD7FB
\\
uF900-
\\
uFA6D
\\
uFA70-
\\
uFAD9
\\
uFB00-
\\
uFB06
\\
uFB13-
\\
uFB17
\\
uFB1D
\\
uFB1F-
\\
uFB28
\\
uFB2A-
\\
uFB36
\\
uFB38-
\\
uFB3C
\\
uFB3E
\\
uFB40
\\
uFB41
\\
uFB43
\\
uFB44
\\
uFB46-
\\
uFBB1
\\
uFBD3-
\\
uFD3D
\\
uFD50-
\\
uFD8F
\\
uFD92-
\\
uFDC7
\\
uFDF0-
\\
uFDFB
\\
uFE70-
\\
uFE74
\\
uFE76-
\\
uFEFC
\\
uFF21-
\\
uFF3A
\\
uFF41-
\\
uFF5A
\\
uFF66-
\\
uFFBE
\\
uFFC2-
\\
uFFC7
\\
uFFCA-
\\
uFFCF
\\
uFFD2-
\\
uFFD7
\\
uFFDA-
\\
uFFDC
'
;
export
default
{
unicodeLetters
};
app/assets/javascripts/lib/utils/simple_poll.js
View file @
f7a3e8ff
...
...
@@ -2,7 +2,7 @@ export default (fn, interval = 2000, timeout = 60000) => {
const
startTime
=
Date
.
now
();
return
new
Promise
((
resolve
,
reject
)
=>
{
const
stop
=
arg
=>
(
(
arg
instanceof
Error
)
?
reject
(
arg
)
:
resolve
(
arg
));
const
stop
=
arg
=>
(
arg
instanceof
Error
?
reject
(
arg
)
:
resolve
(
arg
));
const
next
=
()
=>
{
if
(
Date
.
now
()
-
startTime
<
timeout
)
{
setTimeout
(
fn
.
bind
(
null
,
next
,
stop
),
interval
);
...
...
app/assets/javascripts/lib/utils/sticky.js
View file @
f7a3e8ff
...
...
@@ -24,7 +24,11 @@ export const isSticky = (el, scrollY, stickyTop, insertPlaceholder) => {
}
else
if
(
top
>
stickyTop
&&
el
.
classList
.
contains
(
'
is-stuck
'
))
{
el
.
classList
.
remove
(
'
is-stuck
'
);
if
(
insertPlaceholder
&&
el
.
nextElementSibling
&&
el
.
nextElementSibling
.
classList
.
contains
(
'
sticky-placeholder
'
))
{
if
(
insertPlaceholder
&&
el
.
nextElementSibling
&&
el
.
nextElementSibling
.
classList
.
contains
(
'
sticky-placeholder
'
)
)
{
el
.
nextElementSibling
.
remove
();
}
}
...
...
@@ -42,11 +46,19 @@ export const isSticky = (el, scrollY, stickyTop, insertPlaceholder) => {
export
const
stickyMonitor
=
(
el
,
stickyTop
,
insertPlaceholder
=
true
)
=>
{
if
(
!
el
)
return
;
if
(
typeof
CSS
===
'
undefined
'
||
!
(
CSS
.
supports
(
'
(position: -webkit-sticky) or (position: sticky)
'
)))
return
;
if
(
typeof
CSS
===
'
undefined
'
||
!
CSS
.
supports
(
'
(position: -webkit-sticky) or (position: sticky)
'
)
)
return
;
document
.
addEventListener
(
'
scroll
'
,
()
=>
isSticky
(
el
,
window
.
scrollY
,
stickyTop
,
insertPlaceholder
),
{
passive
:
true
,
});
document
.
addEventListener
(
'
scroll
'
,
()
=>
isSticky
(
el
,
window
.
scrollY
,
stickyTop
,
insertPlaceholder
),
{
passive
:
true
,
},
);
};
/**
...
...
@@ -55,6 +67,6 @@ export const stickyMonitor = (el, stickyTop, insertPlaceholder = true) => {
* - If the current environment supports `position: sticky`, do nothing.
* - Can receive an iterable element list (NodeList, jQuery collection, etc.) or single HTMLElement.
*/
export
const
polyfillSticky
=
(
el
)
=>
{
export
const
polyfillSticky
=
el
=>
{
StickyFill
.
add
(
el
);
};
app/assets/javascripts/lib/utils/text_markdown.js
View file @
f7a3e8ff
...
...
@@ -8,12 +8,18 @@ function selectedText(text, textarea) {
function
lineBefore
(
text
,
textarea
)
{
var
split
;
split
=
text
.
substring
(
0
,
textarea
.
selectionStart
).
trim
().
split
(
'
\n
'
);
split
=
text
.
substring
(
0
,
textarea
.
selectionStart
)
.
trim
()
.
split
(
'
\n
'
);
return
split
[
split
.
length
-
1
];
}
function
lineAfter
(
text
,
textarea
)
{
return
text
.
substring
(
textarea
.
selectionEnd
).
trim
().
split
(
'
\n
'
)[
0
];
return
text
.
substring
(
textarea
.
selectionEnd
)
.
trim
()
.
split
(
'
\n
'
)[
0
];
}
function
blockTagText
(
text
,
textArea
,
blockTag
,
selected
)
{
...
...
@@ -27,7 +33,7 @@ function blockTagText(text, textArea, blockTag, selected) {
}
return
selected
;
}
else
{
return
blockTag
+
"
\n
"
+
selected
+
"
\n
"
+
blockTag
;
return
blockTag
+
'
\n
'
+
selected
+
'
\n
'
+
blockTag
;
}
}
...
...
@@ -58,7 +64,14 @@ function moveCursor({ textArea, tag, wrapped, removedLastNewLine, select }) {
}
export
function
insertMarkdownText
({
textArea
,
text
,
tag
,
blockTag
,
selected
,
wrap
,
select
})
{
var
textToInsert
,
inserted
,
selectedSplit
,
startChar
,
removedLastNewLine
,
removedFirstNewLine
,
currentLineEmpty
,
lastNewLine
;
var
textToInsert
,
inserted
,
selectedSplit
,
startChar
,
removedLastNewLine
,
removedFirstNewLine
,
currentLineEmpty
,
lastNewLine
;
removedLastNewLine
=
false
;
removedFirstNewLine
=
false
;
currentLineEmpty
=
false
;
...
...
@@ -94,21 +107,23 @@ export function insertMarkdownText({ textArea, text, tag, blockTag, selected, wr
if
(
blockTag
!=
null
&&
blockTag
!==
''
)
{
textToInsert
=
blockTagText
(
text
,
textArea
,
blockTag
,
selected
);
}
else
{
textToInsert
=
selectedSplit
.
map
(
function
(
val
)
{
if
(
tag
.
indexOf
(
textPlaceholder
)
>
-
1
)
{
return
tag
.
replace
(
textPlaceholder
,
val
);
}
if
(
val
.
indexOf
(
tag
)
===
0
)
{
return
""
+
(
val
.
replace
(
tag
,
''
));
}
else
{
return
""
+
tag
+
val
;
}
}).
join
(
'
\n
'
);
textToInsert
=
selectedSplit
.
map
(
function
(
val
)
{
if
(
tag
.
indexOf
(
textPlaceholder
)
>
-
1
)
{
return
tag
.
replace
(
textPlaceholder
,
val
);
}
if
(
val
.
indexOf
(
tag
)
===
0
)
{
return
''
+
val
.
replace
(
tag
,
''
);
}
else
{
return
''
+
tag
+
val
;
}
})
.
join
(
'
\n
'
);
}
}
else
if
(
tag
.
indexOf
(
textPlaceholder
)
>
-
1
)
{
textToInsert
=
tag
.
replace
(
textPlaceholder
,
selected
);
}
else
{
textToInsert
=
""
+
startChar
+
tag
+
selected
+
(
wrap
?
tag
:
'
'
);
textToInsert
=
''
+
startChar
+
tag
+
selected
+
(
wrap
?
tag
:
'
'
);
}
if
(
removedFirstNewLine
)
{
...
...
@@ -120,7 +135,13 @@ export function insertMarkdownText({ textArea, text, tag, blockTag, selected, wr
}
insertText
(
textArea
,
textToInsert
);
return
moveCursor
({
textArea
,
tag
:
tag
.
replace
(
textPlaceholder
,
selected
),
wrap
,
removedLastNewLine
,
select
});
return
moveCursor
({
textArea
,
tag
:
tag
.
replace
(
textPlaceholder
,
selected
),
wrap
,
removedLastNewLine
,
select
,
});
}
function
updateText
({
textArea
,
tag
,
blockTag
,
wrap
,
select
})
{
...
...
@@ -138,15 +159,18 @@ function replaceRange(s, start, end, substitute) {
}
export
function
addMarkdownListeners
(
form
)
{
return
$
(
'
.js-md
'
,
form
).
off
(
'
click
'
).
on
(
'
click
'
,
function
()
{
const
$this
=
$
(
this
);
return
updateText
({
textArea
:
$this
.
closest
(
'
.md-area
'
).
find
(
'
textarea
'
),
tag
:
$this
.
data
(
'
mdTag
'
),
blockTag
:
$this
.
data
(
'
mdBlock
'
),
wrap
:
!
$this
.
data
(
'
mdPrepend
'
),
select
:
$this
.
data
(
'
mdSelect
'
)
});
});
return
$
(
'
.js-md
'
,
form
)
.
off
(
'
click
'
)
.
on
(
'
click
'
,
function
()
{
const
$this
=
$
(
this
);
return
updateText
({
textArea
:
$this
.
closest
(
'
.md-area
'
).
find
(
'
textarea
'
),
tag
:
$this
.
data
(
'
mdTag
'
),
blockTag
:
$this
.
data
(
'
mdBlock
'
),
wrap
:
!
$this
.
data
(
'
mdPrepend
'
),
select
:
$this
.
data
(
'
mdSelect
'
),
});
});
}
export
function
removeMarkdownListeners
(
form
)
{
...
...
app/assets/javascripts/lib/utils/text_utility.js
View file @
f7a3e8ff
...
...
@@ -8,7 +8,7 @@
* @returns {String}
*/
export
const
addDelimiter
=
text
=>
(
text
?
text
.
toString
().
replace
(
/
\B(?=(\d{3})
+
(?!\d))
/g
,
'
,
'
)
:
text
)
;
text
?
text
.
toString
().
replace
(
/
\B(?=(\d{3})
+
(?!\d))
/g
,
'
,
'
)
:
text
;
/**
* Returns '99+' for numbers bigger than 99.
...
...
@@ -94,9 +94,7 @@ export function capitalizeFirstCharacter(text) {
* @return {String}
*/
export
function
getFirstCharacterCapitalized
(
text
)
{
return
text
?
text
.
charAt
(
0
).
toUpperCase
()
:
''
;
return
text
?
text
.
charAt
(
0
).
toUpperCase
()
:
''
;
}
/**
...
...
@@ -136,10 +134,9 @@ export const convertToSentenceCase = string => {
* e.g. HelloWorld => Hello World
*
* @param {*} string
*/
export
const
splitCamelCase
=
string
=>
(
*/
export
const
splitCamelCase
=
string
=>
string
.
replace
(
/
([
A-Z
]
+
)([
A-Z
][
a-z
])
/g
,
'
$1 $2
'
)
.
replace
(
/
([
a-z
\d])([
A-Z
])
/g
,
'
$1 $2
'
)
.
trim
()
);
.
replace
(
/
([
A-Z
]
+
)([
A-Z
][
a-z
])
/g
,
'
$1 $2
'
)
.
replace
(
/
([
a-z
\d])([
A-Z
])
/g
,
'
$1 $2
'
)
.
trim
();
app/assets/javascripts/lib/utils/tick_formats.js
View file @
f7a3e8ff
...
...
@@ -26,7 +26,7 @@ initDateFormats();
see also https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#tickFormat
*/
export
const
dateTickFormat
=
(
date
)
=>
{
export
const
dateTickFormat
=
date
=>
{
if
(
date
.
getDate
()
!==
1
)
{
return
dateTimeFormats
.
dayFormat
.
format
(
date
);
}
...
...
app/assets/javascripts/lib/utils/users_cache.js
View file @
f7a3e8ff
...
...
@@ -7,21 +7,20 @@ class UsersCache extends Cache {
return
Promise
.
resolve
(
this
.
get
(
username
));
}
return
Api
.
users
(
''
,
{
username
})
.
then
(({
data
})
=>
{
if
(
!
data
.
length
)
{
throw
new
Error
(
`User "
${
username
}
" could not be found!`
);
}
return
Api
.
users
(
''
,
{
username
}).
then
(({
data
})
=>
{
if
(
!
data
.
length
)
{
throw
new
Error
(
`User "
${
username
}
" could not be found!`
);
}
if
(
data
.
length
>
1
)
{
throw
new
Error
(
`Expected username "
${
username
}
" to be unique!`
);
}
if
(
data
.
length
>
1
)
{
throw
new
Error
(
`Expected username "
${
username
}
" to be unique!`
);
}
const
user
=
data
[
0
];
this
.
internalStorage
[
username
]
=
user
;
return
user
;
});
// missing catch is intentional, error handling depends on use case
const
user
=
data
[
0
];
this
.
internalStorage
[
username
]
=
user
;
return
user
;
});
// missing catch is intentional, error handling depends on use case
}
}
...
...
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