├── .bowerrc
├── .gitignore
├── LICENSE
├── README.md
├── bower.json
├── config.json
├── index.js
├── modules
├── ignite
│ ├── rest-controller.js
│ └── rest-service.js
├── logger.js
├── router.js
├── ui
│ ├── css
│ │ ├── animate.css
│ │ ├── app.css
│ │ ├── bootstrap.css
│ │ ├── font-awesome.min.css
│ │ ├── font.css
│ │ ├── simple-line-icons.css
│ │ └── smart-table.css
│ ├── fonts
│ │ ├── FontAwesome.otf
│ │ ├── Simple-Line-Icons.eot
│ │ ├── Simple-Line-Icons.svg
│ │ ├── Simple-Line-Icons.ttf
│ │ ├── Simple-Line-Icons.woff
│ │ ├── fontawesome-webfont.eot
│ │ ├── fontawesome-webfont.svg
│ │ ├── fontawesome-webfont.ttf
│ │ ├── fontawesome-webfont.woff
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ ├── glyphicons-halflings-regular.woff
│ │ ├── glyphicons-halflings-regular.woff2
│ │ └── sourcesanspro
│ │ │ ├── sourcesanspro-bold.woff
│ │ │ ├── sourcesanspro-light.woff
│ │ │ └── sourcesanspro.woff
│ ├── img
│ │ ├── logo-small.png
│ │ └── logo.png
│ ├── index.html
│ ├── l10n
│ │ └── en.js
│ └── modules
│ │ ├── app
│ │ ├── app-controller.js
│ │ ├── app.js
│ │ ├── config.js
│ │ ├── lazyload.js
│ │ ├── main.js
│ │ └── router.js
│ │ ├── ignite
│ │ ├── cache
│ │ │ ├── cache-controller.js
│ │ │ └── default.html
│ │ ├── master.html
│ │ ├── rest
│ │ │ ├── default.html
│ │ │ ├── rest-controller.js
│ │ │ └── rest-service.js
│ │ └── topology
│ │ │ ├── default.html
│ │ │ └── topology-controller.js
│ │ └── layout
│ │ ├── aside.html
│ │ ├── header-controller.js
│ │ ├── header.html
│ │ ├── master.html
│ │ ├── nav.html
│ │ └── page-sizer-directive.js
└── web-server.js
└── package.json
/.bowerrc:
--------------------------------------------------------------------------------
1 | {
2 | "directory": "modules/ui/bower_components/"
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.csv
2 | *.dat
3 | *.iml
4 | *.log
5 | *.out
6 | *.pid
7 | *.seed
8 | *.sublime-*
9 | *.swo
10 | *.swp
11 | *.tgz
12 | *.xml
13 | .DS_Store
14 | .idea
15 | .project
16 | .strong-pm
17 | coverage
18 | node_modules
19 | npm-debug.log
20 | bower_components
21 | amps-standalone
22 | db
23 | store.db
24 | prod
25 | data
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU LESSER GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 |
9 | This version of the GNU Lesser General Public License incorporates
10 | the terms and conditions of version 3 of the GNU General Public
11 | License, supplemented by the additional permissions listed below.
12 |
13 | 0. Additional Definitions.
14 |
15 | As used herein, "this License" refers to version 3 of the GNU Lesser
16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU
17 | General Public License.
18 |
19 | "The Library" refers to a covered work governed by this License,
20 | other than an Application or a Combined Work as defined below.
21 |
22 | An "Application" is any work that makes use of an interface provided
23 | by the Library, but which is not otherwise based on the Library.
24 | Defining a subclass of a class defined by the Library is deemed a mode
25 | of using an interface provided by the Library.
26 |
27 | A "Combined Work" is a work produced by combining or linking an
28 | Application with the Library. The particular version of the Library
29 | with which the Combined Work was made is also called the "Linked
30 | Version".
31 |
32 | The "Minimal Corresponding Source" for a Combined Work means the
33 | Corresponding Source for the Combined Work, excluding any source code
34 | for portions of the Combined Work that, considered in isolation, are
35 | based on the Application, and not on the Linked Version.
36 |
37 | The "Corresponding Application Code" for a Combined Work means the
38 | object code and/or source code for the Application, including any data
39 | and utility programs needed for reproducing the Combined Work from the
40 | Application, but excluding the System Libraries of the Combined Work.
41 |
42 | 1. Exception to Section 3 of the GNU GPL.
43 |
44 | You may convey a covered work under sections 3 and 4 of this License
45 | without being bound by section 3 of the GNU GPL.
46 |
47 | 2. Conveying Modified Versions.
48 |
49 | If you modify a copy of the Library, and, in your modifications, a
50 | facility refers to a function or data to be supplied by an Application
51 | that uses the facility (other than as an argument passed when the
52 | facility is invoked), then you may convey a copy of the modified
53 | version:
54 |
55 | a) under this License, provided that you make a good faith effort to
56 | ensure that, in the event an Application does not supply the
57 | function or data, the facility still operates, and performs
58 | whatever part of its purpose remains meaningful, or
59 |
60 | b) under the GNU GPL, with none of the additional permissions of
61 | this License applicable to that copy.
62 |
63 | 3. Object Code Incorporating Material from Library Header Files.
64 |
65 | The object code form of an Application may incorporate material from
66 | a header file that is part of the Library. You may convey such object
67 | code under terms of your choice, provided that, if the incorporated
68 | material is not limited to numerical parameters, data structure
69 | layouts and accessors, or small macros, inline functions and templates
70 | (ten or fewer lines in length), you do both of the following:
71 |
72 | a) Give prominent notice with each copy of the object code that the
73 | Library is used in it and that the Library and its use are
74 | covered by this License.
75 |
76 | b) Accompany the object code with a copy of the GNU GPL and this license
77 | document.
78 |
79 | 4. Combined Works.
80 |
81 | You may convey a Combined Work under terms of your choice that,
82 | taken together, effectively do not restrict modification of the
83 | portions of the Library contained in the Combined Work and reverse
84 | engineering for debugging such modifications, if you also do each of
85 | the following:
86 |
87 | a) Give prominent notice with each copy of the Combined Work that
88 | the Library is used in it and that the Library and its use are
89 | covered by this License.
90 |
91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license
92 | document.
93 |
94 | c) For a Combined Work that displays copyright notices during
95 | execution, include the copyright notice for the Library among
96 | these notices, as well as a reference directing the user to the
97 | copies of the GNU GPL and this license document.
98 |
99 | d) Do one of the following:
100 |
101 | 0) Convey the Minimal Corresponding Source under the terms of this
102 | License, and the Corresponding Application Code in a form
103 | suitable for, and under terms that permit, the user to
104 | recombine or relink the Application with a modified version of
105 | the Linked Version to produce a modified Combined Work, in the
106 | manner specified by section 6 of the GNU GPL for conveying
107 | Corresponding Source.
108 |
109 | 1) Use a suitable shared library mechanism for linking with the
110 | Library. A suitable mechanism is one that (a) uses at run time
111 | a copy of the Library already present on the user's computer
112 | system, and (b) will operate properly with a modified version
113 | of the Library that is interface-compatible with the Linked
114 | Version.
115 |
116 | e) Provide Installation Information, but only if you would otherwise
117 | be required to provide such information under section 6 of the
118 | GNU GPL, and only to the extent that such information is
119 | necessary to install and execute a modified version of the
120 | Combined Work produced by recombining or relinking the
121 | Application with a modified version of the Linked Version. (If
122 | you use option 4d0, the Installation Information must accompany
123 | the Minimal Corresponding Source and Corresponding Application
124 | Code. If you use option 4d1, you must provide the Installation
125 | Information in the manner specified by section 6 of the GNU GPL
126 | for conveying Corresponding Source.)
127 |
128 | 5. Combined Libraries.
129 |
130 | You may place library facilities that are a work based on the
131 | Library side by side in a single library together with other library
132 | facilities that are not Applications and are not covered by this
133 | License, and convey such a combined library under terms of your
134 | choice, if you do both of the following:
135 |
136 | a) Accompany the combined library with a copy of the same work based
137 | on the Library, uncombined with any other library facilities,
138 | conveyed under the terms of this License.
139 |
140 | b) Give prominent notice with the combined library that part of it
141 | is a work based on the Library, and explaining where to find the
142 | accompanying uncombined form of the same work.
143 |
144 | 6. Revised Versions of the GNU Lesser General Public License.
145 |
146 | The Free Software Foundation may publish revised and/or new versions
147 | of the GNU Lesser General Public License from time to time. Such new
148 | versions will be similar in spirit to the present version, but may
149 | differ in detail to address new problems or concerns.
150 |
151 | Each version is given a distinguishing version number. If the
152 | Library as you received it specifies that a certain numbered version
153 | of the GNU Lesser General Public License "or any later version"
154 | applies to it, you have the option of following the terms and
155 | conditions either of that published version or of any later version
156 | published by the Free Software Foundation. If the Library as you
157 | received it does not specify a version number of the GNU Lesser
158 | General Public License, you may choose any version of the GNU Lesser
159 | General Public License ever published by the Free Software Foundation.
160 |
161 | If the Library as you received it specifies that a proxy can decide
162 | whether future versions of the GNU Lesser General Public License shall
163 | apply, that proxy's public statement of acceptance of any version is
164 | permanent authorization for you to choose that version for the
165 | Library.
166 |
167 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # aiex
2 | Apache Ignite Extensions
3 | ##maintainer needed
4 |
5 |
12 |
13 | Summary
14 | Apache Ignite Extensions is a modular system to create user interface modules for interacting with application deployed
15 | in Apache Ignite.
16 |
17 |
18 |
19 | Current Features
20 | aeix can currently shows a basic view of topology and supports invocation of all caching related operations.
21 |
22 |
23 | Topology Viewer
24 | Cache Operations
25 |
26 |
27 |
28 | Topology Viewer
29 |
30 | List of nodes searchable by nodeid
31 | Summary, Metrics and Attribute information
32 | Searchable metrics and attribute names and values
33 |
34 |
35 |
36 | Cache Operations
37 |
38 |
39 | How To Install
40 |
41 | The application requires node runtime. If you are familiar with node and npm standard deployment/development workflow,
42 | you can skip to the Quick Setup section below. Otherwise read on..
43 |
44 | Setup
45 | Given below is the overall setup process:
46 |
47 |
48 | Install nodejs and npm
49 | Install git
50 | Install bower for ui dependency management
51 | install all bower packages
52 | Install all npm packages
53 | Start the server
54 |
55 |
56 | Ubuntu
57 |
58 | Following instructions were tested on freshly provisioned EC2 server ubuntu-trusty-14.04-amd64. Your mileage may vary depending on your OS.
59 |
60 |
61 | Step 1: Install git
62 |
63 |
64 | sudo apt-get update
65 |
66 |
67 | sudo apt-get install git
68 |
69 |
70 |
71 | For information on how to install git for your operating system please refer to:
72 | https://git-scm.com/book/en/v2/Getting-Started-Installing-Git.
73 |
74 |
75 |
76 | Step 2: Install nodejs
77 |
78 |
79 | curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
80 |
81 |
82 | sudo apt-get install -y nodejs
83 |
84 |
85 |
86 |
87 | For information on how to install nodejs for your operating system please refer to:
88 | https://nodejs.org/en/download/package-manager/
89 |
90 |
91 |
92 | Step 3: Clone the repo
93 |
94 |
95 | git clone https://github.com/sumeet70/aiex.git
96 |
97 |
98 |
99 | Step 4: Install bower
100 |
101 |
102 | sudo npm install bower -g
103 |
104 |
105 |
106 |
107 | Step 5: Install all npm packages
108 | Change the current directory to project root and install npm dependencies
109 |
110 |
111 | cd aiex
112 |
113 |
114 | npm install
115 |
116 |
117 |
118 |
119 | Step 6: Install all bower packages
120 |
121 |
122 | bower install
123 |
124 |
125 |
126 | Step 7: Start the server
127 |
128 | Although it is recommended that you run the next command as is, but it can fail under certain circumstance. If that is the case, try running it as a sudoer.
129 | One of the conditions under which it is likely to fail is if you set the default port to be port 80 in /config.json,
130 | since port 80 access is blocked by some OS builds it only runs as sudo.
131 | There can be other permissions issues along the way that might prevent you from starting up a node process without sudo.
132 |
133 |
134 |
135 | export IGNITE_REST=localhost:8080 #optional
136 | npm start
137 |
138 |
139 | If you run into security problems run sudo npm start
140 |
141 | Windows
142 |
143 | Following instructions were tested on freshly provisioned EC2 windows machine. Your mileage may vary depending on your OS.
144 |
145 |
146 | Step 1: Install git
147 |
148 | http://git-scm.com/download/win
149 |
150 |
151 | For information on how to install git for your operating system please refer to:
152 | https://git-scm.com/book/en/v2/Getting-Started-Installing-Git.
153 |
154 |
155 |
156 | Step 2: Install nodejs
157 |
158 |
159 | https://nodejs.org/en/download/
160 |
161 |
162 |
163 | For information on how to install nodejs for your operating system please refer to:
164 | https://nodejs.org/en/download/package-manager/
165 |
166 |
167 |
168 | Step 3: Clone the repo
169 | Open command prompt or your favorite shell as admin
170 |
171 |
172 | git clone https://github.com/sumeet70/aiex.git
173 |
174 |
175 |
176 | Step 4: Install bower
177 | This step will usually fail if you don't run the following command as admin
178 |
179 |
180 | npm install bower -g
181 |
182 |
183 |
184 |
185 | Step 5: Install all npm packages
186 | Change the current directory to project root and install npm dependencies
187 |
188 |
189 | cd aiex
190 |
191 |
192 | npm install
193 |
194 |
195 |
196 |
197 | Step 6: Install all bower packages
198 |
199 |
200 | bower install
201 |
202 |
203 |
204 | Step 7: Start the server
205 |
206 |
207 | export IGNITE_REST=localhost:8080 #optional
208 | npm start
209 |
210 |
211 |
212 | Quick Setup
213 | Follow these instructions if you are already setup with node, npm, bower and git.
214 | These instructions assume that you already have npm and git on your path
215 |
216 | Clone the repo
217 | Open your favorite shell and navigate to the root of the project
218 | Run the following commands:
219 | npm install
220 | bower install
221 | export IGNITE_REST=localhost:8080 #optional
222 | npm start
223 |
224 | Navigate to http://localhost:8081
225 |
226 |
227 | The application backend runs in node using expressjs as middleware. The front end of the application has been written in Angularjs 1.4.
228 |
229 | Usage Guide
230 |
231 | The current version assumes that the ignite rest api is running on default localhost:8080 location.
232 | Additionally, if you want to run cache operations, you need to run ignite with caching enabled.
233 |
234 |
235 | Enable REST Interface
236 |
237 | In order to run ignite with REST api you need to load an optional library called ignite-rest-http
238 | Simply go to /libs/optional folder in the root directory of your install and copy ignite-rest-http folder to /libs and then restart ignite.
239 |
240 | Please visit ignite docs for additional information on ignite setup: https://apacheignite.readme.io/docs/getting-started
241 |
242 | Enable Caching
243 |
244 | To enable caching in ignite cluster you need to supply some basic configurations. When starting up your cluster, use one of the example configuration that already
245 | ships with ignite code: /examples/config/example-cahce.xml
246 | Please visit ignite docs for additional information on ignite setup: https://apacheignite.readme.io/docs/getting-started
247 |
248 |
249 | You need to supply this configuration path as a command line parameter to ignite startup script ignite.sh (ignite.bat in windows command prompt).
250 | This script is located in /bin directory of your installation root.
251 |
252 |
253 |
254 | You start up command should look like:
255 |
256 | [Install Dir]/bin/ignite.sh [Install Dir]/examples/config/example-cahce.xml
257 | replace [Install Dir] with path to your installation directory.
258 |
259 |
260 | Startup aiex
261 |
262 |
263 | Run npm start
(refer to how to install section)
264 | Simply open your browser and navigate to http://localhost:8081
265 | If you started the webpage before starting the cluster simply refresh the page or
266 | navigate to another tab and come back to topology tab to see the updated topology view.
267 |
268 |
269 |
270 | Upcoming Features
271 |
272 | Log viewer
273 | Detailed topology and node information
274 | Ability to connect to multiple clusters
275 |
276 |
277 | This project is under active development. Stay tuned for more.
278 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "aeixui",
3 | "version": "0.0.1",
4 | "authors": [
5 | "Sumeet Singh"
6 | ],
7 | "description": "Web UI for aeix",
8 | "keywords": ["Apache Ignite", "Aeix", "Ignite REST API"],
9 | "license": "GPL",
10 | "homepage": "",
11 | "private": true,
12 | "ignore": [
13 | "**/.*",
14 | "node_modules",
15 | "bower_components",
16 | "test",
17 | "tests"
18 | ],
19 | "dependencies": {
20 | "angular": "~1.3.11",
21 | "angular-animate": "~1.3.11",
22 | "angular-cookies": "~1.3.11",
23 | "angular-resource": "~1.3.11",
24 | "angular-sanitize": "~1.3.11",
25 | "angular-touch": "~1.3.11",
26 | "angular-translate": "~2.5.2",
27 | "angular-translate-loader-static-files": "~2.5.2",
28 | "angular-translate-storage-cookie": "~2.5.2",
29 | "angular-translate-storage-local": "~2.5.2",
30 | "angular-bootstrap": "~0.12.0",
31 | "angular-bootstrap-nav-tree": "*",
32 | "angular-ui-router": "~0.2.11",
33 | "angular-ui-utils": "~0.2.1",
34 | "angular-file-upload": "~1.1.1",
35 | "angular-ui-select": "~0.8.3",
36 | "angular-ui-calendar": "latest",
37 | "angular-ui-grid": "~3.0.0-rc.16",
38 | "angular-xeditable": "~0.1.8",
39 | "angular-smart-table": "~1.4.9",
40 | "angularjs-toaster": "~0.4.8",
41 | "ng-grid": "~2.0.13",
42 | "ngImgCrop": "~0.2.0",
43 | "ngstorage": "~0.3.0",
44 | "oclazyload": "~0.5.1",
45 | "textAngular": "~1.2.2",
46 | "venturocket-angular-slider": "~0.3.2",
47 | "jquery": "~2.1.3",
48 | "animate.css": "~3.2.0",
49 | "bootstrap": "~3.3.0",
50 | "bootstrap-filestyle": "~1.1.2",
51 | "bootstrap-slider": "*",
52 | "bootstrap-touchspin": "~3.0.1",
53 | "bootstrap-wysiwyg": "*",
54 | "bower-jvectormap": "~1.2.2",
55 | "bootstrap-chosen": "~1.0.0",
56 | "chosen": "https://github.com/harvesthq/chosen/releases/download/v1.3.0/chosen_v1.3.0.zip",
57 | "datatables": "~1.10.4",
58 | "plugins": "datatables/plugins#~1.0.1",
59 | "footable": "~2.0.3",
60 | "font-awesome": "~4.2.0",
61 | "fullcalendar": "~2.2.6",
62 | "html5sortable": "*",
63 | "moment": "~2.10.3",
64 | "nestable": "*",
65 | "screenfull": "~1.2.1",
66 | "slimscroll": "~1.3.3",
67 | "simple-line-icons": "~0.1.1",
68 | "jquery_appear": "~0.3.3",
69 | "jquery.easy-pie-chart": "~2.1.6",
70 | "jquery.sparkline": "~2.1.2",
71 | "flot": "~0.8.3",
72 | "flot.tooltip": "~0.8.4",
73 | "flot.orderbars": "*",
74 | "bootstrap-daterangepicker": "~1.3.17",
75 | "bootstrap-tagsinput": "~0.4.2",
76 | "underscore": "~1.8.2",
77 | "d3": "~3.5.5",
78 | "moment-range": "~2.0.2",
79 | "socket.io-client": "~1.3.5",
80 | "livereload-js": "~2.2.1"
81 | },
82 | "resolutions": {
83 | "angular-cookies": "~1.3.11",
84 | "angular-touch": "~1.3.11",
85 | "angular": "~1.3.11",
86 | "angular-sanitize": "~1.3.x",
87 | "jquery": "~2.1.3",
88 | "fullcalendar": "~2.2.6",
89 | "moment": "~2.10.3",
90 | "bootstrap": "~3.3.0",
91 | "d3": "~3.5.5"
92 | }
93 | }
--------------------------------------------------------------------------------
/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "development":{
3 | "rootPath":"/api",
4 | "port": 8081,
5 | "zmqSocketAddress":"tcp://127.0.0.1:5555"
6 | }
7 | }
8 |
9 |
10 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | //Setup env variable
2 | process.env.PWD = process.env.PWD || process.cwd();
3 | var arguments = process.argv.slice(2);
4 | var env = process.env.NODE_ENV;
5 | if(env === undefined){ env = "development"; }
6 |
7 | var app = require('express')();
8 | app.set('env',env);
9 |
10 |
11 | //Load Configuration File
12 | var jsonFile = require('json-file-plus');
13 | var path = require('path');
14 | var configFile = path.join(process.cwd(), 'config.json');
15 | if(arguments.length > 0){ configFile = arguments[0]; }
16 |
17 | jsonFile(configFile, function (err, file) {
18 | if (err) { console.log(err); }
19 | global.logger = require('./modules/logger')(env);
20 | var activeConfig = file.data[env];
21 |
22 | global.logger.info("Configuration loaded successfully from %s", configFile, activeConfig);
23 | require('./modules/web-server')(app, activeConfig);
24 | });
--------------------------------------------------------------------------------
/modules/ignite/rest-controller.js:
--------------------------------------------------------------------------------
1 | var logger = global.logger;
2 | var _ = require('underscore');
3 | var restService = require('./rest-service');
4 |
5 | module.exports = function(){
6 |
7 | var restController = function () {
8 |
9 | var restServiceInstance = new restService();
10 | var apiMethods = [ "log", "version", "decrement", "increment",
11 | "cachemetrics", "cas", "prepend", "append", "rep", "rmvall", "remove", "add", "putall", "put", "getall", "get",
12 | "node", "top", "execute"]
13 |
14 | var me = this;
15 | _.forEach(apiMethods, function(methodName){
16 | me[methodName] = function (req, res) {
17 | try{
18 | logger.info(req.query);
19 |
20 | restServiceInstance.proxyCall(methodName, req.query).then(function(result){
21 | res.send(result);
22 | });
23 | }catch(error){
24 | logger.error("Error", { "method": methodName, "error": error.message });
25 | res.status(417).send(error);
26 | }
27 | };
28 | });
29 | }
30 |
31 | return new restController();
32 | };
--------------------------------------------------------------------------------
/modules/ignite/rest-service.js:
--------------------------------------------------------------------------------
1 | var q = require('q');
2 | var _ = require('underscore');
3 | var logger = global.logger;
4 | var request = require("request");
5 | var rootUrl = "http://" + process.env.IGNITE_REST + "/ignite?cmd=" || "http://localhost:8080/ignite?cmd=";
6 |
7 | module.exports = function() {
8 | this.proxyCall = function(methodName, query){
9 | var deferred = q.defer();
10 |
11 | request({
12 | method:"GET",
13 | uri: rootUrl + methodName,
14 | qs: query
15 | } , function (error, response, body) {
16 | if (error) {
17 | logger.info(error);
18 | deferred.reject(error);
19 | } else {
20 | logger.info("Resolved");
21 | deferred.resolve(body);
22 | }
23 | });
24 |
25 | return deferred.promise;
26 | }
27 | };
28 |
--------------------------------------------------------------------------------
/modules/logger.js:
--------------------------------------------------------------------------------
1 | var winston = require('winston');
2 |
3 | module.exports = function(){
4 |
5 | var logger;
6 | var env = global.env;
7 | if(env === undefined){
8 | env = 'development';
9 | }
10 |
11 | if(env === 'development'){
12 | winston.remove(winston.transports.Console);
13 |
14 | logger = new (winston.Logger)({
15 | transports: [
16 | new (winston.transports.Console)({
17 | timestamp:true,
18 | level:'debug'
19 | })
20 | ]
21 | });
22 | }else{
23 |
24 | }
25 | global.logger = logger;
26 | return logger;
27 | };
28 |
--------------------------------------------------------------------------------
/modules/router.js:
--------------------------------------------------------------------------------
1 | var _ = require('underscore');
2 |
3 | module.exports = function(app,router){
4 |
5 | var igniteRestController = require('./ignite/rest-controller')(app);
6 |
7 | var apiMethods = [ "log", "version", "decrement", "increment", "cachemetrics", "cas",
8 | "prepend", "append", "rep", "rmvall", "remove", "add", "putall", "put",
9 | "getall", "get", "node", "top", "execute"]
10 | _.forEach(apiMethods, function(methodName){
11 | router.get('/ignite/' + methodName, igniteRestController[methodName]);
12 | });
13 | }
14 |
--------------------------------------------------------------------------------
/modules/ui/css/animate.css:
--------------------------------------------------------------------------------
1 | .animated{
2 | -webkit-animation-fill-mode:both;
3 | -moz-animation-fill-mode:both;
4 | -ms-animation-fill-mode:both;
5 | -o-animation-fill-mode:both;
6 | animation-fill-mode:both;
7 | -webkit-animation-duration:0.5s;
8 | -moz-animation-duration:0.5s;
9 | -ms-animation-duration:0.5s;
10 | -o-animation-duration:0.5s;
11 | animation-duration:0.5s;
12 | }
13 |
14 | @-webkit-keyframes fadeIn {
15 | 0% {opacity: 0;} 100% {opacity: 1;}
16 | }
17 |
18 | @-moz-keyframes fadeIn {
19 | 0% {opacity: 0;}
20 | 100% {opacity: 1;}
21 | }
22 |
23 | @-o-keyframes fadeIn {
24 | 0% {opacity: 0;}
25 | 100% {opacity: 1;}
26 | }
27 |
28 | @keyframes fadeIn {
29 | 0% {opacity: 0;}
30 | 100% {opacity: 1;}
31 | }
32 |
33 | .fadeIn {
34 | -webkit-animation-name: fadeIn;
35 | -moz-animation-name: fadeIn;
36 | -o-animation-name: fadeIn;
37 | animation-name: fadeIn;
38 | }
39 | @-webkit-keyframes fadeInUp {
40 | 0% {
41 | opacity: 0;
42 | -webkit-transform: translateY(20px);
43 | }
44 |
45 | 100% {
46 | opacity: 1;
47 | -webkit-transform: translateY(0);
48 | }
49 | }
50 |
51 | @-moz-keyframes fadeInUp {
52 | 0% {
53 | opacity: 0;
54 | -moz-transform: translateY(20px);
55 | }
56 |
57 | 100% {
58 | opacity: 1;
59 | -moz-transform: translateY(0);
60 | }
61 | }
62 |
63 | @-o-keyframes fadeInUp {
64 | 0% {
65 | opacity: 0;
66 | -o-transform: translateY(20px);
67 | }
68 |
69 | 100% {
70 | opacity: 1;
71 | -o-transform: translateY(0);
72 | }
73 | }
74 |
75 | @keyframes fadeInUp {
76 | 0% {
77 | opacity: 0;
78 | transform: translateY(20px);
79 | }
80 |
81 | 100% {
82 | opacity: 1;
83 | transform: translateY(0);
84 | }
85 | }
86 |
87 | .fadeInUp {
88 | -webkit-animation-name: fadeInUp;
89 | -moz-animation-name: fadeInUp;
90 | -o-animation-name: fadeInUp;
91 | animation-name: fadeInUp;
92 | }
93 | @-webkit-keyframes fadeInDown {
94 | 0% {
95 | opacity: 0;
96 | -webkit-transform: translateY(-20px);
97 | }
98 |
99 | 100% {
100 | opacity: 1;
101 | -webkit-transform: translateY(0);
102 | }
103 | }
104 |
105 | @-moz-keyframes fadeInDown {
106 | 0% {
107 | opacity: 0;
108 | -moz-transform: translateY(-20px);
109 | }
110 |
111 | 100% {
112 | opacity: 1;
113 | -moz-transform: translateY(0);
114 | }
115 | }
116 |
117 | @-o-keyframes fadeInDown {
118 | 0% {
119 | opacity: 0;
120 | -o-transform: translateY(-20px);
121 | }
122 |
123 | 100% {
124 | opacity: 1;
125 | -o-transform: translateY(0);
126 | }
127 | }
128 |
129 | @keyframes fadeInDown {
130 | 0% {
131 | opacity: 0;
132 | transform: translateY(-20px);
133 | }
134 |
135 | 100% {
136 | opacity: 1;
137 | transform: translateY(0);
138 | }
139 | }
140 |
141 | .fadeInDown {
142 | -webkit-animation-name: fadeInDown;
143 | -moz-animation-name: fadeInDown;
144 | -o-animation-name: fadeInDown;
145 | animation-name: fadeInDown;
146 | }
147 | @-webkit-keyframes fadeInLeft {
148 | 0% {
149 | opacity: 0;
150 | -webkit-transform: translateX(-20px);
151 | }
152 |
153 | 100% {
154 | opacity: 1;
155 | -webkit-transform: translateX(0);
156 | }
157 | }
158 |
159 | @-moz-keyframes fadeInLeft {
160 | 0% {
161 | opacity: 0;
162 | -moz-transform: translateX(-20px);
163 | }
164 |
165 | 100% {
166 | opacity: 1;
167 | -moz-transform: translateX(0);
168 | }
169 | }
170 |
171 | @-o-keyframes fadeInLeft {
172 | 0% {
173 | opacity: 0;
174 | -o-transform: translateX(-20px);
175 | }
176 |
177 | 100% {
178 | opacity: 1;
179 | -o-transform: translateX(0);
180 | }
181 | }
182 |
183 | @keyframes fadeInLeft {
184 | 0% {
185 | opacity: 0;
186 | transform: translateX(-20px);
187 | }
188 |
189 | 100% {
190 | opacity: 1;
191 | transform: translateX(0);
192 | }
193 | }
194 |
195 | .fadeInLeft {
196 | -webkit-animation-name: fadeInLeft;
197 | -moz-animation-name: fadeInLeft;
198 | -o-animation-name: fadeInLeft;
199 | animation-name: fadeInLeft;
200 | }
201 | @-webkit-keyframes fadeInRight {
202 | 0% {
203 | opacity: 0;
204 | -webkit-transform: translateX(20px);
205 | }
206 |
207 | 100% {
208 | opacity: 1;
209 | -webkit-transform: translateX(0);
210 | }
211 | }
212 |
213 | @-moz-keyframes fadeInRight {
214 | 0% {
215 | opacity: 0;
216 | -moz-transform: translateX(20px);
217 | }
218 |
219 | 100% {
220 | opacity: 1;
221 | -moz-transform: translateX(0);
222 | }
223 | }
224 |
225 | @-o-keyframes fadeInRight {
226 | 0% {
227 | opacity: 0;
228 | -o-transform: translateX(20px);
229 | }
230 |
231 | 100% {
232 | opacity: 1;
233 | -o-transform: translateX(0);
234 | }
235 | }
236 |
237 | @keyframes fadeInRight {
238 | 0% {
239 | opacity: 0;
240 | transform: translateX(20px);
241 | }
242 |
243 | 100% {
244 | opacity: 1;
245 | transform: translateX(0);
246 | }
247 | }
248 |
249 | .fadeInRight {
250 | -webkit-animation-name: fadeInRight;
251 | -moz-animation-name: fadeInRight;
252 | -o-animation-name: fadeInRight;
253 | animation-name: fadeInRight;
254 | }
255 | @-webkit-keyframes fadeInUpBig {
256 | 0% {
257 | opacity: 0;
258 | -webkit-transform: translateY(2000px);
259 | }
260 |
261 | 100% {
262 | opacity: 1;
263 | -webkit-transform: translateY(0);
264 | }
265 | }
266 |
267 | @-moz-keyframes fadeInUpBig {
268 | 0% {
269 | opacity: 0;
270 | -moz-transform: translateY(2000px);
271 | }
272 |
273 | 100% {
274 | opacity: 1;
275 | -moz-transform: translateY(0);
276 | }
277 | }
278 |
279 | @-o-keyframes fadeInUpBig {
280 | 0% {
281 | opacity: 0;
282 | -o-transform: translateY(2000px);
283 | }
284 |
285 | 100% {
286 | opacity: 1;
287 | -o-transform: translateY(0);
288 | }
289 | }
290 |
291 | @keyframes fadeInUpBig {
292 | 0% {
293 | opacity: 0;
294 | transform: translateY(2000px);
295 | }
296 |
297 | 100% {
298 | opacity: 1;
299 | transform: translateY(0);
300 | }
301 | }
302 |
303 | .fadeInUpBig {
304 | -webkit-animation-name: fadeInUpBig;
305 | -moz-animation-name: fadeInUpBig;
306 | -o-animation-name: fadeInUpBig;
307 | animation-name: fadeInUpBig;
308 | }
309 | @-webkit-keyframes fadeInDownBig {
310 | 0% {
311 | opacity: 0;
312 | -webkit-transform: translateY(-2000px);
313 | }
314 |
315 | 100% {
316 | opacity: 1;
317 | -webkit-transform: translateY(0);
318 | }
319 | }
320 |
321 | @-moz-keyframes fadeInDownBig {
322 | 0% {
323 | opacity: 0;
324 | -moz-transform: translateY(-2000px);
325 | }
326 |
327 | 100% {
328 | opacity: 1;
329 | -moz-transform: translateY(0);
330 | }
331 | }
332 |
333 | @-o-keyframes fadeInDownBig {
334 | 0% {
335 | opacity: 0;
336 | -o-transform: translateY(-2000px);
337 | }
338 |
339 | 100% {
340 | opacity: 1;
341 | -o-transform: translateY(0);
342 | }
343 | }
344 |
345 | @keyframes fadeInDownBig {
346 | 0% {
347 | opacity: 0;
348 | transform: translateY(-2000px);
349 | }
350 |
351 | 100% {
352 | opacity: 1;
353 | transform: translateY(0);
354 | }
355 | }
356 |
357 | .fadeInDownBig {
358 | -webkit-animation-name: fadeInDownBig;
359 | -moz-animation-name: fadeInDownBig;
360 | -o-animation-name: fadeInDownBig;
361 | animation-name: fadeInDownBig;
362 | }
363 | @-webkit-keyframes fadeInLeftBig {
364 | 0% {
365 | opacity: 0;
366 | -webkit-transform: translateX(-2000px);
367 | }
368 |
369 | 100% {
370 | opacity: 1;
371 | -webkit-transform: translateX(0);
372 | }
373 | }
374 | @-moz-keyframes fadeInLeftBig {
375 | 0% {
376 | opacity: 0;
377 | -moz-transform: translateX(-2000px);
378 | }
379 |
380 | 100% {
381 | opacity: 1;
382 | -moz-transform: translateX(0);
383 | }
384 | }
385 | @-o-keyframes fadeInLeftBig {
386 | 0% {
387 | opacity: 0;
388 | -o-transform: translateX(-2000px);
389 | }
390 |
391 | 100% {
392 | opacity: 1;
393 | -o-transform: translateX(0);
394 | }
395 | }
396 | @keyframes fadeInLeftBig {
397 | 0% {
398 | opacity: 0;
399 | transform: translateX(-2000px);
400 | }
401 |
402 | 100% {
403 | opacity: 1;
404 | transform: translateX(0);
405 | }
406 | }
407 |
408 | .fadeInLeftBig {
409 | -webkit-animation-name: fadeInLeftBig;
410 | -moz-animation-name: fadeInLeftBig;
411 | -o-animation-name: fadeInLeftBig;
412 | animation-name: fadeInLeftBig;
413 | }
414 | @-webkit-keyframes fadeInRightBig {
415 | 0% {
416 | opacity: 0;
417 | -webkit-transform: translateX(2000px);
418 | }
419 |
420 | 100% {
421 | opacity: 1;
422 | -webkit-transform: translateX(0);
423 | }
424 | }
425 |
426 | @-moz-keyframes fadeInRightBig {
427 | 0% {
428 | opacity: 0;
429 | -moz-transform: translateX(2000px);
430 | }
431 |
432 | 100% {
433 | opacity: 1;
434 | -moz-transform: translateX(0);
435 | }
436 | }
437 |
438 | @-o-keyframes fadeInRightBig {
439 | 0% {
440 | opacity: 0;
441 | -o-transform: translateX(2000px);
442 | }
443 |
444 | 100% {
445 | opacity: 1;
446 | -o-transform: translateX(0);
447 | }
448 | }
449 |
450 | @keyframes fadeInRightBig {
451 | 0% {
452 | opacity: 0;
453 | transform: translateX(2000px);
454 | }
455 |
456 | 100% {
457 | opacity: 1;
458 | transform: translateX(0);
459 | }
460 | }
461 |
462 | .fadeInRightBig {
463 | -webkit-animation-name: fadeInRightBig;
464 | -moz-animation-name: fadeInRightBig;
465 | -o-animation-name: fadeInRightBig;
466 | animation-name: fadeInRightBig;
467 | }
468 | @-webkit-keyframes fadeOut {
469 | 0% {opacity: 1;}
470 | 100% {opacity: 0;}
471 | }
472 |
473 | @-moz-keyframes fadeOut {
474 | 0% {opacity: 1;}
475 | 100% {opacity: 0;}
476 | }
477 |
478 | @-o-keyframes fadeOut {
479 | 0% {opacity: 1;}
480 | 100% {opacity: 0;}
481 | }
482 |
483 | @keyframes fadeOut {
484 | 0% {opacity: 1;}
485 | 100% {opacity: 0;}
486 | }
487 |
488 | .fadeOut {
489 | -webkit-animation-name: fadeOut;
490 | -moz-animation-name: fadeOut;
491 | -o-animation-name: fadeOut;
492 | animation-name: fadeOut;
493 | }
494 | @-webkit-keyframes fadeOutUp {
495 | 0% {
496 | opacity: 1;
497 | -webkit-transform: translateY(0);
498 | }
499 |
500 | 100% {
501 | opacity: 0;
502 | -webkit-transform: translateY(-20px);
503 | }
504 | }
505 | @-moz-keyframes fadeOutUp {
506 | 0% {
507 | opacity: 1;
508 | -moz-transform: translateY(0);
509 | }
510 |
511 | 100% {
512 | opacity: 0;
513 | -moz-transform: translateY(-20px);
514 | }
515 | }
516 | @-o-keyframes fadeOutUp {
517 | 0% {
518 | opacity: 1;
519 | -o-transform: translateY(0);
520 | }
521 |
522 | 100% {
523 | opacity: 0;
524 | -o-transform: translateY(-20px);
525 | }
526 | }
527 | @keyframes fadeOutUp {
528 | 0% {
529 | opacity: 1;
530 | transform: translateY(0);
531 | }
532 |
533 | 100% {
534 | opacity: 0;
535 | transform: translateY(-20px);
536 | }
537 | }
538 |
539 | .fadeOutUp {
540 | -webkit-animation-name: fadeOutUp;
541 | -moz-animation-name: fadeOutUp;
542 | -o-animation-name: fadeOutUp;
543 | animation-name: fadeOutUp;
544 | }
545 | @-webkit-keyframes fadeOutDown {
546 | 0% {
547 | opacity: 1;
548 | -webkit-transform: translateY(0);
549 | }
550 |
551 | 100% {
552 | opacity: 0;
553 | -webkit-transform: translateY(20px);
554 | }
555 | }
556 |
557 | @-moz-keyframes fadeOutDown {
558 | 0% {
559 | opacity: 1;
560 | -moz-transform: translateY(0);
561 | }
562 |
563 | 100% {
564 | opacity: 0;
565 | -moz-transform: translateY(20px);
566 | }
567 | }
568 |
569 | @-o-keyframes fadeOutDown {
570 | 0% {
571 | opacity: 1;
572 | -o-transform: translateY(0);
573 | }
574 |
575 | 100% {
576 | opacity: 0;
577 | -o-transform: translateY(20px);
578 | }
579 | }
580 |
581 | @keyframes fadeOutDown {
582 | 0% {
583 | opacity: 1;
584 | transform: translateY(0);
585 | }
586 |
587 | 100% {
588 | opacity: 0;
589 | transform: translateY(20px);
590 | }
591 | }
592 |
593 | .fadeOutDown {
594 | -webkit-animation-name: fadeOutDown;
595 | -moz-animation-name: fadeOutDown;
596 | -o-animation-name: fadeOutDown;
597 | animation-name: fadeOutDown;
598 | }
599 | @-webkit-keyframes fadeOutLeft {
600 | 0% {
601 | opacity: 1;
602 | -webkit-transform: translateX(0);
603 | }
604 |
605 | 100% {
606 | opacity: 0;
607 | -webkit-transform: translateX(-20px);
608 | }
609 | }
610 |
611 | @-moz-keyframes fadeOutLeft {
612 | 0% {
613 | opacity: 1;
614 | -moz-transform: translateX(0);
615 | }
616 |
617 | 100% {
618 | opacity: 0;
619 | -moz-transform: translateX(-20px);
620 | }
621 | }
622 |
623 | @-o-keyframes fadeOutLeft {
624 | 0% {
625 | opacity: 1;
626 | -o-transform: translateX(0);
627 | }
628 |
629 | 100% {
630 | opacity: 0;
631 | -o-transform: translateX(-20px);
632 | }
633 | }
634 |
635 | @keyframes fadeOutLeft {
636 | 0% {
637 | opacity: 1;
638 | transform: translateX(0);
639 | }
640 |
641 | 100% {
642 | opacity: 0;
643 | transform: translateX(-20px);
644 | }
645 | }
646 |
647 | .fadeOutLeft {
648 | -webkit-animation-name: fadeOutLeft;
649 | -moz-animation-name: fadeOutLeft;
650 | -o-animation-name: fadeOutLeft;
651 | animation-name: fadeOutLeft;
652 | }
653 | @-webkit-keyframes fadeOutRight {
654 | 0% {
655 | opacity: 1;
656 | -webkit-transform: translateX(0);
657 | }
658 |
659 | 100% {
660 | opacity: 0;
661 | -webkit-transform: translateX(20px);
662 | }
663 | }
664 |
665 | @-moz-keyframes fadeOutRight {
666 | 0% {
667 | opacity: 1;
668 | -moz-transform: translateX(0);
669 | }
670 |
671 | 100% {
672 | opacity: 0;
673 | -moz-transform: translateX(20px);
674 | }
675 | }
676 |
677 | @-o-keyframes fadeOutRight {
678 | 0% {
679 | opacity: 1;
680 | -o-transform: translateX(0);
681 | }
682 |
683 | 100% {
684 | opacity: 0;
685 | -o-transform: translateX(20px);
686 | }
687 | }
688 |
689 | @keyframes fadeOutRight {
690 | 0% {
691 | opacity: 1;
692 | transform: translateX(0);
693 | }
694 |
695 | 100% {
696 | opacity: 0;
697 | transform: translateX(20px);
698 | }
699 | }
700 |
701 | .fadeOutRight {
702 | -webkit-animation-name: fadeOutRight;
703 | -moz-animation-name: fadeOutRight;
704 | -o-animation-name: fadeOutRight;
705 | animation-name: fadeOutRight;
706 | }
707 | @-webkit-keyframes fadeOutUpBig {
708 | 0% {
709 | opacity: 1;
710 | -webkit-transform: translateY(0);
711 | }
712 |
713 | 100% {
714 | opacity: 0;
715 | -webkit-transform: translateY(-2000px);
716 | }
717 | }
718 |
719 | @-moz-keyframes fadeOutUpBig {
720 | 0% {
721 | opacity: 1;
722 | -moz-transform: translateY(0);
723 | }
724 |
725 | 100% {
726 | opacity: 0;
727 | -moz-transform: translateY(-2000px);
728 | }
729 | }
730 |
731 | @-o-keyframes fadeOutUpBig {
732 | 0% {
733 | opacity: 1;
734 | -o-transform: translateY(0);
735 | }
736 |
737 | 100% {
738 | opacity: 0;
739 | -o-transform: translateY(-2000px);
740 | }
741 | }
742 |
743 | @keyframes fadeOutUpBig {
744 | 0% {
745 | opacity: 1;
746 | transform: translateY(0);
747 | }
748 |
749 | 100% {
750 | opacity: 0;
751 | transform: translateY(-2000px);
752 | }
753 | }
754 |
755 | .fadeOutUpBig {
756 | -webkit-animation-name: fadeOutUpBig;
757 | -moz-animation-name: fadeOutUpBig;
758 | -o-animation-name: fadeOutUpBig;
759 | animation-name: fadeOutUpBig;
760 | }
761 | @-webkit-keyframes fadeOutDownBig {
762 | 0% {
763 | opacity: 1;
764 | -webkit-transform: translateY(0);
765 | }
766 |
767 | 100% {
768 | opacity: 0;
769 | -webkit-transform: translateY(2000px);
770 | }
771 | }
772 |
773 | @-moz-keyframes fadeOutDownBig {
774 | 0% {
775 | opacity: 1;
776 | -moz-transform: translateY(0);
777 | }
778 |
779 | 100% {
780 | opacity: 0;
781 | -moz-transform: translateY(2000px);
782 | }
783 | }
784 |
785 | @-o-keyframes fadeOutDownBig {
786 | 0% {
787 | opacity: 1;
788 | -o-transform: translateY(0);
789 | }
790 |
791 | 100% {
792 | opacity: 0;
793 | -o-transform: translateY(2000px);
794 | }
795 | }
796 |
797 | @keyframes fadeOutDownBig {
798 | 0% {
799 | opacity: 1;
800 | transform: translateY(0);
801 | }
802 |
803 | 100% {
804 | opacity: 0;
805 | transform: translateY(2000px);
806 | }
807 | }
808 |
809 | .fadeOutDownBig {
810 | -webkit-animation-name: fadeOutDownBig;
811 | -moz-animation-name: fadeOutDownBig;
812 | -o-animation-name: fadeOutDownBig;
813 | animation-name: fadeOutDownBig;
814 | }
815 | @-webkit-keyframes fadeOutLeftBig {
816 | 0% {
817 | opacity: 1;
818 | -webkit-transform: translateX(0);
819 | }
820 |
821 | 100% {
822 | opacity: 0;
823 | -webkit-transform: translateX(-2000px);
824 | }
825 | }
826 |
827 | @-moz-keyframes fadeOutLeftBig {
828 | 0% {
829 | opacity: 1;
830 | -moz-transform: translateX(0);
831 | }
832 |
833 | 100% {
834 | opacity: 0;
835 | -moz-transform: translateX(-2000px);
836 | }
837 | }
838 |
839 | @-o-keyframes fadeOutLeftBig {
840 | 0% {
841 | opacity: 1;
842 | -o-transform: translateX(0);
843 | }
844 |
845 | 100% {
846 | opacity: 0;
847 | -o-transform: translateX(-2000px);
848 | }
849 | }
850 |
851 | @keyframes fadeOutLeftBig {
852 | 0% {
853 | opacity: 1;
854 | transform: translateX(0);
855 | }
856 |
857 | 100% {
858 | opacity: 0;
859 | transform: translateX(-2000px);
860 | }
861 | }
862 |
863 | .fadeOutLeftBig {
864 | -webkit-animation-name: fadeOutLeftBig;
865 | -moz-animation-name: fadeOutLeftBig;
866 | -o-animation-name: fadeOutLeftBig;
867 | animation-name: fadeOutLeftBig;
868 | }
869 | @-webkit-keyframes fadeOutRightBig {
870 | 0% {
871 | opacity: 1;
872 | -webkit-transform: translateX(0);
873 | }
874 |
875 | 100% {
876 | opacity: 0;
877 | -webkit-transform: translateX(2000px);
878 | }
879 | }
880 | @-moz-keyframes fadeOutRightBig {
881 | 0% {
882 | opacity: 1;
883 | -moz-transform: translateX(0);
884 | }
885 |
886 | 100% {
887 | opacity: 0;
888 | -moz-transform: translateX(2000px);
889 | }
890 | }
891 | @-o-keyframes fadeOutRightBig {
892 | 0% {
893 | opacity: 1;
894 | -o-transform: translateX(0);
895 | }
896 |
897 | 100% {
898 | opacity: 0;
899 | -o-transform: translateX(2000px);
900 | }
901 | }
902 | @keyframes fadeOutRightBig {
903 | 0% {
904 | opacity: 1;
905 | transform: translateX(0);
906 | }
907 |
908 | 100% {
909 | opacity: 0;
910 | transform: translateX(2000px);
911 | }
912 | }
913 |
914 | .fadeOutRightBig {
915 | -webkit-animation-name: fadeOutRightBig;
916 | -moz-animation-name: fadeOutRightBig;
917 | -o-animation-name: fadeOutRightBig;
918 | animation-name: fadeOutRightBig;
919 | }
920 |
921 |
922 |
923 |
924 | @-webkit-keyframes flipInX {
925 | 0% {
926 | -webkit-transform: perspective(400px) rotateX(90deg);
927 | opacity: 0;
928 | }
929 |
930 | 40% {
931 | -webkit-transform: perspective(400px) rotateX(-10deg);
932 | }
933 |
934 | 70% {
935 | -webkit-transform: perspective(400px) rotateX(10deg);
936 | }
937 |
938 | 100% {
939 | -webkit-transform: perspective(400px) rotateX(0deg);
940 | opacity: 1;
941 | }
942 | }
943 | @-moz-keyframes flipInX {
944 | 0% {
945 | -moz-transform: perspective(400px) rotateX(90deg);
946 | opacity: 0;
947 | }
948 |
949 | 40% {
950 | -moz-transform: perspective(400px) rotateX(-10deg);
951 | }
952 |
953 | 70% {
954 | -moz-transform: perspective(400px) rotateX(10deg);
955 | }
956 |
957 | 100% {
958 | -moz-transform: perspective(400px) rotateX(0deg);
959 | opacity: 1;
960 | }
961 | }
962 | @-o-keyframes flipInX {
963 | 0% {
964 | -o-transform: perspective(400px) rotateX(90deg);
965 | opacity: 0;
966 | }
967 |
968 | 40% {
969 | -o-transform: perspective(400px) rotateX(-10deg);
970 | }
971 |
972 | 70% {
973 | -o-transform: perspective(400px) rotateX(10deg);
974 | }
975 |
976 | 100% {
977 | -o-transform: perspective(400px) rotateX(0deg);
978 | opacity: 1;
979 | }
980 | }
981 | @keyframes flipInX {
982 | 0% {
983 | transform: perspective(400px) rotateX(90deg);
984 | opacity: 0;
985 | }
986 |
987 | 40% {
988 | transform: perspective(400px) rotateX(-10deg);
989 | }
990 |
991 | 70% {
992 | transform: perspective(400px) rotateX(10deg);
993 | }
994 |
995 | 100% {
996 | transform: perspective(400px) rotateX(0deg);
997 | opacity: 1;
998 | }
999 | }
1000 |
1001 | .animated.flipInX {
1002 | -webkit-backface-visibility: visible !important;
1003 | -webkit-animation-name: flipInX;
1004 | -moz-backface-visibility: visible !important;
1005 | -moz-animation-name: flipInX;
1006 | -o-backface-visibility: visible !important;
1007 | -o-animation-name: flipInX;
1008 | backface-visibility: visible !important;
1009 | animation-name: flipInX;
1010 | }
1011 |
1012 | @-webkit-keyframes flipInY {
1013 | 0% {
1014 | -webkit-transform: perspective(400px) rotateY(90deg);
1015 | opacity: 0;
1016 | }
1017 |
1018 | 40% {
1019 | -webkit-transform: perspective(400px) rotateY(-10deg);
1020 | }
1021 |
1022 | 70% {
1023 | -webkit-transform: perspective(400px) rotateY(10deg);
1024 | }
1025 |
1026 | 100% {
1027 | -webkit-transform: perspective(400px) rotateY(0deg);
1028 | opacity: 1;
1029 | }
1030 | }
1031 | @-moz-keyframes flipInY {
1032 | 0% {
1033 | -moz-transform: perspective(400px) rotateY(90deg);
1034 | opacity: 0;
1035 | }
1036 |
1037 | 40% {
1038 | -moz-transform: perspective(400px) rotateY(-10deg);
1039 | }
1040 |
1041 | 70% {
1042 | -moz-transform: perspective(400px) rotateY(10deg);
1043 | }
1044 |
1045 | 100% {
1046 | -moz-transform: perspective(400px) rotateY(0deg);
1047 | opacity: 1;
1048 | }
1049 | }
1050 | @-o-keyframes flipInY {
1051 | 0% {
1052 | -o-transform: perspective(400px) rotateY(90deg);
1053 | opacity: 0;
1054 | }
1055 |
1056 | 40% {
1057 | -o-transform: perspective(400px) rotateY(-10deg);
1058 | }
1059 |
1060 | 70% {
1061 | -o-transform: perspective(400px) rotateY(10deg);
1062 | }
1063 |
1064 | 100% {
1065 | -o-transform: perspective(400px) rotateY(0deg);
1066 | opacity: 1;
1067 | }
1068 | }
1069 | @keyframes flipInY {
1070 | 0% {
1071 | transform: perspective(400px) rotateY(90deg);
1072 | opacity: 0;
1073 | }
1074 |
1075 | 40% {
1076 | transform: perspective(400px) rotateY(-10deg);
1077 | }
1078 |
1079 | 70% {
1080 | transform: perspective(400px) rotateY(10deg);
1081 | }
1082 |
1083 | 100% {
1084 | transform: perspective(400px) rotateY(0deg);
1085 | opacity: 1;
1086 | }
1087 | }
1088 |
1089 | .animated.flipInY {
1090 | -webkit-backface-visibility: visible !important;
1091 | -webkit-animation-name: flipInY;
1092 | -moz-backface-visibility: visible !important;
1093 | -moz-animation-name: flipInY;
1094 | -o-backface-visibility: visible !important;
1095 | -o-animation-name: flipInY;
1096 | backface-visibility: visible !important;
1097 | animation-name: flipInY;
1098 | }
--------------------------------------------------------------------------------
/modules/ui/css/font-awesome.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}
--------------------------------------------------------------------------------
/modules/ui/css/font.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Source Sans Pro';
3 | font-style: normal;
4 | font-weight: 300;
5 | src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/sourcesanspro/sourcesanspro-light.woff') format('woff');
6 | }
7 | @font-face {
8 | font-family: 'Source Sans Pro';
9 | font-style: normal;
10 | font-weight: 400;
11 | src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../fonts/sourcesanspro/sourcesanspro.woff') format('woff');
12 | }
13 | @font-face {
14 | font-family: 'Source Sans Pro';
15 | font-style: normal;
16 | font-weight: 700;
17 | src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/sourcesanspro/sourcesanspro-bold.woff') format('woff');
18 | }
--------------------------------------------------------------------------------
/modules/ui/css/simple-line-icons.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Simple-Line-Icons';
3 | src:url('../fonts/Simple-Line-Icons.eot');
4 | src:url('../fonts/Simple-Line-Icons.eot?#iefix') format('embedded-opentype'),
5 | url('../fonts/Simple-Line-Icons.woff') format('woff'),
6 | url('../fonts/Simple-Line-Icons.ttf') format('truetype'),
7 | url('../fonts/Simple-Line-Icons.svg#Simple-Line-Icons') format('svg');
8 | font-weight: normal;
9 | font-style: normal;
10 | }
11 |
12 | /* Use the following CSS code if you want to use data attributes for inserting your icons */
13 | [data-icon]:before {
14 | font-family: 'Simple-Line-Icons';
15 | content: attr(data-icon);
16 | speak: none;
17 | font-weight: normal;
18 | font-variant: normal;
19 | text-transform: none;
20 | line-height: 1;
21 | -webkit-font-smoothing: antialiased;
22 | -moz-osx-font-smoothing: grayscale;
23 | }
24 |
25 | /* Use the following CSS code if you want to have a class per icon */
26 | /*
27 | Instead of a list of all class selectors,
28 | you can use the generic selector below, but it's slower:
29 | [class*="icon-"] {
30 | */
31 | .icon-user-female, .icon-user-follow, .icon-user-following, .icon-user-unfollow, .icon-trophy, .icon-screen-smartphone, .icon-screen-desktop, .icon-plane, .icon-notebook, .icon-moustache, .icon-mouse, .icon-magnet, .icon-energy, .icon-emoticon-smile, .icon-disc, .icon-cursor-move, .icon-crop, .icon-credit-card, .icon-chemistry, .icon-user, .icon-speedometer, .icon-social-youtube, .icon-social-twitter, .icon-social-tumblr, .icon-social-facebook, .icon-social-dropbox, .icon-social-dribbble, .icon-shield, .icon-screen-tablet, .icon-magic-wand, .icon-hourglass, .icon-graduation, .icon-ghost, .icon-game-controller, .icon-fire, .icon-eyeglasses, .icon-envelope-open, .icon-envelope-letter, .icon-bell, .icon-badge, .icon-anchor, .icon-wallet, .icon-vector, .icon-speech, .icon-puzzle, .icon-printer, .icon-present, .icon-playlist, .icon-pin, .icon-picture, .icon-map, .icon-layers, .icon-handbag, .icon-globe-alt, .icon-globe, .icon-frame, .icon-folder-alt, .icon-film, .icon-feed, .icon-earphones-alt, .icon-earphones, .icon-drop, .icon-drawer, .icon-docs, .icon-directions, .icon-direction, .icon-diamond, .icon-cup, .icon-compass, .icon-call-out, .icon-call-in, .icon-call-end, .icon-calculator, .icon-bubbles, .icon-briefcase, .icon-book-open, .icon-basket-loaded, .icon-basket, .icon-bag, .icon-action-undo, .icon-action-redo, .icon-wrench, .icon-umbrella, .icon-trash, .icon-tag, .icon-support, .icon-size-fullscreen, .icon-size-actual, .icon-shuffle, .icon-share-alt, .icon-share, .icon-rocket, .icon-question, .icon-pie-chart, .icon-pencil, .icon-note, .icon-music-tone-alt, .icon-music-tone, .icon-microphone, .icon-loop, .icon-logout, .icon-login, .icon-list, .icon-like, .icon-home, .icon-grid, .icon-graph, .icon-equalizer, .icon-dislike, .icon-cursor, .icon-control-start, .icon-control-rewind, .icon-control-play, .icon-control-pause, .icon-control-forward, .icon-control-end, .icon-calendar, .icon-bulb, .icon-bar-chart, .icon-arrow-up, .icon-arrow-right, .icon-arrow-left, .icon-arrow-down, .icon-ban, .icon-bubble, .icon-camcorder, .icon-camera, .icon-check, .icon-clock, .icon-close, .icon-cloud-download, .icon-cloud-upload, .icon-doc, .icon-envelope, .icon-eye, .icon-flag, .icon-folder, .icon-heart, .icon-info, .icon-key, .icon-link, .icon-lock, .icon-lock-open, .icon-magnifier, .icon-magnifier-add, .icon-magnifier-remove, .icon-paper-clip, .icon-paper-plane, .icon-plus, .icon-pointer, .icon-power, .icon-refresh, .icon-reload, .icon-settings, .icon-star, .icon-symbol-female, .icon-symbol-male, .icon-target, .icon-volume-1, .icon-volume-2, .icon-volume-off, .icon-users {
32 | font-family: 'Simple-Line-Icons';
33 | speak: none;
34 | font-style: normal;
35 | font-weight: normal;
36 | font-variant: normal;
37 | text-transform: none;
38 | line-height: 1;
39 | -webkit-font-smoothing: antialiased;
40 | }
41 | .icon-user-female:before {
42 | content: "\e000";
43 | }
44 | .icon-user-follow:before {
45 | content: "\e002";
46 | }
47 | .icon-user-following:before {
48 | content: "\e003";
49 | }
50 | .icon-user-unfollow:before {
51 | content: "\e004";
52 | }
53 | .icon-trophy:before {
54 | content: "\e006";
55 | }
56 | .icon-screen-smartphone:before {
57 | content: "\e010";
58 | }
59 | .icon-screen-desktop:before {
60 | content: "\e011";
61 | }
62 | .icon-plane:before {
63 | content: "\e012";
64 | }
65 | .icon-notebook:before {
66 | content: "\e013";
67 | }
68 | .icon-moustache:before {
69 | content: "\e014";
70 | }
71 | .icon-mouse:before {
72 | content: "\e015";
73 | }
74 | .icon-magnet:before {
75 | content: "\e016";
76 | }
77 | .icon-energy:before {
78 | content: "\e020";
79 | }
80 | .icon-emoticon-smile:before {
81 | content: "\e021";
82 | }
83 | .icon-disc:before {
84 | content: "\e022";
85 | }
86 | .icon-cursor-move:before {
87 | content: "\e023";
88 | }
89 | .icon-crop:before {
90 | content: "\e024";
91 | }
92 | .icon-credit-card:before {
93 | content: "\e025";
94 | }
95 | .icon-chemistry:before {
96 | content: "\e026";
97 | }
98 | .icon-user:before {
99 | content: "\e005";
100 | }
101 | .icon-speedometer:before {
102 | content: "\e007";
103 | }
104 | .icon-social-youtube:before {
105 | content: "\e008";
106 | }
107 | .icon-social-twitter:before {
108 | content: "\e009";
109 | }
110 | .icon-social-tumblr:before {
111 | content: "\e00a";
112 | }
113 | .icon-social-facebook:before {
114 | content: "\e00b";
115 | }
116 | .icon-social-dropbox:before {
117 | content: "\e00c";
118 | }
119 | .icon-social-dribbble:before {
120 | content: "\e00d";
121 | }
122 | .icon-shield:before {
123 | content: "\e00e";
124 | }
125 | .icon-screen-tablet:before {
126 | content: "\e00f";
127 | }
128 | .icon-magic-wand:before {
129 | content: "\e017";
130 | }
131 | .icon-hourglass:before {
132 | content: "\e018";
133 | }
134 | .icon-graduation:before {
135 | content: "\e019";
136 | }
137 | .icon-ghost:before {
138 | content: "\e01a";
139 | }
140 | .icon-game-controller:before {
141 | content: "\e01b";
142 | }
143 | .icon-fire:before {
144 | content: "\e01c";
145 | }
146 | .icon-eyeglasses:before {
147 | content: "\e01d";
148 | }
149 | .icon-envelope-open:before {
150 | content: "\e01e";
151 | }
152 | .icon-envelope-letter:before {
153 | content: "\e01f";
154 | }
155 | .icon-bell:before {
156 | content: "\e027";
157 | }
158 | .icon-badge:before {
159 | content: "\e028";
160 | }
161 | .icon-anchor:before {
162 | content: "\e029";
163 | }
164 | .icon-wallet:before {
165 | content: "\e02a";
166 | }
167 | .icon-vector:before {
168 | content: "\e02b";
169 | }
170 | .icon-speech:before {
171 | content: "\e02c";
172 | }
173 | .icon-puzzle:before {
174 | content: "\e02d";
175 | }
176 | .icon-printer:before {
177 | content: "\e02e";
178 | }
179 | .icon-present:before {
180 | content: "\e02f";
181 | }
182 | .icon-playlist:before {
183 | content: "\e030";
184 | }
185 | .icon-pin:before {
186 | content: "\e031";
187 | }
188 | .icon-picture:before {
189 | content: "\e032";
190 | }
191 | .icon-map:before {
192 | content: "\e033";
193 | }
194 | .icon-layers:before {
195 | content: "\e034";
196 | }
197 | .icon-handbag:before {
198 | content: "\e035";
199 | }
200 | .icon-globe-alt:before {
201 | content: "\e036";
202 | }
203 | .icon-globe:before {
204 | content: "\e037";
205 | }
206 | .icon-frame:before {
207 | content: "\e038";
208 | }
209 | .icon-folder-alt:before {
210 | content: "\e039";
211 | }
212 | .icon-film:before {
213 | content: "\e03a";
214 | }
215 | .icon-feed:before {
216 | content: "\e03b";
217 | }
218 | .icon-earphones-alt:before {
219 | content: "\e03c";
220 | }
221 | .icon-earphones:before {
222 | content: "\e03d";
223 | }
224 | .icon-drop:before {
225 | content: "\e03e";
226 | }
227 | .icon-drawer:before {
228 | content: "\e03f";
229 | }
230 | .icon-docs:before {
231 | content: "\e040";
232 | }
233 | .icon-directions:before {
234 | content: "\e041";
235 | }
236 | .icon-direction:before {
237 | content: "\e042";
238 | }
239 | .icon-diamond:before {
240 | content: "\e043";
241 | }
242 | .icon-cup:before {
243 | content: "\e044";
244 | }
245 | .icon-compass:before {
246 | content: "\e045";
247 | }
248 | .icon-call-out:before {
249 | content: "\e046";
250 | }
251 | .icon-call-in:before {
252 | content: "\e047";
253 | }
254 | .icon-call-end:before {
255 | content: "\e048";
256 | }
257 | .icon-calculator:before {
258 | content: "\e049";
259 | }
260 | .icon-bubbles:before {
261 | content: "\e04a";
262 | }
263 | .icon-briefcase:before {
264 | content: "\e04b";
265 | }
266 | .icon-book-open:before {
267 | content: "\e04c";
268 | }
269 | .icon-basket-loaded:before {
270 | content: "\e04d";
271 | }
272 | .icon-basket:before {
273 | content: "\e04e";
274 | }
275 | .icon-bag:before {
276 | content: "\e04f";
277 | }
278 | .icon-action-undo:before {
279 | content: "\e050";
280 | }
281 | .icon-action-redo:before {
282 | content: "\e051";
283 | }
284 | .icon-wrench:before {
285 | content: "\e052";
286 | }
287 | .icon-umbrella:before {
288 | content: "\e053";
289 | }
290 | .icon-trash:before {
291 | content: "\e054";
292 | }
293 | .icon-tag:before {
294 | content: "\e055";
295 | }
296 | .icon-support:before {
297 | content: "\e056";
298 | }
299 | .icon-size-fullscreen:before {
300 | content: "\e057";
301 | }
302 | .icon-size-actual:before {
303 | content: "\e058";
304 | }
305 | .icon-shuffle:before {
306 | content: "\e059";
307 | }
308 | .icon-share-alt:before {
309 | content: "\e05a";
310 | }
311 | .icon-share:before {
312 | content: "\e05b";
313 | }
314 | .icon-rocket:before {
315 | content: "\e05c";
316 | }
317 | .icon-question:before {
318 | content: "\e05d";
319 | }
320 | .icon-pie-chart:before {
321 | content: "\e05e";
322 | }
323 | .icon-pencil:before {
324 | content: "\e05f";
325 | }
326 | .icon-note:before {
327 | content: "\e060";
328 | }
329 | .icon-music-tone-alt:before {
330 | content: "\e061";
331 | }
332 | .icon-music-tone:before {
333 | content: "\e062";
334 | }
335 | .icon-microphone:before {
336 | content: "\e063";
337 | }
338 | .icon-loop:before {
339 | content: "\e064";
340 | }
341 | .icon-logout:before {
342 | content: "\e065";
343 | }
344 | .icon-login:before {
345 | content: "\e066";
346 | }
347 | .icon-list:before {
348 | content: "\e067";
349 | }
350 | .icon-like:before {
351 | content: "\e068";
352 | }
353 | .icon-home:before {
354 | content: "\e069";
355 | }
356 | .icon-grid:before {
357 | content: "\e06a";
358 | }
359 | .icon-graph:before {
360 | content: "\e06b";
361 | }
362 | .icon-equalizer:before {
363 | content: "\e06c";
364 | }
365 | .icon-dislike:before {
366 | content: "\e06d";
367 | }
368 | .icon-cursor:before {
369 | content: "\e06e";
370 | }
371 | .icon-control-start:before {
372 | content: "\e06f";
373 | }
374 | .icon-control-rewind:before {
375 | content: "\e070";
376 | }
377 | .icon-control-play:before {
378 | content: "\e071";
379 | }
380 | .icon-control-pause:before {
381 | content: "\e072";
382 | }
383 | .icon-control-forward:before {
384 | content: "\e073";
385 | }
386 | .icon-control-end:before {
387 | content: "\e074";
388 | }
389 | .icon-calendar:before {
390 | content: "\e075";
391 | }
392 | .icon-bulb:before {
393 | content: "\e076";
394 | }
395 | .icon-bar-chart:before {
396 | content: "\e077";
397 | }
398 | .icon-arrow-up:before {
399 | content: "\e078";
400 | }
401 | .icon-arrow-right:before {
402 | content: "\e079";
403 | }
404 | .icon-arrow-left:before {
405 | content: "\e07a";
406 | }
407 | .icon-arrow-down:before {
408 | content: "\e07b";
409 | }
410 | .icon-ban:before {
411 | content: "\e07c";
412 | }
413 | .icon-bubble:before {
414 | content: "\e07d";
415 | }
416 | .icon-camcorder:before {
417 | content: "\e07e";
418 | }
419 | .icon-camera:before {
420 | content: "\e07f";
421 | }
422 | .icon-check:before {
423 | content: "\e080";
424 | }
425 | .icon-clock:before {
426 | content: "\e081";
427 | }
428 | .icon-close:before {
429 | content: "\e082";
430 | }
431 | .icon-cloud-download:before {
432 | content: "\e083";
433 | }
434 | .icon-cloud-upload:before {
435 | content: "\e084";
436 | }
437 | .icon-doc:before {
438 | content: "\e085";
439 | }
440 | .icon-envelope:before {
441 | content: "\e086";
442 | }
443 | .icon-eye:before {
444 | content: "\e087";
445 | }
446 | .icon-flag:before {
447 | content: "\e088";
448 | }
449 | .icon-folder:before {
450 | content: "\e089";
451 | }
452 | .icon-heart:before {
453 | content: "\e08a";
454 | }
455 | .icon-info:before {
456 | content: "\e08b";
457 | }
458 | .icon-key:before {
459 | content: "\e08c";
460 | }
461 | .icon-link:before {
462 | content: "\e08d";
463 | }
464 | .icon-lock:before {
465 | content: "\e08e";
466 | }
467 | .icon-lock-open:before {
468 | content: "\e08f";
469 | }
470 | .icon-magnifier:before {
471 | content: "\e090";
472 | }
473 | .icon-magnifier-add:before {
474 | content: "\e091";
475 | }
476 | .icon-magnifier-remove:before {
477 | content: "\e092";
478 | }
479 | .icon-paper-clip:before {
480 | content: "\e093";
481 | }
482 | .icon-paper-plane:before {
483 | content: "\e094";
484 | }
485 | .icon-plus:before {
486 | content: "\e095";
487 | }
488 | .icon-pointer:before {
489 | content: "\e096";
490 | }
491 | .icon-power:before {
492 | content: "\e097";
493 | }
494 | .icon-refresh:before {
495 | content: "\e098";
496 | }
497 | .icon-reload:before {
498 | content: "\e099";
499 | }
500 | .icon-settings:before {
501 | content: "\e09a";
502 | }
503 | .icon-star:before {
504 | content: "\e09b";
505 | }
506 | .icon-symbol-female:before {
507 | content: "\e09c";
508 | }
509 | .icon-symbol-male:before {
510 | content: "\e09d";
511 | }
512 | .icon-target:before {
513 | content: "\e09e";
514 | }
515 | .icon-volume-1:before {
516 | content: "\e09f";
517 | }
518 | .icon-volume-2:before {
519 | content: "\e0a0";
520 | }
521 | .icon-volume-off:before {
522 | content: "\e0a1";
523 | }
524 | .icon-users:before {
525 | content: "\e001";
526 | }
--------------------------------------------------------------------------------
/modules/ui/css/smart-table.css:
--------------------------------------------------------------------------------
1 | .st-selected td{
2 | background-color: #58666e !important;
3 | color:#fff;
4 | }
--------------------------------------------------------------------------------
/modules/ui/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/modules/ui/fonts/Simple-Line-Icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/Simple-Line-Icons.eot
--------------------------------------------------------------------------------
/modules/ui/fonts/Simple-Line-Icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/Simple-Line-Icons.ttf
--------------------------------------------------------------------------------
/modules/ui/fonts/Simple-Line-Icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/Simple-Line-Icons.woff
--------------------------------------------------------------------------------
/modules/ui/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/modules/ui/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/modules/ui/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/modules/ui/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/modules/ui/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/modules/ui/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/modules/ui/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/modules/ui/fonts/sourcesanspro/sourcesanspro-bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/sourcesanspro/sourcesanspro-bold.woff
--------------------------------------------------------------------------------
/modules/ui/fonts/sourcesanspro/sourcesanspro-light.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/sourcesanspro/sourcesanspro-light.woff
--------------------------------------------------------------------------------
/modules/ui/fonts/sourcesanspro/sourcesanspro.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/fonts/sourcesanspro/sourcesanspro.woff
--------------------------------------------------------------------------------
/modules/ui/img/logo-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/img/logo-small.png
--------------------------------------------------------------------------------
/modules/ui/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sumeet70/aiex/ef9afd1c18438de188dbdf307e54d239ebfa709d/modules/ui/img/logo.png
--------------------------------------------------------------------------------
/modules/ui/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Apache Ignite Manager | Designextech
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 |
--------------------------------------------------------------------------------
/modules/ui/l10n/en.js:
--------------------------------------------------------------------------------
1 | {
2 | "aside" : {
3 | "nav" : {
4 | "HEADER" : "Modules",
5 | "INTERACT" : "Ignite Browser"
6 | }
7 | }
8 | }
--------------------------------------------------------------------------------
/modules/ui/modules/app/app-controller.js:
--------------------------------------------------------------------------------
1 | app.controller('AppController', ['$scope',
2 | function($scope) {
3 | }
4 | ]);
5 |
--------------------------------------------------------------------------------
/modules/ui/modules/app/app.js:
--------------------------------------------------------------------------------
1 | angular.module('app', [
2 | 'ngCookies',
3 | 'ngResource',
4 | 'ngSanitize',
5 | 'ngTouch',
6 | 'ngStorage',
7 | 'ui.router',
8 | 'ui.bootstrap',
9 | 'oc.lazyLoad',
10 | 'pascalprecht.translate',
11 | 'smart-table'
12 | ]);
--------------------------------------------------------------------------------
/modules/ui/modules/app/config.js:
--------------------------------------------------------------------------------
1 | var app = angular.module('app')
2 | .config(
3 | ['$controllerProvider', '$compileProvider', '$filterProvider', '$provide',
4 | function ($controllerProvider, $compileProvider, $filterProvider, $provide) {
5 |
6 | // lazy controller, directive and service
7 | app.controller = $controllerProvider.register;
8 | app.directive = $compileProvider.directive;
9 | app.filter = $filterProvider.register;
10 | app.factory = $provide.factory;
11 | app.service = $provide.service;
12 | app.constant = $provide.constant;
13 | app.value = $provide.value;
14 | }
15 | ])
16 | .config(['$translateProvider', function($translateProvider){
17 | // Register a loader for the static files
18 | // So, the module will search missing translation tables under the specified urls.
19 | // Those urls are [prefix][langKey][suffix].
20 | $translateProvider.useStaticFilesLoader({
21 | prefix: 'l10n/',
22 | suffix: '.js'
23 | });
24 | // Tell the module what language to use by default
25 | $translateProvider.preferredLanguage('en');
26 | // Tell the module to store the language in the local storage
27 | $translateProvider.useLocalStorage();
28 | }]);
29 |
30 |
31 | app.getUrl = function(path){
32 | return "/api/ignite/" + path;
33 | };
--------------------------------------------------------------------------------
/modules/ui/modules/app/lazyload.js:
--------------------------------------------------------------------------------
1 | angular.module('app').config(['$ocLazyLoadProvider', function($ocLazyLoadProvider) {
2 | $ocLazyLoadProvider.config({
3 | debug: true,
4 | events: true,
5 | modules: [
6 | {
7 | name: 'toaster',
8 | files: [
9 | '../bower_components/angularjs-toaster/toaster.js',
10 | '../bower_components/angularjs-toaster/toaster.css'
11 | ]
12 | }
13 | ]
14 | });
15 | }]);
--------------------------------------------------------------------------------
/modules/ui/modules/app/main.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | angular.module('app')
4 | .controller('AppCtrl', ['$scope', '$translate', '$localStorage', '$window',
5 | function( $scope, $translate, $localStorage, $window ) {
6 | var isIE = !!navigator.userAgent.match(/MSIE/i);
7 | isIE && angular.element($window.document.body).addClass('ie');
8 | isSmartDevice( $window ) && angular.element($window.document.body).addClass('smart');
9 |
10 | // config
11 | $scope.app = {
12 | name: 'Apache Ignite Browser',
13 | version: '0.0.9',
14 |
15 | // for chart colors
16 | color: {
17 | primary: '#7266ba',
18 | info: '#23b7e5',
19 | success: '#27c24c',
20 | warning: '#fad733',
21 | danger: '#f05050',
22 | light: '#e8eff0',
23 | dark: '#3a3f51',
24 | black: '#1c2b36'
25 | },
26 | settings: {
27 | themeID: 1,
28 | navbarHeaderColor: 'bg-black',
29 | navbarCollapseColor: 'bg-white-only',
30 | asideColor: 'bg-black',
31 | headerFixed: true,
32 | asideFixed: false,
33 | asideFolded: false,
34 | asideDock: false,
35 | container: false
36 | }
37 | }
38 |
39 | // save settings to local storage
40 | if ( angular.isDefined($localStorage.settings) ) {
41 | $scope.app.settings = $localStorage.settings;
42 | } else {
43 | $localStorage.settings = $scope.app.settings;
44 | }
45 |
46 | $scope.$watch('app.settings', function(){
47 | if( $scope.app.settings.asideDock && $scope.app.settings.asideFixed ){
48 | // aside dock and fixed must set the header fixed.
49 | $scope.app.settings.headerFixed = true;
50 | }
51 | // save to local storage
52 | $localStorage.settings = $scope.app.settings;
53 | }, true);
54 |
55 | // angular translate
56 | $scope.lang = { isopen: false };
57 | $scope.langs = {en:'English', de_DE:'German', it_IT:'Italian'};
58 | $scope.selectLang = $scope.langs[$translate.proposedLanguage()] || "English";
59 |
60 | $scope.setLang = function(langKey, $event) {
61 | // set the current lang
62 | $scope.selectLang = $scope.langs[langKey];
63 | // You can change the language during runtime
64 | $translate.use(langKey);
65 | $scope.lang.isopen = !$scope.lang.isopen;
66 | };
67 |
68 | function isSmartDevice( $window )
69 | {
70 | // Adapted from http://www.detectmobilebrowsers.com
71 | var ua = $window['navigator']['userAgent'] || $window['navigator']['vendor'] || $window['opera'];
72 | // Checks for iOs, Android, Blackberry, Opera Mini, and Windows mobile devices
73 | return (/iPhone|iPod|iPad|Silk|Android|BlackBerry|Opera Mini|IEMobile/).test(ua);
74 | }
75 | }]);
--------------------------------------------------------------------------------
/modules/ui/modules/app/router.js:
--------------------------------------------------------------------------------
1 | angular.module('app')
2 | .run(['$rootScope', '$state', '$stateParams',
3 | function ($rootScope, $state, $stateParams) {
4 | $rootScope.$state = $state;
5 | $rootScope.$stateParams = $stateParams;
6 | }
7 | ]).config(['$stateProvider', '$urlRouterProvider',
8 | function ($stateProvider, $urlRouterProvider) {
9 | $urlRouterProvider
10 | .otherwise('/app/ignite/rest');
11 | $stateProvider
12 | .state('app', {
13 | abstract: true,
14 | url: '/app',
15 | templateUrl: 'modules/layout/master.html',
16 | resolve: {
17 | deps: ['$ocLazyLoad', function ($ocLazyLoad) {
18 | return $ocLazyLoad.load([
19 | 'modules/app/app-controller.js',
20 | 'modules/layout/page-sizer-directive.js',
21 | 'modules/layout/header-controller.js',
22 | 'toaster'
23 | ]);
24 | }]
25 | }
26 | })
27 | .state('app.gen', {
28 | abstract: true,
29 | url: '/gen',
30 | templateUrl: 'modules/generators/master.html'
31 | })
32 | .state('app.ignite', {
33 | abstract: true,
34 | url: '/ignite',
35 | templateUrl: 'modules/ignite/master.html'
36 | })
37 | .state('app.gen.metastock', {
38 | url: '/metastock',
39 | templateUrl: '../generators/metastock/metastock.html',
40 | resolve: {
41 | deps: ['$ocLazyLoad',
42 | function( $ocLazyLoad){
43 | return $ocLazyLoad.load([
44 | 'modules/generators/metastock/metastock-service.js',
45 | 'modules/generators/metastock/metastock-controller.js'
46 | ]);
47 | }]
48 | }
49 | })
50 | .state('app.ignite.rest', {
51 | url: '/rest',
52 | templateUrl: 'modules/ignite/rest/default.html',
53 | resolve: {
54 | deps: ['$ocLazyLoad',
55 | function( $ocLazyLoad){
56 | return $ocLazyLoad.load([
57 | 'modules/ignite/rest/rest-service.js',
58 | 'modules/ignite/rest/rest-controller.js',
59 | 'modules/ignite/topology/topology-controller.js',
60 | 'modules/ignite/cache/cache-controller.js'
61 | ]);
62 | }]
63 | }
64 | });
65 |
66 | }
67 | ]
68 | );
69 |
--------------------------------------------------------------------------------
/modules/ui/modules/ignite/cache/cache-controller.js:
--------------------------------------------------------------------------------
1 | app.controller('CacheController', ['$scope', 'toaster', 'igniteRestService', function($scope, toaster, igniteRestService) {
2 |
3 | var index = 1;
4 | $scope.cacheItems = [{id:index, key:"", value:"", casValue:""}];
5 | $scope.toaster = {
6 | type: 'success',
7 | title: 'Title',
8 | text: 'Message'
9 | };
10 | $scope.pop = function(){
11 | toaster.pop($scope.toaster.type, $scope.toaster.title, $scope.toaster.text);
12 | };
13 |
14 | $scope.addItem = function(){
15 | index = index + 1;
16 | $scope.cacheItems.push({id:index, key:"", value:""});
17 | }
18 |
19 | $scope.removeItem = function(id){
20 | if($scope.cacheItems.length > 1){
21 | $scope.cacheItems = _.reject($scope.cacheItems, function(item){
22 | return item.id == id;
23 | });
24 | }
25 | }
26 |
27 | $scope.putall = function(){
28 | var keyCounter = 0;
29 | var params = {
30 | "cacheName": $scope.cacheName,
31 | "destId" : $scope.nodeId
32 | };
33 |
34 | if($scope.cacheItems.length > 0){
35 | _.forEach($scope.cacheItems, function(item){
36 | if(item.key != ""){
37 | keyCounter++;
38 | params["k"+ keyCounter] = item.key;
39 | params["v"+ keyCounter] = item.value;
40 | }
41 | });
42 |
43 | if(keyCounter > 0){
44 | igniteRestService.invoke('putall',params).then(function(result){
45 | if(!hasError(result)){
46 | $scope.toaster.text="Put Succeeded";
47 | $scope.toaster.title="Confirmation";
48 | }
49 | $scope.pop();
50 | }).catch(function(){
51 |
52 | });
53 | }
54 | }
55 | }
56 |
57 | $scope.getall = function(method){
58 |
59 | var keyCounter = 0;
60 | var params = {
61 | "cacheName": $scope.cacheName,
62 | "destId" : $scope.nodeId
63 | };
64 |
65 | if($scope.cacheItems.length > 0){
66 | _.forEach($scope.cacheItems, function(item){
67 | if(item.key != ""){
68 | keyCounter++;
69 | params["k"+ keyCounter] = item.key;
70 | }
71 | });
72 |
73 | if(keyCounter > 0){
74 | igniteRestService.invoke('getall',params).then(function(result){
75 |
76 | if(!hasError(result)){
77 | $scope.toaster.title="Confirmation";
78 | $scope.toaster.text="Some keys were not found";
79 |
80 | var allKeysFound = true;
81 | if(result && result.response){
82 | for(var i=0; i < $scope.cacheItems.length; i++){
83 | if(result.response[$scope.cacheItems[i].key]){
84 | $scope.cacheItems[i].value = result.response[$scope.cacheItems[i].key];
85 | }else{
86 | if(allKeysFound) {
87 | allKeysFound = false;
88 | }
89 | }
90 | }
91 | }
92 | if(allKeysFound){
93 | $scope.toaster.text="Entries Retrieved";
94 | }
95 | }
96 | $scope.pop();
97 | }).catch(function(){
98 |
99 | });
100 | }
101 | }
102 | }
103 |
104 | $scope.rmvall = function(method){
105 |
106 | var keyCounter = 0;
107 | var params = {
108 | "cacheName": $scope.cacheName,
109 | "destId" : $scope.nodeId
110 | };
111 |
112 | if($scope.cacheItems.length > 0){
113 | _.forEach($scope.cacheItems, function(item){
114 | if(item.key != ""){
115 | keyCounter++;
116 | params["k"+ keyCounter] = item.key;
117 | }
118 | });
119 |
120 | if(keyCounter > 0){
121 | igniteRestService.invoke('rmvall',params).then(function(result){
122 |
123 | if(!hasError(result)) {
124 | $scope.toaster.title = "Confirmation";
125 | $scope.toaster.text = "Entries Removed";
126 | }
127 | $scope.pop();
128 | }).catch(function(){
129 |
130 | });
131 | }
132 | }
133 | }
134 |
135 | $scope.add = function(){
136 | if($scope.cacheItems.length > 0){
137 | _.forEach($scope.cacheItems, function(item){
138 | if(item.key != ""){
139 | igniteRestService.invoke('add',{
140 | key:item.key,
141 | val:item.value,
142 | "cacheName": $scope.cacheName,
143 | "destId" : $scope.nodeId
144 | }).then(function(result){
145 |
146 | if(!hasError(result)) {
147 |
148 | if (result.response == false) {
149 | $scope.toaster.title = "Confirmation";
150 | $scope.toaster.text = item.key + " already present";
151 | } else {
152 | $scope.toaster.title = "Confirmation";
153 | $scope.toaster.text = item.key + " added";
154 | }
155 | }
156 | $scope.pop();
157 | }).catch(function(){
158 |
159 | });
160 | }
161 | });
162 | }
163 | }
164 |
165 | $scope.prepend = function(){
166 | if($scope.cacheItems.length > 0){
167 | _.forEach($scope.cacheItems, function(item){
168 | if(item.key != ""){
169 | igniteRestService.invoke('prepend',{
170 | key:item.key,
171 | val:item.value,
172 | cacheName:$scope.cacheName,
173 | destId:$scope.nodeId
174 | }).then(function(result){
175 | if(!hasError(result)){}
176 | else if(result.response == false){
177 | $scope.toaster.title="Confirmation";
178 | $scope.toaster.text= item.key + " not found";
179 | }else{
180 | $scope.toaster.title="Confirmation";
181 | $scope.toaster.text= "Value prepended";
182 | }
183 | $scope.pop();
184 | }).catch(function(){
185 |
186 | });
187 | }
188 | });
189 | }
190 | }
191 |
192 | $scope.append = function(){
193 | if($scope.cacheItems.length > 0){
194 | _.forEach($scope.cacheItems, function(item){
195 | if(item.key != ""){
196 | igniteRestService.invoke('append',{
197 | key:item.key,
198 | val:item.value,
199 | cacheName:$scope.cacheName,
200 | destId:$scope.nodeId
201 | }).then(function(result){
202 | if(!hasError(result)){}
203 | else if(result.response == false){
204 | $scope.toaster.title="Confirmation";
205 | $scope.toaster.text= item.key + " not found";
206 | }else{
207 | $scope.toaster.title="Confirmation";
208 | $scope.toaster.text= "Value appended";
209 | }
210 | $scope.pop();
211 | }).catch(function(){
212 |
213 | });
214 | }
215 | });
216 | }
217 | }
218 |
219 | $scope.replace = function(){
220 | if($scope.cacheItems.length > 0){
221 | _.forEach($scope.cacheItems, function(item){
222 | if(item.key != ""){
223 | igniteRestService.invoke('rep',{
224 | key:item.key,
225 | val:item.value,
226 | cacheName:$scope.cacheName,
227 | destId:$scope.nodeId
228 | }).then(function(result){
229 | if(!hasError(result)){}
230 | else if(result.response == false){
231 | $scope.toaster.title="Confirmation";
232 | $scope.toaster.text= item.key + " not found";
233 | }else{
234 | $scope.toaster.title="Confirmation";
235 | $scope.toaster.text= "Value replaced";
236 | }
237 | $scope.pop();
238 | }).catch(function(){
239 |
240 | });
241 | }
242 | });
243 | }
244 | }
245 |
246 | $scope.cas = function(){
247 | if($scope.cacheItems.length > 0){
248 | _.forEach($scope.cacheItems, function(item){
249 | if(item.key != ""){
250 | igniteRestService.invoke('cas',{
251 | key:item.key,
252 | val:item.value,
253 | val2:item.casValue,
254 | cacheName:$scope.cacheName,
255 | destId:$scope.nodeId
256 | }).then(function(result){
257 | if(!hasError(result)){}
258 | else if(result.response == false){
259 | $scope.toaster.title="Confirmation";
260 | $scope.toaster.text= "key not found or comparison failed.";
261 | }else{
262 | $scope.toaster.title="Confirmation";
263 | $scope.toaster.text= "Value swapped";
264 | }
265 | $scope.pop();
266 | }).catch(function(){
267 |
268 | });
269 | }
270 | });
271 | }
272 | }
273 |
274 | var hasError = function(result){
275 |
276 | if(result.error && result.error.indexOf("Cluster group is empty") != -1){
277 | $scope.toaster.title="Failed";
278 | $scope.toaster.text= "Cluster group is empty. Check the destination node id.";
279 | $scope.toaster.type="warning";
280 | return true;
281 | }
282 | if(result.error && result.error.indexOf("Failed to start transaction on non-transactional") != -1){
283 | $scope.toaster.title="Failed";
284 | $scope.toaster.text= "Your cache is not transactional. Check grid configuration.";
285 | $scope.toaster.type="warning";
286 | return true;
287 | }else if(result.error && result.error.indexOf("Failed to find cache for given cache name") != -1){
288 | $scope.toaster.title="Failed";
289 | $scope.toaster.text= "Named cache not found. Check grid configuration.";
290 | $scope.toaster.type="warning";
291 | return true;
292 | }
293 | $scope.toaster.type="success";
294 | return false;
295 | }
296 | }]);
--------------------------------------------------------------------------------
/modules/ui/modules/ignite/cache/default.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/modules/ui/modules/ignite/master.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/modules/ui/modules/ignite/rest/default.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
Ignite Browser
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | Topology
16 |
17 |
18 |
19 |
20 |
21 |
22 | Cache
23 |
24 |
25 |
26 |
27 |
28 |
29 | Logs
30 |
31 |
32 | Pending implementation. Waiting for underlying bug in Apache Ignite rest api to be fixed.
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/modules/ui/modules/ignite/rest/rest-controller.js:
--------------------------------------------------------------------------------
1 | app.controller('IgniteRestController', ['$scope', 'igniteRestService', function($scope, igniteRestService) {
2 | $scope.loadTopology = function(){
3 | $scope.$broadcast('reloadTopology');
4 | }
5 | }]);
--------------------------------------------------------------------------------
/modules/ui/modules/ignite/rest/rest-service.js:
--------------------------------------------------------------------------------
1 | app.service('igniteRestService', ['$http', '$q', function ($http, $q) {
2 |
3 | this.invoke = function (methodName, params) {
4 | var deferred = $q.defer();
5 | $http({
6 | method: 'GET',
7 | url: app.getUrl(methodName),
8 | params: params
9 | }).success(function (response) {
10 | deferred.resolve(response)
11 | }).error(function (error, status, headers) {
12 | console.log(error);
13 | });
14 | return deferred.promise;
15 | };
16 | }]);
--------------------------------------------------------------------------------
/modules/ui/modules/ignite/topology/default.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
20 |
21 |
22 |
23 |
24 | Summary
25 |
26 |
27 | Node Id:
{{selectedNode.nodeId}}
28 | Consistent Id:
29 |
30 | {{consistentId}}
31 |
32 | DefaultCacheMode:
{{selectedNode.defaultCacheMode}}
33 | Tcp Addresses:
34 |
35 | {{address}}
36 |
37 | Tcp Host Names:
{{selectedNode.tcpHostNames}}
38 | Tcp Port:
{{selectedNode.tcpPort}}
39 |
40 |
41 |
42 |
43 |
44 | Metrics
45 |
46 |
67 |
68 |
69 |
70 | Attributes
71 |
72 |
93 |
94 |
95 |
96 |
97 |
--------------------------------------------------------------------------------
/modules/ui/modules/ignite/topology/topology-controller.js:
--------------------------------------------------------------------------------
1 | app.controller('TopologyController', ['$scope', 'igniteRestService', function($scope, igniteRestService) {
2 |
3 | $scope.$on("reloadTopology", function(){
4 |
5 | $scope.nodes= [];
6 | $scope.displayedNodes = [];
7 | $scope.selectedNode = {};
8 |
9 | $scope.attributes = [];
10 | $scope.displayedAttributes = [];
11 |
12 | $scope.metrics = [];
13 | $scope.displayedMetrics = [];
14 |
15 | $scope.$watch('displayedNodes', function(node) {
16 | node.filter(function(r) {
17 | if (r.isSelected) {
18 | $scope.selectedNode = r;
19 | $scope.attributes = [];
20 | $scope.metrics = [];
21 |
22 | igniteRestService.invoke("node",{
23 | attr:true,
24 | mtr:true,
25 | id: r.nodeId
26 | }).then(function(result){
27 | for (var property in result.response.attributes ) {
28 | $scope.attributes.push({
29 | name:property,
30 | val:result.response.attributes[property]
31 | });
32 | }
33 | $scope.displayedAttributes = [].concat($scope.attributes);
34 |
35 | for (var property in result.response.metrics ) {
36 | $scope.metrics.push({
37 | name:property,
38 | val:result.response.metrics[property]
39 | });
40 | }
41 | $scope.displayedMetrics = [].concat($scope.metrics);
42 | });
43 | }
44 | })
45 | }, true);
46 |
47 | igniteRestService.invoke("top").then(function(result){
48 | _.forEach(result.response, function(node){
49 | node.consistentId = node.consistentId.split(",");
50 | $scope.nodes.push(node);
51 | });
52 | $scope.displayedNodes = [].concat($scope.nodes);
53 | });
54 |
55 | });
56 |
57 | $scope.$broadcast('reloadTopology');
58 |
59 | }]);
60 |
--------------------------------------------------------------------------------
/modules/ui/modules/layout/aside.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/modules/ui/modules/layout/header-controller.js:
--------------------------------------------------------------------------------
1 | app.controller('HeaderController', ['$scope', function($scope) {
2 | $scope.clusterAddress = "";
3 | }]);
--------------------------------------------------------------------------------
/modules/ui/modules/layout/header.html:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
26 |
27 | {{connectedCulsterAddress}}
28 |
29 |
32 |
33 |
--------------------------------------------------------------------------------
/modules/ui/modules/layout/master.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
13 |
17 |
--------------------------------------------------------------------------------
/modules/ui/modules/layout/nav.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Decision
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/modules/ui/modules/layout/page-sizer-directive.js:
--------------------------------------------------------------------------------
1 | angular.module('app').directive('pageSizer', ['$rootScope', function($rootScope) {
2 | return {
3 | link: function(scope, el, attrs) {
4 |
5 | var appFooterHeight = 51;
6 |
7 | var appFooter = jQuery('.' + attrs.footercontainer);
8 | var appFooterTop = appFooter.position().top;
9 | var me = jQuery(el);
10 | var myTop = me.position().top;
11 |
12 | function resize(){
13 |
14 | var desiredHeight = appFooterTop - myTop - appFooterHeight;
15 |
16 | me.animate({height: desiredHeight + "px"}, 300, null, function(){
17 |
18 | });
19 | }
20 | resize();
21 | }
22 | };
23 | }]);
--------------------------------------------------------------------------------
/modules/web-server.js:
--------------------------------------------------------------------------------
1 | var logger = global.logger;
2 |
3 | var path = require('path');
4 | var http = require('http');
5 | var os = require('os');
6 | var express = require('express');
7 |
8 | var bodyParser = require('body-parser');
9 | var compression = require('compression');
10 | var expiry = require('static-expiry'); //Fix expiry on Windows :(
11 |
12 | module.exports = function(app,configData){
13 |
14 | app.set('config',configData);
15 | var staticDir = path.join(__dirname, './ui');
16 | var viewsDir = __dirname + './ui';
17 | app.set('views', viewsDir);
18 | app.use(bodyParser.json());
19 | app.use(compression());
20 | app.use(expiry(app, {dir: staticDir, debug: app.get("env") == 'development'}));
21 | app.use(express.static(staticDir));
22 |
23 | var port = app.get("config").port;
24 | var rootPath = app.get("config").rootPath;
25 | var router = express.Router();
26 |
27 | app.set('port', port);
28 | app.set('view engine', 'ejs');
29 | app.use(rootPath,router);
30 |
31 | require('./router')(app,router);
32 |
33 | var server = http.createServer(app).listen(port, function(){
34 | logger.info("Web Server Ready on port: " + app.get("port"));
35 | });
36 | return server;
37 | };
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "aiex",
3 | "version": "0.0.9",
4 | "private": true,
5 | "scripts": {
6 | "start": "node index.js"
7 | },
8 | "engines": {
9 | "node": "0.12.2"
10 | },
11 | "dependencies": {
12 | "body-parser": "^1.13.1",
13 | "bson": "^0.3.2",
14 | "compression": "^1.5.0",
15 | "ejs": "^2.3.1",
16 | "express": "~4.0.0",
17 | "express-urlrewrite": "^1.2.0",
18 | "json-file-plus": "^3.0.0",
19 | "q": "^1.4.1",
20 | "request": "^2.64.0",
21 | "serve-favicon": "^2.3.0",
22 | "socket.io": "^1.3.5",
23 | "static-expiry": ">=0.0.5",
24 | "underscore": "^1.8.3",
25 | "winston": "^1.0.1"
26 | },
27 | "devDependencies": {
28 | "http-server": "^0.6.1",
29 | "require-directory": "^2.0.0",
30 | "requirejs": "^2.1.17"
31 | }
32 | }
--------------------------------------------------------------------------------