* Uncomment test for no repositoryUser
in `app/app.spec.js`, so I can work on getting this case working.
* Add $log to repository-detail-controller
* Set $scope.repository properly even if no user
Check if `$scope.repositoryUser` is defined and if it's not, set
`$scope.repository` simply to `$scope.repositoryName`.
* Add route for repo with no repositoryUser
* Make tagsPerPage dropdown use query string vars
instead of putting `tagsPerPage` in the route part of the URL, which
makes it difficult to distinguish between `repositoryName` and
`tagsPerPage`, because the routes are too similar.
* Make first/next links use query string vars
instead of putting `tagsPerPage` in the route part of the URL, which
makes it difficult to distinguish between `repositoryName` and
`tagsPerPage`, because the routes are too similar.
* Move defaultTagsPerPage
from `RepositoryListController` to `TagController`.
I think it makes more sense to read `defaultTagsPerPage` in
`TagController` than to do it in `RepositoryListController` and have to
pass it in URLs.
* Fix "Details for repository" for repo w/ no user
* Fix breadcrumb when no repositoryUser
* Remove tagsPerPage/tagPage from repo detail routes
* Update unit tests to use tagsPerPage qs param
Updated the unit tests to page `tagsPerPage` as a query string parameter
rather than in the route.
* Uncomment assertions about scope.reposPerPage
an make them work by casting string to an int with `parseInt`.
* Make /tag work for image with no repositoryUser
* repository-detail.html: Fix breadcrumb link
for case when there is no `repositoryUser`.
* tag-detail.html: Fix breadcrumb link
when image has no `repositoryUser`.
* tag-detail.html: Fix shown docker pull command
when image has no `repositoryUser`.
* tag-detail.html: Show docker pull cmd in code font
I think it looks better.
For a tag item, there exists a time interval between receiving its name and its manifest.
That will result in some jitter when loading.
Signed-off-by: lijun <lijun@qiyi.com>
* Make "npm test" run Karma tests
Result is this:
```
$ npm test
> docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2
> npm install
> docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2
> bower install
> docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2
> karma start test/karma.conf.js
09 07 2016 13:36:20.771:WARN [karma]: No captured browser, open http://localhost:8080/
09 07 2016 13:36:20.781:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/
09 07 2016 13:36:20.782:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
09 07 2016 13:36:20.788:INFO [launcher]: Starting browser PhantomJS
09 07 2016 13:36:21.250:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#Z4MF21dfMgThOi3zAAAA with id 9538616
PhantomJS 2.1.1 (Mac OS X 0.0.0) Controller: MainCtrl should attach a list of awesomeThings to the scope FAILED
forEach@bower_components/angular/angular.js:326:24
loadModules@bower_components/angular/angular.js:4115:12
createInjector@bower_components/angular/angular.js:4041:22
workFn@bower_components/angular-mocks/angular-mocks.js:2464:60
loaded@http://localhost:8080/context.js:151:17
bower_components/angular/angular.js:4155:53
TypeError: undefined is not an object (evaluating 'scope.awesomeThings') in test/spec/controllers/main.js (line 20)
test/spec/controllers/main.js:20:17
loaded@http://localhost:8080/context.js:151:17
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.005 secs / 0.006 secs)
```
Fixes#139
* Make MainController tests work
This makes the `MainController` tests pass.
```
$ npm test
> docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2
> npm install
> docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2
> bower install
> docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2
> karma start test/karma.conf.js
09 07 2016 17:06:59.974:WARN [karma]: No captured browser, open http://localhost:8080/
09 07 2016 17:06:59.986:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/
09 07 2016 17:06:59.986:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
09 07 2016 17:07:00.133:INFO [launcher]: Starting browser PhantomJS
09 07 2016 17:07:01.051:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#6enEIdsugSVdKVioAAAA with id 62465837
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 SUCCESS (0.004 secs / 0.024 secs)
```
* test/karma.conf.js: Add more files
E.g.:
- angular-bootstrap,
- angular-bootstrap-checkbox
- angular-filter
- angular-loading-bar
- angular-moment
- angular-smart-table
I also alphabetized the list to make it easier to check if something is
already included.
* test/karma.conf.js: Add 'dots' reporter
* Add app/app.spec.js
`app/app.spec.js` contains tests for various routes, which should be
very useful for finding and fixing routing bugs.
See:
- #97
- #100
- #104
- #121
* Enable junit and spec Karma reporters
* app/app.spec.js: Check scope attributes
* app/app.spec.js: Check scope.appMode
* test/spec/controllers/main.js: Check appVersion & registryHost
* MainController: use registry-services
In `MainController`, depend on the `registry-services` module instead of
the `registry-host-services` module.
* Remove app/services/registry-host-services.js
Remove `app/services/registry-host-services.js` because it seems to be
an older, unused version of `app/services/registry-services.js`
* repository-list-controller: Add dependencies
Specify that the `repository-list-controller` module depends on
`ngRoute` and `ui.bootstrap` modules.
Otherwise controller tests of this module fail.
* $scope.repositories = data;
In `repository-list-controller`, do:
$scope.repositories = data;
in the promise callback. Otherwise, the new tests in
`app/repository/repository-list-controller.spec.js` fail.
This is because promises get resolved in templates but not in until
tests -- see
http://stackoverflow.com/questions/15048132/angularjs-promise-not-being-resolved-in-unit-test
* Add unit test for RepositoryListController
in `app/repository/repository-list-controller.spec.js`.
RepositoryListController
✓ should attach some keys to the scope
* Gruntfile.js: Use DOCKER_REGISTRY_{HOST,PORT}
Use `DOCKER_REGISTRY_HOST` and `DOCKER_REGISTRY_PORT` environment
variables so that one can specify a custom Docker registry server while
developing, without hacking `Gruntfile.js`.
Revert changes on default projet file
Add detailed information for tag listing
Removed useless comments, divs, etc -> refactoring
Prevent bugs from future changes of API
Add digest attribute to Manifest query response
Add basic pagination support to tag listing
Add environment variable for tags per page
Fix bug of image history without config + disabled parent id
Fix tags pagination system - Fetch infos for all pages
add missing comma
Fetch infos for all pages -> simpler fix
Disable apache directory listing feature
Update tag pagination system to make it feel more like repository pagination system
Previously a lot of useless AJAX request have been made for each tag.
Those requests where necessary in v1 but not in v2 where they don't do
anything.
The tag listing is cleaned up a log.
The current implementation is basic only. Basically all columns have
been removed just to show the tag name and that's it.
This will be adjusted further in the near future.
We can now navigate forward through all images inside a v2 registry. The
default page size is 10 but it can be changed to some other numbers as
well.
The unused repository selector files have been removed.
The repository list directive was moved to the repository list html
template for simplicity.
The repository list no longer says that it searches for repos but
filters repos on the current page.
The bottom delete repos button has been removed in favor of more space
for the pagination controls.
The pagination works as described here:
https://github.com/docker/distribution/blob/master/docs/spec/api.md#pagination
We take the "Link:" header parameter from the response and extract
portions of it to formulate the next request. As usual, each page is
addressible via the URL.
Note that when changing the number of repositories per page we have no
other way but to go to page 1 and show at max the number of repositories
selected.
There's no way to find out how many repos are there so we cannot provide
page links. Only forward navigation is possible.
Now all files dealing with repositories reside in app/repository and all
dealing with tag reside in app/tag. That's far more easy to maintain
than having tag files spread across multiple folders.
I did some cleanup and unified the deletion of items (e.g. tags or repos) a bit.
Now, you can select multiple repositories or tags and delete them at once.
Confirmation is done using a modal popup.
Success and error messages will still be prompted for each operation using
toastr notification.
One thing that is still missing is the selection of multiple items using some
automation like a stupid "select all" button.
Also, any selected item remains selected even if it does not show up any longer
due to filtering. That's why the delete buttons explicitly tell the number of
items to be deleted. This can cause issues when paging (not implemented yet) or
filtering.
This patch adds browse mode to hide any administration feature e.g.
delete repository/tag, create tag.
If you run container with "-e ENV_BROWSE_MODE=true", this feature will
be enabled.
At the bottom of the screen the docker-registry-frontend will now render the
commit upon the running version is built. The commit is linked to the github
commit page.