BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
8df62a3a
Unverified
Commit
8df62a3a
authored
Oct 26, 2017
by
Filipa Lacerda
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove old code
parent
bf4e97fc
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
81 additions
and
211 deletions
+81
-211
dispatcher.js
app/assets/javascripts/dispatcher.js
+2
-2
importer_status.js
app/assets/javascripts/importer_status.js
+63
-65
issuable_bulk_update_actions.js
app/assets/javascripts/issuable_bulk_update_actions.js
+0
-1
issuable_index.js
app/assets/javascripts/issuable_index.js
+14
-142
main.js
app/assets/javascripts/main.js
+2
-1
No files found.
app/assets/javascripts/dispatcher.js
View file @
8df62a3a
/* eslint-disable func-names, space-before-function-paren, no-var, prefer-arrow-callback, wrap-iife, no-shadow, consistent-return, one-var, one-var-declaration-per-line, camelcase, default-case, no-new, quotes, no-duplicate-case, no-case-declarations, no-fallthrough, max-len */
/* global ProjectSelect */
/* global IssuableIndex */
import
IssuableIndex
from
'./issuable_index'
;
/* global Milestone */
/* global IssuableForm */
/* global LabelsSelect */
...
...
@@ -173,7 +173,7 @@ import Diff from './diff';
filteredSearchManager
.
setup
();
}
const
pagePrefix
=
page
===
'projects:merge_requests:index'
?
'merge_request_'
:
'issue_'
;
IssuableIndex
.
init
(
pagePrefix
);
new
IssuableIndex
(
pagePrefix
);
shortcut_handler
=
new
ShortcutsNavigation
();
new
UsersSelect
();
...
...
app/assets/javascripts/importer_status.js
View file @
8df62a3a
/* eslint-disable func-names, space-before-function-paren, wrap-iife, camelcase, no-var, one-var, one-var-declaration-per-line, prefer-template, quotes, object-shorthand, comma-dangle, no-unused-vars, prefer-arrow-callback, no-else-return, vars-on-top, no-new, max-len */
(
function
()
{
window
.
ImporterStatus
=
(
function
()
{
function
ImporterStatus
(
jobs_url
,
import_url
)
{
this
.
jobs_url
=
jobs_url
;
this
.
import_url
=
import_url
;
class
ImporterStatus
{
constructor
(
jobsUrl
,
importUrl
)
{
this
.
jobsUrl
=
jobsUrl
;
this
.
importUrl
=
importUrl
;
this
.
initStatusPage
();
this
.
setAutoUpdate
();
}
ImporterStatus
.
prototype
.
initStatusPage
=
function
()
{
$
(
'.js-add-to-import'
).
off
(
'click'
).
on
(
'click'
,
(
function
(
_this
)
{
return
function
(
e
)
{
var
$btn
,
$namespace_input
,
$target_field
,
$tr
,
id
,
target_namespace
,
newName
;
$btn
=
$
(
e
.
currentTarget
);
$tr
=
$btn
.
closest
(
'tr'
);
$target_f
ield
=
$tr
.
find
(
'.import-target'
);
$namespace_input
=
$target_f
ield
.
find
(
'.js-select-namespace option:selected'
);
id
=
$tr
.
attr
(
'id'
).
replace
(
'repo_'
,
''
);
target_namespace
=
null
;
newName
=
null
;
if
(
$namespace_i
nput
.
length
>
0
)
{
target_namespace
=
$namespace_i
nput
[
0
].
innerHTML
;
newName
=
$target_f
ield
.
find
(
'#path'
).
prop
(
'value'
);
$target_field
.
empty
().
append
(
target_namespace
+
"/"
+
newName
);
initStatusPage
()
{
$
(
'.js-add-to-import'
)
.
off
(
'click'
)
.
on
(
'click'
,
(
event
)
=>
{
const
$btn
=
$
(
event
.
currentTarget
);
const
$tr
=
$btn
.
closest
(
'tr'
);
const
$targetF
ield
=
$tr
.
find
(
'.import-target'
);
const
$namespaceInput
=
$targetF
ield
.
find
(
'.js-select-namespace option:selected'
);
const
id
=
$tr
.
attr
(
'id'
).
replace
(
'repo_'
,
''
);
let
targetNamespace
;
let
newName
;
if
(
$namespaceI
nput
.
length
>
0
)
{
targetNamespace
=
$namespaceI
nput
[
0
].
innerHTML
;
newName
=
$targetF
ield
.
find
(
'#path'
).
prop
(
'value'
);
$targetField
.
empty
().
append
(
`
${
targetNamespace
}
/
${
newName
}
`
);
}
$btn
.
disable
().
addClass
(
'is-loading'
);
return
$
.
post
(
_this
.
import_url
,
{
return
$
.
post
(
this
.
importUrl
,
{
repo_id
:
id
,
target_namespace
:
target_n
amespace
,
new_name
:
newName
target_namespace
:
targetN
amespace
,
new_name
:
newName
,
},
{
dataType
:
'script'
dataType
:
'script'
,
});
});
};
})(
this
));
return
$
(
'.js-import-all'
).
off
(
'click'
).
on
(
'click'
,
function
(
e
)
{
var
$btn
;
$btn
=
$
(
this
);
$
(
'.js-import-all'
)
.
off
(
'click'
)
.
on
(
'click'
,
function
onClickImportAll
()
{
const
$btn
=
$
(
this
);
$btn
.
disable
().
addClass
(
'is-loading'
);
return
$
(
'.js-add-to-import'
).
each
(
function
()
{
return
$
(
'.js-add-to-import'
).
each
(
function
triggerAddImport
()
{
return
$
(
this
).
trigger
(
'click'
);
});
});
};
ImporterStatus
.
prototype
.
setAutoUpdate
=
function
()
{
return
setInterval
(((
function
(
_this
)
{
return
function
()
{
return
$
.
get
(
_this
.
jobs_url
,
function
(
data
)
{
return
$
.
each
(
data
,
function
(
i
,
job
)
{
var
job_item
,
status_field
;
job_item
=
$
(
"#project_"
+
job
.
id
);
status_field
=
job_item
.
find
(
".job-status"
);
if
(
job
.
import_status
===
'finished'
)
{
job_item
.
removeClass
(
"active"
).
addClass
(
"success"
);
return
status_field
.
html
(
'<span><i class="fa fa-check"></i> done</span>'
);
}
else
if
(
job
.
import_status
===
'scheduled'
)
{
return
status_field
.
html
(
"<i class='fa fa-spinner fa-spin'></i> scheduled"
);
}
else
if
(
job
.
import_status
===
'started'
)
{
return
status_field
.
html
(
"<i class='fa fa-spinner fa-spin'></i> started"
);
}
else
{
return
status_field
.
html
(
job
.
import_status
);
}
});
});
};
})(
this
)),
4000
);
};
return
ImporterStatus
;
})();
setAutoUpdate
()
{
return
setInterval
(()
=>
$
.
get
(
this
.
jobsUrl
,
data
=>
$
.
each
(
data
,
(
i
,
job
)
=>
{
const
jobItem
=
$
(
`#project_
${
job
.
id
}
`
);
const
statusField
=
jobItem
.
find
(
'.job-status'
);
$
(
function
()
{
if
(
$
(
'.js-importer-status'
).
length
)
{
var
jobsImportPath
=
$
(
'.js-importer-status'
).
data
(
'jobs-import-path'
);
var
importPath
=
$
(
'.js-importer-status'
).
data
(
'import-path'
);
const
spinner
=
'<i class="fa fa-spinner fa-spin"></i>'
;
new
window
.
ImporterStatus
(
jobsImportPath
,
importPath
);
switch
(
job
.
import_status
)
{
case
'finished'
:
jobItem
.
removeClass
(
'active'
).
addClass
(
'success'
);
statusField
.
html
(
'<span><i class="fa fa-check"></i> done</span>'
);
break
;
case
'scheduled'
:
statusField
.
html
(
`
${
spinner
}
scheduled`
);
break
;
case
'started'
:
statusField
.
html
(
`
${
spinner
}
started`
);
break
;
default
:
statusField
.
html
(
job
.
import_status
);
break
;
}
});
}).
call
(
window
);
})),
4000
);
}
}
// eslint-disable-next-line consistent-return
export
default
function
initImporterStatus
()
{
const
importerStatus
=
$
(
'.js-importer-status'
);
const
data
=
importerStatus
.
dataset
;
if
(
importerStatus
.
length
)
{
return
new
ImporterStatus
(
data
.
jobsImportPath
,
data
.
importPath
);
}
}
app/assets/javascripts/issuable_bulk_update_actions.js
View file @
8df62a3a
/* eslint-disable comma-dangle, quotes, consistent-return, func-names, array-callback-return, space-before-function-paren, prefer-arrow-callback, max-len, no-unused-expressions, no-sequences, no-underscore-dangle, no-unused-vars, no-param-reassign */
/* global IssuableIndex */
import
_
from
'underscore'
;
import
Flash
from
'./flash'
;
...
...
app/assets/javascripts/issuable_index.js
View file @
8df62a3a
/* 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 IssuableIndex */
import
_
from
'underscore'
;
import
IssuableBulkUpdateSidebar
from
'./issuable_bulk_update_sidebar'
;
import
IssuableBulkUpdateActions
from
'./issuable_bulk_update_actions'
;
((
global
)
=>
{
var
issuable_created
;
issuable_created
=
false
;
global
.
IssuableIndex
=
{
init
:
function
(
pagePrefix
)
{
IssuableIndex
.
initTemplates
();
IssuableIndex
.
initSearch
();
IssuableIndex
.
initBulkUpdate
(
pagePrefix
);
IssuableIndex
.
initResetFilters
();
export
default
class
IssuableIndex
{
constructor
(
pagePrefix
)
{
this
.
initBulkUpdate
(
pagePrefix
);
IssuableIndex
.
resetIncomingEmailToken
();
IssuableIndex
.
initLabelFilterRemove
();
},
initTemplates
:
function
()
{
return
IssuableIndex
.
labelRow
=
_
.
template
(
'<% _.each(labels, function(label){ %> <span class="label-row btn-group" role="group" aria-label="<%- label.title %>" style="color: <%- label.text_color %>;"> <a href="#" class="btn btn-transparent has-tooltip" style="background-color: <%- label.color %>;" title="<%- label.description %>" data-container="body"> <%- label.title %> </a> <button type="button" class="btn btn-transparent label-remove js-label-filter-remove" style="background-color: <%- label.color %>;" data-label="<%- label.title %>"> <i class="fa fa-times"></i> </button> </span> <% }); %>'
);
},
initSearch
:
function
()
{
const
$searchInput
=
$
(
'#issuable_search'
);
IssuableIndex
.
initSearchState
(
$searchInput
);
// `immediate` param set to false debounces on the `trailing` edge, lets user finish typing
const
debouncedExecSearch
=
_
.
debounce
(
IssuableIndex
.
executeSearch
,
1000
,
false
);
$searchInput
.
off
(
'keyup'
).
on
(
'keyup'
,
debouncedExecSearch
);
// ensures existing filters are preserved when manually submitted
$
(
'#issuable_search_form'
).
on
(
'submit'
,
(
e
)
=>
{
e
.
preventDefault
();
debouncedExecSearch
(
e
);
});
},
initSearchState
:
function
(
$searchInput
)
{
const
currentSearchVal
=
$searchInput
.
val
();
IssuableIndex
.
searchState
=
{
elem
:
$searchInput
,
current
:
currentSearchVal
};
IssuableIndex
.
maybeFocusOnSearch
();
},
accessSearchPristine
:
function
(
set
)
{
// store reference to previous value to prevent search on non-mutating keyup
const
state
=
IssuableIndex
.
searchState
;
const
currentSearchVal
=
state
.
elem
.
val
();
if
(
set
)
{
state
.
current
=
currentSearchVal
;
}
else
{
return
state
.
current
===
currentSearchVal
;
}
},
maybeFocusOnSearch
:
function
()
{
const
currentSearchVal
=
IssuableIndex
.
searchState
.
current
;
if
(
currentSearchVal
&&
currentSearchVal
!==
''
)
{
const
queryLength
=
currentSearchVal
.
length
;
const
$searchInput
=
IssuableIndex
.
searchState
.
elem
;
/* The following ensures that the cursor is initially placed at
* the end of search input when focus is applied. It accounts
* for differences in browser implementations of `setSelectionRange`
* and cursor placement for elements in focus.
*/
$searchInput
.
focus
();
if
(
$searchInput
.
setSelectionRange
)
{
$searchInput
.
setSelectionRange
(
queryLength
,
queryLength
);
}
else
{
$searchInput
.
val
(
currentSearchVal
);
}
this
.
initLabelFilterRemove
();
}
},
executeSearch
:
function
(
e
)
{
const
$search
=
$
(
'#issuable_search'
);
const
$searchName
=
$search
.
attr
(
'name'
);
const
$searchValue
=
$search
.
val
();
const
$filtersForm
=
$
(
'.js-filter-form'
);
const
$input
=
$
(
`input[name='
${
$searchName
}
']`
,
$filtersForm
);
const
isPristine
=
IssuableIndex
.
accessSearchPristine
();
if
(
isPristine
)
{
return
;
}
if
(
!
$input
.
length
)
{
$filtersForm
.
append
(
`<input type='hidden' name='
${
$searchName
}
' value='
${
_
.
escape
(
$searchValue
)}
'/>`
);
}
else
{
$input
.
val
(
$searchValue
);
}
IssuableIndex
.
filterResults
(
$filtersForm
);
},
initLabelFilterRemove
:
function
()
{
return
$
(
document
).
off
(
'click'
,
'.js-label-filter-remove'
).
on
(
'click'
,
'.js-label-filter-remove'
,
function
(
e
)
{
var
$button
;
$button
=
$
(
this
);
// Remove the label input box
$
(
'input[name="label_name[]"]'
).
filter
(
function
()
{
return
this
.
value
===
$button
.
data
(
'label'
);
}).
remove
();
// Submit the form to get new data
IssuableIndex
.
filterResults
(
$
(
'.filter-form'
));
});
},
filterResults
:
(
function
(
_this
)
{
return
function
(
form
)
{
var
formAction
,
formData
,
issuesUrl
;
formData
=
form
.
serializeArray
();
formData
=
formData
.
filter
(
function
(
data
)
{
return
data
.
value
!==
''
;
});
formData
=
$
.
param
(
formData
);
formAction
=
form
.
attr
(
'action'
);
issuesUrl
=
formAction
;
issuesUrl
+=
""
+
(
formAction
.
indexOf
(
'?'
)
===
-
1
?
'?'
:
'&'
);
issuesUrl
+=
formData
;
return
gl
.
utils
.
visitUrl
(
issuesUrl
);
};
})(
this
),
initResetFilters
:
function
()
{
$
(
'.reset-filters'
).
on
(
'click'
,
function
(
e
)
{
e
.
preventDefault
();
const
target
=
e
.
target
;
const
$form
=
$
(
target
).
parents
(
'.js-filter-form'
);
const
baseIssuesUrl
=
target
.
href
;
$form
.
attr
(
'action'
,
baseIssuesUrl
);
gl
.
utils
.
visitUrl
(
baseIssuesUrl
);
});
},
initBulkUpdate
:
function
(
pagePrefix
)
{
initBulkUpdate
(
pagePrefix
)
{
const
userCanBulkUpdate
=
$
(
'.issues-bulk-update'
).
length
>
0
;
const
alreadyInitialized
=
!!
this
.
bulkUpdateSidebar
;
...
...
@@ -146,26 +18,26 @@ import IssuableBulkUpdateActions from './issuable_bulk_update_actions';
this
.
bulkUpdateSidebar
=
new
IssuableBulkUpdateSidebar
();
}
},
resetIncomingEmailToken
:
function
()
{
$
(
'.incoming-email-token-reset'
).
on
(
'click'
,
function
(
e
)
{
}
static
resetIncomingEmailToken
()
{
$
(
'.incoming-email-token-reset'
).
on
(
'click'
,
(
e
)
=>
{
e
.
preventDefault
();
$
.
ajax
({
type
:
'PUT'
,
url
:
$
(
'.incoming-email-token-reset'
).
attr
(
'href'
),
dataType
:
'json'
,
success
:
function
(
response
)
{
success
(
response
)
{
$
(
'#issue_email'
).
val
(
response
.
new_issue_address
).
focus
();
},
beforeSend
:
function
()
{
beforeSend
()
{
$
(
'.incoming-email-token-reset'
).
text
(
'resetting...'
);
},
complete
:
function
()
{
complete
()
{
$
(
'.incoming-email-token-reset'
).
text
(
'reset it'
);
}
},
});
});
}
};
})(
window
);
}
app/assets/javascripts/main.js
View file @
8df62a3a
...
...
@@ -57,7 +57,7 @@ import './gl_field_errors';
import
'./gl_form'
;
import
'./groups_select'
;
import
'./header'
;
import
'./importer_status'
;
import
initImporterStatus
from
'./importer_status'
;
import
'./issuable_index'
;
import
'./issuable_context'
;
import
'./issuable_form'
;
...
...
@@ -140,6 +140,7 @@ $(function () {
var
fitSidebarForSize
;
initBreadcrumbs
();
initImporterStatus
();
// Set the default path for all cookies to GitLab's root directory
Cookies
.
defaults
.
path
=
gon
.
relative_url_root
||
'/'
;
...
...
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