├── .gitignore ├── CONTRIBUTORS ├── LICENSE ├── MANIFEST.in ├── README.md ├── compilets.sh ├── setup.py ├── ts ├── api.ts ├── apiDetails.ts ├── app.ts ├── backupStorage.ts ├── cluster.ts ├── d.ts │ ├── angularjs │ │ ├── README.md │ │ ├── angular-animate.d.ts │ │ ├── angular-cookies.d.ts │ │ ├── angular-mocks-tests.ts │ │ ├── angular-mocks.d.ts │ │ ├── angular-resource-tests.ts │ │ ├── angular-resource.d.ts │ │ ├── angular-route-tests.ts │ │ ├── angular-route.d.ts │ │ ├── angular-sanitize-tests.ts │ │ ├── angular-sanitize.d.ts │ │ ├── angular-scenario.d.ts │ │ ├── angular-tests.ts │ │ ├── angular.d.ts │ │ └── legacy │ │ │ ├── angular-1.0-tests.ts │ │ │ ├── angular-1.0-tests.ts.tscparams │ │ │ ├── angular-1.0.d.ts │ │ │ ├── angular-cookies-1.0.d.ts │ │ │ ├── angular-mocks-1.0.d.ts │ │ │ ├── angular-resource-1.0.d.ts │ │ │ ├── angular-sanitize-1.0.d.ts │ │ │ ├── angular-scenario-1.0.d.ts │ │ │ └── angular-scenario-1.0.d.ts.tscparams │ ├── jquery │ │ ├── jquery-tests.ts │ │ ├── jquery-tests.ts.tscparams │ │ └── jquery.d.ts │ ├── kendo.all.d.ts │ ├── sprintf.d.ts │ └── zstack.d.ts ├── dashboard.ts ├── directives.ts ├── diskOffering.ts ├── eip.ts ├── globalConfig.ts ├── host.ts ├── image.ts ├── instanceOffering.ts ├── l2Network.ts ├── l3Network.ts ├── nav.ts ├── portForwarding.ts ├── primaryStorage.ts ├── securityGroup.ts ├── sideBar.ts ├── utils.ts ├── vip.ts ├── virtualRouter.ts ├── virtualRouterOffering.ts ├── vm.ts ├── volume.ts └── zone.ts ├── zstack-dashboard └── zstack_dashboard ├── __init__.py ├── api_messages.py ├── static ├── app │ └── app.js ├── css │ ├── bootstrap │ │ ├── css │ │ │ ├── bootstrap-theme.css │ │ │ ├── bootstrap-theme.css.map │ │ │ ├── bootstrap-theme.min.css │ │ │ ├── bootstrap.css │ │ │ ├── bootstrap.css.map │ │ │ └── bootstrap.min.css │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ └── glyphicons-halflings-regular.woff │ │ └── js │ │ │ ├── bootstrap.js │ │ │ └── bootstrap.min.js │ ├── font-awesome │ │ ├── css │ │ │ └── font-awesome.css │ │ └── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ └── fontawesome-webfont.woff │ ├── kendo │ │ ├── Bootstrap │ │ │ ├── editor.png │ │ │ ├── imagebrowser.png │ │ │ ├── indeterminate.gif │ │ │ ├── loading-image.gif │ │ │ ├── loading.gif │ │ │ ├── loading_2x.gif │ │ │ ├── markers.png │ │ │ ├── markers_2x.png │ │ │ ├── slider-h.gif │ │ │ ├── slider-v.gif │ │ │ ├── sprite.png │ │ │ └── sprite_2x.png │ │ ├── Default │ │ │ ├── editor.png │ │ │ ├── imagebrowser.png │ │ │ ├── indeterminate.gif │ │ │ ├── loading-image.gif │ │ │ ├── loading.gif │ │ │ ├── loading_2x.gif │ │ │ ├── markers.png │ │ │ ├── markers_2x.png │ │ │ ├── slider-h.gif │ │ │ ├── slider-v.gif │ │ │ ├── sprite.png │ │ │ └── sprite_2x.png │ │ ├── Metro │ │ │ ├── editor.png │ │ │ ├── imagebrowser.png │ │ │ ├── indeterminate.gif │ │ │ ├── loading-image.gif │ │ │ ├── loading.gif │ │ │ ├── loading_2x.gif │ │ │ ├── markers.png │ │ │ ├── markers_2x.png │ │ │ ├── slider-h.gif │ │ │ ├── slider-v.gif │ │ │ ├── sprite.png │ │ │ └── sprite_2x.png │ │ ├── Uniform │ │ │ ├── editor.png │ │ │ ├── imagebrowser.png │ │ │ ├── indeterminate.gif │ │ │ ├── loading-image.gif │ │ │ ├── loading.gif │ │ │ ├── loading_2x.gif │ │ │ ├── markers.png │ │ │ ├── markers_2x.png │ │ │ ├── slider-h.gif │ │ │ ├── slider-v.gif │ │ │ ├── sprite.png │ │ │ └── sprite_2x.png │ │ ├── kendo.bootstrap.css │ │ ├── kendo.bootstrap.min.css │ │ ├── kendo.common-bootstrap.min.css │ │ ├── kendo.common.min.css │ │ ├── kendo.dataviz.bootstrap.min.css │ │ ├── kendo.dataviz.min.css │ │ ├── kendo.dataviz.uniform.min.css │ │ ├── kendo.default.min.css │ │ ├── kendo.metro.min.css │ │ └── kendo.uniform.min.css │ ├── metro-bootstrap.css │ ├── ng-tags-input.css │ ├── zstack.css │ └── zstack1.css ├── images │ ├── zstack_text_icon_32x32.gif │ └── zstack_text_icon_32x32.png ├── img │ ├── ajax-inverse.gif │ ├── ajax-loader.gif │ ├── sidebarbkg.svg │ └── success-icon.png ├── js │ ├── angular-cookies.js │ ├── angular-kendo.js │ ├── angular-kendo.min.js │ ├── angular-route.js │ ├── angular-route.min.js │ ├── angular-route.min.js.map │ ├── angular-translate-loader-static-files.min.js │ ├── angular-translate-storage-cookie.min.js │ ├── angular-translate.min.js │ ├── angular.min.js │ ├── angular.min.js.map │ ├── bootstrap.js │ ├── bootstrap.min.js │ ├── jquery-1.9.1.js │ ├── kendo.all.min.js │ ├── ng-tags-input.js │ ├── sha512.js │ ├── sprintf.min.js │ └── tmhDynamicLocale.js ├── resources │ ├── locale-en_US.json │ ├── locale-zh_CN.json │ └── locale-zh_TW.json └── templates │ ├── apiDetails.html │ ├── apiDetailsDetails.html │ ├── backupStorage │ ├── attachZone.html │ ├── backupStorage.html │ ├── createBackupStorage.html │ ├── detachZone.html │ └── details.html │ ├── cluster │ ├── attachL2Network.html │ ├── attachPrimaryStorage.html │ ├── cluster.html │ ├── createCluster.html │ ├── detachL2Network.html │ ├── detachPrimaryStorage.html │ └── details.html │ ├── console │ ├── images │ │ ├── clipboard.png │ │ ├── connect.png │ │ ├── ctrlaltdel.png │ │ ├── disconnect.png │ │ ├── drag.png │ │ ├── favicon.ico │ │ ├── favicon.png │ │ ├── keyboard.png │ │ ├── mouse_left.png │ │ ├── mouse_middle.png │ │ ├── mouse_none.png │ │ ├── mouse_right.png │ │ ├── screen_320x460.png │ │ ├── screen_57x57.png │ │ ├── screen_700x700.png │ │ └── settings.png │ ├── include │ │ ├── Orbitron700.ttf │ │ ├── Orbitron700.woff │ │ ├── base.css │ │ ├── base64.js │ │ ├── black.css │ │ ├── blue.css │ │ ├── chrome-app │ │ │ └── tcp-client.js │ │ ├── des.js │ │ ├── display.js │ │ ├── input.js │ │ ├── jsunzip.js │ │ ├── logo.js │ │ ├── playback.js │ │ ├── rfb.js │ │ ├── ui.js │ │ ├── util.js │ │ ├── web-socket-js │ │ │ ├── README.txt │ │ │ ├── WebSocketMain.swf │ │ │ ├── swfobject.js │ │ │ └── web_socket.js │ │ ├── websock.js │ │ └── webutil.js │ ├── utils │ │ ├── Makefile │ │ ├── README.md │ │ ├── img2js.py │ │ ├── json2graph.py │ │ ├── launch.sh │ │ ├── nova-novncproxy │ │ ├── rebind │ │ ├── rebind.c │ │ ├── u2x11 │ │ ├── web.py │ │ ├── websocket.py │ │ ├── websockify │ │ ├── websockify.py │ │ └── wsproxy.py │ └── vnc_auto.html │ ├── dashboard │ └── dashboard.html │ ├── directives │ ├── confirmBox.html │ ├── deleteConfirm.html │ ├── search.html │ └── sort.html │ ├── diskOffering │ ├── addDiskOffering.html │ ├── details.html │ └── diskOffering.html │ ├── eip │ ├── attachEip.html │ ├── createEip.html │ ├── detachEip.html │ ├── details.html │ └── eip.html │ ├── globalConfig │ ├── details.html │ ├── editGlobalConfig.html │ └── globalConfig.html │ ├── host │ ├── createHost.html │ ├── details.html │ └── host.html │ ├── image │ ├── addImage.html │ ├── details.html │ └── image.html │ ├── index.html │ ├── instanceOffering │ ├── addInstanceOffering.html │ ├── details.html │ └── instanceOffering.html │ ├── l2Network │ ├── attachCluster.html │ ├── createL2Network.html │ ├── detachCluster.html │ ├── details.html │ └── l2Network.html │ ├── l3Network │ ├── addDns.html │ ├── addIpRange.html │ ├── createL3Network.html │ ├── deleteDns.html │ ├── deleteIpRange.html │ ├── details.html │ └── l3Network.html │ ├── login │ └── login.html │ ├── portForwarding │ ├── attachPortForwarding.html │ ├── createPortForwarding.html │ ├── detachPortForwarding.html │ ├── details.html │ └── portForwarding.html │ ├── primaryStorage │ ├── attachCluster.html │ ├── createPrimaryStorage.html │ ├── detachCluster.html │ ├── details.html │ └── primaryStorage.html │ ├── securityGroup │ ├── addRule.html │ ├── addVmNic.html │ ├── attachL3Network.html │ ├── createSecurityGroup.html │ ├── deleteRule.html │ ├── detachL3Network.html │ ├── details.html │ ├── removeVmNic.html │ └── securityGroup.html │ ├── vip │ ├── createVip.html │ ├── details.html │ └── vip.html │ ├── virtualRouter │ ├── details.html │ └── virtualRouter.html │ ├── virtualRouterOffering │ ├── addVirtualRouterOffering.html │ ├── details.html │ └── virtualRouterOffering.html │ ├── vm │ ├── attachL3Network.html │ ├── attachVolume.html │ ├── changeInstanceOffering.html │ ├── createVm.html │ ├── detachL3Network.html │ ├── detachVolume.html │ ├── details.html │ ├── migrateVm.html │ └── vm.html │ ├── volume │ ├── attachVm.html │ ├── backupSnapshot.html │ ├── backupVolume.html │ ├── createTemplateFromVolume.html │ ├── createVolume.html │ ├── deleteSnapshotFromBackupStorage.html │ ├── deleteVolumeFromBackupStorage.html │ ├── detachVm.html │ ├── details.html │ ├── revertSnapshot.html │ ├── snapshotDetails.html │ ├── takeSnapshot.html │ └── volume.html │ └── zone │ ├── details.html │ ├── templates.html │ └── zone.html ├── utils.py └── web.py /.gitignore: -------------------------------------------------------------------------------- 1 | # .gitignore for Grails 1.2 and 1.3 2 | 3 | # web application files 4 | /web-app/WEB-INF/classes 5 | 6 | # default HSQL database files for production mode 7 | /prodDb.* 8 | 9 | # general HSQL database files 10 | *Db.properties 11 | *Db.script 12 | 13 | # logs 14 | /stacktrace.log 15 | /test/reports 16 | /logs 17 | 18 | # project release file 19 | /*.war 20 | 21 | # plugin release files 22 | /*.zip 23 | /plugin.xml 24 | 25 | # older plugin install locations 26 | /plugins 27 | /web-app/plugins 28 | 29 | # "temporary" build files 30 | /target 31 | *~ 32 | *.pyc 33 | 34 | .idea 35 | 36 | dist/ 37 | zstack_dashboard.egg-info/ 38 | 39 | .gitconfig 40 | -------------------------------------------------------------------------------- /CONTRIBUTORS: -------------------------------------------------------------------------------- 1 | #Authors ordered by first contribution. 2 | # 3 | # Names should be added to this file like: 4 | # Name 5 | 6 | Frank Zhang 7 | Yongkang You 8 | Nan Su 9 | Zhiqiang Hu <1063751150@qq.com> 10 | Qi Wei <804470533@qq.com> 11 | Yu Chen 12 | Wanling Xue <1962670706@qq.com> 13 | Jiangmiao Gao 14 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include zstack-dashboard 2 | recursive-include zstack_dashboard/static * 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # zstack-dashboard 2 | 3 | Web UI for project ZStack http://zstack.org 4 | -------------------------------------------------------------------------------- /compilets.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cd ts 4 | #files=`find -maxdepth 1 -type f -not -name "*.js"` 5 | files=" 6 | api.ts 7 | utils.ts 8 | app.ts 9 | sideBar.ts 10 | nav.ts 11 | zone.ts 12 | cluster.ts 13 | primaryStorage.ts 14 | l2Network.ts 15 | l3Network.ts 16 | backupStorage.ts 17 | host.ts 18 | image.ts 19 | instanceOffering.ts 20 | diskOffering.ts 21 | apiDetails.ts 22 | vm.ts 23 | volume.ts 24 | securityGroup.ts 25 | vip.ts 26 | eip.ts 27 | portForwarding.ts 28 | virtualRouter.ts 29 | virtualRouterOffering.ts 30 | dashboard.ts 31 | globalConfig.ts 32 | directives.ts 33 | " 34 | echo "tsc --out app.js $files" 35 | tsc --out app.js $files 36 | cd - > /dev/null 37 | yes | mv ts/app.js zstack_dashboard/static/app/app.js 38 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup, find_packages 2 | import sys, os 3 | 4 | version = '0.7' 5 | 6 | setup(name='zstack_dashboard', 7 | version=version, 8 | description="zstack ui", 9 | long_description="""\ 10 | zstack""", 11 | classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers 12 | keywords='zstack', 13 | author='Frank Zhang', 14 | author_email='xing5820@gmail.com', 15 | url='', 16 | license='', 17 | packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), 18 | include_package_data=True, 19 | package_data={'':['zstack_dashboard/static/*']}, 20 | zip_safe=True, 21 | install_requires=[ 22 | # -*- Extra requirements: -*- 23 | "Flask", 24 | "kombu", 25 | "librabbitmq", 26 | "argparse", 27 | "Flask-Script", 28 | "simplejson" 29 | ], 30 | entry_points=""" 31 | # -*- Entry points: -*- 32 | """, 33 | data_files=[('/etc/init.d', ['zstack-dashboard'])] 34 | ) 35 | -------------------------------------------------------------------------------- /ts/d.ts/angularjs/angular-animate.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Angular JS 1.2+ (ngAnimate module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Michel Salib 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | 9 | /////////////////////////////////////////////////////////////////////////////// 10 | // ngAnimate module (angular-animate.js) 11 | /////////////////////////////////////////////////////////////////////////////// 12 | declare module ng.animate { 13 | 14 | /////////////////////////////////////////////////////////////////////////// 15 | // AnimateService 16 | // see http://docs.angularjs.org/api/ngAnimate.$animate 17 | /////////////////////////////////////////////////////////////////////////// 18 | interface IAnimateService extends ng.IAnimateService { 19 | enabled(value?: boolean, element?: JQuery): boolean; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ts/d.ts/angularjs/angular-cookies.d.ts: -------------------------------------------------------------------------------- 1 | /// Type definitions for Angular JS 1.2 (ngCookies module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Diego Vilar 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | 7 | /// 8 | 9 | /////////////////////////////////////////////////////////////////////////////// 10 | // ngCookies module (angular-cookies.js) 11 | /////////////////////////////////////////////////////////////////////////////// 12 | declare module ng.cookies { 13 | 14 | /////////////////////////////////////////////////////////////////////////// 15 | // CookieService 16 | // see http://docs.angularjs.org/api/ngCookies.$cookies 17 | /////////////////////////////////////////////////////////////////////////// 18 | interface ICookiesService {} 19 | 20 | /////////////////////////////////////////////////////////////////////////// 21 | // CookieStoreService 22 | // see http://docs.angularjs.org/api/ngCookies.$cookieStore 23 | /////////////////////////////////////////////////////////////////////////// 24 | interface ICookieStoreService { 25 | get(key: string): any; 26 | put(key: string, value: any): void; 27 | remove(key: string): void; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ts/d.ts/angularjs/angular-route-tests.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | /** 4 | * @license HTTP Auth Interceptor Module for AngularJS 5 | * (c) 2013 Jonathan Park @ Daptiv Solutions Inc 6 | * License: MIT 7 | */ 8 | 9 | declare var $routeProvider: ng.route.IRouteProvider; 10 | $routeProvider 11 | .when('/projects/:projectId/dashboard',{ 12 | controller: '' 13 | }) 14 | .otherwise({redirectTo: '/'}); 15 | -------------------------------------------------------------------------------- /ts/d.ts/angularjs/angular-route.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Angular JS 1.2 (ngRoute module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Jonathan Park 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | 9 | /////////////////////////////////////////////////////////////////////////////// 10 | // ngRoute module (angular-route.js) 11 | /////////////////////////////////////////////////////////////////////////////// 12 | declare module ng.route { 13 | 14 | /////////////////////////////////////////////////////////////////////////// 15 | // RouteParamsService 16 | // see http://docs.angularjs.org/api/ngRoute.$routeParams 17 | /////////////////////////////////////////////////////////////////////////// 18 | interface IRouteParamsService {} 19 | 20 | /////////////////////////////////////////////////////////////////////////// 21 | // RouteService 22 | // see http://docs.angularjs.org/api/ngRoute.$route 23 | // see http://docs.angularjs.org/api/ngRoute.$routeProvider 24 | /////////////////////////////////////////////////////////////////////////// 25 | interface IRouteService { 26 | reload(): void; 27 | routes: any; 28 | 29 | // May not always be available. For instance, current will not be available 30 | // to a controller that was not initialized as a result of a route maching. 31 | current?: ICurrentRoute; 32 | } 33 | 34 | // see http://docs.angularjs.org/api/ngRoute.$routeProvider#when for options explanations 35 | interface IRoute { 36 | controller?: any; 37 | controllerAs?: any; 38 | name?: string; 39 | template?: string; 40 | templateUrl?: any; 41 | resolve?: any; 42 | redirectTo?: any; 43 | reloadOnSearch?: boolean; 44 | caseInsensitiveMatch?: boolean; 45 | } 46 | 47 | // see http://docs.angularjs.org/api/ng.$route#current 48 | interface ICurrentRoute extends IRoute { 49 | locals: { 50 | $scope: IScope; 51 | $template: string; 52 | }; 53 | 54 | params: any; 55 | } 56 | 57 | interface IRouteProvider extends IServiceProvider { 58 | otherwise(params: IRoute): IRouteProvider; 59 | /** 60 | * This is a description 61 | * 62 | */ 63 | when(path: string, route: IRoute): IRouteProvider; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /ts/d.ts/angularjs/angular-sanitize-tests.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | var shouldBeString: string; 4 | 5 | declare var $sanitizeService: ng.sanitize.ISanitizeService; 6 | shouldBeString = $sanitizeService(shouldBeString); 7 | 8 | declare var $linky: ng.sanitize.filter.ILinky; 9 | shouldBeString = $linky(shouldBeString); 10 | shouldBeString = $linky(shouldBeString, shouldBeString); 11 | -------------------------------------------------------------------------------- /ts/d.ts/angularjs/angular-sanitize.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Angular JS 1.2 (ngSanitize module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Diego Vilar 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | 7 | /// 8 | 9 | /////////////////////////////////////////////////////////////////////////////// 10 | // ngSanitize module (angular-sanitize.js) 11 | /////////////////////////////////////////////////////////////////////////////// 12 | declare module ng.sanitize { 13 | 14 | /////////////////////////////////////////////////////////////////////////// 15 | // SanitizeService 16 | // see http://docs.angularjs.org/api/ngSanitize.$sanitize 17 | /////////////////////////////////////////////////////////////////////////// 18 | interface ISanitizeService { 19 | (html: string): string; 20 | } 21 | 22 | /////////////////////////////////////////////////////////////////////////// 23 | // Filters included with the ngSanitize 24 | // see https://github.com/angular/angular.js/tree/v1.2.0/src/ngSanitize/filter 25 | /////////////////////////////////////////////////////////////////////////// 26 | export module filter { 27 | 28 | // Finds links in text input and turns them into html links. 29 | // Supports http/https/ftp/mailto and plain email address links. 30 | // see http://code.angularjs.org/1.2.0/docs/api/ngSanitize.filter:linky 31 | interface ILinky { 32 | (text: string, target?: string): string; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /ts/d.ts/angularjs/legacy/angular-1.0-tests.ts.tscparams: -------------------------------------------------------------------------------- 1 | "" 2 | -------------------------------------------------------------------------------- /ts/d.ts/angularjs/legacy/angular-cookies-1.0.d.ts: -------------------------------------------------------------------------------- 1 | /// Type definitions for Angular JS 1.0 (ngCookies module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Diego Vilar 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | 7 | /// 8 | 9 | /////////////////////////////////////////////////////////////////////////////// 10 | // ngCookies module (angular-cookies.js) 11 | /////////////////////////////////////////////////////////////////////////////// 12 | declare module ng.cookies { 13 | 14 | /////////////////////////////////////////////////////////////////////////// 15 | // CookieService 16 | // see http://docs.angularjs.org/api/ngCookies.$cookies 17 | /////////////////////////////////////////////////////////////////////////// 18 | interface ICookiesService {} 19 | 20 | /////////////////////////////////////////////////////////////////////////// 21 | // CookieStoreService 22 | // see http://docs.angularjs.org/api/ngCookies.$cookieStore 23 | /////////////////////////////////////////////////////////////////////////// 24 | interface ICookieStoreService { 25 | get(key: string): any; 26 | put(key: string, value: any): void; 27 | remove(key: string): void; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ts/d.ts/angularjs/legacy/angular-resource-1.0.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Angular JS 1.0 (ngResource module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Diego Vilar 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | 9 | /////////////////////////////////////////////////////////////////////////////// 10 | // ngResource module (angular-resource.js) 11 | /////////////////////////////////////////////////////////////////////////////// 12 | declare module ng.resource { 13 | 14 | /////////////////////////////////////////////////////////////////////////// 15 | // ResourceService 16 | // see http://docs.angularjs.org/api/ngResource.$resource 17 | // Most part of the following definitions were achieved by analyzing the 18 | // actual implementation, since the documentation doesn't seem to cover 19 | // that deeply. 20 | /////////////////////////////////////////////////////////////////////////// 21 | interface IResourceService { 22 | (url: string, paramDefaults?: any, 23 | /** example: {update: { method: 'PUT' }, delete: deleteDescriptor } 24 | where deleteDescriptor : IActionDescriptor */ 25 | actionDescriptors?: any): IResourceClass; 26 | } 27 | 28 | // Just a reference to facilitate describing new actions 29 | interface IActionDescriptor { 30 | method: string; 31 | isArray?: boolean; 32 | params?: any; 33 | headers?: any; 34 | } 35 | 36 | // Baseclass for everyresource with default actions. 37 | // If you define your new actions for the resource, you will need 38 | // to extend this interface and typecast the ResourceClass to it. 39 | interface IResourceClass { 40 | get: IActionCall; 41 | save: IActionCall; 42 | query: IActionCall; 43 | remove: IActionCall; 44 | delete: IActionCall; 45 | } 46 | 47 | // In case of passing the first argument as anything but a function, 48 | // it's gonna be considered data if the action method is POST, PUT or 49 | // PATCH (in other words, methods with body). Otherwise, it's going 50 | // to be considered as parameters to the request. 51 | interface IActionCall { 52 | (): IResource; 53 | (dataOrParams: any): IResource; 54 | (dataOrParams: any, success: Function): IResource; 55 | (success: Function, error?: Function): IResource; 56 | (params: any, data: any, success?: Function, error?: Function): IResource; 57 | } 58 | 59 | interface IResource { 60 | $save: IActionCall; 61 | $remove: IActionCall; 62 | $delete: IActionCall; 63 | 64 | // No documented, but they are there, just as any custom action will be 65 | $query: IActionCall; 66 | $get: IActionCall; 67 | } 68 | 69 | /** when creating a resource factory via IModule.factory */ 70 | interface IResourceServiceFactoryFunction { 71 | ($resource: ng.resource.IResourceService): ng.resource.IResourceClass; 72 | } 73 | } 74 | 75 | /** extensions to base ng based on using angular-resource */ 76 | declare module ng { 77 | 78 | interface IModule { 79 | /** creating a resource service factory */ 80 | factory(name: string, resourceServiceFactoryFunction: ng.resource.IResourceServiceFactoryFunction): IModule; 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /ts/d.ts/angularjs/legacy/angular-sanitize-1.0.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Angular JS 1.0 (ngSanitize module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Diego Vilar 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | 7 | /// 8 | 9 | /////////////////////////////////////////////////////////////////////////////// 10 | // ngSanitize module (angular-sanitize.js) 11 | /////////////////////////////////////////////////////////////////////////////// 12 | declare module ng.sanitize { 13 | 14 | /////////////////////////////////////////////////////////////////////////// 15 | // SanitizeService 16 | // see http://docs.angularjs.org/api/ngSanitize.$sanitize 17 | /////////////////////////////////////////////////////////////////////////// 18 | interface ISanitizeService { 19 | (html: string): string; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /ts/d.ts/angularjs/legacy/angular-scenario-1.0.d.ts.tscparams: -------------------------------------------------------------------------------- 1 | "" 2 | -------------------------------------------------------------------------------- /ts/d.ts/jquery/jquery-tests.ts.tscparams: -------------------------------------------------------------------------------- 1 | "" 2 | -------------------------------------------------------------------------------- /ts/d.ts/sprintf.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for sprintff 2 | // Project: https://github.com/maritz/node-sprintff 3 | // Definitions by: Carlos Ballesteros Velasco 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | // Imported from: https://github.com/soywiz/typescript-node-definitions/sprintff.d.ts 7 | 8 | declare module sprintf { 9 | export function sprintf(fmt: string, ...args: any[]): string; 10 | export function vsprintf(fmt: string, args: any[]): string; 11 | } 12 | -------------------------------------------------------------------------------- /ts/d.ts/zstack.d.ts: -------------------------------------------------------------------------------- 1 | interface CryptoJS { 2 | SHA512 (value:string): string; 3 | } 4 | declare var CryptoJS: CryptoJS; 5 | -------------------------------------------------------------------------------- /ts/nav.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module MNav { 5 | export class Controller { 6 | static $inject = ['$scope', 'Api']; 7 | 8 | private pendingRequestNum : number = 0; 9 | private zstackVersion : string = ''; 10 | 11 | private decrease() { 12 | this.pendingRequestNum --; 13 | if (this.pendingRequestNum <= 0) { 14 | this.pendingRequestNum = 0; 15 | } 16 | } 17 | 18 | constructor(private $scope : any, private api : Utils.Api) { 19 | api.installListener((msg : ApiHeader.APIMessage)=> { 20 | this.pendingRequestNum ++; 21 | }, (msg : ApiHeader.APIMessage, ret : any)=> { 22 | this.decrease(); 23 | }, (msg : ApiHeader.APIMessage, reason : any)=> { 24 | this.decrease(); 25 | }); 26 | 27 | $scope.funcIsProcessing = ()=> { 28 | return this.pendingRequestNum > 0; 29 | }; 30 | 31 | $scope.funcPendingRequestNum = ()=> { 32 | return this.pendingRequestNum; 33 | }; 34 | 35 | $scope.getZStackVersion = ()=> { 36 | return this.zstackVersion; 37 | } 38 | 39 | $scope.$watch(()=>{ 40 | return this.zstackVersion; 41 | },()=>{ 42 | if (this.zstackVersion == '') { 43 | var msgVerSion = new ApiHeader.APIGetVersionMsg(); 44 | this.api.syncApi(msgVerSion, (ret : ApiHeader.APIGetVersionMsgEvent)=> { 45 | this.zstackVersion = ret.version; 46 | }); 47 | } 48 | }); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /ts/sideBar.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module Controller { 5 | export interface SideBarScope extends ng.IScope { 6 | barOptions : kendo.ui.TreeViewOptions; 7 | dataSource : kendo.data.HierarchicalDataSource; 8 | } 9 | 10 | export class SideBar { 11 | constructor($scope : SideBarScope) { 12 | $scope.dataSource = new kendo.data.HierarchicalDataSource({ 13 | data:[ 14 | { 15 | text: "Compute", 16 | url: "#", 17 | items: [ 18 | { 19 | text: "Instance", 20 | url: "#" 21 | }, 22 | { 23 | text: "Host", 24 | url: "#" 25 | }, 26 | { 27 | text: "Cluster", 28 | url: "/#/cluster" 29 | }, 30 | { 31 | text: "Zone", 32 | url: "/#/zone" 33 | }, 34 | ] 35 | }, 36 | { 37 | text: "Storage", 38 | url: "#" 39 | }, 40 | { 41 | text: "Network", 42 | url: "#", 43 | items: [ 44 | { 45 | text: "L2 Network", 46 | url: "#" 47 | }, 48 | { 49 | text: "L3 Network", 50 | url: "#" 51 | }, 52 | { 53 | text: "Network Service", 54 | url: "#", 55 | items: [ 56 | { 57 | text: "Security Group", 58 | url: "#" 59 | }, 60 | { 61 | text: "EIP", 62 | url: "#" 63 | }, 64 | { 65 | text: "Port Forwarding", 66 | url: "#" 67 | }, 68 | { 69 | text: "VIP", 70 | url: "#" 71 | }, 72 | ] 73 | }, 74 | ] 75 | }, 76 | { 77 | text: "Configuration", 78 | url: "#" 79 | } 80 | ] 81 | }); 82 | /* 83 | $scope.barOptions = { 84 | dataSource : new kendo.data.HierarchicalDataSource({ 85 | data:[ 86 | { 87 | text: "Compute", 88 | items: [ 89 | {text: "Instance"}, 90 | {text: "Host"}, 91 | {text: "Cluster"}, 92 | {text: "Zone"}, 93 | ] 94 | }, 95 | { 96 | text: "Storage" 97 | }, 98 | { 99 | text: "Network" 100 | }, 101 | { 102 | text: "Configuration" 103 | } 104 | ] 105 | }) 106 | }; 107 | */ 108 | } 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /zstack_dashboard/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/__init__.py -------------------------------------------------------------------------------- /zstack_dashboard/static/css/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /zstack_dashboard/static/css/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /zstack_dashboard/static/css/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /zstack_dashboard/static/css/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /zstack_dashboard/static/css/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /zstack_dashboard/static/css/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /zstack_dashboard/static/css/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Bootstrap/editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Bootstrap/editor.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Bootstrap/imagebrowser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Bootstrap/imagebrowser.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Bootstrap/indeterminate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Bootstrap/indeterminate.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Bootstrap/loading-image.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Bootstrap/loading-image.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Bootstrap/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Bootstrap/loading.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Bootstrap/loading_2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Bootstrap/loading_2x.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Bootstrap/markers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Bootstrap/markers.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Bootstrap/markers_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Bootstrap/markers_2x.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Bootstrap/slider-h.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Bootstrap/slider-h.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Bootstrap/slider-v.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Bootstrap/slider-v.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Bootstrap/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Bootstrap/sprite.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Bootstrap/sprite_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Bootstrap/sprite_2x.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Default/editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Default/editor.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Default/imagebrowser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Default/imagebrowser.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Default/indeterminate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Default/indeterminate.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Default/loading-image.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Default/loading-image.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Default/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Default/loading.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Default/loading_2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Default/loading_2x.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Default/markers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Default/markers.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Default/markers_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Default/markers_2x.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Default/slider-h.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Default/slider-h.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Default/slider-v.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Default/slider-v.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Default/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Default/sprite.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Default/sprite_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Default/sprite_2x.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Metro/editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Metro/editor.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Metro/imagebrowser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Metro/imagebrowser.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Metro/indeterminate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Metro/indeterminate.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Metro/loading-image.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Metro/loading-image.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Metro/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Metro/loading.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Metro/loading_2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Metro/loading_2x.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Metro/markers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Metro/markers.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Metro/markers_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Metro/markers_2x.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Metro/slider-h.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Metro/slider-h.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Metro/slider-v.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Metro/slider-v.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Metro/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Metro/sprite.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Metro/sprite_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Metro/sprite_2x.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Uniform/editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Uniform/editor.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Uniform/imagebrowser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Uniform/imagebrowser.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Uniform/indeterminate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Uniform/indeterminate.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Uniform/loading-image.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Uniform/loading-image.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Uniform/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Uniform/loading.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Uniform/loading_2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Uniform/loading_2x.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Uniform/markers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Uniform/markers.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Uniform/markers_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Uniform/markers_2x.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Uniform/slider-h.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Uniform/slider-h.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Uniform/slider-v.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Uniform/slider-v.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Uniform/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Uniform/sprite.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/Uniform/sprite_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/css/kendo/Uniform/sprite_2x.png -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/kendo.dataviz.bootstrap.min.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Kendo UI v2014.1.416 (http://www.telerik.com/kendo-ui) 3 | * Copyright 2014 Telerik AD. All rights reserved. 4 | * 5 | * Kendo UI commercial licenses may be obtained at 6 | * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete 7 | * If you do not own a commercial license, this file shall be governed by the trial license terms. 8 | */ 9 | .k-chart .k-selection{border-color:#ccc;transition:box-shadow .2s linear,border-color .2s linear;-moz-transition:box-shadow .2s linear,border-color .2s linear;-webkit-transition:box-shadow .2s linear,border-color .2s linear;-o-transition:box-shadow .2s linear,border-color .2s linear}.k-chart .k-selection:hover{border-color:#9e9e9e}.k-chart .k-handle{background-color:#fff;width:15px;height:15px;-moz-box-shadow:0 0 0 2px rgba(0,0,0,.1);-webkit-box-shadow:0 0 0 2px rgba(0,0,0,.1);box-shadow:0 0 0 2px rgba(0,0,0,.1);-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px}.k-chart .k-handle:hover{background-color:#fff;border-color:#ccc;-moz-box-shadow:0 0 0 2px rgba(0,0,0,.3);-webkit-box-shadow:0 0 0 2px rgba(0,0,0,.3);box-shadow:0 0 0 2px rgba(0,0,0,.3)}.k-chart .k-leftHandle{left:-8px}.k-chart .k-rightHandle{right:-8px}.k-chart .k-navigator-hint .k-tooltip{border:3px solid #fff;-moz-box-shadow:0 0 0 3px rgba(0,0,0,.2);-webkit-box-shadow:0 0 0 3px rgba(0,0,0,.2);box-shadow:0 0 0 3px rgba(0,0,0,.2);background:#fff;color:#676767}.k-chart .k-navigator-hint .k-scroll{background:rgba(0,124,204,.7);height:4px}.k-chart .k-tooltip,.k-sparkline .k-tooltip{background-image:none}.k-map .k-marker{background-image:url("Bootstrap/markers.png")}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.k-map .k-marker{background-image:url("Bootstrap/markers_2x.png")}} -------------------------------------------------------------------------------- /zstack_dashboard/static/css/kendo/kendo.dataviz.uniform.min.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Kendo UI v2014.2.716 (http://www.telerik.com/kendo-ui) 3 | * Copyright 2014 Telerik AD. All rights reserved. 4 | * 5 | * Kendo UI commercial licenses may be obtained at 6 | * http://www.telerik.com/purchase/license-agreement/kendo-ui-complete 7 | * If you do not own a commercial license, this file shall be governed by the trial license terms. 8 | */ 9 | .k-chart .k-selection{border-color:#ccc;transition:box-shadow .2s linear,border-color .2s linear;-moz-transition:box-shadow .2s linear,border-color .2s linear;-webkit-transition:box-shadow .2s linear,border-color .2s linear;-o-transition:box-shadow .2s linear,border-color .2s linear}.k-chart .k-selection:hover{border-color:#9e9e9e;-moz-box-shadow:0 1px 4px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 4px rgba(0,0,0,.3);box-shadow:0 1px 4px rgba(0,0,0,.3)}.k-chart .k-handle{background-color:#ebebeb;border:1px solid #ccc;width:5px;height:24px}.k-chart .k-handle:hover{background-color:#fff;border-color:#ccc;-moz-box-shadow:0 1px 2px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}.k-chart .k-navigator-hint .k-tooltip{border:0;-moz-box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);background:#fff;color:#676767}.k-chart .k-navigator-hint .k-scroll{background:rgba(103,103,103,.7);height:4px}.k-map .k-marker{background-image:url("Uniform/markers.png")}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.k-map .k-marker{background-image:url("Uniform/markers_2x.png")}} -------------------------------------------------------------------------------- /zstack_dashboard/static/css/ng-tags-input.css: -------------------------------------------------------------------------------- 1 | tags-input *, *:before, *:after { 2 | -moz-box-sizing: border-box; 3 | -webkit-box-sizing: border-box; 4 | box-sizing: border-box; 5 | } 6 | 7 | tags-input .host { 8 | position: relative; 9 | margin-top: 5px; 10 | margin-bottom: 5px; 11 | } 12 | tags-input .host:active { 13 | outline: none; 14 | } 15 | 16 | tags-input .tags { 17 | -moz-appearance: textfield; 18 | -webkit-appearance: textfield; 19 | padding: 1px; 20 | overflow: hidden; 21 | word-wrap: break-word; 22 | cursor: text; 23 | background-color: white; 24 | border: 1px solid darkgray; 25 | box-shadow: 1px 1px 1px 0 lightgray inset; 26 | } 27 | tags-input .tags.focused { 28 | outline: none; 29 | -webkit-box-shadow: 0 0 3px 1px rgba(5, 139, 242, 0.6); 30 | -moz-box-shadow: 0 0 3px 1px rgba(5, 139, 242, 0.6); 31 | box-shadow: 0 0 3px 1px rgba(5, 139, 242, 0.6); 32 | } 33 | tags-input .tags .tag-list { 34 | margin: 0; 35 | padding: 0; 36 | list-style-type: none; 37 | } 38 | tags-input .tags .tag-item { 39 | margin: 2px; 40 | padding: 0 5px; 41 | display: inline-block; 42 | float: left; 43 | font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif; 44 | height: 26px; 45 | line-height: 25px; 46 | border: 1px solid #acacac; 47 | border-radius: 3px; 48 | background: -webkit-linear-gradient(top, #f0f9ff 0%, #cbebff 47%, #a1dbff 100%); 49 | background: linear-gradient(to bottom, #f0f9ff 0%, #cbebff 47%, #a1dbff 100%); 50 | } 51 | tags-input .tags .tag-item.selected { 52 | background: -webkit-linear-gradient(top, #febbbb 0%, #fe9090 45%, #ff5c5c 100%); 53 | background: linear-gradient(to bottom, #febbbb 0%, #fe9090 45%, #ff5c5c 100%); 54 | } 55 | tags-input .tags .tag-item .remove-button { 56 | margin: 0 0 0 5px; 57 | padding: 0; 58 | border: none; 59 | background: none; 60 | cursor: pointer; 61 | vertical-align: middle; 62 | font: bold 16px Arial, sans-serif; 63 | color: #585858; 64 | } 65 | tags-input .tags .tag-item .remove-button:active { 66 | color: red; 67 | } 68 | tags-input .tags .input { 69 | border: 0; 70 | outline: none; 71 | margin: 2px; 72 | padding: 0; 73 | padding-left: 5px; 74 | float: left; 75 | height: 26px; 76 | font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif; 77 | } 78 | tags-input .tags .input.invalid-tag { 79 | color: red; 80 | } 81 | tags-input .tags .input::-ms-clear { 82 | display: none; 83 | } 84 | tags-input.ng-invalid .tags { 85 | -webkit-box-shadow: 0 0 3px 1px rgba(255, 0, 0, 0.6); 86 | -moz-box-shadow: 0 0 3px 1px rgba(255, 0, 0, 0.6); 87 | box-shadow: 0 0 3px 1px rgba(255, 0, 0, 0.6); 88 | } 89 | 90 | tags-input .autocomplete { 91 | margin-top: 5px; 92 | position: absolute; 93 | padding: 5px 0; 94 | z-index: 999; 95 | width: 100%; 96 | background-color: white; 97 | border: 1px solid rgba(0, 0, 0, 0.2); 98 | -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); 99 | -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); 100 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); 101 | } 102 | tags-input .autocomplete .suggestion-list { 103 | margin: 0; 104 | padding: 0; 105 | list-style-type: none; 106 | } 107 | tags-input .autocomplete .suggestion-item { 108 | padding: 5px 10px; 109 | cursor: pointer; 110 | white-space: nowrap; 111 | overflow: hidden; 112 | text-overflow: ellipsis; 113 | font: 16px "Helvetica Neue", Helvetica, Arial, sans-serif; 114 | color: black; 115 | background-color: white; 116 | } 117 | tags-input .autocomplete .suggestion-item.selected { 118 | color: white; 119 | background-color: #0097cf; 120 | } 121 | tags-input .autocomplete .suggestion-item.selected em { 122 | color: white; 123 | background-color: #0097cf; 124 | } 125 | tags-input .autocomplete .suggestion-item em { 126 | font: normal bold 16px "Helvetica Neue", Helvetica, Arial, sans-serif; 127 | color: black; 128 | background-color: white; 129 | } 130 | -------------------------------------------------------------------------------- /zstack_dashboard/static/images/zstack_text_icon_32x32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/images/zstack_text_icon_32x32.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/images/zstack_text_icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/images/zstack_text_icon_32x32.png -------------------------------------------------------------------------------- /zstack_dashboard/static/img/ajax-inverse.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/img/ajax-inverse.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/img/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/img/ajax-loader.gif -------------------------------------------------------------------------------- /zstack_dashboard/static/img/sidebarbkg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /zstack_dashboard/static/img/success-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/img/success-icon.png -------------------------------------------------------------------------------- /zstack_dashboard/static/js/angular-route.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.2.14 3 | (c) 2010-2014 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(n,e,A){'use strict';function x(s,g,k){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,w){function y(){p&&(p.remove(),p=null);h&&(h.$destroy(),h=null);l&&(k.leave(l,function(){p=null}),p=l,l=null)}function v(){var b=s.current&&s.current.locals;if(e.isDefined(b&&b.$template)){var b=a.$new(),d=s.current;l=w(b,function(d){k.enter(d,null,l||c,function(){!e.isDefined(t)||t&&!a.$eval(t)||g()});y()});h=d.scope=b;h.$emit("$viewContentLoaded");h.$eval(u)}else y()} 7 | var h,l,p,t=b.autoscroll,u=b.onload||"";a.$on("$routeChangeSuccess",v);v()}}}function z(e,g,k){return{restrict:"ECA",priority:-400,link:function(a,c){var b=k.current,f=b.locals;c.html(f.$template);var w=e(c.contents());b.controller&&(f.$scope=a,f=g(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));w(a)}}}n=e.module("ngRoute",["ng"]).provider("$route",function(){function s(a,c){return e.extend(new (e.extend(function(){}, 8 | {prototype:a})),c)}function g(a,e){var b=e.caseInsensitiveMatch,f={originalPath:a,regexp:a},k=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,e,b,c){a="?"===c?c:null;c="*"===c?c:null;k.push({name:b,optional:!!a});e=e||"";return""+(a?"":e)+"(?:"+(a?e:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=RegExp("^"+a+"$",b?"i":"");return f}var k={};this.when=function(a,c){k[a]=e.extend({reloadOnSearch:!0},c,a&&g(a,c));if(a){var b= 9 | "/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";k[b]=e.extend({redirectTo:a},g(b,c))}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,b,f,g,n,v,h){function l(){var d=p(),m=r.current;if(d&&m&&d.$$route===m.$$route&&e.equals(d.pathParams,m.pathParams)&&!d.reloadOnSearch&&!u)m.params=d.params,e.copy(m.params,b),a.$broadcast("$routeUpdate",m);else if(d||m)u=!1,a.$broadcast("$routeChangeStart", 10 | d,m),(r.current=d)&&d.redirectTo&&(e.isString(d.redirectTo)?c.path(t(d.redirectTo,d.params)).search(d.params).replace():c.url(d.redirectTo(d.pathParams,c.path(),c.search())).replace()),f.when(d).then(function(){if(d){var a=e.extend({},d.resolve),c,b;e.forEach(a,function(d,c){a[c]=e.isString(d)?g.get(d):g.invoke(d)});e.isDefined(c=d.template)?e.isFunction(c)&&(c=c(d.params)):e.isDefined(b=d.templateUrl)&&(e.isFunction(b)&&(b=b(d.params)),b=h.getTrustedResourceUrl(b),e.isDefined(b)&&(d.loadedTemplateUrl= 11 | b,c=n.get(b,{cache:v}).then(function(a){return a.data})));e.isDefined(c)&&(a.$template=c);return f.all(a)}}).then(function(c){d==r.current&&(d&&(d.locals=c,e.copy(d.params,b)),a.$broadcast("$routeChangeSuccess",d,m))},function(c){d==r.current&&a.$broadcast("$routeChangeError",d,m,c)})}function p(){var a,b;e.forEach(k,function(f,k){var q;if(q=!b){var g=c.path();q=f.keys;var l={};if(f.regexp)if(g=f.regexp.exec(g)){for(var h=1,p=g.length;hh;h++)f.push(d({prefix:c.files[h].prefix,key:c.key,suffix:c.files[h].suffix}));return a.all(f).then(function(a){for(var b=a.length,c={},d=0;b>d;d++)for(var f in a[d])c[f]=a[d][f];e.resolve(c)},function(a){e.reject(a)}),e.promise}}return angular.module("pascalprecht.translate").factory("$translateStaticFilesLoader",a),a.$inject=["$q","$http"],a.displayName="$translateStaticFilesLoader","pascalprecht.translate"}); -------------------------------------------------------------------------------- /zstack_dashboard/static/js/angular-translate-storage-cookie.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * angular-translate - v2.8.1 - 2015-10-01 3 | * 4 | * Copyright (c) 2015 The angular-translate team, Pascal Precht; Licensed MIT 5 | */ 6 | !function(a,b){"function"==typeof define&&define.amd?define([],function(){return b()}):"object"==typeof exports?module.exports=b():b()}(this,function(){function a(a){"use strict";var b={get:function(b){return a.get(b)},set:function(b,c){a.put(b,c)},put:function(b,c){a.put(b,c)}};return b}return angular.module("pascalprecht.translate").factory("$translateCookieStorage",a),a.$inject=["$cookieStore"],a.displayName="$translateCookieStorage","pascalprecht.translate"}); -------------------------------------------------------------------------------- /zstack_dashboard/static/js/sprintf.min.js: -------------------------------------------------------------------------------- 1 | /*! sprintf-js | Alexandru Marasteanu (http://alexei.ro/) | BSD-3-Clause */ 2 | 3 | !function(a){function b(){var a=arguments[0],c=b.cache;return c[a]&&c.hasOwnProperty(a)||(c[a]=b.parse(a)),b.format.call(null,c[a],arguments)}function c(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}function d(a,b){return Array(b+1).join(a)}var e={not_string:/[^s]/,number:/[def]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[\+\-]/};b.format=function(a,f){var g,h,i,j,k,l,m,n=1,o=a.length,p="",q=[],r=!0,s="";for(h=0;o>h;h++)if(p=c(a[h]),"string"===p)q[q.length]=a[h];else if("array"===p){if(j=a[h],j[2])for(g=f[n],i=0;i=0),j[8]){case"b":g=g.toString(2);break;case"c":g=String.fromCharCode(g);break;case"d":g=parseInt(g,10);break;case"e":g=j[7]?g.toExponential(j[7]):g.toExponential();break;case"f":g=j[7]?parseFloat(g).toFixed(j[7]):parseFloat(g);break;case"o":g=g.toString(8);break;case"s":g=(g=String(g))&&j[7]?g.substring(0,j[7]):g;break;case"u":g>>>=0;break;case"x":g=g.toString(16);break;case"X":g=g.toString(16).toUpperCase()}(!r||e.number.test(j[8])&&j[3])&&(s=r?"+":"-",g=g.toString().replace(e.sign,"")),l=j[4]?"0"==j[4]?"0":j[4].charAt(1):" ",m=j[6]-(s+g).length,k=j[6]?d(l,m):"",q[q.length]=j[5]?s+g+k:0==l?s+k+g:k+s+g}return q.join("")},b.cache={},b.parse=function(a){for(var b=a,c=[],d=[],f=0;b;){if(null!==(c=e.text.exec(b)))d[d.length]=c[0];else if(null!==(c=e.modulo.exec(b)))d[d.length]="%";else{if(null===(c=e.placeholder.exec(b)))throw new SyntaxError("[sprintf] unexpected placeholder");if(c[2]){f|=1;var g=[],h=c[2],i=[];if(null===(i=e.key.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(g[g.length]=i[1];""!==(h=h.substring(i[0].length));)if(null!==(i=e.key_access.exec(h)))g[g.length]=i[1];else{if(null===(i=e.index_access.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");g[g.length]=i[1]}c[2]=g}else f|=2;if(3===f)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");d[d.length]=c}b=b.substring(c[0].length)}return d};var f=function(a,c,d){return d=(c||[]).slice(0),d.splice(0,0,a),b.apply(null,d)};"undefined"!=typeof exports?(exports.sprintf=b,exports.vsprintf=f):(a.sprintf=b,a.vsprintf=f,"function"==typeof define&&define.amd&&define(function(){return{sprintf:b,vsprintf:f}}))}("undefined"==typeof window?this:window); 4 | //# sourceMappingURL=sprintf.min.map -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/apiDetails.html: -------------------------------------------------------------------------------- 1 |
2 |

API Details

3 |
4 |

Double click column to enter details page

5 |
6 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/apiDetailsDetails.html: -------------------------------------------------------------------------------- 1 |
2 |

{{isSuccess() ? 'SUCCESS' : 'FAILURE'}}

3 |

REQUEST

4 |
{{request}}
5 |

RESPONSE

6 |
{{response}}
7 |
-------------------------------------------------------------------------------- /zstack_dashboard/static/templates/backupStorage/attachZone.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{ "backupStorage.attachZone.ATTACH ZONE" | translate }}

4 |
5 |
6 | 7 | 8 |

{{ "backupStorage.attachZone.HINT1" | translate }}

9 |
10 |
11 | 12 | 13 |
14 |
15 |
16 |
17 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/backupStorage/detachZone.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{ "backupStorage.detachZone.DETACH ZONE" | translate }}

4 |
5 |
6 | 7 | 8 |

{{ "backupStorage.detachZone.HINT1" | translate }}

9 |
10 | 11 |
12 |

{{ "backupStorage.detachZone.FORM" | translate }}

13 | 14 |

{{ "backupStorage.detachZone.HINT2" | translate }}

15 |
16 | 17 |
18 | 19 | 20 |
21 |
22 |
23 |
24 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/cluster/attachL2Network.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{"cluster.attachL2Network.hasL2Network()" | translate}} {{"cluster.attachL2Network.l2Network page" | translate}} {{"cluster.attachL2Network.hasL2Network2()" | translate}} 5 |
6 |
7 |

{{"cluster.attachL2Network.ATTACH L2 NETWORK" | translate}}

8 |
9 |
10 | 11 | 12 |

{{"cluster.attachL2Network.HINT" | translate}}

13 |
14 |
15 | 16 | 17 |
18 |
19 |
20 |
21 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/cluster/attachPrimaryStorage.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{"cluster.attachPrimaryStorage.hasPrimaryStorage()" | translate}} {{"cluster.attachPrimaryStorage.primary storage" | translate}} {{"cluster.attachPrimaryStorage.hasPrimaryStorage2()" | translate}} 5 |
6 |
7 |

{{"cluster.attachPrimaryStorage.ATTACH PRIMARY STORAGE" | translate}}

8 |
9 |
10 | 11 | 12 |

{{"cluster.attachPrimaryStorage.HINT" | translate}}

13 |
14 |
15 | 16 | 17 |
18 |
19 |
20 |
21 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/cluster/detachL2Network.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{"cluster.detachL2Network.hasL2Network" | translate}} 5 |
6 |
7 |

{{"cluster.detachL2Network.DETACH L2 NETWORK" | translate}}

8 |
9 |
10 | 11 | 12 |

{{"cluster.detachL2Network.HINT" | translate}}

13 |
14 |
15 |

{{"cluster.detachL2Network.strong" | translate}}

16 | 17 |

{{"cluster.detachL2Network.HINT2" | translate}}

18 |
19 |
20 | 21 | 22 |
23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/cluster/detachPrimaryStorage.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{"cluster.detachPrimaryStorage.hasL2Network()" | translate}} 5 |
6 |
7 |

{{"cluster.detachPrimaryStorage.DETACH PRIMARY STORAGE" | translate}}

8 |
9 |
10 | 11 | 12 |

{{"cluster.detachPrimaryStorage.HINT" | translate}}

13 |
14 |
15 |

{{"cluster.detachPrimaryStorage.strong" | translate}}

16 | 17 |

{{"cluster.detachPrimaryStorage.HINT2" | translate}}

18 |
19 |
20 | 21 | 22 |
23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/clipboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/clipboard.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/connect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/connect.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/ctrlaltdel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/ctrlaltdel.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/disconnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/disconnect.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/drag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/drag.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/favicon.ico -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/favicon.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/keyboard.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/mouse_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/mouse_left.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/mouse_middle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/mouse_middle.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/mouse_none.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/mouse_none.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/mouse_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/mouse_right.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/screen_320x460.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/screen_320x460.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/screen_57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/screen_57x57.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/screen_700x700.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/screen_700x700.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/images/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/images/settings.png -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/include/Orbitron700.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/include/Orbitron700.ttf -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/include/Orbitron700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/include/Orbitron700.woff -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/include/blue.css: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC blue CSS 3 | * Copyright (C) 2012 Joel Martin 4 | * Copyright (C) 2013 Samuel Mannehed for Cendio AB 5 | * noVNC is licensed under the MPL 2.0 (see LICENSE.txt) 6 | * This file is licensed under the 2-Clause BSD license (see LICENSE.txt). 7 | */ 8 | 9 | .noVNC_status_normal { 10 | background-color:#04073d; 11 | background-image: -webkit-gradient( 12 | linear, 13 | left bottom, 14 | left top, 15 | color-stop(0.54, rgb(10,15,79)), 16 | color-stop(0.5, rgb(4,7,61)) 17 | ); 18 | background-image: -moz-linear-gradient( 19 | center bottom, 20 | rgb(10,15,79) 54%, 21 | rgb(4,7,61) 50% 22 | ); 23 | } 24 | .noVNC_status_error { 25 | background-color:#f04040; 26 | background-image: -webkit-gradient( 27 | linear, 28 | left bottom, 29 | left top, 30 | color-stop(0.54, rgb(240,64,64)), 31 | color-stop(0.5, rgb(4,7,61)) 32 | ); 33 | background-image: -moz-linear-gradient( 34 | center bottom, 35 | rgb(4,7,61) 54%, 36 | rgb(249,64,64) 50% 37 | ); 38 | } 39 | .noVNC_status_warn { 40 | background-color:#f0f040; 41 | background-image: -webkit-gradient( 42 | linear, 43 | left bottom, 44 | left top, 45 | color-stop(0.54, rgb(240,240,64)), 46 | color-stop(0.5, rgb(4,7,61)) 47 | ); 48 | background-image: -moz-linear-gradient( 49 | center bottom, 50 | rgb(4,7,61) 54%, 51 | rgb(240,240,64) 50% 52 | ); 53 | } 54 | 55 | .triangle-right { 56 | border:2px solid #fff; 57 | background:#04073d; 58 | color:#fff; 59 | } 60 | 61 | #keyboardinput { 62 | background-color:#04073d; 63 | } 64 | 65 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/include/playback.js: -------------------------------------------------------------------------------- 1 | /* 2 | * noVNC: HTML5 VNC client 3 | * Copyright (C) 2012 Joel Martin 4 | * Licensed under MPL 2.0 (see LICENSE.txt) 5 | */ 6 | 7 | "use strict"; 8 | /*jslint browser: true, white: false */ 9 | /*global Util, VNC_frame_data, finish */ 10 | 11 | var rfb, mode, test_state, frame_idx, frame_length, 12 | iteration, iterations, istart_time, 13 | 14 | // Pre-declarations for jslint 15 | send_array, next_iteration, queue_next_packet, do_packet; 16 | 17 | // Override send_array 18 | send_array = function (arr) { 19 | // Stub out send_array 20 | }; 21 | 22 | next_iteration = function () { 23 | if (iteration === 0) { 24 | frame_length = VNC_frame_data.length; 25 | test_state = 'running'; 26 | } else { 27 | rfb.disconnect(); 28 | } 29 | 30 | if (test_state !== 'running') { return; } 31 | 32 | iteration += 1; 33 | if (iteration > iterations) { 34 | finish(); 35 | return; 36 | } 37 | 38 | frame_idx = 0; 39 | istart_time = (new Date()).getTime(); 40 | rfb.connect('test', 0, "bogus"); 41 | 42 | queue_next_packet(); 43 | 44 | }; 45 | 46 | queue_next_packet = function () { 47 | var frame, foffset, toffset, delay; 48 | if (test_state !== 'running') { return; } 49 | 50 | frame = VNC_frame_data[frame_idx]; 51 | while ((frame_idx < frame_length) && (frame.charAt(0) === "}")) { 52 | //Util.Debug("Send frame " + frame_idx); 53 | frame_idx += 1; 54 | frame = VNC_frame_data[frame_idx]; 55 | } 56 | 57 | if (frame === 'EOF') { 58 | Util.Debug("Finished, found EOF"); 59 | next_iteration(); 60 | return; 61 | } 62 | if (frame_idx >= frame_length) { 63 | Util.Debug("Finished, no more frames"); 64 | next_iteration(); 65 | return; 66 | } 67 | 68 | if (mode === 'realtime') { 69 | foffset = frame.slice(1, frame.indexOf('{', 1)); 70 | toffset = (new Date()).getTime() - istart_time; 71 | delay = foffset - toffset; 72 | if (delay < 1) { 73 | delay = 1; 74 | } 75 | 76 | setTimeout(do_packet, delay); 77 | } else { 78 | setTimeout(do_packet, 1); 79 | } 80 | }; 81 | 82 | var bytes_processed = 0; 83 | 84 | do_packet = function () { 85 | //Util.Debug("Processing frame: " + frame_idx); 86 | var frame = VNC_frame_data[frame_idx], 87 | start = frame.indexOf('{', 1) + 1; 88 | bytes_processed += frame.length - start; 89 | if (VNC_frame_encoding === 'binary') { 90 | var u8 = new Uint8Array(frame.length - start); 91 | for (var i = 0; i < frame.length - start; i++) { 92 | u8[i] = frame.charCodeAt(start + i); 93 | } 94 | rfb.recv_message({'data' : u8}); 95 | } else { 96 | rfb.recv_message({'data' : frame.slice(start)}); 97 | } 98 | frame_idx += 1; 99 | 100 | queue_next_packet(); 101 | }; 102 | 103 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/include/web-socket-js/WebSocketMain.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/console/include/web-socket-js/WebSocketMain.swf -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/utils/Makefile: -------------------------------------------------------------------------------- 1 | TARGETS=rebind.so 2 | CFLAGS += -fPIC 3 | 4 | all: $(TARGETS) 5 | 6 | rebind.so: rebind.o 7 | $(CC) $(LDFLAGS) $^ -shared -fPIC -ldl -o $@ 8 | 9 | clean: 10 | rm -f rebind.o rebind.so 11 | 12 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/utils/README.md: -------------------------------------------------------------------------------- 1 | ## WebSockets Proxy/Bridge 2 | 3 | For more detailed description and usage information please refer to 4 | the [websockify README](https://github.com/kanaka/websockify/blob/master/README.md). 5 | 6 | The other versions of websockify (C, Node.js) and the associated test 7 | programs have been moved to 8 | [websockify](https://github.com/kanaka/websockify). Websockify was 9 | formerly named wsproxy. 10 | 11 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/utils/img2js.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | # 4 | # Convert image to Javascript compatible base64 Data URI 5 | # Copyright 2011 Joel Martin 6 | # Licensed under MPL 2.0 (see docs/LICENSE.MPL-2.0) 7 | # 8 | 9 | import sys, base64 10 | 11 | try: 12 | from PIL import Image 13 | except: 14 | print "python PIL module required (python-imaging package)" 15 | sys.exit(1) 16 | 17 | 18 | if len(sys.argv) < 3: 19 | print "Usage: %s IMAGE JS_VARIABLE" % sys.argv[0] 20 | sys.exit(1) 21 | 22 | fname = sys.argv[1] 23 | var = sys.argv[2] 24 | 25 | ext = fname.lower().split('.')[-1] 26 | if ext == "png": mime = "image/png" 27 | elif ext in ["jpg", "jpeg"]: mime = "image/jpeg" 28 | elif ext == "gif": mime = "image/gif" 29 | else: 30 | print "Only PNG, JPEG and GIF images are supported" 31 | sys.exit(1) 32 | uri = "data:%s;base64," % mime 33 | 34 | im = Image.open(fname) 35 | w, h = im.size 36 | 37 | raw = open(fname).read() 38 | 39 | print '%s = {"width": %s, "height": %s, "data": "%s%s"};' % ( 40 | var, w, h, uri, base64.b64encode(raw)) 41 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/utils/launch.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | usage() { 4 | if [ "$*" ]; then 5 | echo "$*" 6 | echo 7 | fi 8 | echo "Usage: ${NAME} [--listen PORT] [--vnc VNC_HOST:PORT] [--cert CERT]" 9 | echo 10 | echo "Starts the WebSockets proxy and a mini-webserver and " 11 | echo "provides a cut-and-paste URL to go to." 12 | echo 13 | echo " --listen PORT Port for proxy/webserver to listen on" 14 | echo " Default: 6080" 15 | echo " --vnc VNC_HOST:PORT VNC server host:port proxy target" 16 | echo " Default: localhost:5900" 17 | echo " --cert CERT Path to combined cert/key file" 18 | echo " Default: self.pem" 19 | echo " --web WEB Path to web files (e.g. vnc.html)" 20 | echo " Default: ./" 21 | exit 2 22 | } 23 | 24 | NAME="$(basename $0)" 25 | HERE="$(cd "$(dirname "$0")" && pwd)" 26 | PORT="6080" 27 | VNC_DEST="localhost:5900" 28 | CERT="" 29 | WEB="" 30 | proxy_pid="" 31 | 32 | die() { 33 | echo "$*" 34 | exit 1 35 | } 36 | 37 | cleanup() { 38 | trap - TERM QUIT INT EXIT 39 | trap "true" CHLD # Ignore cleanup messages 40 | echo 41 | if [ -n "${proxy_pid}" ]; then 42 | echo "Terminating WebSockets proxy (${proxy_pid})" 43 | kill ${proxy_pid} 44 | fi 45 | } 46 | 47 | # Process Arguments 48 | 49 | # Arguments that only apply to chrooter itself 50 | while [ "$*" ]; do 51 | param=$1; shift; OPTARG=$1 52 | case $param in 53 | --listen) PORT="${OPTARG}"; shift ;; 54 | --vnc) VNC_DEST="${OPTARG}"; shift ;; 55 | --cert) CERT="${OPTARG}"; shift ;; 56 | --web) WEB="${OPTARG}"; shift ;; 57 | -h|--help) usage ;; 58 | -*) usage "Unknown chrooter option: ${param}" ;; 59 | *) break ;; 60 | esac 61 | done 62 | 63 | # Sanity checks 64 | which netstat >/dev/null 2>&1 \ 65 | || die "Must have netstat installed" 66 | 67 | netstat -ltn | grep -qs "${PORT} .*LISTEN" \ 68 | && die "Port ${PORT} in use. Try --listen PORT" 69 | 70 | trap "cleanup" TERM QUIT INT EXIT 71 | 72 | # Find vnc.html 73 | if [ -n "${WEB}" ]; then 74 | if [ ! -e "${WEB}/vnc.html" ]; then 75 | die "Could not find ${WEB}/vnc.html" 76 | fi 77 | elif [ -e "$(pwd)/vnc.html" ]; then 78 | WEB=$(pwd) 79 | elif [ -e "${HERE}/../vnc.html" ]; then 80 | WEB=${HERE}/../ 81 | elif [ -e "${HERE}/vnc.html" ]; then 82 | WEB=${HERE} 83 | elif [ -e "${HERE}/../share/novnc/vnc.html" ]; then 84 | WEB=${HERE}/../share/novnc/ 85 | else 86 | die "Could not find vnc.html" 87 | fi 88 | 89 | # Find self.pem 90 | if [ -n "${CERT}" ]; then 91 | if [ ! -e "${CERT}" ]; then 92 | die "Could not find ${CERT}" 93 | fi 94 | elif [ -e "$(pwd)/self.pem" ]; then 95 | CERT="$(pwd)/self.pem" 96 | elif [ -e "${HERE}/../self.pem" ]; then 97 | CERT="${HERE}/../self.pem" 98 | elif [ -e "${HERE}/self.pem" ]; then 99 | CERT="${HERE}/self.pem" 100 | else 101 | echo "Warning: could not find self.pem" 102 | fi 103 | 104 | echo "Starting webserver and WebSockets proxy on port ${PORT}" 105 | ${HERE}/websockify --web ${WEB} ${CERT:+--cert ${CERT}} ${PORT} ${VNC_DEST} & 106 | proxy_pid="$!" 107 | sleep 1 108 | if ! ps -p ${proxy_pid} >/dev/null; then 109 | proxy_pid= 110 | echo "Failed to start WebSockets proxy" 111 | exit 1 112 | fi 113 | 114 | echo -e "\n\nNavigate to this URL:\n" 115 | echo -e " http://$(hostname):${PORT}/vnc.html?host=$(hostname)&port=${PORT}\n" 116 | echo -e "Press Ctrl-C to exit\n\n" 117 | 118 | wait ${proxy_pid} 119 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/utils/rebind: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | usage() { 4 | echo "Usage: $(basename $0) OLD_PORT NEW_PORT COMMAND_LINE" 5 | echo 6 | echo "Launch COMMAND_LINE, but intercept system calls to bind" 7 | echo "to OLD_PORT and instead bind them to localhost:NEW_PORT" 8 | exit 2 9 | } 10 | 11 | # Parameter defaults 12 | mydir=$(readlink -f $(dirname ${0})) 13 | 14 | export REBIND_PORT_OLD="${1}"; shift 15 | export REBIND_PORT_NEW="${1}"; shift 16 | 17 | LD_PRELOAD=${mydir}/rebind.so "${@}" 18 | 19 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/utils/rebind.c: -------------------------------------------------------------------------------- 1 | /* 2 | * rebind: Intercept bind calls and bind to a different port 3 | * Copyright 2010 Joel Martin 4 | * Licensed under MPL-2.0 (see docs/LICENSE.MPL-2.0) 5 | * 6 | * Overload (LD_PRELOAD) bind system call. If REBIND_PORT_OLD and 7 | * REBIND_PORT_NEW environment variables are set then bind on the new 8 | * port (of localhost) instead of the old port. 9 | * 10 | * This allows a bridge/proxy (such as websockify) to run on the old port and 11 | * translate traffic to/from the new port. 12 | * 13 | * Usage: 14 | * LD_PRELOAD=./rebind.so \ 15 | * REBIND_PORT_OLD=23 \ 16 | * REBIND_PORT_NEW=2023 \ 17 | * program 18 | */ 19 | 20 | //#define DO_DEBUG 1 21 | 22 | #include 23 | #include 24 | 25 | #define __USE_GNU 1 // Pull in RTLD_NEXT 26 | #include 27 | 28 | #include 29 | #include 30 | 31 | 32 | #if defined(DO_DEBUG) 33 | #define DEBUG(...) \ 34 | fprintf(stderr, "wswrapper: "); \ 35 | fprintf(stderr, __VA_ARGS__); 36 | #else 37 | #define DEBUG(...) 38 | #endif 39 | 40 | 41 | int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) 42 | { 43 | static void * (*func)(); 44 | int do_move = 0; 45 | struct sockaddr_in * addr_in = (struct sockaddr_in *)addr; 46 | struct sockaddr_in addr_tmp; 47 | socklen_t addrlen_tmp; 48 | char * PORT_OLD, * PORT_NEW, * end1, * end2; 49 | int ret, oldport, newport, askport = htons(addr_in->sin_port); 50 | uint32_t askaddr = htons(addr_in->sin_addr.s_addr); 51 | if (!func) func = (void *(*)()) dlsym(RTLD_NEXT, "bind"); 52 | 53 | DEBUG(">> bind(%d, _, %d), askaddr %d, askport %d\n", 54 | sockfd, addrlen, askaddr, askport); 55 | 56 | /* Determine if we should move this socket */ 57 | if (addr_in->sin_family == AF_INET) { 58 | // TODO: support IPv6 59 | PORT_OLD = getenv("REBIND_OLD_PORT"); 60 | PORT_NEW = getenv("REBIND_NEW_PORT"); 61 | if (PORT_OLD && (*PORT_OLD != '\0') && 62 | PORT_NEW && (*PORT_NEW != '\0')) { 63 | oldport = strtol(PORT_OLD, &end1, 10); 64 | newport = strtol(PORT_NEW, &end2, 10); 65 | if (oldport && (*end1 == '\0') && 66 | newport && (*end2 == '\0') && 67 | (oldport == askport)) { 68 | do_move = 1; 69 | } 70 | } 71 | } 72 | 73 | if (! do_move) { 74 | /* Just pass everything right through to the real bind */ 75 | ret = (int) func(sockfd, addr, addrlen); 76 | DEBUG("<< bind(%d, _, %d) ret %d\n", sockfd, addrlen, ret); 77 | return ret; 78 | } 79 | 80 | DEBUG("binding fd %d on localhost:%d instead of 0x%x:%d\n", 81 | sockfd, newport, ntohl(addr_in->sin_addr.s_addr), oldport); 82 | 83 | /* Use a temporary location for the new address information */ 84 | addrlen_tmp = sizeof(addr_tmp); 85 | memcpy(&addr_tmp, addr, addrlen_tmp); 86 | 87 | /* Bind to other port on the loopback instead */ 88 | addr_tmp.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 89 | addr_tmp.sin_port = htons(newport); 90 | ret = (int) func(sockfd, &addr_tmp, addrlen_tmp); 91 | 92 | DEBUG("<< bind(%d, _, %d) ret %d\n", sockfd, addrlen, ret); 93 | return ret; 94 | } 95 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/utils/u2x11: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Convert "U+..." commented entries in /usr/include/X11/keysymdef.h 4 | # into JavaScript for use by noVNC. Note this is likely to produce 5 | # a few duplicate properties with clashing values, that will need 6 | # resolving manually. 7 | # 8 | # Colin Dean 9 | # 10 | 11 | regex="^#define[ \t]+XK_[A-Za-z0-9_]+[ \t]+0x([0-9a-fA-F]+)[ \t]+\/\*[ \t]+U\+([0-9a-fA-F]+)[ \t]+[^*]+.[ \t]+\*\/[ \t]*$" 12 | echo "unicodeTable = {" 13 | while read line; do 14 | if echo "${line}" | egrep -qs "${regex}"; then 15 | 16 | x11=$(echo "${line}" | sed -r "s/${regex}/\1/") 17 | vnc=$(echo "${line}" | sed -r "s/${regex}/\2/") 18 | 19 | if echo "${vnc}" | egrep -qs "^00[2-9A-F][0-9A-F]$"; then 20 | : # skip ISO Latin-1 (U+0020 to U+00FF) as 1-to-1 mapping 21 | else 22 | # note 1-to-1 is possible (e.g. for Euro symbol, U+20AC) 23 | echo " 0x${vnc} : 0x${x11}," 24 | fi 25 | fi 26 | done < /usr/include/X11/keysymdef.h | uniq 27 | echo "};" 28 | 29 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/utils/web.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | A super simple HTTP/HTTPS webserver for python. Automatically detect 4 | 5 | You can make a cert/key with openssl using: 6 | openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem 7 | as taken from http://docs.python.org/dev/library/ssl.html#certificates 8 | 9 | ''' 10 | 11 | import traceback, sys 12 | import socket 13 | import ssl 14 | #import http.server as server # python 3.X 15 | import SimpleHTTPServer as server # python 2.X 16 | 17 | def do_request(connstream, from_addr): 18 | x = object() 19 | server.SimpleHTTPRequestHandler(connstream, from_addr, x) 20 | connstream.close() 21 | 22 | def serve(): 23 | bindsocket = socket.socket() 24 | bindsocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 25 | #bindsocket.bind(('localhost', PORT)) 26 | bindsocket.bind(('', PORT)) 27 | bindsocket.listen(5) 28 | 29 | print("serving on port", PORT) 30 | 31 | while True: 32 | try: 33 | newsocket, from_addr = bindsocket.accept() 34 | peek = newsocket.recv(1024, socket.MSG_PEEK) 35 | if peek.startswith("\x16"): 36 | connstream = ssl.wrap_socket( 37 | newsocket, 38 | server_side=True, 39 | certfile='self.pem', 40 | ssl_version=ssl.PROTOCOL_TLSv1) 41 | else: 42 | connstream = newsocket 43 | 44 | do_request(connstream, from_addr) 45 | 46 | except Exception: 47 | traceback.print_exc() 48 | 49 | try: 50 | PORT = int(sys.argv[1]) 51 | except: 52 | print "%s port" % sys.argv[0] 53 | sys.exit(2) 54 | 55 | serve() 56 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/utils/websockify.py: -------------------------------------------------------------------------------- 1 | websockify -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/console/utils/wsproxy.py: -------------------------------------------------------------------------------- 1 | websockify -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/dashboard/dashboard.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |

{{"dashboard.DASHBOARD" | translate}}

6 |

{{"dashboard.CAPACITY" | translate}}

7 |
8 |

{{"dashboard.HINT" | translate}}

9 |

{{"dashboard.RESOURCE COUNT" | translate}}

10 | 11 |
12 |
13 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/directives/confirmBox.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{title}}

4 |

{{description}}

5 |
6 | 7 | 8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/directives/deleteConfirm.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{title}}

4 |

{{description}}

5 |
6 | 7 |

Type 'ok' to confirm

8 |
9 | 10 | 11 |
12 |
13 |
14 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/directives/search.html: -------------------------------------------------------------------------------- 1 |
2 |

QUERY {{name}}

3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 16 | 20 | 25 | {{currentCondition.dateTimeValue}} 26 | 31 | 32 |
FIELDOPVALUE
13 | 15 | 17 | 19 | 21 | 22 | 23 | 24 | 27 | 30 |
33 | 34 |
35 | Duplicated condition 36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | 48 | 50 | 51 |
CONDITIONS
44 | name 45 | = 46 | Zone1 47 | 49 |
52 | 53 | 54 | 55 |
-------------------------------------------------------------------------------- /zstack_dashboard/static/templates/directives/sort.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | 6 | 31 |
-------------------------------------------------------------------------------- /zstack_dashboard/static/templates/diskOffering/addDiskOffering.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |

{{"diskOffering.addDiskOffering.ADD DISK OFFERING" | translate}}

7 |
8 |
9 | 10 | 11 |
12 |
13 | 14 | 15 |
16 |
17 | 18 | 19 |
20 |
21 | 22 | 23 |

{{"diskOffering.addDiskOffering.HINT1" | translate}}

24 |
25 |
26 |
27 | 28 |
29 | 30 |
31 |
32 |
33 | 34 | 41 | 42 |
43 |
-------------------------------------------------------------------------------- /zstack_dashboard/static/templates/diskOffering/diskOffering.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | 7 |
8 |

{{"diskOffering.diskOffering.DISK OFFERING" | translate}}

9 |
10 | 13 | 14 | 17 | 18 |
19 | 20 | 23 | 24 | 28 | 29 | 42 | 43 |
44 | 47 | 53 |
54 |
55 | 56 |
57 |

{{"diskOffering.diskOffering.HINT1" | translate}}

58 |

{{"diskOffering.diskOffering.HINT2" | translate}}

59 |
60 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/eip/attachEip.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{"eip.attachEip.hasVm1()" | translate}} {{"eip.attachEip.vm instance page" | translate}} {{"eip.attachEip.hasVm2()" | translate}}. 5 |
6 |
7 |

{{"eip.attachEip.ATTACH EIP" | translate}}

8 |
9 |
10 | 11 | 12 |

{{"eip.attachEip.HINT1" | translate}}

13 |
14 |
15 | 16 | 17 |
18 |
19 |
20 |
21 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/eip/detachEip.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"eip.detachEip.DETACH EIP" | translate}}

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
{{"eip.detachEip.VM NAME" | translate}}:{{vm.name}}
{{"eip.detachEip.VM STATE" | translate}}:{{vm.state}}
{{"eip.detachEip.VM HYPERVISOR" | translate}}:{{vm.hypervisorType}}
{{"eip.detachEip.NIC DEVICE ID" | translate}}:{{vm.nicDeviceId}}
{{"eip.detachEip.NIC MAC" | translate}}:{{vm.nicMac}}
{{"eip.detachEip.NIC IP" | translate}}:{{vm.nicIp}}
{{"eip.detachEip.NIC NETMASK" | translate}}:{{vm.nicNetmask}}
{{"eip.detachEip.NIC GATEWAY" | translate}}:{{vm.nicGateway}}
39 | 40 |

{{"eip.detachEip.HINT1" | translate}}

41 | 42 | 43 | 44 |
45 |
46 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/eip/eip.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 9 |
10 |

{{"eip.eip.EIP" | translate}}

11 |
12 | 15 | 16 | 19 | 20 |
21 | 22 | 25 | 26 | 30 | 31 | 44 | 45 | 58 |
59 | 60 |
61 |

{{"eip.eip.HINT1" | translate}}

62 |

{{"eip.eip.HINT2" | translate}}

63 |
64 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/globalConfig/details.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | 10 | 11 |

{{model.current.name}}

12 | 13 |
14 |
15 | 18 |
19 | 22 | 25 |
26 |
27 |
28 | 29 | 32 | 33 | 34 |
35 |
36 |
37 | 43 | 44 |
45 |
46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
{{ "globalConfig.details.CATEGORY" | translate }}{{model.current.category}}
{{ "globalConfig.details.NAME" | translate }}{{model.current.name}}
{{ "globalConfig.details.DESCRIPTION" | translate }}{{model.current.description}}
{{ "globalConfig.details.VALUE" | translate }}{{model.current.value}}
64 |
65 | 66 |
67 |
68 |
69 |
70 |
71 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/globalConfig/editGlobalConfig.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{ "globalConfig.editGlobalConfig.EDIT GLOBAL CONFIG" | translate }}

4 |
5 |
6 | 7 | 8 |
9 | 10 |
11 | 12 | 13 |
14 | 15 |
16 | 17 | 18 |
19 | 20 |
21 | 22 | 23 |
24 | 25 |
26 | 27 | 28 |
29 |
30 |
31 |
32 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/globalConfig/globalConfig.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 |

{{ "globalConfig.globalConfig.GLOBAL CONFIGURE" | translate }}

8 |
9 | 12 | 13 | 16 | 17 |
18 | 19 | 22 | 23 | 36 | 37 |
38 | 41 | 44 |
45 |
46 | 47 |
48 |

{{ "globalConfig.globalConfig.HINT1" | translate }}

49 |

{{ "globalConfig.globalConfig.HINT2" | translate }}

50 |
51 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/host/host.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | 7 |
8 |

{{"host.host.HOST" | translate}}

9 |
10 | 13 | 14 | 17 | 18 |
19 | 20 | 23 | 24 | 28 | 29 | 42 | 43 | 56 |
57 | 58 |
59 |

{{"host.host.HINT" | translate}}

60 |

{{"host.host.HINT2" | translate}}

61 |
62 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/image/image.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 | 8 |
9 |

{{"image.image.Image" | translate}}

10 |
11 | 14 | 15 | 18 | 19 |
20 | 21 | 24 | 25 | 29 | 30 | 43 | 44 | 57 |
58 | 59 |
60 |

{{"image.image.HINT" | translate}}

61 |

{{"image.image.HINT2" | translate}}

62 |
63 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/instanceOffering/addInstanceOffering.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |

{{"instanceOffering.addInstanceOffering.ADD INSTANCE OFFERING" | translate}}

7 |
8 |
9 | 10 | 11 |
12 |
13 | 14 | 15 |
16 |
17 | 18 | 19 |
20 | {{"instanceOffering.addInstanceOffering.Not a number" | translate}} 21 |
22 |
23 |
24 | 25 | 26 |
27 | {{"instanceOffering.addInstanceOffering.HINT1" | translate}} 28 |
29 |
30 |
31 | 32 | 33 |

{{"instanceOffering.addInstanceOffering.HINT2" | translate}}

34 |
35 |
36 |
37 | 38 |
39 | 40 |
41 |
42 |
43 | 44 | 51 | 52 |
53 |
-------------------------------------------------------------------------------- /zstack_dashboard/static/templates/instanceOffering/instanceOffering.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | 7 |
8 |

{{"instanceOffering.instanceOffering.INSTANCE OFFERING" | translate}}

9 |
10 | 13 | 14 | 17 | 18 |
19 | 20 | 23 | 24 | 28 | 29 | 42 | 43 | 54 |
55 | 56 |
57 |

{{"instanceOffering.instanceOffering.HINT1" | translate}}

58 |

{{"instanceOffering.instanceOffering.HINT2" | translate}}

59 |
60 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/l2Network/attachCluster.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{"l2Network.attachCluster.HINT" | translate}} {{"l2Network.attachCluster.cluster page" | translate}} {{"l2Network.attachCluster.to create a new one." | translate}} 5 |
6 |
7 |

{{"l2Network.attachCluster.ATTACH CLUSTER" | translate}}

8 |
9 |
10 | 11 | 12 |

{{"l2Network.attachCluster.HINT2" | translate}}

13 |
14 |
15 | 16 | 17 |
18 |
19 |
20 |
21 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/l2Network/detachCluster.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{"l2Network.detachCluster.HINT" | translate}} 5 |
6 |
7 |

{{"l2Network.detachCluster.DETACH CLUSTER" | translate}}

8 |
9 |
10 | 11 | 12 |

{{"l2Network.detachCluster.HINT2" | translate}}

13 |
14 | 15 |
16 |

{{"l2Network.detachCluster.HINT3" | translate}}

17 | 18 |

{{"l2Network.detachCluster.Type 'ok' to confirm" | translate}}

19 |
20 | 21 |
22 | 23 | 24 |
25 |
26 |
27 |
28 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/l2Network/l2Network.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 9 |
10 |

{{"l2Network.l2Network.L2 NETWORK" | translate}}

11 |
12 | 15 | 16 | 19 | 20 |
21 | 22 | 25 | 26 | 30 | 31 | 44 | 45 | 58 |
59 | 60 |
61 |

{{"l2Network.l2Network.HINT" | translate}}

62 |

{{"l2Network.l2Network.HINT2" | translate}}

63 |
64 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/l3Network/addDns.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"l3Network.addDns.ADD DNS" | translate}}

4 |
5 |
6 | 7 | 8 |
9 | {{"l3Network.addDns.Not a valid IPv4 address" | translate}} 10 |
11 |
12 | 13 |
14 | 15 | 16 |
17 |
18 |
19 |
20 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/l3Network/deleteDns.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"l3Network.deleteDns.DELETE DNS" | translate}}

4 |
5 |
6 | 7 | 8 |

{{"l3Network.deleteDns.HINT" | translate}}

9 |
10 | 11 |
12 |

{{"l3Network.deleteDns.HINT2" | translate}}

13 | 14 |

{{"l3Network.deleteDns.Type 'ok' to confirm" | translate}}

15 |
16 | 17 |
18 | 19 | 20 |
21 |
22 |
23 |
24 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/l3Network/deleteIpRange.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"l3Network.deleteIpRange.DELETE IP RANGE" | translate}}

4 |
5 |
6 | 7 | 8 |

{{"l3Network.deleteIpRange.HINT" | translate}}

9 |
10 | 11 |
12 |

{{"l3Network.deleteIpRange.HINT2" | translate}}:

13 |
    14 |
  • {{"l3Network.deleteIpRange.HINT3" | translate}}
  • 15 |
  • {{"l3Network.deleteIpRange.HINT4" | translate}}
  • 16 |
17 | 18 |

{{"l3Network.deleteIpRange.Type 'ok' to confirm" | translate}}

19 |
20 | 21 |
22 | 23 | 24 |
25 |
26 |
27 |
28 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/login/login.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

{{"login.login.HINT1" | translate}}

5 |
6 |
7 |
8 |
9 |
10 | 11 |
12 |
13 | 14 |
15 | 16 |
17 |
18 |

{{"login.login.HINT2" | translate}}

19 |
20 |
21 |
22 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/portForwarding/attachPortForwarding.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{"portForwarding.attachPortForwarding.hasVm()1" | translate}} {{"portForwarding.attachPortForwarding.vm instance page" | translate}} {{"portForwarding.attachPortForwarding.hasVm()2" | translate}}. 5 |
6 |
7 |

{{"portForwarding.attachPortForwarding.ATTACH PORT FORWARDING RULE" | translate}}

8 |
9 |
10 | 11 | 12 |

{{"portForwarding.attachPortForwarding.HINT1" | translate}}

13 |
14 |
15 | 16 | 17 |
18 |
19 |
20 |
21 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/portForwarding/detachPortForwarding.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"portForwarding.detachPortForwarding.DETACH PORT FORWARDING RULE" | translate}}

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
{{"portForwarding.detachPortForwarding.VM NAME" | translate}}:{{vm.name}}
{{"portForwarding.detachPortForwarding.VM STATE" | translate}}:{{vm.state}}
{{"portForwarding.detachPortForwarding.VM HYPERVISOR" | translate}}:{{vm.hypervisorType}}
{{"portForwarding.detachPortForwarding.VIP PORT START" | translate}}:{{pf.vipPortStart}}
{{"portForwarding.detachPortForwarding.VIP PORT END" | translate}}:{{pf.vipPortEnd}}
{{"portForwarding.detachPortForwarding.GUEST PORT START" | translate}}:{{pf.privatePortStart}}
{{"portForwarding.detachPortForwarding.GUEST PORT END" | translate}}:{{pf.privatePortEnd}}
{{"portForwarding.detachPortForwarding.PROTOCOL" | translate}}:{{pf.protocolType}}
{{"portForwarding.detachPortForwarding.ALLOWED CIDR" | translate}}:{{pf.allowedCidr}}
{{"portForwarding.detachPortForwarding.NIC DEVICE ID" | translate}}:{{vm.nicDeviceId}}
{{"portForwarding.detachPortForwarding.NIC MAC" | translate}}:{{vm.nicMac}}
{{"portForwarding.detachPortForwarding.NIC IP" | translate}}:{{vm.nicIp}}
{{"portForwarding.detachPortForwarding.NIC NETMASK" | translate}}:{{vm.nicNetmask}}
{{"portForwarding.detachPortForwarding.NIC GATEWAY" | translate}}:{{vm.nicGateway}}
63 | 64 |

{{"portForwarding.detachPortForwarding.HINT1" | translate}}

65 | 66 | 67 | 68 |
69 |
70 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/portForwarding/portForwarding.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 9 |
10 |

{{"portForwarding.portForwarding.PORT FORWARDING" | translate}}

11 |
12 | 15 | 16 | 19 | 20 |
21 | 22 | 25 | 26 | 30 | 31 | 44 | 45 | 58 |
59 | 60 |
61 |

{{"portForwarding.portForwarding.HINT1" | translate}}

62 |

{{"portForwarding.portForwarding.HINT2" | translate}}

63 |
64 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/primaryStorage/attachCluster.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ "primaryStorage.attachCluster.ALERT1.1" | translate }}{{ "primaryStorage.attachCluster.ALERT1.2" | translate }}{{ "primaryStorage.attachCluster.ALERT1.3" | translate }} 5 |
6 |
7 |

{{ "primaryStorage.attachCluster.ATTACH CLUSTER" | translate }}

8 |
9 |
10 | 11 | 12 |

{{ "primaryStorage.attachCluster.HINT1" | translate }}

13 |
14 |
15 | 16 | 17 |
18 |
19 |
20 |
21 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/primaryStorage/detachCluster.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ "primaryStorage.detachCluster.ALERT1" | translate }} 5 |
6 |
7 |

{{ "primaryStorage.detachCluster.DETACH CLUSTER" | translate }}

8 |
9 |
10 | 11 | 12 |

{{ "primaryStorage.detachCluster.HINT1" | translate }}

13 |
14 | 15 |
16 |

{{ "primaryStorage.detachCluster.FORM" | translate }}

17 | 18 |

{{ "primaryStorage.detachCluster.HINT2" | translate }}

19 |
20 | 21 |
22 | 23 | 24 |
25 |
26 |
27 |
28 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/securityGroup/addRule.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"securityGroup.addRule.ADD RULE" | translate }}

4 |
5 |
6 | 7 | 8 |
9 |
10 | 11 | 12 |
13 | {{"securityGroup.addRule.HINT1" | translate }} 14 |
15 |
16 |
17 | 18 | 19 |
20 | {{"securityGroup.addRule.HINT2" | translate}} 21 |
22 |
23 |
24 | 25 | 26 |
27 |
28 | 29 | 30 |

{{"securityGroup.addRule.HINT3" | translate}}

31 |
32 | {{"securityGroup.addRule.HINT4" | translate}} 33 |
34 |
35 | 36 |
37 | 41 |
42 | 43 |
44 |
45 |
46 | 47 |
48 | 49 | 50 |
51 |
52 |
53 |
54 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/securityGroup/addVmNic.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{"securityGroup.addVmNic.HINT1" | translate }} 5 |
6 |
7 |

{{"securityGroup.addVmNic.HINT2" | translate}}{{securityGroupName}}

8 |
9 |
10 | 11 | 12 |

{{"securityGroup.addVmNic.HINT3" | translate}}

13 |
14 | 15 |
16 | 17 | 18 |
19 |
20 |
21 |
22 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/securityGroup/attachL3Network.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{"securityGroup.attachL3Network.HINT1" | translate}} 5 | {{"securityGroup.attachL3Network.L3 network page" | translate}} 6 | {{"securityGroup.attachL3Network.HINT2" | translate}} 7 |
8 |
9 |

{{"securityGroup.attachL3Network.ATTACH L3 NETWORK" | translate}}

10 |
11 |
12 | 13 | 14 |

{{"securityGroup.attachL3Network.HINT3" | translate}}

15 |
16 |
17 | 18 | 19 |
20 |
21 |
22 |
23 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/securityGroup/deleteRule.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"securityGroup.deleteRule.DELETE RULE" | translate}}

4 |
5 |
6 | 7 |
8 |
9 | 10 |
11 | 12 | 13 |
14 |
15 |
16 |
17 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/securityGroup/detachL3Network.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{"securityGroup.detachL3Network.HINT1" | translate}} 5 |
6 |
7 |

{{"securityGroup.detachL3Network.DETACH L3 NETWORK" | translate}}

8 |
9 |
10 | 11 | 12 |

{{"securityGroup.detachL3Network.HINT2" | translate}}

13 |
14 |
15 |

{{"securityGroup.detachL3Network.HINT3" | translate}}

16 | 17 |

{{"securityGroup.detachL3Network.HINT4" | translate}}

18 |
19 |
20 | 21 | 22 |
23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/securityGroup/removeVmNic.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{"securityGroup.removeVmNic.HINT1" | translate}} 5 |
6 |
7 |

{{"securityGroup.removeVmNic.HINT2" | translate}}{{securityGroupName}}

8 |
9 |
10 | 11 | 12 |

{{"securityGroup.removeVmNic.HINT3" | translate}}

13 |
14 | 15 |
16 | 17 | 18 |
19 |
20 |
21 |
22 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/vip/createVip.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 | {{"vip.createVip.hasL3Network1" | translate}}{{"vip.createVip.L3 network page" | translate}} {{"vip.createVip.hasL3Network2" | translate}}. 8 |
9 |
10 |

{{"vip.createVip.ACQUIRE VIP" | translate}}

11 |
12 |
13 | 14 | 15 |
16 |
17 | 18 | 19 |

{{"vip.createVip.HINT1" | translate}}

20 |
21 |
22 | 23 | 24 |
25 |
26 | 27 | 28 |
29 |
30 | 31 | 32 |

{{"vip.createVip.HINT2" | translate}}

33 |
34 | {{"vip.createVip.HINT3" | translate}} 35 |
36 |
37 |
38 |
39 | 40 |
41 | 42 |
43 |
44 |
45 | 46 |
47 | 52 |
53 | 54 |
55 |
56 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/vip/vip.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | 7 |
8 |

{{"vip.vip.VIP" | translate}}

9 |
10 | 13 | 14 | 17 | 18 |
19 | 20 | 23 | 24 | 28 | 29 | 42 | 43 |
44 | 47 | 53 |
54 |
55 | 56 |
57 |

{{"vip.vip.HINT1" | translate}}

58 |

{{"vip.vip.HINT2" | translate}}

59 |
60 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/virtualRouter/virtualRouter.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 | 8 |
9 |

{{"virtualRouter.virtualRouter.VIRTUAL ROUTER" | translate}}

10 |
11 | 14 | 15 | 18 | 19 |
20 | 21 | 24 | 25 | 38 | 39 | 54 |
55 | 56 |
57 |

{{"virtualRouter.virtualRouter.HINT1" | translate}}

58 |

{{"virtualRouter.virtualRouter.HINT2" | translate}}

59 |
60 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/virtualRouterOffering/virtualRouterOffering.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | 7 |
8 |

{{ "virtualRouterOffering.virtualRouterOffering.VIRTUAL ROUTER OFFERING" | translate }}

9 |
10 | 13 | 14 | 17 | 18 |
19 | 20 | 23 | 24 | 28 | 29 | 42 | 43 | 54 |
55 | 56 |
57 |

{{ "virtualRouterOffering.virtualRouterOffering.HINT1" | translate }}

58 |

{{ "virtualRouterOffering.virtualRouterOffering.HINT2" | translate }}

59 |
60 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/vm/attachL3Network.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"vm.attachL3Network.ATTACH L3 NETWORK" | translate}}

4 |
5 |
6 | 7 | 8 |

{{"vm.attachL3Network.HINT" | translate}}

9 |
10 |
11 | 12 | 13 |
14 |
15 |
16 |
17 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/vm/attachVolume.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"vm.attachVolume.ATTACH DATA VOLUME" | translate}}

4 |
5 |
6 | 7 | 8 |

{{"vm.attachVolume.HINT" | translate}}

9 |
10 |
11 | 12 | 13 |
14 |
15 |
16 |
17 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/vm/changeInstanceOffering.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"vm.changeInstanceOffering.CHANGE INSTANCE OFFERING" | translate}}

4 |
5 |
6 | 7 | 8 |
9 |
10 | 11 | 12 |
13 |
14 |
15 |
16 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/vm/detachL3Network.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"vm.detachL3Network.DETACH L3 NETWORK" | translate}}

4 |
5 |
6 | 7 | 8 |

{{"vm.detachL3Network.HINT" | translate}}

9 |
10 |
11 | 12 | 13 |
14 |
15 |
16 |
17 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/vm/detachVolume.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"vm.detachVolume.DETACH DATA VOLUME" | translate}}

4 |
5 |
6 | 7 | 8 |
9 |
10 | 11 | 12 |
13 |
14 |
15 |
16 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/vm/migrateVm.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{"vm.migrateVm.MIGRATE VM INSTANCE" | translate}}

4 |
5 |
6 | 7 | 8 |

{{"vm.migrateVm.HINT" | translate}}

9 |
10 | 11 |
12 | 13 | 14 |
15 |
16 |
17 |
18 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/volume/attachVm.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ "volume.attachVm.ALERT1.1" | translate }}{{ "volume.attachVm.ALERT1.2" | translate }}{{ "volume.attachVm.ALERT1.3" | translate }} 5 |
6 |
7 |

{{ "volume.attachVm.ATTACH VM INSTANCE" | translate }}

8 |
9 |
10 | 11 | 12 |

{{ "volume.attachVm.HINT1" | translate }}

13 |
14 |
15 | 16 | 17 |
18 |
19 |
20 |
21 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/volume/backupSnapshot.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ "volume.backupSnapshot.ALERT1.1" | translate }}{{ "volume.backupSnapshot.ALERT1.1" | translate }}{{ "volume.backupSnapshot.ALERT1.1" | translate }} 5 |
6 |
7 |

{{ "volume.backupSnapshot.BACKUP VOLUME SNAPSHOT" | translate }}

8 |
9 |
10 | 11 | 12 |

{{ "volume.backupSnapshot.HINT1" | translate }}

13 |
14 |
15 | 16 | 17 |
18 |
19 |
20 |
21 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/volume/backupVolume.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ "volume.backupVolume.ALERT1.1" | translate }}{{ "volume.backupVolume.ALERT1.2" | translate }}{{ "volume.backupVolume.ALERT1.3" | translate }} 5 |
6 |
7 |

{{ "volume.backupVolume.BACKUP DATA VOLUME" | translate }}

8 |
9 |
10 | 11 | 12 |
13 |
14 | 15 | 16 |
17 |
18 |
19 |
20 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/volume/createTemplateFromVolume.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ "volume.createTemplateFromVolume.ALERT1.1" | translate }}{{ "volume.createTemplateFromVolume.ALERT1.2" | translate }}{{ "volume.createTemplateFromVolume.ALERT1.3" | translate }} 5 | Or please attach an existing backup storage to the zone this root volume belongs to. 6 |
7 |
8 |

{{ "volume.createTemplateFromVolume.CREATE TEMPLATE FROM ROOT VOLUME" | translate }}

9 |
10 | {{ "volume.createTemplateFromVolume.ALERT2.1" | translate }}{{vm.name}}{{ "volume.createTemplateFromVolume.ALERT2.2" | translate }}{{vm.state}},{{ "volume.createTemplateFromVolume.ALERT2.3" | translate }} 11 | 12 |
13 |
14 |
15 | 16 | 17 |
18 |
19 | 20 | 21 |
22 |
23 | 24 | 25 |
26 |
27 | 28 | 29 |
30 |
31 | 32 | 33 |

{{ "volume.createTemplateFromVolume.HINT1" | translate }}

34 |
35 |
36 | 37 | 38 |
39 | 40 |
41 |
42 | 45 |
46 |

{{ "volume.createTemplateFromVolume.HINT2" | translate }}

47 |
48 | 49 |
50 | 51 | 52 |
53 |
54 |
55 |
56 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/volume/createVolume.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 | {{ "volume.createVolume.ALERT1.1" | translate }}{{ "volume.createVolume.ALERT1.2" | translate }}{{ "volume.createVolume.ALERT1.3" | translate }} 8 |
9 |
10 |

{{ "volume.createVolume.CREATE DATA VOLUME" | translate }}

11 |
12 |
13 | 14 | 15 |
16 |
17 | 18 | 19 |
20 |
21 | 22 | 23 |
24 |
25 |
26 | 27 |
28 |
29 | {{ "volume.createVolume.ALERT2" | translate }} 30 |
31 |
32 |

{{ "volume.createVolume.ATTACH VM" | translate }}

33 |
34 |
35 | 36 | 37 |

{{ "volume.createVolume.HINT1" | translate }}

38 |
39 |
40 |
41 | 42 |
43 | 44 |
45 |
46 |
47 | 48 | 56 | 57 |
58 |
-------------------------------------------------------------------------------- /zstack_dashboard/static/templates/volume/deleteSnapshotFromBackupStorage.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{ "volume.deleteSnapshotFromBackupStorage.BACKUP DATA VOLUME" | translate }}

4 |
5 |
6 | 7 | 8 |

{{ "volume.deleteSnapshotFromBackupStorage.HINT1" | translate }}

9 |
10 |
11 | 12 | 13 |
14 |
15 |
16 |
17 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/volume/deleteVolumeFromBackupStorage.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ "volume.deleteVolumeFromBackupStorage.ALERT1.1" | translate }}{{ "volume.deleteVolumeFromBackupStorage.ALERT1.2" | translate }}{{ "volume.deleteVolumeFromBackupStorage.ALERT1.3" | translate }} 5 |
6 |
7 |

{{ "volume.deleteVolumeFromBackupStorage.BACKUP DATA VOLUME" | translate }}

8 |
9 |
10 | 11 | 12 |
13 |
14 | 15 | 16 |
17 |
18 |
19 |
20 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/volume/detachVm.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{ "volume.detachVm.DETACH VM INSTANCE" | translate }}

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
{{ "volume.detachVm.NAME:" | translate }}{{vm.name}}
{{ "volume.detachVm.STATE:" | translate }}{{vm.state}}
{{ "volume.detachVm.HYPERVISOR:" | translate }}{{vm.hypervisorType}}
19 | 20 |

{{ "volume.detachVm.HINT" | translate }}

21 | 22 | 23 | 24 |
25 |
26 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/volume/revertSnapshot.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{ "volume.reverSnapshot.REVERT VOLUME TO SNAPSHOT" | translate }}

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
{{ "volume.reverSnapshot.VOLUME NAME" | translate }}{{volume.name}}
{{ "volume.reverSnapshot.VOLUME TYPE" | translate }}{{volume.type}}
{{ "volume.reverSnapshot.SNAPSHOT NAME" | translate }}{{snapshot.name}}
{{ "volume.reverSnapshot.SNAPSHOT UUID" | translate }}{{snapshot.uuid}}
{{ "volume.reverSnapshot.VM THE VOLUME ATTACHED" | translate }}{{vm.name}}
27 | 28 |

{{ "volume.reverSnapshot.HINT" | translate }}

29 | 30 | 31 | 32 |
33 |
34 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/volume/takeSnapshot.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{ "volume.takeSnapshot.TAKE VOLUME SNAPSHOT" | translate }}

4 |
5 | 6 |
7 | 8 | 9 |
10 |
11 | 12 | 13 |
14 |
15 | 16 |
17 | 18 | 19 |
20 | 21 |
22 |
23 | -------------------------------------------------------------------------------- /zstack_dashboard/static/templates/zone/templates.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zstackio/zstack-dashboard/32ecec3b4ada58d3bb9bdeb33c67e83302ec9bef/zstack_dashboard/static/templates/zone/templates.html --------------------------------------------------------------------------------