├── .babelrc ├── .eslintrc.json ├── .gitignore ├── README.md ├── data └── images │ ├── MasterCard.svg │ ├── PayPal.svg │ ├── Visa.svg │ ├── ilyushin.jpg │ ├── kasma_coral.jpg │ ├── kasma_pytheas.jpg │ ├── kasma_thalos.jpg │ ├── morgan_yu.jpg │ ├── sho.jpg │ ├── transtar_coral.jpg │ ├── transtar_pytheas.jpg │ ├── transtar_thalos.jpg │ ├── typhon_coral.jpg │ ├── typhon_pytheas.jpg │ ├── typhon_thalos.jpg │ ├── whitten.jpg │ ├── winslow.jpg │ └── yu.jpg ├── index.html ├── package.json ├── sources ├── app.js ├── locales │ └── en.js ├── models │ ├── allfilms.js │ ├── allpayments.js │ ├── cities.js │ ├── files.js │ ├── hours.js │ ├── kanban.js │ ├── pivot.js │ ├── positions.js │ ├── progress.js │ ├── progressch.js │ ├── projects.js │ ├── projectsd.js │ ├── reviews.js │ ├── sheet.js │ ├── statistics.js │ ├── stats.js │ ├── tags.js │ └── useractivity.js ├── styles │ ├── app.css │ └── webix-logo.svg ├── views │ ├── charts │ │ ├── compare.js │ │ ├── geo.js │ │ ├── index.js │ │ ├── progress.js │ │ ├── statistics.js │ │ └── time.js │ ├── dash │ │ ├── currencies.js │ │ ├── index.js │ │ ├── progress.js │ │ ├── projects.js │ │ ├── reviews.js │ │ └── stats.js │ ├── files.js │ ├── forms │ │ ├── car.js │ │ ├── checkboxes.js │ │ ├── danger.js │ │ ├── index.js │ │ ├── person.js │ │ ├── primary.js │ │ └── secondary.js │ ├── kanban.js │ ├── main.js │ ├── pivot.js │ ├── sheet.js │ └── tables │ │ ├── features.js │ │ ├── films.js │ │ ├── index.js │ │ ├── transactions.js │ │ └── widgets.js └── webix │ └── photo.js ├── webpack.config.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "targets": { 5 | "browsers": ["last 2 versions", "IE >= 11"] 6 | }, 7 | "modules":false, 8 | "loose":true 9 | }] 10 | ] 11 | } -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es6": true 5 | }, 6 | "globals":{ 7 | "webix":true, 8 | "remote":true, 9 | "APPNAME":true, "VERSION":true, "PRODUCTION":true 10 | }, 11 | "extends": "eslint:recommended", 12 | "parserOptions": { 13 | "sourceType": "module" 14 | }, 15 | "rules": { 16 | "indent": [ 17 | "error", 18 | "tab", 19 | {"SwitchCase":1} 20 | ], 21 | "quotes": [ 22 | "error", 23 | "double" 24 | ], 25 | "semi": [ 26 | "error", 27 | "always" 28 | ] 29 | } 30 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea 3 | node_modules 4 | *.log 5 | *.tar 6 | 7 | codebase/app.js 8 | codebase/app.css -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Example of Webix MVC Admin App 2 | =============================== 3 | 4 | Live demo 5 | ---------- 6 | 7 | - Material skin - http://webix.com/demos/admin-app/ 8 | 9 | Older versions 10 | ---------- 11 | Demo in this repo uses latest Webix (6.0+) and Webix Jet 2.x, if you want to check older version, check 12 | 13 | - Flat skin, Jet 0.x - https://github.com/webix-hub/webix-adminapp-demo/tree/jet0 14 | - Material skin, Jet 0.x - https://github.com/webix-hub/webix-adminapp-demo/tree/material-jet0 15 | - Flat skin, Jet 1.x - https://github.com/webix-hub/webix-adminapp-demo/tree/jet1 16 | - Material skin, Jet 1.x - https://github.com/webix-hub/webix-adminapp-demo/tree/material-jet1 17 | 18 | 19 | Technical details 20 | ------------------ 21 | 22 | ### Run 23 | 24 | - clone repo from git 25 | - run `npm install` 26 | - run `npm start` 27 | - open `http://localhost:8080` in a browser 28 | 29 | ### Deploy 30 | 31 | - run `npm run build` 32 | - copy "index.html", "data" and "codebase" folders to the server 33 | 34 | ### Other commands 35 | 36 | - `npm run lint` - will validate all js code in the project 37 | 38 | 39 | License 40 | --------- 41 | 42 | All code in this repo is available under the MIT License 43 | 44 | -------------------------------------------------------------------------------- /data/images/MasterCard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /data/images/PayPal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /data/images/Visa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /data/images/ilyushin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/ilyushin.jpg -------------------------------------------------------------------------------- /data/images/kasma_coral.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/kasma_coral.jpg -------------------------------------------------------------------------------- /data/images/kasma_pytheas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/kasma_pytheas.jpg -------------------------------------------------------------------------------- /data/images/kasma_thalos.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/kasma_thalos.jpg -------------------------------------------------------------------------------- /data/images/morgan_yu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/morgan_yu.jpg -------------------------------------------------------------------------------- /data/images/sho.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/sho.jpg -------------------------------------------------------------------------------- /data/images/transtar_coral.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/transtar_coral.jpg -------------------------------------------------------------------------------- /data/images/transtar_pytheas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/transtar_pytheas.jpg -------------------------------------------------------------------------------- /data/images/transtar_thalos.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/transtar_thalos.jpg -------------------------------------------------------------------------------- /data/images/typhon_coral.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/typhon_coral.jpg -------------------------------------------------------------------------------- /data/images/typhon_pytheas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/typhon_pytheas.jpg -------------------------------------------------------------------------------- /data/images/typhon_thalos.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/typhon_thalos.jpg -------------------------------------------------------------------------------- /data/images/whitten.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/whitten.jpg -------------------------------------------------------------------------------- /data/images/winslow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/winslow.jpg -------------------------------------------------------------------------------- /data/images/yu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/data/images/yu.jpg -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "admin-app", 3 | "version": "1.0.0", 4 | "description": "Admin Demo", 5 | "main": "sources/app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "lint": "eslint sources/", 9 | "build": "webpack --env.production true", 10 | "start": "webpack-dev-server", 11 | "deploy": "yarn build && rsync -ar index.html codebase webix.com:/root/composer/snippet.webix.com/admin/" 12 | }, 13 | "keywords": [ 14 | "webix", 15 | "jet" 16 | ], 17 | "license": "MIT", 18 | "devDependencies": { 19 | "babel-core": "^6.26.0", 20 | "babel-loader": "^7.1.2", 21 | "babel-preset-env": "^1.6.0", 22 | "css-loader": "^0.28.7", 23 | "eslint": "^4.7.2", 24 | "extract-text-webpack-plugin": "^3.0.0", 25 | "file-loader": "^0.11.2", 26 | "less": "^2.7.2", 27 | "less-loader": "^4.0.5", 28 | "url-loader": "^0.5.9", 29 | "webpack": "^3.6.0", 30 | "webpack-dev-server": "^2.8.2" 31 | }, 32 | "dependencies": { 33 | "webix-jet": "^2.0.0" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /sources/app.js: -------------------------------------------------------------------------------- 1 | import "./styles/app.css"; 2 | import {JetApp} from "webix-jet"; 3 | 4 | export default class InventoryApp extends JetApp { 5 | constructor(config){ 6 | super(webix.extend({ 7 | id: APPNAME, 8 | version: VERSION, 9 | start: "/main/dash", 10 | debug: !PRODUCTION 11 | }, config, true)); 12 | 13 | /* error tracking */ 14 | this.attachEvent("app:error:resolve", function(name, error){ 15 | window.console.error(error); 16 | }); 17 | } 18 | } -------------------------------------------------------------------------------- /sources/locales/en.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/webix-adminapp-demo/986196cdfb2887f4908eccc8306b2e30ec71a87c/sources/locales/en.js -------------------------------------------------------------------------------- /sources/models/allfilms.js: -------------------------------------------------------------------------------- 1 | const big_film_set = new webix.DataCollection({ 2 | data: [{"id":1,"title":"The Shawshank Redemption","year":"1994","votes":"678.79","rating":"9.2","rank":"1"},{"id":2,"title":"The Godfather","year":"1972","votes":"511.495","rating":"9.2","rank":"2"},{"id":3,"title":"The Godfather: Part II","year":"1974","votes":"319.352","rating":"9","rank":"3"},{"id":4,"title":"The Good, the Bad and the Ugly","year":"1966","votes":"213.03","rating":"8.9","rank":"4"},{"id":5,"title":"Pulp Fiction","year":"1994","votes":"533.848","rating":"8.9","rank":"5"},{"id":6,"title":"12 Angry Men","year":"1957","votes":"164.558","rating":"8.9","rank":"6"},{"id":7,"title":"Schindler's List","year":"1993","votes":"355.638","rating":"8.9","rank":"7"},{"id":8,"title":"One Flew Over the Cuckoo's Nest","year":"1975","votes":"283.176","rating":"8.8","rank":"8"},{"id":9,"title":"The Dark Knight","year":"2008","votes":"612.37","rating":"8.8","rank":"9"},{"id":10,"title":"The Lord of the Rings: The Return of the Kin","year":"2003","votes":"472.843","rating":"8.8","rank":"10"},{"id":11,"title":"Star Wars: Episode V - The Empire Strikes Bac","year":"1980","votes":"348.012","rating":"8.8","rank":"11"},{"id":12,"title":"Inception","year":"2010","votes":"458.693","rating":"8.8","rank":"12"},{"id":13,"title":"Fight Club","year":"1999","votes":"507.723","rating":"8.8","rank":"13"},{"id":14,"title":"Seven Samurai","year":"1954","votes":"118.925","rating":"8.8","rank":"14"},{"id":15,"title":"Goodfellas","year":"1990","votes":"299.349","rating":"8.7","rank":"15"},{"id":16,"title":"The Lord of the Rings: The Fellowship of the Rin","year":"2001","votes":"494.003","rating":"8.7","rank":"16"},{"id":17,"title":"Star Wars","year":"1977","votes":"393.087","rating":"8.7","rank":"17"},{"id":18,"title":"City of God","year":"2002","votes":"222.818","rating":"8.7","rank":"18"},{"id":19,"title":"Casablanca","year":"1942","votes":"202.051","rating":"8.7","rank":"19"},{"id":20,"title":"Once Upon a Time in the West","year":"1968","votes":"97.931","rating":"8.7","rank":"20"},{"id":21,"title":"The Matrix","year":"1999","votes":"492.325","rating":"8.7","rank":"21"},{"id":22,"title":"Rear Window","year":"1954","votes":"148.162","rating":"8.7","rank":"22"},{"id":23,"title":"Raiders of the Lost Ark","year":"1981","votes":"300.252","rating":"8.7","rank":"23"},{"id":24,"title":"The Silence of the Lambs","year":"1991","votes":"324.419","rating":"8.7","rank":"24"},{"id":25,"title":"The Usual Suspects","year":"1995","votes":"331.99","rating":"8.7","rank":"25"},{"id":26,"title":"Psycho","year":"1960","votes":"182.319","rating":"8.6","rank":"26"},{"id":27,"title":"Se7en","year":"1995","votes":"380.479","rating":"8.6","rank":"27"},{"id":28,"title":"Forrest Gump","year":"1994","votes":"416.066","rating":"8.6","rank":"28"},{"id":29,"title":"The Lord of the Rings: The Two Towers","year":"2002","votes":"423.855","rating":"8.6","rank":"29"}], 3 | scheme:{ 4 | $init: obj => { 5 | let pop = []; 6 | for (let i = 0; i < 13; i++){ 7 | pop.push(Math.floor(Math.random()*80 + 30)); 8 | } 9 | obj.popularity = pop; 10 | } 11 | } 12 | }); 13 | 14 | export function getFilms(){ 15 | return big_film_set; 16 | } -------------------------------------------------------------------------------- /sources/models/allpayments.js: -------------------------------------------------------------------------------- 1 | export const allpayments = new webix.DataCollection({ 2 | data:[ 3 | {"id":1,"status":"success","date":"2018-09-24 04:36","method":"PayPal","number":"do***@yahoo.com","type":0,"sum":"105.15","left":"847.71","name":"The Smoking Jug","city":"Tirane","country":"AL"}, 4 | {"id":2,"status":"success","date":"2018-09-23 19:09","method":"MasterCard","number":"5128...8960","type":1,"sum":"327.50","left":"2371.18","name":"The Invincible Disguise","city":"Buenos Aires","country":"AR"}, 5 | {"id":3,"status":"success","date":"2018-09-22 05:42","method":"Visa","number":"4781...9299","type":1,"sum":"172.66","left":"2456.07","name":"The Burning Dwarf","city":"Canberra","country":"AU"}, 6 | {"id":4,"status":"failed","date":"2018-09-21 05:29","method":"Visa","number":"4802...9797","type":1,"sum":"253.24","left":"3202.83","name":"The Waving Pot","city":"Vienna","country":"AT"}, 7 | {"id":5,"status":"success","date":"2018-09-20 21:20","method":"MasterCard","number":"5170...3971","type":0,"sum":"328.90","left":"471.64","name":"The Dry Carriage Outfitter","city":"Minsk","country":"BY"}, 8 | {"id":6,"status":"success","date":"2018-09-19 22:29","method":"MasterCard","number":"5177...4636","type":1,"sum":"334.20","left":"1839.00","name":"The Hungry Weapon Potions","city":"Brussels","country":"BE"}, 9 | {"id":7,"status":"success","date":"2018-09-18 03:14","method":"MasterCard","number":"5131...0432","type":1,"sum":"200.37","left":"749.46","name":"The Growing Feather Butcher Shop","city":"Brasilia","country":"BR"}, 10 | {"id":8,"status":"success","date":"2018-09-17 12:29","method":"Visa","number":"4141...9887","type":0,"sum":"23.09","left":"2468.39","name":"The Cuddly Dress Pharmacy","city":"Ottawa","country":"CA"}, 11 | {"id":9,"status":"success","date":"2018-09-16 08:45","method":"PayPal","number":"jet***@aol.com","type":1,"sum":"31.59","left":"3130.40","name":"Fit Sew Good","city":"Beijing","country":"CN"}, 12 | {"id":10,"status":"success","date":"2018-09-15 10:01","method":"Visa","number":"4930...2453","type":0,"sum":"134.63","left":"2671.30","name":"Grate Expectations","city":"Prague","country":"CZ"}, 13 | {"id":11,"status":"success","date":"2018-09-14 21:24","method":"MasterCard","number":"5119...3751","type":1,"sum":"108.69","left":"2369.38","name":"The Educated Armor","city":"Copenhagen","country":"DK"}, 14 | {"id":12,"status":"success","date":"2018-09-13 07:12","method":"MasterCard","number":"5150...1835","type":1,"sum":"16.49","left":"1137.82","name":"The Acclaimed Plum","city":"Cairo","country":"EG"}, 15 | {"id":13,"status":"success","date":"2018-09-12 17:39","method":"MasterCard","number":"5184...5903","type":1,"sum":"143.66","left":"2640.23","name":"The Hairy Hazelnut","city":"Helsinki","country":"FI"}, 16 | {"id":14,"status":"success","date":"2018-09-11 11:28","method":"Visa","number":"4773...5816","type":1,"sum":"11.59","left":"704.37","name":"The Fading Tankard","city":"Paris","country":"FR"}, 17 | {"id":15,"status":"success","date":"2018-09-10 15:31","method":"PayPal","number":"neo***@optonline.net","type":0,"sum":"69.56","left":"2120.64","name":"The Fluffy Anvil Optician","city":"Tbilisi","country":"GE"}, 18 | {"id":16,"status":"failed","date":"2018-09-9 14:00","method":"PayPal","number":"dal***@att.net","type":1,"sum":"246.03","left":"772.80","name":"The Nutty Potato Takeaway","city":"Berlin","country":"DE"}, 19 | {"id":17,"status":"waiting","date":"2018-09-8 12:41","method":"Visa","number":"4435...0652","type":1,"sum":"62.13","left":"682.68","name":"The Fantastic Spaceship Antique Store","city":"New Delhi","country":"IN"}, 20 | {"id":18,"status":"success","date":"2018-09-7 06:37","method":"MasterCard","number":"5130...1376","type":1,"sum":"43.69","left":"633.88","name":"The Careful Painting Deli","city":"Dublin","country":"IE"}, 21 | {"id":19,"status":"success","date":"2018-09-6 08:44","method":"MasterCard","number":"5114...6585","type":1,"sum":"10.19","left":"1878.33","name":"Sew and Tell","city":"Rome","country":"IT"} 22 | ], 23 | scheme:{ 24 | $init:function(obj){ 25 | obj.date = webix.i18n.parseFormatDate(obj.date); 26 | const curr_month = new Date().getMonth(); 27 | const data_month = obj.date.getMonth(); 28 | if (curr_month - data_month != 0){ 29 | if (obj.id < 25) 30 | obj.date.setMonth(curr_month); 31 | else if (obj.id >= 25) 32 | obj.date.setMonth(curr_month-1); 33 | } 34 | const curr_year = new Date().getFullYear(); 35 | const data_year = obj.date.getFullYear(); 36 | if (curr_year - data_year > 0){ 37 | obj.date.setYear(curr_year); 38 | } 39 | } 40 | } 41 | }); 42 | -------------------------------------------------------------------------------- /sources/models/cities.js: -------------------------------------------------------------------------------- 1 | export function getCities(){ 2 | return cities; 3 | } 4 | 5 | const cities = [ 6 | { id:"$empty", value:"-- Not selected --", $empty:true }, 7 | { id:"1", value:"Tirane, Albania" }, 8 | { id:"2", value:"Buenos Aires, Argentina" }, 9 | { id:"3", value:"Canberra, Australia" }, 10 | { id:"4", value:"Vienna, Austria" }, 11 | { id:"5", value:"Minsk, Belarus" }, 12 | { id:"6", value:"Brussels, Belgium" }, 13 | { id:"7", value:"Brasilia, Brazil" }, 14 | { id:"8", value:"Ottawa, Canada" }, 15 | { id:"9", value:"Beijing, China" }, 16 | { id:"10", value:"Prague, Czech Republic" }, 17 | { id:"11", value:"Copenhagen, Denmark" }, 18 | { id:"12", value:"Cairo, Egypt" }, 19 | { id:"13", value:"Helsinki, Finland" }, 20 | { id:"14", value:"Paris, France" }, 21 | { id:"15", value:"Tbilisi, Georgia" }, 22 | { id:"16", value:"Berlin, Germany" }, 23 | { id:"17", value:"New Delhi, India" }, 24 | { id:"18", value:"Dublin, Ireland" }, 25 | { id:"19", value:"Rome, Italy" }, 26 | { id:"20", value:"Tokyo, Japan" }, 27 | { id:"21", value:"Wellington, New Zealand" }, 28 | { id:"22", value:"Seoul, Republic of Korea" }, 29 | { id:"23", value:"Madrid, Spain" }, 30 | { id:"24", value:"Stockholm, Sweden" }, 31 | { id:"25", value:"Washington, United States" } 32 | ]; 33 | -------------------------------------------------------------------------------- /sources/models/files.js: -------------------------------------------------------------------------------- 1 | export const data = [{"value":"Files","id":"/","data":[{"value":"Configs","id":"/Configs","size":4096,"date":1550766120,"type":"folder","data":[{"value":"drone.yml","id":"/Configs/drone.yml","size":50,"date":1550766044,"type":"file"}]},{"value":"Data","id":"/Data","size":4096,"date":1550766120,"type":"folder","data":[{"value":"sub1","id":"/Data/sub1","size":4096,"date":1550766120,"type":"folder","data":[{"value":"set1.txt","id":"/Data/sub1/set1.txt","size":15,"date":1550766044,"type":"text"},{"value":"set2.txt","id":"/Data/sub1/set2.txt","size":15,"date":1550766044,"type":"text"}]},{"value":"sub2","id":"/Data/sub2","size":4096,"date":1550766120,"type":"folder","data":[{"value":"set1.txt","id":"/Data/sub2/set1.txt","size":15,"date":1550766044,"type":"text"},{"value":"set2.txt","id":"/Data/sub2/set2.txt","size":15,"date":1550766044,"type":"text"},{"value":"set3.txt","id":"/Data/sub2/set3.txt","size":15,"date":1550766044,"type":"text"}]}]},{"value":"logo.jpg","id":"/logo.jpg","size":18834,"date":1550766044,"type":"image"}],"type":"folder","open":true}]; -------------------------------------------------------------------------------- /sources/models/hours.js: -------------------------------------------------------------------------------- 1 | const data = [ 2 | {"id":1,"activity":"Tasks","hours":48,"color":"#8664C6"}, 3 | {"id":2,"activity":"Meeting","hours":24,"color":"#1CA1C1"}, 4 | {"id":4,"activity":"Calls","hours":19,"color":"#FDBF4C"}, 5 | {"id":3,"activity":"Mail","hours":12,"color":"#F8643F"} 6 | ]; 7 | 8 | export function getHours(){ 9 | return data; 10 | } -------------------------------------------------------------------------------- /sources/models/kanban.js: -------------------------------------------------------------------------------- 1 | export const data = [ 2 | { 3 | id:1, status:"new", text:"Test new authentification service", tags:[1,2,3], 4 | comments:[ 5 | {id:1, user_id:1, date:"2018-06-10 18:45", text:"Greetings, fellow colleagues. I would like to share my insights on this task. I reckon we should deal with at least half of the points in the plan without further delays. I suggest proceeding from one point to the next and notifying the rest of us with at least short notices. This way is best to keep track of who is doing what."}, 6 | {id:2, user_id:2, date:"2018-06-12 19:40", text:"Hi, Rick. I am sure that that's exactly what is thought best out there in Dunwall. Let's just do what we are supposed to do to get the result."}, 7 | {id:3, user_id:3, date:"2018-06-12 20:16", text:"Whoa, Martin. Rick is right, though I must admit, he is often way too serious and lacks a good healthy sense of humour.

I'd also like to add that half of the points in the plan (btw who wrote it? I would like a long thoughtful conversation in person with the guy / lady in question. Maybe over a chessboard as well) Well, most of the points can be omitted if we rationally split the subtasks between all the parties and optimize the whole line of work."} 8 | ] 9 | }, 10 | { 11 | id:2, status:"work", user_id: 5, text:"Performance tests", tags:[1], 12 | comments:[ 13 | {id:6, user_id:7, date:"2018-06-14 22:31", text:"One more question, guys. What about the latest specifications?"}, 14 | {id:7, user_id:9, date:"2018-06-14 22:43", text:"They are ready, but not published yet."}, 15 | {id:8, user_id:7, date:"2018-06-14 23:01", text:"Wow great, could you please share them with me?"} 16 | ] 17 | }, 18 | { 19 | id:3, status:"work", user_id: 6, text:"Kanban tutorial", tags:[2] 20 | }, 21 | { 22 | id:4, status:"work", user_id: 3, text:"SpreadSheet NodeJS", tags:[3] 23 | }, 24 | { 25 | id:5, status:"test", user_id: 4, text:"Portlets view", tags:[4,2], 26 | comments:[ 27 | {id:6, user_id:4, date:"2018-06-14 23:01", text:"No worry, I am planning to finish it up in half an hour and make them public for all. Just wait..)"} 28 | ] 29 | }, 30 | { id:6, status:"new", user_id: 7, text:"Form Builder", tags:[4,6] }, 31 | { id:7, status:"test", text:"Code Snippet", tags:[1,2,3] }, 32 | { id:8, status:"work", user_id: 1, text:"Backend integration", tags:[5] }, 33 | { id:9, status:"work", user_id: 2, text:"Drag-n-drop with shifting cards", tags:[5] }, 34 | { id:10, status:"work", user_id: 4, text:"Webix Jet 2.0", tags:[4] }, 35 | { id:11, status:"test", user_id: 9, text:"Chat app interface", tags:[4,2] }, 36 | { id:12, status:"done", user_id: 8, text:"Material skin", tags:[4,6] } 37 | ]; -------------------------------------------------------------------------------- /sources/models/pivot.js: -------------------------------------------------------------------------------- 1 | export const data = [ 2 | { 3 | "name": "Argentina", 4 | "year": 2005, 5 | "continent": "South America", 6 | "form": "Republic", 7 | "gdp": 181.357, 8 | "oil": 1.545, 9 | "balance": 4.699 10 | }, 11 | { 12 | "name": "Argentina", 13 | "year": 2006, 14 | "continent": "South America", 15 | "form": "Republic", 16 | "gdp": 212.507, 17 | "oil": 1.732, 18 | "balance": 7.167 19 | }, 20 | { 21 | "name": "Argentina", 22 | "year": 2007, 23 | "continent": "South America", 24 | "form": "Republic", 25 | "gdp": 260.071, 26 | "oil": 2.845, 27 | "balance": 6.728 28 | }, 29 | { 30 | "name": "Argentina", 31 | "year": 2008, 32 | "continent": "South America", 33 | "form": "Republic", 34 | "gdp": 324.405, 35 | "oil": 4.333, 36 | "balance": 5.99 37 | }, 38 | { 39 | "name": "Argentina", 40 | "year": 2009, 41 | "continent": "South America", 42 | "form": "Republic", 43 | "gdp": 305.763, 44 | "oil": 2.626, 45 | "balance": 7.544 46 | }, 47 | { 48 | "name": "Argentina", 49 | "year": 2010, 50 | "continent": "South America", 51 | "form": "Republic", 52 | "gdp": 367.565, 53 | "oil": 4.474, 54 | "balance": 2.418 55 | }, 56 | { 57 | "name": "Argentina", 58 | "year": 2011, 59 | "continent": "South America", 60 | "form": "Republic", 61 | "gdp": 444.612, 62 | "oil": 9.414, 63 | "balance": -0.299 64 | }, 65 | { 66 | "name": "Argentina", 67 | "year": 2012, 68 | "continent": "South America", 69 | "form": "Republic", 70 | "gdp": 474.812, 71 | "oil": 10.496, 72 | "balance": 1.264 73 | }, 74 | { 75 | "name": "Argentina", 76 | "year": 2013, 77 | "continent": "South America", 78 | "form": "Republic", 79 | "gdp": 495.067, 80 | "oil": 10.851, 81 | "balance": -0.361 82 | }, 83 | { 84 | "name": "Australia", 85 | "year": 2005, 86 | "continent": "Australia", 87 | "form": "Constitutional monarchy", 88 | "gdp": 732.091, 89 | "oil": 8.014, 90 | "balance": -41.878 91 | }, 92 | { 93 | "name": "Australia", 94 | "year": 2006, 95 | "continent": "Australia", 96 | "form": "Constitutional monarchy", 97 | "gdp": 777.901, 98 | "oil": 9.997, 99 | "balance": -41.461 100 | }, 101 | { 102 | "name": "Australia", 103 | "year": 2007, 104 | "continent": "Australia", 105 | "form": "Constitutional monarchy", 106 | "gdp": 945.694, 107 | "oil": 12.322, 108 | "balance": -58.543 109 | }, 110 | { 111 | "name": "Australia", 112 | "year": 2008, 113 | "continent": "Australia", 114 | "form": "Constitutional monarchy", 115 | "gdp": 1053.862, 116 | "oil": 15.278, 117 | "balance": -46.325 118 | }, 119 | { 120 | "name": "Australia", 121 | "year": 2009, 122 | "continent": "Australia", 123 | "form": "Constitutional monarchy", 124 | "gdp": 992.244, 125 | "oil": 9.748, 126 | "balance": -41.432 127 | }, 128 | { 129 | "name": "Australia", 130 | "year": 2010, 131 | "continent": "Australia", 132 | "form": "Constitutional monarchy", 133 | "gdp": 1244.406, 134 | "oil": 14.91, 135 | "balance": -35.711 136 | }, 137 | { 138 | "name": "Australia", 139 | "year": 2011, 140 | "continent": "Australia", 141 | "form": "Constitutional monarchy", 142 | "gdp": 1486.914, 143 | "oil": 21.497, 144 | "balance": -33.522 145 | }, 146 | { 147 | "name": "Australia", 148 | "year": 2012, 149 | "continent": "Australia", 150 | "form": "Constitutional monarchy", 151 | "gdp": 1542.055, 152 | "oil": 22.596, 153 | "balance": -62.969 154 | }, 155 | { 156 | "name": "Australia", 157 | "year": 2013, 158 | "continent": "Australia", 159 | "form": "Constitutional monarchy", 160 | "gdp": 1598.069, 161 | "oil": 23.65, 162 | "balance": -87.944 163 | }, 164 | { 165 | "name": "Austria", 166 | "year": 2005, 167 | "continent": "Europe", 168 | "form": "Republic", 169 | "gdp": 305.513, 170 | "oil": 7.6, 171 | "balance": 6.615 172 | }, 173 | { 174 | "name": "Austria", 175 | "year": 2006, 176 | "continent": "Europe", 177 | "form": "Republic", 178 | "gdp": 325.256, 179 | "oil": 9.344, 180 | "balance": 9.112 181 | }, 182 | { 183 | "name": "Austria", 184 | "year": 2007, 185 | "continent": "Europe", 186 | "form": "Republic", 187 | "gdp": 375.581, 188 | "oil": 9.864, 189 | "balance": 13.184 190 | }, 191 | { 192 | "name": "Austria", 193 | "year": 2008, 194 | "continent": "Europe", 195 | "form": "Republic", 196 | "gdp": 416.119, 197 | "oil": 13.372, 198 | "balance": 20.246 199 | }, 200 | { 201 | "name": "Austria", 202 | "year": 2009, 203 | "continent": "Europe", 204 | "form": "Republic", 205 | "gdp": 384.622, 206 | "oil": 8.475, 207 | "balance": 10.428 208 | }, 209 | { 210 | "name": "Austria", 211 | "year": 2010, 212 | "continent": "Europe", 213 | "form": "Republic", 214 | "gdp": 380.018, 215 | "oil": 10.224, 216 | "balance": 11.435 217 | }, 218 | { 219 | "name": "Austria", 220 | "year": 2011, 221 | "continent": "Europe", 222 | "form": "Republic", 223 | "gdp": 418.414, 224 | "oil": 16.376, 225 | "balance": 8.147 226 | }, 227 | { 228 | "name": "Austria", 229 | "year": 2012, 230 | "continent": "Europe", 231 | "form": "Republic", 232 | "gdp": 391.469, 233 | "oil": 16.872, 234 | "balance": 7.315 235 | }, 236 | { 237 | "name": "Austria", 238 | "year": 2013, 239 | "continent": "Europe", 240 | "form": "Republic", 241 | "gdp": 393.753, 242 | "oil": 16.877, 243 | "balance": 6.413 244 | }, 245 | { 246 | "name": "Belarus", 247 | "year": 2005, 248 | "continent": "Europe", 249 | "form": "Republic", 250 | "gdp": 30.21, 251 | "oil": 4.375, 252 | "balance": 0.435 253 | }, 254 | { 255 | "name": "Belarus", 256 | "year": 2006, 257 | "continent": "Europe", 258 | "form": "Republic", 259 | "gdp": 36.962, 260 | "oil": 6.093, 261 | "balance": -1.448 262 | }, 263 | { 264 | "name": "Belarus", 265 | "year": 2007, 266 | "continent": "Europe", 267 | "form": "Republic", 268 | "gdp": 45.276, 269 | "oil": 7.721, 270 | "balance": -3.04 271 | }, 272 | { 273 | "name": "Belarus", 274 | "year": 2008, 275 | "continent": "Europe", 276 | "form": "Republic", 277 | "gdp": 60.752, 278 | "oil": 11.019, 279 | "balance": -4.988 280 | }, 281 | { 282 | "name": "Belarus", 283 | "year": 2009, 284 | "continent": "Europe", 285 | "form": "Republic", 286 | "gdp": 49.209, 287 | "oil": 8.386, 288 | "balance": -6.178 289 | }, 290 | { 291 | "name": "Belarus", 292 | "year": 2010, 293 | "continent": "Europe", 294 | "form": "Republic", 295 | "gdp": 55.221, 296 | "oil": 7.686, 297 | "balance": -8.278 298 | }, 299 | { 300 | "name": "Belarus", 301 | "year": 2011, 302 | "continent": "Europe", 303 | "form": "Republic", 304 | "gdp": 55.136, 305 | "oil": 12.875, 306 | "balance": -5.775 307 | }, 308 | { 309 | "name": "Belarus", 310 | "year": 2012, 311 | "continent": "Europe", 312 | "form": "Republic", 313 | "gdp": 58.215, 314 | "oil": 12.409, 315 | "balance": -2.076 316 | }, 317 | { 318 | "name": "Belarus", 319 | "year": 2013, 320 | "continent": "Europe", 321 | "form": "Republic", 322 | "gdp": 58.933, 323 | "oil": 11.434, 324 | "balance": -3.419 325 | }, 326 | { 327 | "name": "Belgium", 328 | "year": 2005, 329 | "continent": "Europe", 330 | "form": "Constitutional monarchy", 331 | "gdp": 378.006, 332 | "oil": 24.956, 333 | "balance": 7.465 334 | }, 335 | { 336 | "name": "Belgium", 337 | "year": 2006, 338 | "continent": "Europe", 339 | "form": "Constitutional monarchy", 340 | "gdp": 400.338, 341 | "oil": 30.561, 342 | "balance": 7.447 343 | }, 344 | { 345 | "name": "Belgium", 346 | "year": 2007, 347 | "continent": "Europe", 348 | "form": "Constitutional monarchy", 349 | "gdp": 460.279, 350 | "oil": 34.263, 351 | "balance": 7.438 352 | }, 353 | { 354 | "name": "Belgium", 355 | "year": 2008, 356 | "continent": "Europe", 357 | "form": "Constitutional monarchy", 358 | "gdp": 509.764, 359 | "oil": 49.07, 360 | "balance": -8.368 361 | }, 362 | { 363 | "name": "Belgium", 364 | "year": 2009, 365 | "continent": "Europe", 366 | "form": "Constitutional monarchy", 367 | "gdp": 474.633, 368 | "oil": 30.195, 369 | "balance": -7.4 370 | }, 371 | { 372 | "name": "Belgium", 373 | "year": 2010, 374 | "continent": "Europe", 375 | "form": "Constitutional monarchy", 376 | "gdp": 472.54, 377 | "oil": 38.998, 378 | "balance": 6.641 379 | }, 380 | { 381 | "name": "Belgium", 382 | "year": 2011, 383 | "continent": "Europe", 384 | "form": "Constitutional monarchy", 385 | "gdp": 514.593, 386 | "oil": 56.54, 387 | "balance": -5.119 388 | }, 389 | { 390 | "name": "Belgium", 391 | "year": 2012, 392 | "continent": "Europe", 393 | "form": "Constitutional monarchy", 394 | "gdp": 476.796, 395 | "oil": 51.684, 396 | "balance": -0.623 397 | }, 398 | { 399 | "name": "Belgium", 400 | "year": 2013, 401 | "continent": "Europe", 402 | "form": "Constitutional monarchy", 403 | "gdp": 475.746, 404 | "oil": 51.143, 405 | "balance": 1.643 406 | }, 407 | { 408 | "name": "Brazil", 409 | "year": 2005, 410 | "continent": "South America", 411 | "form": "Republic", 412 | "gdp": 881.754, 413 | "oil": 11.779, 414 | "balance": 13.984 415 | }, 416 | { 417 | "name": "Brazil", 418 | "year": 2006, 419 | "continent": "South America", 420 | "form": "Republic", 421 | "gdp": 1089.157, 422 | "oil": 15.365, 423 | "balance": 13.642 424 | }, 425 | { 426 | "name": "Brazil", 427 | "year": 2007, 428 | "continent": "South America", 429 | "form": "Republic", 430 | "gdp": 1366.22, 431 | "oil": 20.408, 432 | "balance": 1.551 433 | }, 434 | { 435 | "name": "Brazil", 436 | "year": 2008, 437 | "continent": "South America", 438 | "form": "Republic", 439 | "gdp": 1650.392, 440 | "oil": 30.505, 441 | "balance": -28.192 442 | }, 443 | { 444 | "name": "Brazil", 445 | "year": 2009, 446 | "continent": "South America", 447 | "form": "Republic", 448 | "gdp": 1622.311, 449 | "oil": 16.475, 450 | "balance": -24.302 451 | }, 452 | { 453 | "name": "Brazil", 454 | "year": 2010, 455 | "continent": "South America", 456 | "form": "Republic", 457 | "gdp": 2142.926, 458 | "oil": 26.089, 459 | "balance": -47.273 460 | }, 461 | { 462 | "name": "Brazil", 463 | "year": 2011, 464 | "continent": "South America", 465 | "form": "Republic", 466 | "gdp": 2492.907, 467 | "oil": 37.498, 468 | "balance": -52.48 469 | }, 470 | { 471 | "name": "Brazil", 472 | "year": 2012, 473 | "continent": "South America", 474 | "form": "Republic", 475 | "gdp": 2425.052, 476 | "oil": 37.763, 477 | "balance": -62.341 478 | }, 479 | { 480 | "name": "Brazil", 481 | "year": 2013, 482 | "continent": "South America", 483 | "form": "Republic", 484 | "gdp": 2503.869, 485 | "oil": 39.648, 486 | "balance": -70.068 487 | }, 488 | { 489 | "name": "Canada", 490 | "year": 2005, 491 | "continent": "North America", 492 | "form": "Constitutional monarchy", 493 | "gdp": 1133.757, 494 | "oil": 27.777, 495 | "balance": 21.376 496 | }, 497 | { 498 | "name": "Canada", 499 | "year": 2006, 500 | "continent": "North America", 501 | "form": "Constitutional monarchy", 502 | "gdp": 1278.607, 503 | "oil": 30.626, 504 | "balance": 18.064 505 | }, 506 | { 507 | "name": "Canada", 508 | "year": 2007, 509 | "continent": "North America", 510 | "form": "Constitutional monarchy", 511 | "gdp": 1424.067, 512 | "oil": 34.726, 513 | "balance": 11.89 514 | }, 515 | { 516 | "name": "Canada", 517 | "year": 2008, 518 | "continent": "North America", 519 | "form": "Constitutional monarchy", 520 | "gdp": 1502.678, 521 | "oil": 49.833, 522 | "balance": 4.945 523 | }, 524 | { 525 | "name": "Canada", 526 | "year": 2009, 527 | "continent": "North America", 528 | "form": "Constitutional monarchy", 529 | "gdp": 1337.577, 530 | "oil": 29.701, 531 | "balance": -39.573 532 | }, 533 | { 534 | "name": "Canada", 535 | "year": 2010, 536 | "continent": "North America", 537 | "form": "Constitutional monarchy", 538 | "gdp": 1577.04, 539 | "oil": 39.361, 540 | "balance": -49.375 541 | }, 542 | { 543 | "name": "Canada", 544 | "year": 2011, 545 | "continent": "North America", 546 | "form": "Constitutional monarchy", 547 | "gdp": 1738.954, 548 | "oil": 52.574, 549 | "balance": -48.906 550 | }, 551 | { 552 | "name": "Canada", 553 | "year": 2012, 554 | "continent": "North America", 555 | "form": "Constitutional monarchy", 556 | "gdp": 1770.084, 557 | "oil": 51.378, 558 | "balance": -59.921 559 | }, 560 | { 561 | "name": "Canada", 562 | "year": 2013, 563 | "continent": "North America", 564 | "form": "Constitutional monarchy", 565 | "gdp": 1839.141, 566 | "oil": 50.408, 567 | "balance": -68.182 568 | }, 569 | { 570 | "name": "Central African Republic", 571 | "year": 2005, 572 | "continent": "Africa", 573 | "form": "Republic", 574 | "gdp": 1.35, 575 | "oil": 0.034, 576 | "balance": -0.088 577 | }, 578 | { 579 | "name": "Central African Republic", 580 | "year": 2006, 581 | "continent": "Africa", 582 | "form": "Republic", 583 | "gdp": 1.473, 584 | "oil": 0.05, 585 | "balance": -0.044 586 | }, 587 | { 588 | "name": "Central African Republic", 589 | "year": 2007, 590 | "continent": "Africa", 591 | "form": "Republic", 592 | "gdp": 1.697, 593 | "oil": 0.068, 594 | "balance": -0.106 595 | }, 596 | { 597 | "name": "Central African Republic", 598 | "year": 2008, 599 | "continent": "Africa", 600 | "form": "Republic", 601 | "gdp": 1.983, 602 | "oil": 0.092, 603 | "balance": -0.198 604 | }, 605 | { 606 | "name": "Central African Republic", 607 | "year": 2009, 608 | "continent": "Africa", 609 | "form": "Republic", 610 | "gdp": 1.982, 611 | "oil": 0.065, 612 | "balance": -0.182 613 | }, 614 | { 615 | "name": "Central African Republic", 616 | "year": 2010, 617 | "continent": "Africa", 618 | "form": "Republic", 619 | "gdp": 1.986, 620 | "oil": 0.082, 621 | "balance": -0.202 622 | }, 623 | { 624 | "name": "Central African Republic", 625 | "year": 2011, 626 | "continent": "Africa", 627 | "form": "Republic", 628 | "gdp": 2.195, 629 | "oil": 0.1, 630 | "balance": -0.191 631 | }, 632 | { 633 | "name": "Central African Republic", 634 | "year": 2012, 635 | "continent": "Africa", 636 | "form": "Republic", 637 | "gdp": 2.168, 638 | "oil": 0.111, 639 | "balance": -0.165 640 | }, 641 | { 642 | "name": "Central African Republic", 643 | "year": 2013, 644 | "continent": "Africa", 645 | "form": "Republic", 646 | "gdp": 2.249, 647 | "oil": 0.113, 648 | "balance": -0.141 649 | }, 650 | { 651 | "name": "Chad", 652 | "year": 2005, 653 | "continent": "Africa", 654 | "form": "Republic", 655 | "gdp": 5.884, 656 | "oil": 0.253, 657 | "balance": 0.069 658 | }, 659 | { 660 | "name": "Chad", 661 | "year": 2006, 662 | "continent": "Africa", 663 | "form": "Republic", 664 | "gdp": 6.306, 665 | "oil": 0.594, 666 | "balance": 0.375 667 | }, 668 | { 669 | "name": "Chad", 670 | "year": 2007, 671 | "continent": "Africa", 672 | "form": "Republic", 673 | "gdp": 7.018, 674 | "oil": 0.298, 675 | "balance": 0.813 676 | }, 677 | { 678 | "name": "Chad", 679 | "year": 2008, 680 | "continent": "Africa", 681 | "form": "Republic", 682 | "gdp": 8.394, 683 | "oil": 0.507, 684 | "balance": 0.754 685 | }, 686 | { 687 | "name": "Chad", 688 | "year": 2009, 689 | "continent": "Africa", 690 | "form": "Republic", 691 | "gdp": 7.1, 692 | "oil": 0.535, 693 | "balance": -0.286 694 | }, 695 | { 696 | "name": "Chad", 697 | "year": 2010, 698 | "continent": "Africa", 699 | "form": "Republic", 700 | "gdp": 8.556, 701 | "oil": 0.835, 702 | "balance": -0.3 703 | }, 704 | { 705 | "name": "Chad", 706 | "year": 2011, 707 | "continent": "Africa", 708 | "form": "Republic", 709 | "gdp": 9.345, 710 | "oil": 1.057, 711 | "balance": 0.191 712 | }, 713 | { 714 | "name": "Chad", 715 | "year": 2012, 716 | "continent": "Africa", 717 | "form": "Republic", 718 | "gdp": 9.723, 719 | "oil": 0.847, 720 | "balance": -0.181 721 | }, 722 | { 723 | "name": "Chad", 724 | "year": 2013, 725 | "continent": "Africa", 726 | "form": "Republic", 727 | "gdp": 9.603, 728 | "oil": 0.811, 729 | "balance": -0.193 730 | }, 731 | { 732 | "name": "China", 733 | "year": 2005, 734 | "continent": "Asia", 735 | "form": "Republic", 736 | "gdp": 2256.919, 737 | "oil": 59.615, 738 | "balance": 134.098 739 | }, 740 | { 741 | "name": "China", 742 | "year": 2006, 743 | "continent": "Asia", 744 | "form": "Republic", 745 | "gdp": 2712.917, 746 | "oil": 84.061, 747 | "balance": 232.712 748 | }, 749 | { 750 | "name": "China", 751 | "year": 2007, 752 | "continent": "Asia", 753 | "form": "Republic", 754 | "gdp": 3494.235, 755 | "oil": 98.845, 756 | "balance": 353.876 757 | }, 758 | { 759 | "name": "China", 760 | "year": 2008, 761 | "continent": "Asia", 762 | "form": "Republic", 763 | "gdp": 4519.951, 764 | "oil": 161.77, 765 | "balance": 412.37 766 | }, 767 | { 768 | "name": "China", 769 | "year": 2009, 770 | "continent": "Asia", 771 | "form": "Republic", 772 | "gdp": 4990.526, 773 | "oil": 108.553, 774 | "balance": 261.012 775 | }, 776 | { 777 | "name": "China", 778 | "year": 2010, 779 | "continent": "Asia", 780 | "form": "Republic", 781 | "gdp": 5930.393, 782 | "oil": 163.558, 783 | "balance": 237.623 784 | }, 785 | { 786 | "name": "China", 787 | "year": 2011, 788 | "continent": "Asia", 789 | "form": "Republic", 790 | "gdp": 7298.147, 791 | "oil": 235.753, 792 | "balance": 201.72 793 | }, 794 | { 795 | "name": "China", 796 | "year": 2012, 797 | "continent": "Asia", 798 | "form": "Republic", 799 | "gdp": 8250.241, 800 | "oil": 238.267, 801 | "balance": 190.681 802 | }, 803 | { 804 | "name": "China", 805 | "year": 2013, 806 | "continent": "Asia", 807 | "form": "Republic", 808 | "gdp": 9038.658, 809 | "oil": 231.625, 810 | "balance": 222.685 811 | }, 812 | { 813 | "name": "Colombia", 814 | "year": 2005, 815 | "continent": "South America", 816 | "form": "Republic", 817 | "gdp": 146.585, 818 | "oil": 0.518, 819 | "balance": -1.886 820 | }, 821 | { 822 | "name": "Colombia", 823 | "year": 2006, 824 | "continent": "South America", 825 | "form": "Republic", 826 | "gdp": 160.691, 827 | "oil": 0.651, 828 | "balance": -2.988 829 | }, 830 | { 831 | "name": "Colombia", 832 | "year": 2007, 833 | "continent": "South America", 834 | "form": "Republic", 835 | "gdp": 210.565, 836 | "oil": 0.875, 837 | "balance": -5.978 838 | }, 839 | { 840 | "name": "Colombia", 841 | "year": 2008, 842 | "continent": "South America", 843 | "form": "Republic", 844 | "gdp": 235.255, 845 | "oil": 1.754, 846 | "balance": -6.699 847 | }, 848 | { 849 | "name": "Colombia", 850 | "year": 2009, 851 | "continent": "South America", 852 | "form": "Republic", 853 | "gdp": 231.597, 854 | "oil": 1.15, 855 | "balance": -4.96 856 | }, 857 | { 858 | "name": "Colombia", 859 | "year": 2010, 860 | "continent": "South America", 861 | "form": "Republic", 862 | "gdp": 284.877, 863 | "oil": 2.008, 864 | "balance": -8.758 865 | }, 866 | { 867 | "name": "Colombia", 868 | "year": 2011, 869 | "continent": "South America", 870 | "form": "Republic", 871 | "gdp": 327.626, 872 | "oil": 3.756, 873 | "balance": -9.978 874 | }, 875 | { 876 | "name": "Colombia", 877 | "year": 2012, 878 | "continent": "South America", 879 | "form": "Republic", 880 | "gdp": 365.402, 881 | "oil": 4.056, 882 | "balance": -10.656 883 | }, 884 | { 885 | "name": "Colombia", 886 | "year": 2013, 887 | "continent": "South America", 888 | "form": "Republic", 889 | "gdp": 387.399, 890 | "oil": 4.219, 891 | "balance": -11.19 892 | }, 893 | { 894 | "name": "Czech Republic", 895 | "year": 2005, 896 | "continent": "Europe", 897 | "form": "Republic", 898 | "gdp": 130.066, 899 | "oil": 4.781, 900 | "balance": -1.21 901 | }, 902 | { 903 | "name": "Czech Republic", 904 | "year": 2006, 905 | "continent": "Europe", 906 | "form": "Republic", 907 | "gdp": 148.374, 908 | "oil": 6.978, 909 | "balance": -3.129 910 | }, 911 | { 912 | "name": "Czech Republic", 913 | "year": 2007, 914 | "continent": "Europe", 915 | "form": "Republic", 916 | "gdp": 180.479, 917 | "oil": 8.899, 918 | "balance": -7.931 919 | }, 920 | { 921 | "name": "Czech Republic", 922 | "year": 2008, 923 | "continent": "Europe", 924 | "form": "Republic", 925 | "gdp": 225.427, 926 | "oil": 9.484, 927 | "balance": -4.782 928 | }, 929 | { 930 | "name": "Czech Republic", 931 | "year": 2009, 932 | "continent": "Europe", 933 | "form": "Republic", 934 | "gdp": 196.151, 935 | "oil": 14.75, 936 | "balance": -4.849 937 | }, 938 | { 939 | "name": "Czech Republic", 940 | "year": 2010, 941 | "continent": "Europe", 942 | "form": "Republic", 943 | "gdp": 197.674, 944 | "oil": 9.712, 945 | "balance": -7.601 946 | }, 947 | { 948 | "name": "Czech Republic", 949 | "year": 2011, 950 | "continent": "Europe", 951 | "form": "Republic", 952 | "gdp": 215.18, 953 | "oil": 12.131, 954 | "balance": -6.348 955 | }, 956 | { 957 | "name": "Czech Republic", 958 | "year": 2012, 959 | "continent": "Europe", 960 | "form": "Republic", 961 | "gdp": 193.513, 962 | "oil": 16.089, 963 | "balance": -4.63 964 | }, 965 | { 966 | "name": "Czech Republic", 967 | "year": 2013, 968 | "continent": "Europe", 969 | "form": "Republic", 970 | "gdp": 192.597, 971 | "oil": 16.259, 972 | "balance": -4.146 973 | }, 974 | { 975 | "name": "Denmark", 976 | "year": 2005, 977 | "continent": "Europe", 978 | "form": "Constitutional monarchy", 979 | "gdp": 257.676, 980 | "oil": 5.041, 981 | "balance": 11.195 982 | }, 983 | { 984 | "name": "Denmark", 985 | "year": 2006, 986 | "continent": "Europe", 987 | "form": "Constitutional monarchy", 988 | "gdp": 274.377, 989 | "oil": 5.564, 990 | "balance": 8.171 991 | }, 992 | { 993 | "name": "Denmark", 994 | "year": 2007, 995 | "continent": "Europe", 996 | "form": "Constitutional monarchy", 997 | "gdp": 311.417, 998 | "oil": 5.535, 999 | "balance": 4.234 1000 | }, 1001 | { 1002 | "name": "Denmark", 1003 | "year": 2008, 1004 | "continent": "Europe", 1005 | "form": "Constitutional monarchy", 1006 | "gdp": 343.881, 1007 | "oil": 9.129, 1008 | "balance": 9.91 1009 | }, 1010 | { 1011 | "name": "Denmark", 1012 | "year": 2009, 1013 | "continent": "Europe", 1014 | "form": "Constitutional monarchy", 1015 | "gdp": 311.114, 1016 | "oil": 5.84, 1017 | "balance": 10.191 1018 | }, 1019 | { 1020 | "name": "Denmark", 1021 | "year": 2010, 1022 | "continent": "Europe", 1023 | "form": "Constitutional monarchy", 1024 | "gdp": 311.989, 1025 | "oil": 9.129, 1026 | "balance": 17.221 1027 | }, 1028 | { 1029 | "name": "Denmark", 1030 | "year": 2011, 1031 | "continent": "Europe", 1032 | "form": "Constitutional monarchy", 1033 | "gdp": 332.019, 1034 | "oil": 9.129, 1035 | "balance": 22.178 1036 | }, 1037 | { 1038 | "name": "Denmark", 1039 | "year": 2012, 1040 | "continent": "Europe", 1041 | "form": "Constitutional monarchy", 1042 | "gdp": 309.18, 1043 | "oil": 9.129, 1044 | "balance": 15.498 1045 | }, 1046 | { 1047 | "name": "Denmark", 1048 | "year": 2013, 1049 | "continent": "Europe", 1050 | "form": "Constitutional monarchy", 1051 | "gdp": 308.366, 1052 | "oil": 9.129, 1053 | "balance": 14.081 1054 | }, 1055 | { 1056 | "name": "Egypt", 1057 | "year": 2005, 1058 | "continent": "Africa", 1059 | "form": "Republic", 1060 | "gdp": 89.794, 1061 | "oil": 3.975, 1062 | "balance": 2.91 1063 | }, 1064 | { 1065 | "name": "Egypt", 1066 | "year": 2006, 1067 | "continent": "Africa", 1068 | "form": "Republic", 1069 | "gdp": 107.375, 1070 | "oil": 5.359, 1071 | "balance": 1.752 1072 | }, 1073 | { 1074 | "name": "Egypt", 1075 | "year": 2007, 1076 | "continent": "Africa", 1077 | "form": "Republic", 1078 | "gdp": 130.346, 1079 | "oil": 4.128, 1080 | "balance": 2.269 1081 | }, 1082 | { 1083 | "name": "Egypt", 1084 | "year": 2008, 1085 | "continent": "Africa", 1086 | "form": "Republic", 1087 | "gdp": 162.435, 1088 | "oil": 9.561, 1089 | "balance": 0.888 1090 | }, 1091 | { 1092 | "name": "Egypt", 1093 | "year": 2009, 1094 | "continent": "Africa", 1095 | "form": "Republic", 1096 | "gdp": 188.608, 1097 | "oil": 7.032, 1098 | "balance": -4.424 1099 | }, 1100 | { 1101 | "name": "Egypt", 1102 | "year": 2010, 1103 | "continent": "Africa", 1104 | "form": "Republic", 1105 | "gdp": 218.465, 1106 | "oil": 5.161, 1107 | "balance": -4.318 1108 | }, 1109 | { 1110 | "name": "Egypt", 1111 | "year": 2011, 1112 | "continent": "Africa", 1113 | "form": "Republic", 1114 | "gdp": 235.719, 1115 | "oil": 9.262, 1116 | "balance": -6.088 1117 | }, 1118 | { 1119 | "name": "Egypt", 1120 | "year": 2012, 1121 | "continent": "Africa", 1122 | "form": "Republic", 1123 | "gdp": 255.001, 1124 | "oil": 11.83, 1125 | "balance": -8.668 1126 | }, 1127 | { 1128 | "name": "Egypt", 1129 | "year": 2013, 1130 | "continent": "Africa", 1131 | "form": "Republic", 1132 | "gdp": 275.868, 1133 | "oil": 11.888, 1134 | "balance": -9.001 1135 | }, 1136 | { 1137 | "name": "Finland", 1138 | "year": 2005, 1139 | "continent": "Europe", 1140 | "form": "Republic", 1141 | "gdp": 196.118, 1142 | "oil": 6.103, 1143 | "balance": 6.573 1144 | }, 1145 | { 1146 | "name": "Finland", 1147 | "year": 2006, 1148 | "continent": "Europe", 1149 | "form": "Republic", 1150 | "gdp": 208.143, 1151 | "oil": 8.081, 1152 | "balance": 8.652 1153 | }, 1154 | { 1155 | "name": "Finland", 1156 | "year": 2007, 1157 | "continent": "Europe", 1158 | "form": "Republic", 1159 | "gdp": 246.481, 1160 | "oil": 8.893, 1161 | "balance": 10.51 1162 | }, 1163 | { 1164 | "name": "Finland", 1165 | "year": 2008, 1166 | "continent": "Europe", 1167 | "form": "Republic", 1168 | "gdp": 273.225, 1169 | "oil": 12.173, 1170 | "balance": 7.178 1171 | }, 1172 | { 1173 | "name": "Finland", 1174 | "year": 2009, 1175 | "continent": "Europe", 1176 | "form": "Republic", 1177 | "gdp": 240.004, 1178 | "oil": 7.475, 1179 | "balance": 4.254 1180 | }, 1181 | { 1182 | "name": "Finland", 1183 | "year": 2010, 1184 | "continent": "Europe", 1185 | "form": "Republic", 1186 | "gdp": 237.243, 1187 | "oil": 9.282, 1188 | "balance": 3.415 1189 | }, 1190 | { 1191 | "name": "Finland", 1192 | "year": 2011, 1193 | "continent": "Europe", 1194 | "form": "Republic", 1195 | "gdp": 263.488, 1196 | "oil": 13.975, 1197 | "balance": -3.124 1198 | }, 1199 | { 1200 | "name": "Finland", 1201 | "year": 2012, 1202 | "continent": "Europe", 1203 | "form": "Republic", 1204 | "gdp": 247.189, 1205 | "oil": 14.638, 1206 | "balance": -3.961 1207 | }, 1208 | { 1209 | "name": "Finland", 1210 | "year": 2013, 1211 | "continent": "Europe", 1212 | "form": "Republic", 1213 | "gdp": 252.163, 1214 | "oil": 14.922, 1215 | "balance": -4.238 1216 | }, 1217 | { 1218 | "name": "France", 1219 | "year": 2005, 1220 | "continent": "Europe", 1221 | "form": "Republic", 1222 | "gdp": 2140.207, 1223 | "oil": 33.36, 1224 | "balance": -10.375 1225 | }, 1226 | { 1227 | "name": "France", 1228 | "year": 2006, 1229 | "continent": "Europe", 1230 | "form": "Republic", 1231 | "gdp": 2257.781, 1232 | "oil": 39.873, 1233 | "balance": -12.995 1234 | }, 1235 | { 1236 | "name": "France", 1237 | "year": 2007, 1238 | "continent": "Europe", 1239 | "form": "Republic", 1240 | "gdp": 2586.115, 1241 | "oil": 42.819, 1242 | "balance": -25.931 1243 | }, 1244 | { 1245 | "name": "France", 1246 | "year": 2008, 1247 | "continent": "Europe", 1248 | "form": "Republic", 1249 | "gdp": 2845.119, 1250 | "oil": 59.821, 1251 | "balance": -49.632 1252 | }, 1253 | { 1254 | "name": "France", 1255 | "year": 2009, 1256 | "continent": "Europe", 1257 | "form": "Republic", 1258 | "gdp": 2626.537, 1259 | "oil": 31.79, 1260 | "balance": -35.016 1261 | }, 1262 | { 1263 | "name": "France", 1264 | "year": 2010, 1265 | "continent": "Europe", 1266 | "form": "Republic", 1267 | "gdp": 2570.592, 1268 | "oil": 35.319, 1269 | "balance": -40.042 1270 | }, 1271 | { 1272 | "name": "France", 1273 | "year": 2011, 1274 | "continent": "Europe", 1275 | "form": "Republic", 1276 | "gdp": 2778.085, 1277 | "oil": 46.482, 1278 | "balance": -54.169 1279 | }, 1280 | { 1281 | "name": "France", 1282 | "year": 2012, 1283 | "continent": "Europe", 1284 | "form": "Republic", 1285 | "gdp": 2580.423, 1286 | "oil": 45.772, 1287 | "balance": -44.755 1288 | }, 1289 | { 1290 | "name": "France", 1291 | "year": 2013, 1292 | "continent": "Europe", 1293 | "form": "Republic", 1294 | "gdp": 2565.622, 1295 | "oil": 43.312, 1296 | "balance": -43.327 1297 | }, 1298 | { 1299 | "name": "Georgia", 1300 | "year": 2005, 1301 | "continent": "Europe", 1302 | "form": "Republic", 1303 | "gdp": 6.411, 1304 | "oil": 0.336, 1305 | "balance": -0.709 1306 | }, 1307 | { 1308 | "name": "Georgia", 1309 | "year": 2006, 1310 | "continent": "Europe", 1311 | "form": "Republic", 1312 | "gdp": 7.768, 1313 | "oil": 0.443, 1314 | "balance": -1.176 1315 | }, 1316 | { 1317 | "name": "Georgia", 1318 | "year": 2007, 1319 | "continent": "Europe", 1320 | "form": "Republic", 1321 | "gdp": 10.224, 1322 | "oil": 0.556, 1323 | "balance": -2.009 1324 | }, 1325 | { 1326 | "name": "Georgia", 1327 | "year": 2008, 1328 | "continent": "Europe", 1329 | "form": "Republic", 1330 | "gdp": 12.87, 1331 | "oil": 0.762, 1332 | "balance": -2.824 1333 | }, 1334 | { 1335 | "name": "Georgia", 1336 | "year": 2009, 1337 | "continent": "Europe", 1338 | "form": "Republic", 1339 | "gdp": 10.768, 1340 | "oil": 0.555, 1341 | "balance": -1.144 1342 | }, 1343 | { 1344 | "name": "Georgia", 1345 | "year": 2010, 1346 | "continent": "Europe", 1347 | "form": "Republic", 1348 | "gdp": 11.638, 1349 | "oil": 0.695, 1350 | "balance": -1.194 1351 | }, 1352 | { 1353 | "name": "Georgia", 1354 | "year": 2011, 1355 | "continent": "Europe", 1356 | "form": "Republic", 1357 | "gdp": 14.347, 1358 | "oil": 0.911, 1359 | "balance": -1.688 1360 | }, 1361 | { 1362 | "name": "Georgia", 1363 | "year": 2012, 1364 | "continent": "Europe", 1365 | "form": "Republic", 1366 | "gdp": 15.803, 1367 | "oil": 0.982, 1368 | "balance": -1.989 1369 | }, 1370 | { 1371 | "name": "Georgia", 1372 | "year": 2013, 1373 | "continent": "Europe", 1374 | "form": "Republic", 1375 | "gdp": 17.284, 1376 | "oil": 0.961, 1377 | "balance": -1.929 1378 | }, 1379 | { 1380 | "name": "Germany", 1381 | "year": 2005, 1382 | "continent": "Europe", 1383 | "form": "Republic", 1384 | "gdp": 2771.057, 1385 | "oil": 65.757, 1386 | "balance": 140.261 1387 | }, 1388 | { 1389 | "name": "Germany", 1390 | "year": 2006, 1391 | "continent": "Europe", 1392 | "form": "Republic", 1393 | "gdp": 2905.445, 1394 | "oil": 83.027, 1395 | "balance": 181.741 1396 | }, 1397 | { 1398 | "name": "Germany", 1399 | "year": 2007, 1400 | "continent": "Europe", 1401 | "form": "Republic", 1402 | "gdp": 3328.589, 1403 | "oil": 83.998, 1404 | "balance": 247.967 1405 | }, 1406 | { 1407 | "name": "Germany", 1408 | "year": 2008, 1409 | "continent": "Europe", 1410 | "form": "Republic", 1411 | "gdp": 3640.727, 1412 | "oil": 122.258, 1413 | "balance": 226.105 1414 | }, 1415 | { 1416 | "name": "Germany", 1417 | "year": 2009, 1418 | "continent": "Europe", 1419 | "form": "Republic", 1420 | "gdp": 3307.197, 1421 | "oil": 76.544, 1422 | "balance": 195.769 1423 | }, 1424 | { 1425 | "name": "Germany", 1426 | "year": 2010, 1427 | "continent": "Europe", 1428 | "form": "Republic", 1429 | "gdp": 3312.193, 1430 | "oil": 83.933, 1431 | "balance": 199.92 1432 | }, 1433 | { 1434 | "name": "Germany", 1435 | "year": 2011, 1436 | "continent": "Europe", 1437 | "form": "Republic", 1438 | "gdp": 3607.364, 1439 | "oil": 93.607, 1440 | "balance": 203.929 1441 | }, 1442 | { 1443 | "name": "Germany", 1444 | "year": 2012, 1445 | "continent": "Europe", 1446 | "form": "Republic", 1447 | "gdp": 3366.651, 1448 | "oil": 100.869, 1449 | "balance": 182.827 1450 | }, 1451 | { 1452 | "name": "Germany", 1453 | "year": 2013, 1454 | "continent": "Europe", 1455 | "form": "Republic", 1456 | "gdp": 3373.327, 1457 | "oil": 102.996, 1458 | "balance": 157.823 1459 | }, 1460 | { 1461 | "name": "Greece", 1462 | "year": 2005, 1463 | "continent": "Europe", 1464 | "form": "Republic", 1465 | "gdp": 240.493, 1466 | "oil": 11.071, 1467 | "balance": -18.366 1468 | }, 1469 | { 1470 | "name": "Greece", 1471 | "year": 2006, 1472 | "continent": "Europe", 1473 | "form": "Republic", 1474 | "gdp": 262.296, 1475 | "oil": 14.692, 1476 | "balance": -29.832 1477 | }, 1478 | { 1479 | "name": "Greece", 1480 | "year": 2007, 1481 | "continent": "Europe", 1482 | "form": "Republic", 1483 | "gdp": 305.338, 1484 | "oil": 16.8, 1485 | "balance": -44.686 1486 | }, 1487 | { 1488 | "name": "Greece", 1489 | "year": 2008, 1490 | "continent": "Europe", 1491 | "form": "Republic", 1492 | "gdp": 342.792, 1493 | "oil": 24.149, 1494 | "balance": -51.212 1495 | }, 1496 | { 1497 | "name": "Greece", 1498 | "year": 2009, 1499 | "continent": "Europe", 1500 | "form": "Republic", 1501 | "gdp": 322.629, 1502 | "oil": 14.847, 1503 | "balance": -35.96 1504 | }, 1505 | { 1506 | "name": "Greece", 1507 | "year": 2010, 1508 | "continent": "Europe", 1509 | "form": "Republic", 1510 | "gdp": 301.627, 1511 | "oil": 18.015, 1512 | "balance": -30.486 1513 | }, 1514 | { 1515 | "name": "Greece", 1516 | "year": 2011, 1517 | "continent": "Europe", 1518 | "form": "Republic", 1519 | "gdp": 299.275, 1520 | "oil": 24.092, 1521 | "balance": -29.353 1522 | }, 1523 | { 1524 | "name": "Greece", 1525 | "year": 2012, 1526 | "continent": "Europe", 1527 | "form": "Republic", 1528 | "gdp": 254.978, 1529 | "oil": 23.448, 1530 | "balance": -14.821 1531 | }, 1532 | { 1533 | "name": "Greece", 1534 | "year": 2013, 1535 | "continent": "Europe", 1536 | "form": "Republic", 1537 | "gdp": 235.906, 1538 | "oil": 22.111, 1539 | "balance": -6.861 1540 | }, 1541 | { 1542 | "name": "India", 1543 | "year": 2005, 1544 | "continent": "Asia", 1545 | "form": "Republic", 1546 | "gdp": 808.744, 1547 | "oil": 39.928, 1548 | "balance": -10.285 1549 | }, 1550 | { 1551 | "name": "India", 1552 | "year": 2006, 1553 | "continent": "Asia", 1554 | "form": "Republic", 1555 | "gdp": 908.57, 1556 | "oil": 56.284, 1557 | "balance": -9.299 1558 | }, 1559 | { 1560 | "name": "India", 1561 | "year": 2007, 1562 | "continent": "Asia", 1563 | "form": "Republic", 1564 | "gdp": 1152.576, 1565 | "oil": 67.565, 1566 | "balance": -8.077 1567 | }, 1568 | { 1569 | "name": "India", 1570 | "year": 2008, 1571 | "continent": "Asia", 1572 | "form": "Republic", 1573 | "gdp": 1262.523, 1574 | "oil": 106.399, 1575 | "balance": -30.974 1576 | }, 1577 | { 1578 | "name": "India", 1579 | "year": 2009, 1580 | "continent": "Asia", 1581 | "form": "Republic", 1582 | "gdp": 1266.249, 1583 | "oil": 74.229, 1584 | "balance": -25.912 1585 | }, 1586 | { 1587 | "name": "India", 1588 | "year": 2010, 1589 | "continent": "Asia", 1590 | "form": "Republic", 1591 | "gdp": 1630.472, 1592 | "oil": 100.686, 1593 | "balance": -52.224 1594 | }, 1595 | { 1596 | "name": "India", 1597 | "year": 2011, 1598 | "continent": "Asia", 1599 | "form": "Republic", 1600 | "gdp": 1826.811, 1601 | "oil": 141.755, 1602 | "balance": -62.756 1603 | }, 1604 | { 1605 | "name": "India", 1606 | "year": 2012, 1607 | "continent": "Asia", 1608 | "form": "Republic", 1609 | "gdp": 1946.765, 1610 | "oil": 164.447, 1611 | "balance": -74.542 1612 | }, 1613 | { 1614 | "name": "India", 1615 | "year": 2013, 1616 | "continent": "Asia", 1617 | "form": "Republic", 1618 | "gdp": 2117.279, 1619 | "oil": 177.548, 1620 | "balance": -69.07 1621 | }, 1622 | { 1623 | "name": "Indonesia", 1624 | "year": 2005, 1625 | "continent": "Asia", 1626 | "form": "Republic", 1627 | "gdp": 285.776, 1628 | "oil": 16.018, 1629 | "balance": 0.277 1630 | }, 1631 | { 1632 | "name": "Indonesia", 1633 | "year": 2006, 1634 | "continent": "Asia", 1635 | "form": "Republic", 1636 | "gdp": 364.352, 1637 | "oil": 16.146, 1638 | "balance": 10.86 1639 | }, 1640 | { 1641 | "name": "Indonesia", 1642 | "year": 2007, 1643 | "continent": "Asia", 1644 | "form": "Republic", 1645 | "gdp": 432.17, 1646 | "oil": 19.172, 1647 | "balance": 10.492 1648 | }, 1649 | { 1650 | "name": "Indonesia", 1651 | "year": 2008, 1652 | "continent": "Asia", 1653 | "form": "Republic", 1654 | "gdp": 510.312, 1655 | "oil": 23.749, 1656 | "balance": 0.126 1657 | }, 1658 | { 1659 | "name": "Indonesia", 1660 | "year": 2009, 1661 | "continent": "Asia", 1662 | "form": "Republic", 1663 | "gdp": 538.764, 1664 | "oil": 14.806, 1665 | "balance": 10.628 1666 | }, 1667 | { 1668 | "name": "Indonesia", 1669 | "year": 2010, 1670 | "continent": "Asia", 1671 | "form": "Republic", 1672 | "gdp": 708.371, 1673 | "oil": 24.344, 1674 | "balance": 5.144 1675 | }, 1676 | { 1677 | "name": "Indonesia", 1678 | "year": 2011, 1679 | "continent": "Asia", 1680 | "form": "Republic", 1681 | "gdp": 846.45, 1682 | "oil": 37.102, 1683 | "balance": 1.719 1684 | }, 1685 | { 1686 | "name": "Indonesia", 1687 | "year": 2012, 1688 | "continent": "Asia", 1689 | "form": "Republic", 1690 | "gdp": 894.854, 1691 | "oil": 40.906, 1692 | "balance": -18.858 1693 | }, 1694 | { 1695 | "name": "Indonesia", 1696 | "year": 2013, 1697 | "continent": "Asia", 1698 | "form": "Republic", 1699 | "gdp": 1006.888, 1700 | "oil": 42.11, 1701 | "balance": -23.986 1702 | }, 1703 | { 1704 | "name": "Kazakhstan", 1705 | "year": 2005, 1706 | "continent": "Asia", 1707 | "form": "Republic", 1708 | "gdp": 57.125, 1709 | "oil": 0.778, 1710 | "balance": -1.056 1711 | }, 1712 | { 1713 | "name": "Kazakhstan", 1714 | "year": 2006, 1715 | "continent": "Asia", 1716 | "form": "Republic", 1717 | "gdp": 81.003, 1718 | "oil": 1.493, 1719 | "balance": -1.999 1720 | }, 1721 | { 1722 | "name": "Kazakhstan", 1723 | "year": 2007, 1724 | "continent": "Asia", 1725 | "form": "Republic", 1726 | "gdp": 103.142, 1727 | "oil": 1.826, 1728 | "balance": -8.322 1729 | }, 1730 | { 1731 | "name": "Kazakhstan", 1732 | "year": 2008, 1733 | "continent": "Asia", 1734 | "form": "Republic", 1735 | "gdp": 135.229, 1736 | "oil": 2.773, 1737 | "balance": 6.326 1738 | }, 1739 | { 1740 | "name": "Kazakhstan", 1741 | "year": 2009, 1742 | "continent": "Asia", 1743 | "form": "Republic", 1744 | "gdp": 115.308, 1745 | "oil": 1.446, 1746 | "balance": -4.114 1747 | }, 1748 | { 1749 | "name": "Kazakhstan", 1750 | "year": 2010, 1751 | "continent": "Asia", 1752 | "form": "Republic", 1753 | "gdp": 148.047, 1754 | "oil": 2.402, 1755 | "balance": 2.409 1756 | }, 1757 | { 1758 | "name": "Kazakhstan", 1759 | "year": 2011, 1760 | "continent": "Asia", 1761 | "form": "Republic", 1762 | "gdp": 186.199, 1763 | "oil": 2.502, 1764 | "balance": 14.11 1765 | }, 1766 | { 1767 | "name": "Kazakhstan", 1768 | "year": 2012, 1769 | "continent": "Asia", 1770 | "form": "Republic", 1771 | "gdp": 200.642, 1772 | "oil": 2.93, 1773 | "balance": 12.39 1774 | }, 1775 | { 1776 | "name": "Kazakhstan", 1777 | "year": 2013, 1778 | "continent": "Asia", 1779 | "form": "Republic", 1780 | "gdp": 220.141, 1781 | "oil": 3.104, 1782 | "balance": 9.974 1783 | }, 1784 | { 1785 | "name": "New Zealand", 1786 | "year": 2005, 1787 | "continent": "Australia", 1788 | "form": "Constitutional monarchy", 1789 | "gdp": 111.569, 1790 | "oil": 2.946, 1791 | "balance": -8.816 1792 | }, 1793 | { 1794 | "name": "New Zealand", 1795 | "year": 2006, 1796 | "continent": "Australia", 1797 | "form": "Constitutional monarchy", 1798 | "gdp": 107.966, 1799 | "oil": 3.641, 1800 | "balance": -8.942 1801 | }, 1802 | { 1803 | "name": "New Zealand", 1804 | "year": 2007, 1805 | "continent": "Australia", 1806 | "form": "Constitutional monarchy", 1807 | "gdp": 131.894, 1808 | "oil": 4.2, 1809 | "balance": -10.721 1810 | }, 1811 | { 1812 | "name": "New Zealand", 1813 | "year": 2008, 1814 | "continent": "Australia", 1815 | "form": "Constitutional monarchy", 1816 | "gdp": 132.335, 1817 | "oil": 5.806, 1818 | "balance": -11.622 1819 | }, 1820 | { 1821 | "name": "New Zealand", 1822 | "year": 2009, 1823 | "continent": "Australia", 1824 | "form": "Constitutional monarchy", 1825 | "gdp": 117.284, 1826 | "oil": 3.51, 1827 | "balance": -3.015 1828 | }, 1829 | { 1830 | "name": "New Zealand", 1831 | "year": 2010, 1832 | "continent": "Australia", 1833 | "form": "Constitutional monarchy", 1834 | "gdp": 140.066, 1835 | "oil": 4.486, 1836 | "balance": -4.849 1837 | }, 1838 | { 1839 | "name": "New Zealand", 1840 | "year": 2011, 1841 | "continent": "Australia", 1842 | "form": "Constitutional monarchy", 1843 | "gdp": 158.869, 1844 | "oil": 6.181, 1845 | "balance": -6.645 1846 | }, 1847 | { 1848 | "name": "New Zealand", 1849 | "year": 2012, 1850 | "continent": "Australia", 1851 | "form": "Constitutional monarchy", 1852 | "gdp": 166.923, 1853 | "oil": 6.736, 1854 | "balance": -8.959 1855 | }, 1856 | { 1857 | "name": "New Zealand", 1858 | "year": 2013, 1859 | "continent": "Australia", 1860 | "form": "Constitutional monarchy", 1861 | "gdp": 174.035, 1862 | "oil": 6.485, 1863 | "balance": -10.21 1864 | }, 1865 | { 1866 | "name": "Russia", 1867 | "year": 2005, 1868 | "continent": "Europe", 1869 | "form": "Republic", 1870 | "gdp": 763.704, 1871 | "oil": 0, 1872 | "balance": 84.443 1873 | }, 1874 | { 1875 | "name": "Russia", 1876 | "year": 2006, 1877 | "continent": "Europe", 1878 | "form": "Republic", 1879 | "gdp": 989.932, 1880 | "oil": 0, 1881 | "balance": 94.34 1882 | }, 1883 | { 1884 | "name": "Russia", 1885 | "year": 2007, 1886 | "continent": "Europe", 1887 | "form": "Republic", 1888 | "gdp": 1299.703, 1889 | "oil": 0, 1890 | "balance": 77.012 1891 | }, 1892 | { 1893 | "name": "Russia", 1894 | "year": 2008, 1895 | "continent": "Europe", 1896 | "form": "Republic", 1897 | "gdp": 1660.846, 1898 | "oil": 0, 1899 | "balance": 103.722 1900 | }, 1901 | { 1902 | "name": "Russia", 1903 | "year": 2009, 1904 | "continent": "Europe", 1905 | "form": "Republic", 1906 | "gdp": 1222.693, 1907 | "oil": 0, 1908 | "balance": 49.518 1909 | }, 1910 | { 1911 | "name": "Russia", 1912 | "year": 2010, 1913 | "continent": "Europe", 1914 | "form": "Republic", 1915 | "gdp": 1487.293, 1916 | "oil": 0, 1917 | "balance": 69.967 1918 | }, 1919 | { 1920 | "name": "Russia", 1921 | "year": 2011, 1922 | "continent": "Europe", 1923 | "form": "Republic", 1924 | "gdp": 1850.401, 1925 | "oil": 0, 1926 | "balance": 98.834 1927 | }, 1928 | { 1929 | "name": "Russia", 1930 | "year": 2012, 1931 | "continent": "Europe", 1932 | "form": "Republic", 1933 | "gdp": 1953.555, 1934 | "oil": 0, 1935 | "balance": 101.693 1936 | }, 1937 | { 1938 | "name": "Russia", 1939 | "year": 2013, 1940 | "continent": "Europe", 1941 | "form": "Republic", 1942 | "gdp": 2109.022, 1943 | "oil": 0, 1944 | "balance": 80.789 1945 | }, 1946 | { 1947 | "name": "Spain", 1948 | "year": 2005, 1949 | "continent": "Europe", 1950 | "form": "Constitutional monarchy", 1951 | "gdp": 1132.763, 1952 | "oil": 40.002, 1953 | "balance": -83.292 1954 | }, 1955 | { 1956 | "name": "Spain", 1957 | "year": 2006, 1958 | "continent": "Europe", 1959 | "form": "Constitutional monarchy", 1960 | "gdp": 1237.501, 1961 | "oil": 51.127, 1962 | "balance": -110.889 1963 | }, 1964 | { 1965 | "name": "Spain", 1966 | "year": 2007, 1967 | "continent": "Europe", 1968 | "form": "Constitutional monarchy", 1969 | "gdp": 1443.5, 1970 | "oil": 57.276, 1971 | "balance": -144.28 1972 | }, 1973 | { 1974 | "name": "Spain", 1975 | "year": 2008, 1976 | "continent": "Europe", 1977 | "form": "Constitutional monarchy", 1978 | "gdp": 1600.913, 1979 | "oil": 83.857, 1980 | "balance": -154.055 1981 | }, 1982 | { 1983 | "name": "Spain", 1984 | "year": 2009, 1985 | "continent": "Europe", 1986 | "form": "Constitutional monarchy", 1987 | "gdp": 1459.735, 1988 | "oil": 47.657, 1989 | "balance": -70.392 1990 | }, 1991 | { 1992 | "name": "Spain", 1993 | "year": 2010, 1994 | "continent": "Europe", 1995 | "form": "Constitutional monarchy", 1996 | "gdp": 1391.757, 1997 | "oil": 58.939, 1998 | "balance": -62.928 1999 | }, 2000 | { 2001 | "name": "Spain", 2002 | "year": 2011, 2003 | "continent": "Europe", 2004 | "form": "Constitutional monarchy", 2005 | "gdp": 1479.56, 2006 | "oil": 78.276, 2007 | "balance": -52.174 2008 | }, 2009 | { 2010 | "name": "Spain", 2011 | "year": 2012, 2012 | "continent": "Europe", 2013 | "form": "Constitutional monarchy", 2014 | "gdp": 1340.266, 2015 | "oil": 77.477, 2016 | "balance": -26.447 2017 | }, 2018 | { 2019 | "name": "Spain", 2020 | "year": 2013, 2021 | "continent": "Europe", 2022 | "form": "Constitutional monarchy", 2023 | "gdp": 1311.122, 2024 | "oil": 71.663, 2025 | "balance": -1.945 2026 | }, 2027 | { 2028 | "name": "Switzerland", 2029 | "year": 2005, 2030 | "continent": "Europe", 2031 | "form": "Republic", 2032 | "gdp": 384.755, 2033 | "oil": 11.194, 2034 | "balance": 52.444 2035 | }, 2036 | { 2037 | "name": "Switzerland", 2038 | "year": 2006, 2039 | "continent": "Europe", 2040 | "form": "Republic", 2041 | "gdp": 405.183, 2042 | "oil": 13.986, 2043 | "balance": 58.153 2044 | }, 2045 | { 2046 | "name": "Switzerland", 2047 | "year": 2007, 2048 | "continent": "Europe", 2049 | "form": "Republic", 2050 | "gdp": 450.53, 2051 | "oil": 13.184, 2052 | "balance": 38.837 2053 | }, 2054 | { 2055 | "name": "Switzerland", 2056 | "year": 2008, 2057 | "continent": "Europe", 2058 | "form": "Republic", 2059 | "gdp": 524.289, 2060 | "oil": 17.467, 2061 | "balance": 10.934 2062 | }, 2063 | { 2064 | "name": "Switzerland", 2065 | "year": 2009, 2066 | "continent": "Europe", 2067 | "form": "Republic", 2068 | "gdp": 509.466, 2069 | "oil": 22, 2070 | "balance": 53.758 2071 | }, 2072 | { 2073 | "name": "Switzerland", 2074 | "year": 2010, 2075 | "continent": "Europe", 2076 | "form": "Republic", 2077 | "gdp": 550.686, 2078 | "oil": 22.66, 2079 | "balance": 78.566 2080 | }, 2081 | { 2082 | "name": "Switzerland", 2083 | "year": 2011, 2084 | "continent": "Europe", 2085 | "form": "Republic", 2086 | "gdp": 660.761, 2087 | "oil": 23.34, 2088 | "balance": 69.538 2089 | }, 2090 | { 2091 | "name": "Switzerland", 2092 | "year": 2012, 2093 | "continent": "Europe", 2094 | "form": "Republic", 2095 | "gdp": 622.855, 2096 | "oil": 24.04, 2097 | "balance": 62.613 2098 | }, 2099 | { 2100 | "name": "Switzerland", 2101 | "year": 2013, 2102 | "continent": "Europe", 2103 | "form": "Republic", 2104 | "gdp": 616.595, 2105 | "oil": 24.761, 2106 | "balance": 61.532 2107 | }, 2108 | { 2109 | "name": "Ukraine", 2110 | "year": 2005, 2111 | "continent": "Europe", 2112 | "form": "Republic", 2113 | "gdp": 86.183, 2114 | "oil": 5.732, 2115 | "balance": 2.531 2116 | }, 2117 | { 2118 | "name": "Ukraine", 2119 | "year": 2006, 2120 | "continent": "Europe", 2121 | "form": "Republic", 2122 | "gdp": 107.753, 2123 | "oil": 6.843, 2124 | "balance": -1.617 2125 | }, 2126 | { 2127 | "name": "Ukraine", 2128 | "year": 2007, 2129 | "continent": "Europe", 2130 | "form": "Republic", 2131 | "gdp": 142.719, 2132 | "oil": 7.58, 2133 | "balance": -5.272 2134 | }, 2135 | { 2136 | "name": "Ukraine", 2137 | "year": 2008, 2138 | "continent": "Europe", 2139 | "form": "Republic", 2140 | "gdp": 180.116, 2141 | "oil": 10.466, 2142 | "balance": -12.763 2143 | }, 2144 | { 2145 | "name": "Ukraine", 2146 | "year": 2009, 2147 | "continent": "Europe", 2148 | "form": "Republic", 2149 | "gdp": 117.227, 2150 | "oil": 5.678, 2151 | "balance": -1.732 2152 | }, 2153 | { 2154 | "name": "Ukraine", 2155 | "year": 2010, 2156 | "continent": "Europe", 2157 | "form": "Republic", 2158 | "gdp": 136.417, 2159 | "oil": 8.076, 2160 | "balance": -3.018 2161 | }, 2162 | { 2163 | "name": "Ukraine", 2164 | "year": 2011, 2165 | "continent": "Europe", 2166 | "form": "Republic", 2167 | "gdp": 165.245, 2168 | "oil": 11.177, 2169 | "balance": -9.006 2170 | }, 2171 | { 2172 | "name": "Ukraine", 2173 | "year": 2012, 2174 | "continent": "Europe", 2175 | "form": "Republic", 2176 | "gdp": 180.174, 2177 | "oil": 11.336, 2178 | "balance": -10.118 2179 | }, 2180 | { 2181 | "name": "Ukraine", 2182 | "year": 2013, 2183 | "continent": "Europe", 2184 | "form": "Republic", 2185 | "gdp": 195.353, 2186 | "oil": 11.102, 2187 | "balance": -12.968 2188 | }, 2189 | { 2190 | "name": "United Kingdom", 2191 | "year": 2005, 2192 | "continent": "Europe", 2193 | "form": "Constitutional monarchy", 2194 | "gdp": 2298.638, 2195 | "oil": 40.167, 2196 | "balance": -47.199 2197 | }, 2198 | { 2199 | "name": "United Kingdom", 2200 | "year": 2006, 2201 | "continent": "Europe", 2202 | "form": "Constitutional monarchy", 2203 | "gdp": 2456.515, 2204 | "oil": 48.141, 2205 | "balance": -72.043 2206 | }, 2207 | { 2208 | "name": "United Kingdom", 2209 | "year": 2007, 2210 | "continent": "Europe", 2211 | "form": "Constitutional monarchy", 2212 | "gdp": 2826.609, 2213 | "oil": 54.344, 2214 | "balance": -64.372 2215 | }, 2216 | { 2217 | "name": "United Kingdom", 2218 | "year": 2008, 2219 | "continent": "Europe", 2220 | "form": "Constitutional monarchy", 2221 | "gdp": 2670.397, 2222 | "oil": 71.218, 2223 | "balance": -26.711 2224 | }, 2225 | { 2226 | "name": "United Kingdom", 2227 | "year": 2009, 2228 | "continent": "Europe", 2229 | "form": "Constitutional monarchy", 2230 | "gdp": 2193.184, 2231 | "oil": 43.863, 2232 | "balance": -27.749 2233 | }, 2234 | { 2235 | "name": "United Kingdom", 2236 | "year": 2010, 2237 | "continent": "Europe", 2238 | "form": "Constitutional monarchy", 2239 | "gdp": 2267.482, 2240 | "oil": 55.734, 2241 | "balance": -57.645 2242 | }, 2243 | { 2244 | "name": "United Kingdom", 2245 | "year": 2011, 2246 | "continent": "Europe", 2247 | "form": "Constitutional monarchy", 2248 | "gdp": 2431.31, 2249 | "oil": 79.362, 2250 | "balance": -46.578 2251 | }, 2252 | { 2253 | "name": "United Kingdom", 2254 | "year": 2012, 2255 | "continent": "Europe", 2256 | "form": "Constitutional monarchy", 2257 | "gdp": 2433.779, 2258 | "oil": 78.658, 2259 | "balance": -80.589 2260 | }, 2261 | { 2262 | "name": "United Kingdom", 2263 | "year": 2013, 2264 | "continent": "Europe", 2265 | "form": "Constitutional monarchy", 2266 | "gdp": 2532.045, 2267 | "oil": 80.259, 2268 | "balance": -68.57 2269 | }, 2270 | { 2271 | "name": "United States", 2272 | "year": 2005, 2273 | "continent": "North America", 2274 | "form": "Republic", 2275 | "gdp": 12622.95, 2276 | "oil": 251.85, 2277 | "balance": -745.773 2278 | }, 2279 | { 2280 | "name": "United States", 2281 | "year": 2006, 2282 | "continent": "North America", 2283 | "form": "Republic", 2284 | "gdp": 13377.2, 2285 | "oil": 302.45, 2286 | "balance": -800.621 2287 | }, 2288 | { 2289 | "name": "United States", 2290 | "year": 2007, 2291 | "continent": "North America", 2292 | "form": "Republic", 2293 | "gdp": 14028.675, 2294 | "oil": 346.7, 2295 | "balance": -710.304 2296 | }, 2297 | { 2298 | "name": "United States", 2299 | "year": 2008, 2300 | "continent": "North America", 2301 | "form": "Republic", 2302 | "gdp": 14291.55, 2303 | "oil": 476.125, 2304 | "balance": -677.134 2305 | }, 2306 | { 2307 | "name": "United States", 2308 | "year": 2009, 2309 | "continent": "North America", 2310 | "form": "Republic", 2311 | "gdp": 13973.65, 2312 | "oil": 267.7, 2313 | "balance": -381.898 2314 | }, 2315 | { 2316 | "name": "United States", 2317 | "year": 2010, 2318 | "continent": "North America", 2319 | "form": "Republic", 2320 | "gdp": 14498.925, 2321 | "oil": 353.75, 2322 | "balance": -441.952 2323 | }, 2324 | { 2325 | "name": "United States", 2326 | "year": 2011, 2327 | "continent": "North America", 2328 | "form": "Republic", 2329 | "gdp": 15075.675, 2330 | "oil": 462.3, 2331 | "balance": -465.928 2332 | }, 2333 | { 2334 | "name": "United States", 2335 | "year": 2012, 2336 | "continent": "North America", 2337 | "form": "Republic", 2338 | "gdp": 15653.366, 2339 | "oil": 458.457, 2340 | "balance": -486.525 2341 | }, 2342 | { 2343 | "name": "United States", 2344 | "year": 2013, 2345 | "continent": "North America", 2346 | "form": "Republic", 2347 | "gdp": 16197.956, 2348 | "oil": 464.907, 2349 | "balance": -499.25 2350 | }, 2351 | { 2352 | "name": "Vietnam", 2353 | "year": 2005, 2354 | "continent": "Asia", 2355 | "form": "Republic", 2356 | "gdp": 52.931, 2357 | "oil": 4.716, 2358 | "balance": -0.56 2359 | }, 2360 | { 2361 | "name": "Vietnam", 2362 | "year": 2006, 2363 | "continent": "Asia", 2364 | "form": "Republic", 2365 | "gdp": 60.933, 2366 | "oil": 5.665, 2367 | "balance": -0.164 2368 | }, 2369 | { 2370 | "name": "Vietnam", 2371 | "year": 2007, 2372 | "continent": "Asia", 2373 | "form": "Republic", 2374 | "gdp": 71.112, 2375 | "oil": 7.248, 2376 | "balance": -6.992 2377 | }, 2378 | { 2379 | "name": "Vietnam", 2380 | "year": 2008, 2381 | "continent": "Asia", 2382 | "form": "Republic", 2383 | "gdp": 90.302, 2384 | "oil": 11.286, 2385 | "balance": -10.787 2386 | }, 2387 | { 2388 | "name": "Vietnam", 2389 | "year": 2009, 2390 | "continent": "Asia", 2391 | "form": "Republic", 2392 | "gdp": 93.17, 2393 | "oil": 6.77, 2394 | "balance": -6.116 2395 | }, 2396 | { 2397 | "name": "Vietnam", 2398 | "year": 2010, 2399 | "continent": "Asia", 2400 | "form": "Republic", 2401 | "gdp": 103.575, 2402 | "oil": 6.846, 2403 | "balance": -4.287 2404 | }, 2405 | { 2406 | "name": "Vietnam", 2407 | "year": 2011, 2408 | "continent": "Asia", 2409 | "form": "Republic", 2410 | "gdp": 122.722, 2411 | "oil": 11.154, 2412 | "balance": 0.201 2413 | }, 2414 | { 2415 | "name": "Vietnam", 2416 | "year": 2012, 2417 | "continent": "Asia", 2418 | "form": "Republic", 2419 | "gdp": 137.681, 2420 | "oil": 11.969, 2421 | "balance": 0.457 2422 | }, 2423 | { 2424 | "name": "Vietnam", 2425 | "year": 2013, 2426 | "continent": "Asia", 2427 | "form": "Republic", 2428 | "gdp": 151.876, 2429 | "oil": 12.543, 2430 | "balance": -1.326 2431 | }, 2432 | { 2433 | "name": "Zimbabwe", 2434 | "year": 2005, 2435 | "continent": "Africa", 2436 | "form": "Republic", 2437 | "gdp": 6.101, 2438 | "oil": 0.428, 2439 | "balance": -0.627 2440 | }, 2441 | { 2442 | "name": "Zimbabwe", 2443 | "year": 2006, 2444 | "continent": "Africa", 2445 | "form": "Republic", 2446 | "gdp": 5.776, 2447 | "oil": 0.447, 2448 | "balance": -0.464 2449 | }, 2450 | { 2451 | "name": "Zimbabwe", 2452 | "year": 2007, 2453 | "continent": "Africa", 2454 | "form": "Republic", 2455 | "gdp": 5.631, 2456 | "oil": 0.471, 2457 | "balance": -0.375 2458 | }, 2459 | { 2460 | "name": "Zimbabwe", 2461 | "year": 2008, 2462 | "continent": "Africa", 2463 | "form": "Republic", 2464 | "gdp": 4.681, 2465 | "oil": 0.53, 2466 | "balance": -1.01 2467 | }, 2468 | { 2469 | "name": "Zimbabwe", 2470 | "year": 2009, 2471 | "continent": "Africa", 2472 | "form": "Republic", 2473 | "gdp": 6.133, 2474 | "oil": 0.568, 2475 | "balance": -1.359 2476 | }, 2477 | { 2478 | "name": "Zimbabwe", 2479 | "year": 2010, 2480 | "continent": "Africa", 2481 | "form": "Republic", 2482 | "gdp": 7.433, 2483 | "oil": 0.945, 2484 | "balance": -2.141 2485 | }, 2486 | { 2487 | "name": "Zimbabwe", 2488 | "year": 2011, 2489 | "continent": "Africa", 2490 | "form": "Republic", 2491 | "gdp": 9.458, 2492 | "oil": 1.571, 2493 | "balance": -3.427 2494 | }, 2495 | { 2496 | "name": "Zimbabwe", 2497 | "year": 2012, 2498 | "continent": "Africa", 2499 | "form": "Republic", 2500 | "gdp": 10.796, 2501 | "oil": 1.893, 2502 | "balance": -2.199 2503 | }, 2504 | { 2505 | "name": "Zimbabwe", 2506 | "year": 2013, 2507 | "continent": "Africa", 2508 | "form": "Republic", 2509 | "gdp": 12.293, 2510 | "oil": 1.927, 2511 | "balance": -2.464 2512 | } 2513 | ]; -------------------------------------------------------------------------------- /sources/models/positions.js: -------------------------------------------------------------------------------- 1 | export function getPositions(){ 2 | return positions; 3 | } 4 | 5 | const positions = [ 6 | { id:"$empty", value:"-- Not selected --", $empty:true }, 7 | { id:"1", value:"Chief Scientific Officer", color:"#8664C6" }, 8 | { id:"2", value:"Chief Technology Officer", color:"#1CA1C1" }, 9 | { id:"3", value:"Chief Executive Officer", color:"#F8643F" } 10 | ]; 11 | -------------------------------------------------------------------------------- /sources/models/progress.js: -------------------------------------------------------------------------------- 1 | const data = [{"id":1,"week":1,"tasks":29},{"id":2,"week":3,"tasks":45},{"id":3,"week":7,"tasks":56},{"id":4,"week":9,"tasks":56},{"id":5,"week":11,"tasks":62},{"id":6,"week":14,"tasks":86},{"id":7,"week":18,"tasks":73},{"id":8,"week":22,"tasks":58},{"id":9,"week":28,"tasks":50},{"id":10,"week":31,"tasks":25},{"id":11,"week":35,"tasks":68},{"id":12,"week":39,"tasks":95},{"id":13,"week":45,"tasks":87},{"id":14,"week":47,"tasks":58},{"id":15,"week":49,"tasks":70},{"id":16,"week":52,"tasks":80}]; 2 | 3 | export function getProgress(){ 4 | return data; 5 | } -------------------------------------------------------------------------------- /sources/models/progressch.js: -------------------------------------------------------------------------------- 1 | export function shuffle(dataA) { 2 | let a = webix.copy(dataA || data); 3 | for (let i = a.length - 1; i > 0; i--) { 4 | const j = Math.floor(Math.random() * (i + 1)); 5 | [a[i], a[j]] = [a[j], a[i]]; 6 | } 7 | return a; 8 | } 9 | 10 | const data = [ 11 | { id:1, year:1, a:10, b:50 }, 12 | { id:2, year:2, a:15, b:60 }, 13 | { id:3, year:3, a:7, b:53 }, 14 | { id:4, year:4, a:13, b:70 }, 15 | { id:5, year:5, a:16, b:67 }, 16 | { id:6, year:6, a:9, b:56 }, 17 | { id:7, year:7, a:9, b:60 }, 18 | { id:8, year:8, a:12, b:67 }, 19 | { id:9, year:9, a:16, b:70 }, 20 | { id:10, year:10, a:20, b:75 }, 21 | { id:11, year:11, a:17, b:70 }, 22 | { id:12, year:12, a:29, b:89 }, 23 | { id:13, year:13, a:33, b:94 }, 24 | { id:14, year:14, a:40, b:91 }, 25 | { id:15, year:15, a:35, b:85 }, 26 | { id:16, year:16, a:33, b:80 }, 27 | { id:17, year:17, a:45, b:73 }, 28 | { id:18, year:18, a:56, b:78 }, 29 | { id:19, year:19, a:58, b:81 }, 30 | { id:20, year:20, a:45, b:76 }, 31 | { id:21, year:21, a:23, b:65 }, 32 | { id:22, year:22, a:43, b:67 }, 33 | { id:23, year:23, a:56, b:73 }, 34 | { id:24, year:24, a:34, b:64 }, 35 | { id:25, year:25, a:56, b:69 }, 36 | { id:26, year:26, a:34, b:56 }, 37 | { id:27, year:27, a:30, b:51 }, 38 | { id:28, year:28, a:34, b:59 }, 39 | { id:29, year:29, a:56, b:63 }, 40 | { id:30, year:30, a:60, b:69 }, 41 | { id:31, year:31, a:64, b:76 }, 42 | { id:32, year:32, a:70, b:80 } 43 | ]; 44 | export function getProgress(){ 45 | return data; 46 | } -------------------------------------------------------------------------------- /sources/models/projects.js: -------------------------------------------------------------------------------- 1 | export function getProjects(){ 2 | return projects; 3 | } 4 | 5 | const projects = [ 6 | { tasks17:"54", tasks18:"78", project:"80" }, 7 | { tasks18:"54", tasks17:"34", project:"70" }, 8 | { tasks17:"84", tasks18:"50", project:"60" }, 9 | { tasks17:"47", tasks18:"73", project:"50" }, 10 | { tasks17:"64", tasks18:"53", project:"40" }, 11 | { tasks17:"45", tasks18:"73", project:"30" }, 12 | ]; -------------------------------------------------------------------------------- /sources/models/projectsd.js: -------------------------------------------------------------------------------- 1 | import { shuffle } from "models/progressch"; 2 | 3 | const data = [ 4 | { value:"Prepare finance report", checked:true }, 5 | { value:"Solex project strategy meeting", checked:0 }, 6 | { value:"WestEurope partners call", checked:0 }, 7 | { value:"Prepare presentation for summer conference", checked:0 }, 8 | { value:"Check messages", checked:true }, 9 | { value:"Market research analysis", checked:true }, 10 | { value:"Prepare presentation for spring conference", checked:0 }, 11 | { value:"Discussing new theme for website", checked:true }, 12 | { value:"WestEurope partners call", checked:true }, 13 | { value:"Scroll task", checked:true } 14 | ]; 15 | 16 | export function getProjects(){ 17 | return shuffle(data); 18 | } -------------------------------------------------------------------------------- /sources/models/reviews.js: -------------------------------------------------------------------------------- 1 | export function getReviews(){ 2 | return data; 3 | } 4 | 5 | var dateFormat = webix.Date.strToDate("%Y-%m-%d"); 6 | 7 | const data = new webix.DataCollection({ 8 | data:[ 9 | { id:1, mark:1, photo:"whitten", name:"Claire Whitten", stars:5, date:"2019-01-23", text:"Morgan always completes any assignment on time and to a high standard. No absences without valid reason in 6 months. Polite, courteous, respectful and charming at all times and in all situations, without being obsequious.", tag:"New" }, 10 | { id:2, mark:0, photo:"sho", name:"Danielle Sho", stars:5, date:"2019-01-19", text:"Unfailingly courteous even when dealing with a difficult person or situation. Morgan has outstanding artistic or craft skills, bringing creativity and originality to the task.", tag:"Pending" }, 11 | { id:3, mark:0, photo:"ilyushin", name:"Mikhaila Ilyushin", stars:5, date:"2019-01-12", text:"Has a natural flair for jobs involving the use of the hands or hand-tools. Able to cope expertly with intricate detail. Morgan pays great attention to detail. She always presented work properly checked and completely free of error.", tag:"New" }, 12 | { id:4, mark:1, photo:"yu", name:"Alex Yu", stars:5, date:"2019-01-9", text:"Aiming for a top job in the organization. She sets very high standards, aware that this will bring attention and promotion. Reaches a decision rapidly after taking account of all likely outcomes and estimating the route most likely to bring success.", tag:"Pending" }, 13 | { id:5, mark:0, photo:"winslow", name:"Joan Winslow", stars:5, date:"2019-01-3", text:"Morgan is willing to face physical risks and danger, and appears to do so without fear. Sets an example of bravery that inspires others. Always succeeds in explaining ideas clearly. Others find Morgan easy to understand.", tag:"New" } 14 | ], 15 | scheme:{ 16 | $init:(obj) => { 17 | obj.date = dateFormat(obj.date); 18 | } 19 | } 20 | }); 21 | -------------------------------------------------------------------------------- /sources/models/sheet.js: -------------------------------------------------------------------------------- 1 | const spreadsheet_data = { 2 | "styles": [ 3 | ["top","#FFEFEF;#6E6EFF;center;'PT Sans', Tahoma;17px;"], 4 | ["subtop","#818181;#EAEAEA;center;'PT Sans', Tahoma;15px;;;bold;top;;"], 5 | ["sales","#818181;;center;'PT Sans', Tahoma;15px;;;bold;top;;"], 6 | ["total","#818181;;right;'PT Sans', Tahoma;15px;;;bold;top;;"], 7 | ["count","#818181;#EAEAEA;center;'PT Sans', Tahoma;15px;;;;top;;"], 8 | ["calc-top","#818181;#EAEAEA;;'PT Sans', Tahoma;15px;;;bold;top;;"], 9 | ["calc-other","#818181;#EAEAEA;;'PT Sans', Tahoma;15px;;;bold;middle;;"], 10 | ["values","#000;#fff;right;'PT Sans', Tahoma;15px;;;;top;;;price"] 11 | ], 12 | "sizes": [ 13 | [0,1,125], 14 | [0,3,137], 15 | [0,4,137], 16 | [0,5,137] 17 | ], 18 | "data": [ 19 | [1,1,"Report - July 2016","top"], 20 | [2,1,"Region","subtop"], 21 | [2,2,"Country","subtop"], 22 | [2,3,"Sales - Group A","sales"], 23 | [2,4,"Sales - Group B","sales"], 24 | [2,5,"Total","total"], 25 | [3,1,"Europe","count"], 26 | [3,2,"Germany","count"], 27 | [3,3,"188400","values"], 28 | [3,4,"52000","values"], 29 | [3,5,"=C3+D3","values"], 30 | [4,1,"Europe","count"], 31 | [4,2,"France","count"], 32 | [4,3,"192200","values"], 33 | [4,4,"12000","values"], 34 | [4,5,"=C4+D4","values"], 35 | [5,1,"Europe","count"], 36 | [5,2,"Poland","count"], 37 | [5,3,"68900","values"], 38 | [5,4,"8000","values"], 39 | [5,5,"=C5+D5","values"], 40 | [6,1,"Asia","count"], 41 | [6,2,"Japan","count"], 42 | [6,3,"140000","values"], 43 | [6,4,"14000","values"], 44 | [6,5,"=C6+D6","values"], 45 | [7,1,"Asia","count"], 46 | [7,2,"China","count"], 47 | [7,3,"50000","values"], 48 | [7,4,"4800","values"], 49 | [7,5,"=C7+D7","values"] 50 | ], 51 | "spans": [ 52 | [1,1,5,1] 53 | ] 54 | }; 55 | 56 | export function getSheetData(){ 57 | return spreadsheet_data; 58 | } -------------------------------------------------------------------------------- /sources/models/statistics.js: -------------------------------------------------------------------------------- 1 | export function getStats(){ 2 | return stats; 3 | } 4 | 5 | const stats = [ 6 | {"week":1,"tasks18":25}, 7 | {"week":2,"tasks17":20}, 8 | {"week":4,"tasks18":50}, 9 | {"week":6,"tasks17":25}, 10 | {"week":8,"tasks18":38}, 11 | {"week":10,"tasks17":8}, 12 | {"week":10,"tasks18":40}, 13 | {"week":13,"tasks18":58}, 14 | {"week":15,"tasks17":40}, 15 | {"week":17,"tasks18":59}, 16 | {"week":19,"tasks18":79}, 17 | {"week":20,"tasks17":22}, 18 | {"week":24,"tasks18":25}, 19 | {"week":28,"tasks17":85}, 20 | {"week":31,"tasks18":57}, 21 | {"week":36,"tasks17":68}, 22 | {"week":36,"tasks18":95}, 23 | {"week":40,"tasks17":84}, 24 | {"week":42,"tasks18":33}, 25 | {"week":44,"tasks17":73}, 26 | {"week":46,"tasks18":51}, 27 | {"week":47,"tasks18":29}, 28 | {"week":52,"tasks17":98}, 29 | {"week":52,"tasks18":79} 30 | ]; 31 | -------------------------------------------------------------------------------- /sources/models/stats.js: -------------------------------------------------------------------------------- 1 | export function getStats(){ 2 | return data; 3 | } 4 | 5 | const data = [ 6 | { id:"1", value:"Manufacturing", number:294, type:"all" }, 7 | { id:"2", value:"Wholesale stores", number:335, type:"first" }, 8 | { id:"3", value:"Retail stores", number:422, type:"second" } 9 | ]; 10 | -------------------------------------------------------------------------------- /sources/models/tags.js: -------------------------------------------------------------------------------- 1 | export function getTags(){ 2 | return tags; 3 | } 4 | 5 | const tags = [ 6 | { id:"1", value:"New", color:"#8664C6" }, 7 | { id:"2", value:"Customer", color:"#BCAAE0" }, 8 | { id:"3", value:"Supplier", color:"#1CA1C1" }, 9 | { id:"4", value:"Discount", color:"#5ABBD2" }, 10 | { id:"5", value:"Old Buddy", color:"#FDBF4C" }, 11 | { id:"6", value:"Avid Supporter", color:"#F8643F" } 12 | ]; 13 | -------------------------------------------------------------------------------- /sources/models/useractivity.js: -------------------------------------------------------------------------------- 1 | export function getUserActivity(){ 2 | return users; 3 | } 4 | 5 | const users = [ 6 | { id:"7", country:"Brazil", users:70 }, 7 | { id:"8", country:"Canada", users:80 }, 8 | { id:"9", country:"China", users:90 } 9 | ]; 10 | -------------------------------------------------------------------------------- /sources/styles/app.css: -------------------------------------------------------------------------------- 1 | .webixappstart{ 2 | opacity:0; 3 | } 4 | .webixapp{ 5 | transition: opacity 500ms; 6 | opacity: 1; 7 | } 8 | .logo{ 9 | background:url(webix-logo.svg) 2px -7px no-repeat; 10 | } 11 | .webix_header.webix_dark .webix_template{ 12 | text-align:center; 13 | line-height: 56px; 14 | } 15 | .avatar .mainphoto{ 16 | border-radius:25px; 17 | widows:40px; 18 | height:40px; 19 | position:relative; 20 | top:-4px; 21 | } 22 | .status{ 23 | position:relative; 24 | top:-25px; 25 | left:25px; 26 | font-size:10px !important; 27 | text-shadow: -1px 0 #ffffff, 0 1px #ffffff, 1px 0 #ffffff, 0 -1px #ffffff; 28 | } 29 | /*Dashboard*/ 30 | .currencies_list .webix_list_item{ 31 | line-height: 60px; 32 | } 33 | .currencies_list .icon{ 34 | float:left; 35 | display: inline-block; 36 | width: 48px; 37 | height: 48px; 38 | line-height: 48px; 39 | border-radius: 24px; 40 | text-align: center; 41 | font-size: 24px; 42 | margin-right: 16px; 43 | margin-top: 6px; 44 | } 45 | .currencies_list .value{ 46 | font-size: 16px; 47 | font-weight: 500; 48 | } 49 | .currencies_list .delta{ 50 | font-size: 16px; 51 | font-weight: 500; 52 | float:right; 53 | margin-right: 8px; 54 | } 55 | .currencies_list .delta.red{ 56 | color:#FF5C4C; 57 | } 58 | .currencies_list .delta.green{ 59 | color:#55CD97; 60 | } 61 | .reviews .img{ 62 | float:left; 63 | margin-top:18px; 64 | margin-right:16px; 65 | height:100%; 66 | } 67 | .reviews .img img{ 68 | background-color:red; 69 | border-radius:25px; 70 | height:48px; 71 | width:48px; 72 | } 73 | .reviews .text{ 74 | margin-top:10px; 75 | } 76 | .reviews .text .name{ 77 | font-weight: 500; 78 | display:block; 79 | } 80 | .reviews .text .webix_icon.mdi-bookmark-check, 81 | .reviews .text .webix_icon.mdi-bookmark-plus{ 82 | float:right; 83 | margin-top:4px; 84 | margin-right:4px; 85 | } 86 | .reviews .text .webix_icon.mdi-bookmark-check{ 87 | color: #1CA1C1; 88 | } 89 | .reviews .text .webix_icon.mdi-bookmark-plus{ 90 | color: #94A1B3; 91 | } 92 | .reviews .text .stars{ 93 | width:90px; 94 | margin-left:-4px; 95 | position: relative; 96 | top:-4px; 97 | } 98 | .reviews .text .star{ 99 | margin-right:-3px !important; 100 | font-size:16px !important; 101 | } 102 | .reviews .text .stars .star.gold{ 103 | color:#FDBF4C; 104 | } 105 | .reviews .text .stars .star.grey{ 106 | color:#94A1B3; 107 | } 108 | .reviews .text .date{ 109 | color: #94A1B3; 110 | position: relative; 111 | top:-4px; 112 | margin-left:8px; 113 | } 114 | .reviews .text .message{ 115 | display:block; 116 | max-height:48px; 117 | overflow: hidden; 118 | line-height: 22px; 119 | position: relative; 120 | top:-6px; 121 | } 122 | .reviews .text .tag{ 123 | padding:4px 10px; 124 | border-radius: 100px; 125 | color:#ffffff; 126 | font-weight: 500; 127 | font-size: 12px; 128 | line-height: 20px; 129 | } 130 | .reviews .text .tag.New{ 131 | background: #1CA1C1; 132 | } 133 | .reviews .text .tag.Pending{ 134 | background: #55CD97; 135 | } 136 | .webix_tooltip.review_tooltip{ 137 | width:300px; 138 | } 139 | .stats .title{ 140 | font-weight:500; 141 | font-size: 16px; 142 | line-height: 20px; 143 | display:block; 144 | padding-top:8px; 145 | } 146 | .stats .webix_list_item{ 147 | padding:2px 20px; 148 | } 149 | .progress_bar_element{ 150 | background-color: #F4F5F9; 151 | border-radius: 4px; 152 | width:100%; 153 | height:6px; 154 | margin-top:5px; 155 | margin-bottom:9px; 156 | } 157 | .progress_result{ 158 | height:100%; 159 | border-radius: 4px; 160 | } 161 | .progress_result.all{ 162 | background: #1CA1C1; 163 | } 164 | .progress_result.first{ 165 | background: #55CD97; 166 | } 167 | .progress_result.second{ 168 | background: #FDBF4C; 169 | } 170 | 171 | .check_tree .webix_tree_branch_1{ 172 | padding:4px; 173 | } 174 | .check_tree .webix_tree_checkbox{ 175 | margin:0 10px; 176 | } 177 | .check_tree .webix_scroll_cont > .webix_tree_leaves{ 178 | padding:16px 8px; 179 | } 180 | .check_tree .webix_tree_item.webix_selected{ 181 | background:#ffffff !important; 182 | } 183 | .check_tree .webix_tree_item span.checked, 184 | .check_tree .webix_tree_item.webix_selected span.checked{ 185 | text-decoration: line-through; 186 | } 187 | .check_tree .webix_tree_item span, 188 | .check_tree .webix_tree_item.webix_selected span{ 189 | margin-left:6px; 190 | } 191 | 192 | /* headers (templates) */ 193 | .webix_view.chart_header{ 194 | text-align: center; 195 | } 196 | /* transactions grid */ 197 | .method{ 198 | margin-bottom:-8px; 199 | } 200 | /* features grid */ 201 | .header_center, .column_center{ 202 | text-align:center; 203 | } 204 | .feature.webix_icon.wxi-plus-circle{ 205 | color:#55CD97; 206 | } 207 | .feature.webix_icon.wxi-minus-circle{ 208 | color:#DADEE0; 209 | } 210 | /* widgets grid */ 211 | .yellow{ 212 | color: #FDBF4C; 213 | } 214 | .green{ 215 | color: #55CD97; 216 | } 217 | .blue{ 218 | color: #1CA1C1; 219 | } 220 | 221 | .custom_dark{ 222 | background: #565B67; 223 | font-size:18px; 224 | color: #ffffff; 225 | font-weight: normal; 226 | letter-spacing: 1px; 227 | text-align: center; 228 | } 229 | .custom_dark .webix_template { 230 | line-height: 55px; 231 | } 232 | 233 | /* forms */ 234 | .radio_demo .webix_radio_option{ 235 | margin-bottom:20px; 236 | } 237 | 238 | .webix_view.form_photo > div{ 239 | padding:0px; 240 | } 241 | 242 | /*pivot*/ 243 | .webix_pivot_configure_toolbar .webix_el_label .webix_el_box, 244 | .webix_pivot_configure_toolbar .webix_el_label { 245 | margin-right:5px; 246 | overflow: visible; 247 | } -------------------------------------------------------------------------------- /sources/styles/webix-logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sources/views/charts/compare.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | import {getProjects} from "models/projects"; 3 | 4 | export default class CompareView extends JetView { 5 | config(){ 6 | return { 7 | type:"clean", 8 | gravity:2, 9 | rows:[ 10 | { template:"Total number of tasks by projects", type:"header", css:"chart_header" }, 11 | { 12 | localId:"chart", 13 | view:"chart", 14 | type:"barH", 15 | radius:0, 16 | barWidth:16, 17 | yAxis:{ 18 | template:"#project#", lines:false, color:"#EDEFF0" 19 | }, 20 | xAxis:{ 21 | start:0, step:15, end:90, color:"#fff", lineColor:"#EDEFF0" 22 | }, 23 | legend:{ 24 | values:[ 25 | { text:new Date().getFullYear()-1,color:"#8664C6" }, 26 | { text:new Date().getFullYear(),color:"#1CA1C1" } 27 | ], 28 | valign:"bottom", align:"right", layout:"x", 29 | margin:4, padding:10, 30 | marker:{ 31 | type:"round", width:7, height:8 32 | } 33 | }, 34 | series:[ 35 | { 36 | value:"#tasks17#", 37 | color:"#8664C6", 38 | tooltip:{ 39 | template:"#tasks17#" 40 | } 41 | }, 42 | { 43 | value:"#tasks18#", 44 | color:"#1CA1C1", 45 | tooltip:{ 46 | template:"#tasks18#" 47 | } 48 | } 49 | ], 50 | padding:{ left:50, top:5, bottom:44 } 51 | } 52 | ] 53 | }; 54 | } 55 | init(){ 56 | this.$$("chart").parse(getProjects()); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /sources/views/charts/geo.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | import {getUserActivity} from "models/useractivity"; 3 | 4 | export default class GeoView extends JetView { 5 | config(){ 6 | return { 7 | gravity:2.5, height:500, 8 | type:"form", rows:[ 9 | { 10 | view:"geochart", 11 | localId:"geo", 12 | borderless:true, 13 | // provide your own Google API key 14 | // https://developers.google.com/maps/documentation/javascript/get-api-key 15 | key:"AIzaSyAi0oVNVO-e603aUY8SILdD4v9bVBkmiTg", 16 | chart:{ 17 | colorAxis:{ 18 | colors:[ "#FDBF4C", "#1CA1C1", "#FF5C4C" ] 19 | }, 20 | legend:"none", 21 | datalessRegionColor:"#D9D8D7" 22 | } 23 | } 24 | ] 25 | }; 26 | } 27 | init(){ 28 | this.$$("geo").parse(getUserActivity()); 29 | } 30 | } -------------------------------------------------------------------------------- /sources/views/charts/index.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | 3 | export default class ChartsView extends JetView{ 4 | config(){ 5 | return { 6 | view:"scrollview", body:{ 7 | type:"space", 8 | rows:[ 9 | { 10 | type:"wide", cols:[ 11 | { $subview:"charts.time" }, 12 | { $subview:"charts.progress" } 13 | ] 14 | }, 15 | { 16 | $subview:"charts.statistics" 17 | }, 18 | { 19 | type:"wide", cols:[ 20 | { $subview:"charts.geo" }, 21 | { $subview:"charts.compare" } 22 | ] 23 | } 24 | ] 25 | } 26 | }; 27 | } 28 | } -------------------------------------------------------------------------------- /sources/views/charts/progress.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | import { getProgress } from "models/progress"; 3 | 4 | export default class ProgressView extends JetView { 5 | config(){ 6 | return { 7 | type:"clean", 8 | gravity:3, 9 | minWidth:500, 10 | height:300, 11 | rows:[ 12 | { template:"Individual employee's progress", type:"header", css:"chart_header" }, 13 | { 14 | view:"chart", 15 | border:true, 16 | localId:"progress", 17 | type:"splineArea", 18 | value:"#tasks#", 19 | color:"#1CA1C1", 20 | borderWidth:2, 21 | alpha:0.1, 22 | line:{ 23 | width:3 24 | }, 25 | xAxis:{ 26 | template:"#week#", lines:false, color:"#EDEFF0" 27 | }, 28 | yAxis:{ 29 | start:0, end:100, step:20, color:"#fff", lineColor:"#EDEFF0" 30 | }, 31 | tooltip:{ 32 | template:"Week #week#
#tasks# tasks completed" 33 | }, 34 | padding:{ 35 | top:10 36 | } 37 | } 38 | ] 39 | }; 40 | } 41 | init(){ 42 | let chart = this.$$("progress"); 43 | chart.parse(webix.copy(getProgress())); 44 | this.newLegend("Keith Thompson"); 45 | } 46 | newLegend(name){ 47 | let chart = this.$$("progress"); 48 | chart.define("legend", { 49 | values:[ 50 | { text:name, color:"#1CA1C1" } 51 | ], 52 | align:"right", layout:"x", valign:"bottom", margin:4, padding:10, 53 | marker:{ 54 | type:"round", width:7, height:8 55 | } 56 | }); 57 | chart.refresh(); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /sources/views/charts/statistics.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | import {getStats} from "models/statistics"; 3 | 4 | export default class StatisticsView extends JetView{ 5 | config(){ 6 | return { 7 | height:340, type:"clean", rows:[ 8 | { template:"Total number of tasks completed", type:"header", css:"chart_header" }, 9 | { 10 | localId:"stats", 11 | view:"chart", 12 | type:"scatter", 13 | height:300, 14 | xValue:"#week#", 15 | padding:{ 16 | top:4, bottom:44 17 | }, 18 | xAxis:{ 19 | start:0, end:53, step:2, lines:false, color:"#EDEFF0", 20 | template:obj => obj == 0 ? "" : obj 21 | }, 22 | yAxis:{ 23 | start:0, step:25, end:100, color:"#fff", lineColor:"#EDEFF0" 24 | }, 25 | legend:{ 26 | values:[ 27 | { text:new Date().getFullYear()-1, color:"#8664C6" }, 28 | { text:new Date().getFullYear(), color:"#1CA1C1" } 29 | ], 30 | align:"right", layout:"x", valign:"bottom", 31 | margin:4, padding:10, 32 | marker:{ 33 | type:"round", width:7, height:8 34 | } 35 | }, 36 | series:[ 37 | { 38 | value:"#tasks17#", 39 | disableLines:false, 40 | item:{ 41 | borderColor:"#8664C6", borderWidth:2, 42 | radius:3 43 | }, 44 | line:{ color:"#8664C6", width:2 }, 45 | tooltip:{ 46 | template:"Week #week#
#tasks17# tasks completed" 47 | } 48 | }, 49 | { 50 | value:"#tasks18#", 51 | item:{ 52 | borderColor:"#1CA1C1", borderWidth:2, radius:3 53 | }, 54 | line:{ color:"#1CA1C1", width:2 }, 55 | tooltip:{ 56 | template:"Week #week#
#tasks18# tasks completed" 57 | } 58 | } 59 | ] 60 | } 61 | ] 62 | }; 63 | } 64 | init(){ 65 | this.$$("stats").parse(getStats()); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /sources/views/charts/time.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | import { getHours } from "models/hours"; 3 | 4 | export default class TimeView extends JetView { 5 | config(){ 6 | return { 7 | type:"clean", 8 | height:320, minWidth:215, 9 | rows:[ 10 | { template:"Hours spent, %", type:"header", css:"chart_header" }, 11 | { 12 | localId:"hours", 13 | view:"chart", 14 | type:"donut", 15 | value:"#hours#", 16 | color:"#color#", 17 | innerRadius:64, 18 | shadow:0, 19 | lineColor:obj => obj.color, 20 | tooltip:{ 21 | template:"#hours#" 22 | }, 23 | legend:{ 24 | width:100, 25 | align:"right", 26 | valign:"middle", 27 | template:"#activity#", 28 | marker:{ 29 | type:"round", width:7, height:8 30 | } 31 | }, 32 | padding:{ 33 | top:10, bottom:20 34 | } 35 | } 36 | ] 37 | }; 38 | } 39 | init(view){ 40 | view.queryView({ view:"chart" }).parse(getHours()); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /sources/views/dash/currencies.js: -------------------------------------------------------------------------------- 1 | import { JetView } from "webix-jet"; 2 | 3 | function openSearch(){ 4 | this.config.icon = (this.config.icon == "wxi-close") ? "mdi mdi-magnify" : "wxi-close"; 5 | const input = this.$scope.$$("srch:field"); 6 | input.isVisible() ? input.hide() : input.show(); 7 | const header = this.$scope.$$("header"); 8 | header.isVisible() ? header.hide() : header.show(); 9 | this.refresh(); 10 | } 11 | 12 | export default class CurrenciesView extends JetView { 13 | config(){ 14 | return { 15 | width:387, 16 | rows:[ 17 | { type:"toolbar", height:48, padding:{ right:8 }, cols:[ 18 | { template:"Exchange rates", type:"header", borderless:true, localId:"header" }, 19 | { 20 | view:"text", localId:"srch:field", placeholder:"Type to search", hidden:true, 21 | on:{ 22 | onViewShow(){ 23 | const self = this; 24 | webix.delay(function(){ self.focus(); }); 25 | }, 26 | onTimedKeyPress(){ 27 | const input = this.getValue().toLowerCase(); 28 | this.$scope.$$("currencies").filter(obj => obj.name.indexOf(input) !== -1); 29 | } 30 | } 31 | }, 32 | { view:"icon", icon:"mdi mdi-magnify", click:openSearch} 33 | ]}, 34 | { 35 | view:"list", localId:"currencies", 36 | css:"currencies_list", 37 | select:true, 38 | yCount: 4, 39 | type:{ 40 | height:64, 41 | template:obj => { 42 | const delta = parseFloat(obj.delta) > 0 ? "green" : "red"; 43 | return ` 44 | ${obj.icon} 45 | $${obj.value} 46 | ${obj.delta}`; 47 | } 48 | }, 49 | on:{ 50 | onItemClick:(id) => { 51 | this.app.callEvent("currency:select", [id]); 52 | } 53 | } 54 | } 55 | ] 56 | }; 57 | } 58 | init(){ 59 | this.$$("currencies").parse([ 60 | { name:"euro", icon:"€", value:321.12, delta:"-0.2", color:"#1CA1C1" }, 61 | { name:"dollar", icon:"$", value:345.76, delta:"+0.2", color:"#55CD97" }, 62 | { name:"yen", icon:"¥", value:567.26, delta:"+0.3", color:"#FDBF4C" }, 63 | { name:"pound", icon:"£", value:234.64, delta:"-0.1", color:"#FF5C4C" } 64 | ]); 65 | this.$$("currencies").select(this.$$("currencies").getFirstId()); 66 | } 67 | } -------------------------------------------------------------------------------- /sources/views/dash/index.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | 3 | export default class TopView extends JetView{ 4 | config(){ 5 | return { 6 | type:"space", rows:[ 7 | { 8 | type:"wide", 9 | cols:[ { $subview:"dash.currencies" }, { $subview:"dash.progress" } ] 10 | }, 11 | { type:"wide", cols:[ 12 | { $subview:"dash.reviews" }, 13 | { type:"wide", rows:[ 14 | { $subview:"dash.stats" }, 15 | { $subview:"dash.projects" } 16 | ]} 17 | ]} 18 | ] 19 | }; 20 | } 21 | } -------------------------------------------------------------------------------- /sources/views/dash/progress.js: -------------------------------------------------------------------------------- 1 | import { JetView } from "webix-jet"; 2 | import { getProgress, shuffle } from "../../models/progressch"; 3 | 4 | function openSearch(){ 5 | this.config.icon = (this.config.icon == "wxi-close") ? "mdi mdi-magnify" : "wxi-close"; 6 | const input = this.$scope.$$("srch:field"); 7 | input.isVisible() ? input.hide() : input.show(); 8 | const header = this.$scope.$$("header"); 9 | header.isVisible() ? header.hide() : header.show(); 10 | this.refresh(); 11 | } 12 | 13 | export default class ProgressView extends JetView { 14 | config(){ 15 | return { 16 | rows:[ 17 | { type:"toolbar", height:48, padding:{ right:8 }, cols:[ 18 | { template:"2018 year stats", type:"header", borderless:true, localId:"header" }, 19 | { 20 | view:"text", localId:"srch:field", placeholder:"Type to filter values above (e.g. 30)", hidden:true, 21 | on:{ 22 | onViewShow(){ 23 | const self = this; 24 | webix.delay(function(){ self.focus(); }); 25 | }, 26 | onTimedKeyPress(){ 27 | const input = parseInt(this.getValue()); 28 | if (!isNaN(input)){ 29 | this.$scope.$$("chart").filter(obj => obj.a > input); 30 | } 31 | else { 32 | this.$scope.$$("chart").filter(); 33 | } 34 | } 35 | } 36 | }, 37 | { view:"icon", icon:"mdi mdi-magnify", click:openSearch }, 38 | ]}, 39 | { 40 | view:"chart", type:"stackedBar", localId:"chart", 41 | yAxis:{ template:"", lineColor:"#fff", color:"#fff" }, 42 | xAxis:{ lineColor:"#fff", color:"#fff", template:"" }, 43 | series:[ 44 | { 45 | value:"#a#", 46 | color: "#1CA1C1", 47 | tooltip:{ 48 | template:"#a#" 49 | } 50 | }, 51 | { 52 | value:"#b#", 53 | color: "#EBEDF0", 54 | tooltip:{ 55 | template:"#b#" 56 | } 57 | } 58 | ], 59 | padding:{ left:30, bottom:30 }, barWidth:24 60 | } 61 | ] 62 | }; 63 | } 64 | init(){ 65 | this.$$("chart").parse(getProgress()); 66 | 67 | this.on(this.app, "currency:select",(id) => { 68 | if (!this.ListId || this.ListId !== id){ 69 | this.$$("chart").clearAll(); 70 | this.$$("chart").parse(shuffle()); 71 | this.ListId = id; 72 | } 73 | }); 74 | } 75 | } -------------------------------------------------------------------------------- /sources/views/dash/projects.js: -------------------------------------------------------------------------------- 1 | import { JetView } from "webix-jet"; 2 | import { getProjects } from "models/projectsd"; 3 | 4 | function getTree(label){ 5 | return { 6 | id:label, view:"tree", css:"check_tree", 7 | type:{ 8 | checkbox:function(obj){ 9 | if (obj.nocheckbox) 10 | return ""; 11 | 12 | return ` 13 | `; 14 | }, 15 | template:(obj, common) => { 16 | return `${common.checkbox(obj)} ${obj.value}`; 17 | } 18 | }, 19 | select:true, 20 | on:{ 21 | onItemCheck(){ 22 | this.refresh(); 23 | } 24 | } 25 | }; 26 | } 27 | 28 | export default class ProjectsView extends JetView { 29 | config(){ 30 | return { 31 | rows:[ 32 | { 33 | view:"tabbar", multiview:true, options:[ 34 | { id:"all", value:"To-do list (all)" }, 35 | { id:"first", value:"Today" }, 36 | { id:"second", value:"Tomorrow" } 37 | ] 38 | }, 39 | { 40 | animate:false, 41 | cells:[ 42 | getTree("all"), 43 | getTree("first"), 44 | getTree("second") 45 | ] 46 | } 47 | ] 48 | }; 49 | } 50 | init(){ 51 | const trees = this.getRoot().queryView("tree","all"); 52 | for (let i = 0; i < trees.length; i++){ 53 | trees[i].parse(getProjects()); 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /sources/views/dash/reviews.js: -------------------------------------------------------------------------------- 1 | import { JetView } from "webix-jet"; 2 | import { getReviews } from "models/reviews"; 3 | 4 | function openSearch(){ 5 | this.config.icon = (this.config.icon == "wxi-close") ? "mdi mdi-magnify" : "wxi-close"; 6 | const input = this.$scope.$$("srch:field"); 7 | input.isVisible() ? input.hide() : input.show(); 8 | const header = this.$scope.$$("header"); 9 | header.isVisible() ? header.hide() : header.show(); 10 | this.refresh(); 11 | } 12 | 13 | export default class ReviewsView extends JetView { 14 | config(){ 15 | const dateFormat = webix.Date.dateToStr("%j %M %Y"); 16 | return { 17 | gravity: 1.25, 18 | rows:[ 19 | { 20 | view:"toolbar", height:48, padding:{ right:8 }, elements:[ 21 | { template:"Customer feedback", type:"header", borderless:true, localId:"header" }, 22 | { 23 | view:"text", localId:"srch:field", placeholder:"Type to search by name", hidden:true, 24 | on:{ 25 | onViewShow(){ 26 | const self = this; 27 | webix.delay(function(){ self.focus(); }); 28 | }, 29 | onTimedKeyPress(){ 30 | const input = this.getValue().toLowerCase(); 31 | this.$scope.$$("list").filter(obj => obj.name.toLowerCase().indexOf(input) !== -1); 32 | } 33 | } 34 | }, 35 | { view:"icon", icon:"mdi mdi-magnify", click:openSearch } 36 | ] 37 | }, 38 | { 39 | view:"list", localId:"list", css:"reviews", 40 | type:{ 41 | height:168, 42 | stars:(obj) => { 43 | let result = ""; 44 | for (let i = 1; i <= 5; i++){ 45 | let color = (i <= obj.stars) ? "gold" : "grey"; 46 | result += ``; 47 | } 48 | return "" + result + ""; 49 | }, 50 | template:(obj,common) => ` 51 |
52 |
53 | 54 | ${obj.name} 55 | ${common.stars(obj)} 56 | ${dateFormat(obj.date)} 57 | ${obj.text} 58 | ${obj.tag} 59 |
60 | ` 61 | }, 62 | tooltip:{ 63 | template:"#text#", css:"review_tooltip" 64 | }, 65 | onClick:{ 66 | "mark":function(e,i){ 67 | const old = this.getItem(i).mark; 68 | this.updateItem(i,{ mark:!old }); 69 | return false; 70 | } 71 | } 72 | } 73 | ] 74 | }; 75 | } 76 | init(){ 77 | this.$$("list").parse(getReviews()); 78 | } 79 | } -------------------------------------------------------------------------------- /sources/views/dash/stats.js: -------------------------------------------------------------------------------- 1 | import { JetView } from "webix-jet"; 2 | import { getStats } from "models/stats"; 3 | 4 | function openSearch(){ 5 | this.config.icon = (this.config.icon == "wxi-close") ? "mdi mdi-magnify" : "wxi-close"; 6 | const input = this.$scope.$$("srch:field"); 7 | input.isVisible() ? input.hide() : input.show(); 8 | const header = this.$scope.$$("header"); 9 | header.isVisible() ? header.hide() : header.show(); 10 | this.refresh(); 11 | } 12 | 13 | export default class StatsView extends JetView { 14 | config(){ 15 | return { 16 | height: 209, rows:[ 17 | { view:"toolbar", height:48, padding:{ right:8 }, elements:[ 18 | { template:"Revenues", type:"header", borderless:true, localId:"header" }, 19 | { 20 | view:"text", localId:"srch:field", placeholder:"Type to search by name", hidden:true, 21 | on:{ 22 | onViewShow(){ 23 | const self = this; 24 | webix.delay(function(){ self.focus(); }); 25 | }, 26 | onTimedKeyPress(){ 27 | const input = this.getValue().toLowerCase(); 28 | this.$scope.$$("list").filter(obj => obj.value.toLowerCase().indexOf(input) !== -1); 29 | } 30 | } 31 | }, 32 | { view:"icon", icon:"mdi mdi-magnify", click:openSearch } 33 | ]}, 34 | { 35 | view:"list", localId:"list", css:"stats", 36 | type:{ 37 | height:"auto", 38 | template: obj => `${obj.value} 39 |
40 |
41 |
` 42 | } 43 | } 44 | ] 45 | }; 46 | } 47 | init(){ 48 | this.$$("list").parse(getStats()); 49 | } 50 | } -------------------------------------------------------------------------------- /sources/views/files.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | 3 | export default class SheetView extends JetView{ 4 | config(){ 5 | const config = { 6 | type:"space", rows:[{ 7 | view:"filemanager", 8 | url:"https://docs.webix.com/filemanager-backend/" 9 | }] 10 | }; 11 | 12 | return webix.require({ 13 | "https://cdn.webix.com/pro/edge/filemanager/filemanager.js" :true, 14 | "https://cdn.webix.com/pro/edge/filemanager/filemanager.css":true 15 | }).then(() => config); 16 | } 17 | } -------------------------------------------------------------------------------- /sources/views/forms/car.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | import "webix/photo"; 3 | 4 | function getCar(form){ 5 | webix.delay(() => { 6 | const make = form.elements["make"].getValue(); 7 | const model = form.elements["model"].getValue(); 8 | form.elements["photo"].setValue(make+"_"+model); 9 | }); 10 | } 11 | 12 | export default class CarView extends JetView { 13 | config(){ 14 | const dateFormat = webix.Date.dateToStr("%d %M %Y"); 15 | 16 | return { 17 | rows:[ 18 | { template:"Vehicle sale", type:"header" }, 19 | { 20 | view:"form", localId:"form", padding:24, 21 | elementsConfig:{ labelAlign:"right", labelWidth:100 }, 22 | rows:[ 23 | { 24 | view:"photo", localId:"photo", 25 | name:"photo", 26 | css:"form_photo", 27 | height:260, 28 | borderless:true 29 | }, 30 | { 31 | view:"richselect", name:"make", label:"Make", 32 | placeholder:"Click to select", options:[ 33 | { id:"transtar", value:"Transtar" }, 34 | { id:"kasma", value:"Kasma" }, 35 | { id:"typhon", value:"Typhon&Co" } 36 | ], 37 | on:{ 38 | onChange:() => getCar(this.$$("form")) 39 | } 40 | }, 41 | { 42 | view:"richselect", name:"model", label:"Model", 43 | placeholder:"Click to select", 44 | options:[ 45 | { id:"coral", value:"Coral AF-13B72P" }, 46 | { id:"thalos", value:"Thalos RD-D7N0H8" }, 47 | { id:"pytheas", value:"Pytheas RY-1M4L1VE" } 48 | ], 49 | on:{ 50 | onChange:() => getCar(this.$$("form")) 51 | } 52 | }, 53 | { 54 | view:"datepicker", label:"Produced", name:"produced", 55 | placeholder:"Click to select", format:dateFormat 56 | }, 57 | { 58 | view:"colorpicker", label:"Color", name:"color", 59 | value:"green" 60 | }, 61 | { 62 | view:"radio", options:[ "Agree", "Disagree" ], label:"Notifications", 63 | name:"notifications", value:"Agree" 64 | }, 65 | { 66 | view:"textarea", label:"Notes", name:"notes", placeholder:"Type text" 67 | } 68 | ] 69 | } 70 | ] 71 | }; 72 | } 73 | init(){ 74 | this.$$("form").setValues({ 75 | make:"kasma", model:"coral", produced:"2056-05-05", 76 | color:"#DD0000", notifications:"Agree" 77 | }); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /sources/views/forms/checkboxes.js: -------------------------------------------------------------------------------- 1 | import { JetView } from "webix-jet"; 2 | 3 | export default class Checkboxes extends JetView { 4 | config(){ 5 | return { 6 | width:400, rows:[ 7 | { template:"Checkbox", type:"header" }, 8 | { 9 | type:"form", padding:24, margin:30, cols:[ 10 | { 11 | margin:14, rows:[ 12 | { view:"checkbox", labelRight:"Checked", labelWidth:0, value:1 }, 13 | { view:"checkbox", labelRight:"Unchecked", labelWidth:0 }, 14 | { view:"checkbox", labelRight:"Disabled", labelWidth:0, disabled:true } 15 | ] 16 | }, 17 | { 18 | view:"radio", value:1, css:"radio_demo", options:[ 19 | { id:1, value:"Checked" }, 20 | { id:2, value:"Unchecked" } 21 | ], 22 | on:{ 23 | onChange(newV, oldV){ 24 | if (newV == 3) this.setValue(oldV); 25 | } 26 | } 27 | } 28 | ] 29 | } 30 | ] 31 | }; 32 | } 33 | } -------------------------------------------------------------------------------- /sources/views/forms/danger.js: -------------------------------------------------------------------------------- 1 | import { JetView } from "webix-jet"; 2 | 3 | export default class DangerButtons extends JetView { 4 | config(){ 5 | return { 6 | rows:[ 7 | { template:"Alert buttons", type:"header" }, 8 | { 9 | type:"form", padding:24, margin:14, rows:[ 10 | { view:"button", label:"Danger", css:"webix_danger", inputWidth:100 }, 11 | { view:"button", label:"Danger", css:"webix_danger", type:"icon", icon:"wxi-plus", inputWidth:120 }, 12 | { view:"button", label:"Wide danger", css:"webix_danger", type:"icon", icon:"wxi-plus" } 13 | ] 14 | } 15 | ] 16 | }; 17 | } 18 | } -------------------------------------------------------------------------------- /sources/views/forms/index.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | 3 | export default class FormsView extends JetView{ 4 | config(){ 5 | return { 6 | view:"scrollview", scroll:"xy", body:{ 7 | type:"space", cols:[ 8 | { 9 | type:"wide", width:500, rows:[ 10 | { $subview:"forms.car" }, 11 | { $subview:"forms.checkboxes" } 12 | ] 13 | }, 14 | { 15 | type:"wide", rows:[ 16 | { $subview:"forms.person" }, 17 | { 18 | type:"wide", cols:[ 19 | { $subview:"forms.primary" }, 20 | { $subview:"forms.secondary" }, 21 | { $subview:"forms.danger" }, 22 | ] 23 | } 24 | ] 25 | } 26 | ] 27 | } 28 | }; 29 | } 30 | } -------------------------------------------------------------------------------- /sources/views/forms/person.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | import {getCities} from "models/cities"; 3 | import {getTags} from "models/tags"; 4 | import {getPositions} from "models/positions"; 5 | import "webix/photo"; 6 | 7 | export default class PersonView extends JetView { 8 | config(){ 9 | const dateFormat = webix.Date.dateToStr("%d %M %Y"); 10 | 11 | const main_info = { 12 | margin:10, 13 | rows:[ 14 | { 15 | view:"text", name:"fname", 16 | label:"First name", labelPosition:"top", 17 | placeholder:"First name", 18 | invalidMessage:"A name is required", 19 | tooltip:"Client's name is " + "#value#" 20 | }, 21 | { 22 | view:"text", name:"lname", 23 | label:"Last name", labelPosition:"top", 24 | placeholder:"Last name", 25 | tooltip:"Client's last name is " + "#value#" 26 | }, 27 | { 28 | view:"richselect", name:"position", 29 | localId:"position:combo", 30 | label:"Position", labelPosition:"top", 31 | placeholder:"Click to select", 32 | options:getPositions(), 33 | tooltip:obj => { 34 | return obj.value ? "The position that client occupies within their company" : "" + "Not selected" + ""; 35 | } 36 | }, 37 | { 38 | view:"text", name:"email", 39 | label:"Email", labelPosition:"top", 40 | placeholder:"Email", 41 | tooltip:obj => { 42 | return obj.value ? "The working email address of the client" : ""+"Not specified"+""; 43 | } 44 | }, 45 | { 46 | view:"richselect", name:"city", 47 | localId:"cities:combo", 48 | label:"City, country", labelPosition:"top", 49 | placeholder:"Click to select", 50 | options:getCities(), 51 | tooltip:obj => { 52 | return obj.value ? "The city where the client works" : ""+"Not selected"+""; 53 | } 54 | } 55 | ] 56 | }; 57 | 58 | const more_info = { 59 | margin:10, 60 | rows:[ 61 | { 62 | view:"text", name:"address", label:"Address", 63 | labelPosition:"top", placeholder:"Address", 64 | tooltip:obj => { 65 | return obj.value ? "The address of the client's office" : ""+"Not specified"+""; 66 | } 67 | }, 68 | { 69 | view:"datepicker", name:"birthday", 70 | label:"Birthday", labelPosition:"top", 71 | placeholder:"Click to select", 72 | format:dateFormat, 73 | tooltip:obj => { 74 | let result = "Client is "; 75 | if (obj.value){ 76 | result += Math.floor((new Date() - obj.value) / (1000 * 60 * 60 * 24 * 365)) + " years old"; 77 | let nearestBDay = new Date(); 78 | nearestBDay.setMonth(obj.value.getMonth()); 79 | nearestBDay.setDate(obj.value.getDate()); 80 | if (nearestBDay < new Date()){ 81 | webix.Date.add(nearestBDay, 1, "year"); 82 | } 83 | result += "
" + "Next birthday is on " + dateFormat(nearestBDay); 84 | } 85 | return result; 86 | } 87 | }, 88 | { 89 | view:"datepicker", name:"request", 90 | label:"First request", labelPosition:"top", 91 | placeholder:"Click to select", 92 | format:dateFormat 93 | }, 94 | { 95 | view:"text", name:"phone", label:"Phone", labelPosition:"top", placeholder:"Phone" 96 | }, 97 | { 98 | view:"radio", name:"notifications", 99 | label:"Notifications", labelPosition:"top", 100 | value:1, 101 | tooltip:obj => { 102 | return obj.id%2 ? "You will receive email notifications about actions performed by this client." : "You will receive no email notifications."; 103 | }, 104 | options:[ 105 | { id:1, value:"Agree" }, 106 | { id:2, value:"Disagree" } 107 | ] 108 | } 109 | ] 110 | }; 111 | 112 | const right_photo = { 113 | margin:10, 114 | rows:[ 115 | { 116 | view:"photo", localId:"photo", 117 | name:"photo", 118 | css:"form_photo", 119 | width:260, 120 | height:260, 121 | borderless:true 122 | }, 123 | { 124 | view:"multicombo", name:"tags", 125 | localId:"tags:combo", 126 | placeholder:"Click to add tags", 127 | options:getTags(), 128 | tooltip:obj => { 129 | return obj.value ? "The badges unlocked by the client" : ""+"No badges"+""; 130 | } 131 | } 132 | ] 133 | }; 134 | 135 | const upper_section = { 136 | margin:48, cols:[ 137 | main_info, 138 | more_info, 139 | right_photo 140 | ] 141 | }; 142 | 143 | const buttons = { 144 | margin:10, 145 | cols:[ 146 | {}, 147 | { 148 | view:"button", value:"Reset", autowidth:true, 149 | click:() => { 150 | this.$$("form").clear(); 151 | }, 152 | tooltip:"Click to clean the form" 153 | }, 154 | { 155 | view:"button", value:"Save", type:"form", autowidth:true, 156 | tooltip:"Save changes", 157 | click:() => { 158 | if (this.$$("form").validate()){ 159 | webix.message("Saved (not really)!", "success"); 160 | } 161 | } 162 | } 163 | ] 164 | }; 165 | 166 | return { 167 | rows:[ 168 | { template:"Profile information", type:"header" }, 169 | { 170 | view:"form", localId:"form", padding:24, 171 | rows:[ 172 | upper_section, 173 | { 174 | view:"textarea", label:"Notes", labelPosition:"top", placeholder:"Type text" 175 | }, 176 | buttons 177 | ], 178 | rules:{ 179 | "fname":webix.rules.isNotEmpty 180 | } 181 | } 182 | ] 183 | }; 184 | } 185 | init(){ 186 | this.$$("form").setValues({ 187 | fname:"Morgan", lname:"Yu", 188 | birthday:"2005-05-05", photo:"morgan_yu", 189 | notifications:1, request:"2017-01-13", 190 | tags:"6,3,5" 191 | }); 192 | } 193 | } 194 | -------------------------------------------------------------------------------- /sources/views/forms/primary.js: -------------------------------------------------------------------------------- 1 | import { JetView } from "webix-jet"; 2 | 3 | export default class PrimaryButtons extends JetView { 4 | config(){ 5 | return { 6 | rows:[ 7 | { template:"Primary buttons", type:"header" }, 8 | { 9 | type:"form", padding:24, margin:14, rows:[ 10 | { view:"button", label:"Primary", css:"webix_primary", inputWidth: 100}, 11 | { view:"button", label:"Primary", css:"webix_primary", type:"icon", icon:"wxi-plus", inputWidth: 140}, 12 | { view:"button", label:"Wide primary", css:"webix_primary", type:"icon", icon:"wxi-plus" } 13 | ] 14 | } 15 | ] 16 | }; 17 | } 18 | } -------------------------------------------------------------------------------- /sources/views/forms/secondary.js: -------------------------------------------------------------------------------- 1 | import { JetView } from "webix-jet"; 2 | 3 | export default class SecondaryButtons extends JetView { 4 | config(){ 5 | return { 6 | width:-1, rows:[ 7 | { template:"Secondary buttons", type:"header" }, 8 | { 9 | type:"form", padding:24, margin:14, rows:[ 10 | { view:"button", label:"Secondary", css:"webix_secondary", inputWidth:100 }, 11 | { view:"button", label:"Secondary", css:"webix_secondary", type:"icon", icon:"wxi-plus", inputWidth:120 }, 12 | { view:"button", label:"Wide secondary", css:"webix_secondary", type:"icon", icon:"wxi-plus" } 13 | ] 14 | } 15 | ] 16 | }; 17 | } 18 | } -------------------------------------------------------------------------------- /sources/views/kanban.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | import {data} from "models/kanban"; 3 | 4 | export default class SheetView extends JetView{ 5 | config(){ 6 | const impth = "https://docs.webix.com/samples/63_kanban/common/imgs/"; 7 | 8 | const config = { 9 | view:"kanban", 10 | cols:[{ 11 | header:"Backlog", 12 | body:{ view:"kanbanlist", status:"new" } 13 | },{ 14 | header:"In Progress", 15 | body:{ view:"kanbanlist", status:"work" } 16 | },{ 17 | header:"Testing", 18 | body:{ view:"kanbanlist", status:"test" } 19 | },{ 20 | header:"Done", 21 | body:{ view:"kanbanlist", status:"done" } 22 | }], 23 | editor:true, 24 | comments: {currentUser:9}, 25 | users:[ 26 | {id:1, value:"Rick Lopes", image:impth + "1.jpg"}, 27 | {id:2, value:"Martin Farrell", image:impth + "2.jpg"}, 28 | {id:3, value:"Douglass Moore", image:impth + "3.jpg"}, 29 | {id:4, value:"Eric Doe", image:impth + "4.jpg"}, 30 | {id:5, value:"Sophi Elliman", image:impth + "5.jpg"}, 31 | {id:6, value:"Anna O'Neal"}, 32 | {id:7, value:"Marcus Storm", image:impth + "7.jpg"}, 33 | {id:8, value:"Nick Branson", image:impth + "8.jpg"}, 34 | {id:9, value:"CC", image:impth + "9.jpg"} 35 | ], 36 | tags:[ 37 | {id:1, value:"webix"}, 38 | {id:2, value:"jet"}, 39 | {id:3, value:"easy"}, 40 | {id:4, value:"hard"}, 41 | {id:5, value:"kanban"}, 42 | {id:6, value:"docs"}, 43 | ] 44 | }; 45 | 46 | return webix.require({ 47 | "https://cdn.webix.com/pro/edge/kanban/kanban.js" :true, 48 | "https://cdn.webix.com/pro/edge/kanban/kanban.css" :true 49 | }).then(() => config); 50 | } 51 | 52 | init(){ 53 | this.getRoot().parse(data); 54 | } 55 | } -------------------------------------------------------------------------------- /sources/views/main.js: -------------------------------------------------------------------------------- 1 | import {JetView, plugins} from "webix-jet"; 2 | 3 | export default class TopView extends JetView{ 4 | config(){ 5 | const header = { 6 | type:"header", css:"custom_dark", height:58, 7 | template:"ADMIN APP" 8 | }; 9 | 10 | const sidebar = { 11 | localId:"menu", 12 | view:"sidebar", css:"webix_dark", width:200, 13 | data:[ 14 | { id:"dash", value:"Dashboard", icon:"mdi mdi-view-dashboard" }, 15 | { id:"charts", value:"Charts", icon:"mdi mdi-chart-areaspline" }, 16 | { id:"tables", value:"Tables", icon:"mdi mdi-table" }, 17 | { id:"forms", value:"Forms", icon:"mdi mdi-format-line-style" }, 18 | { id:"sheet", value:"Spreadsheet", icon:"mdi mdi-table-large" }, 19 | { id:"kanban", value:"Kanban", icon:"mdi mdi-view-column" }, 20 | { id:"pivot", value:"Pivot", icon:"mdi mdi-layers" }, 21 | { id:"files", value:"File Manager", icon:"mdi mdi-folder-star" } 22 | ] 23 | }; 24 | 25 | const toolbar = { 26 | view:"toolbar", 27 | padding:9, height:58, 28 | cols:[ 29 | { css:"logo" }, 30 | { view:"icon", icon:"mdi mdi-bell", badge:"5" }, 31 | { view:"icon", icon:"mdi mdi-settings" }, 32 | { 33 | template:` 34 | `, 35 | width:60, css:"avatar", borderless:true 36 | } 37 | ] 38 | }; 39 | 40 | return { 41 | type:"clean", cols:[ 42 | { rows:[ header, sidebar ]}, 43 | { rows:[ toolbar, { $subview:true } ]} 44 | ] 45 | }; 46 | } 47 | 48 | init(){ 49 | this.use(plugins.Menu, "menu"); 50 | } 51 | } -------------------------------------------------------------------------------- /sources/views/pivot.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | 3 | export default class SheetView extends JetView{ 4 | config(){ 5 | const config = { 6 | type:"space", rows:[{ 7 | view: "pivot", 8 | structure: { 9 | rows: ["form", "name"], 10 | columns: ["year"], 11 | values: [{ name: "oil", operation: ["min", "sum"] }], 12 | }, 13 | url: "https://cdn.webix.com/demodata/pivot.json", 14 | }] 15 | }; 16 | 17 | return webix.require({ 18 | "https://cdn.webix.com/pro/edge/pivot/pivot.js" :true, 19 | "https://cdn.webix.com/pro/edge/pivot/pivot.css":true 20 | }).then(() => config); 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /sources/views/sheet.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | import {getSheetData} from "models/sheet"; 3 | 4 | export default class SheetView extends JetView{ 5 | config(){ 6 | const config = { 7 | type:"space", rows:[{ 8 | view:"spreadsheet", localId:"sheet", 9 | toolbar:"full" 10 | }] 11 | }; 12 | 13 | return webix.require({ 14 | "https://cdn.webix.com/pro/edge/spreadsheet/spreadsheet.js": true, 15 | "https://cdn.webix.com/pro/edge/spreadsheet/spreadsheet.css": true 16 | }).then(() => config); 17 | } 18 | init(){ 19 | this.$$("sheet").parse(getSheetData()); 20 | } 21 | } -------------------------------------------------------------------------------- /sources/views/tables/features.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | 3 | function showIcon(obj, common, row){ 4 | const sign = row ? "plus" : "minus"; 5 | return ``; 6 | } 7 | 8 | export default class ReatureView extends JetView { 9 | config(){ 10 | return { 11 | view:"datatable", localId:"grid", 12 | select:true, css:"webix_header_border", 13 | columns:[ 14 | { id:"feature", fillspace:1.5, header:[{ text:"Feature", rowspan:2 }] }, 15 | { 16 | id:"start", fillspace:1, header:[ 17 | { text:"Plans", colspan:3, css:"header_center" }, 18 | { text:"Start", css:"header_center" } 19 | ], 20 | template:showIcon, css:"column_center" 21 | }, 22 | { id:"advanced", css:"column_center", fillspace:1, header:["", { text:"Advanced", css:"header_center"}], template:showIcon }, 23 | { id:"pro", css:"column_center", fillspace:1, header:["", { text:"Pro", css:"header_center" }], template:showIcon } 24 | ] 25 | }; 26 | } 27 | init(grid){ 28 | grid.parse([ 29 | { feature:"Unlimited lists", start:1, advanced:1, pro:1 }, 30 | { feature:"Separate outlines", start:1, advanced:1, pro:1 }, 31 | { feature:"Tag", start:1, advanced:1, pro:1 }, 32 | { feature:"Markdown", start:1, advanced:0, pro:1 }, 33 | { feature:"Note", start:1, advanced:1, pro:1 }, 34 | { feature:"Color label", start:1, advanced:0, pro:0 }, 35 | { feature:"Numbered list", start:1, advanced:1, pro:0 }, 36 | { feature:"Heading", start:1, advanced:1, pro:0 }, 37 | { feature:"Creation date", start:1, advanced:0, pro:0 }, 38 | { feature:"Last edited time", start:1, advanced:1, pro:1 }, 39 | { feature:"File upload", start:1, advanced:1, pro:1 }, 40 | { feature:"Project management", start:1, advanced:0, pro:0 }, 41 | { feature:"Solutions database", start:1, advanced:1, pro:0 }, 42 | { feature:"Webinars", start:1, advanced:0, pro:0 }, 43 | { feature:"Training groups", start:1, advanced:0, pro:0 }, 44 | { feature:"Complex widgets", start:1, advanced:0, pro:0 }, 45 | { feature:"Typography", start:1, advanced:0, pro:0 } 46 | ]); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /sources/views/tables/films.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | import {getFilms} from "models/allfilms"; 3 | 4 | export default class TransactionsView extends JetView { 5 | config(){ 6 | return { 7 | view:"datatable", localId:"grid", 8 | select:true, 9 | columns:[ 10 | { id:"rank", header:"#", width:50, sort:"int" }, 11 | { id:"title", fillspace:1, header:"Film title", sort:"text" }, 12 | { id:"year", header:"Year", sort:"int" }, 13 | { id:"popularity", fillspace:1, header:"Popularity", 14 | template:webix.Sparklines.getTemplate({ 15 | type:"splineArea", 16 | color:"#1CA1C1" 17 | }) }, 18 | { id:"votes", header:"Votes", sort:"int" } 19 | ] 20 | }; 21 | } 22 | init(grid){ 23 | grid.parse(getFilms()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /sources/views/tables/index.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | 3 | export default class TablesView extends JetView{ 4 | config(){ 5 | return { 6 | type:"space", 7 | rows:[ 8 | { 9 | type:"wide", cols:[ 10 | { $subview:"tables.transactions" }, 11 | { $subview:"tables.films" } 12 | ] 13 | }, 14 | { 15 | type:"wide", cols:[ 16 | { $subview:"tables.features" }, 17 | { $subview:"tables.widgets" } 18 | ] 19 | } 20 | ] 21 | }; 22 | } 23 | } -------------------------------------------------------------------------------- /sources/views/tables/transactions.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | import {allpayments} from "models/allpayments"; 3 | 4 | export default class TransactionsView extends JetView { 5 | config(){ 6 | return { 7 | view:"datatable", localId:"grid", 8 | select:true, tooltip:true, 9 | columns:[ 10 | { 11 | id:"date", header:"Date", 12 | fillspace:1, minWidth:100, 13 | sort:"date", format:webix.Date.dateToStr("%j %F") 14 | }, 15 | { 16 | id:"method", header:"Payment", fillspace:1, minWidth:90, sort:"text", 17 | tooltip:"The card with which the payment was made", 18 | template:data => `` 19 | }, 20 | { 21 | id:"", header:"", fillspace:3, template:"#method# #number#" 22 | }, 23 | { 24 | id:"name", header:{ 25 | text:"Purchase", 26 | tooltip:"Click to sort the list by shops" 27 | }, 28 | fillspace:4, minWidth:200, sort:"text" 29 | }, 30 | { 31 | id:"sum", header:"Sum", sort:"int", 32 | fillspace:1.5, minWidth:90, 33 | format:webix.i18n.priceFormat 34 | } 35 | ] 36 | }; 37 | } 38 | init(grid){ 39 | grid.sync(allpayments); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /sources/views/tables/widgets.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | 3 | export default class ReatureView extends JetView { 4 | config(){ 5 | return { 6 | view:"treetable", localId:"grid", 7 | select:true, 8 | columns:[ 9 | { id:"id", header:"#" }, 10 | { 11 | id:"widget", template:"{common.treetable()} #widget#", fillspace:2, 12 | header:[ "Widget", { content:"richSelectFilter" } ] 13 | }, 14 | { id:"author", header:"Author", fillspace:1 }, 15 | { id:"created", header:"Status", template:obj => { 16 | const color = obj.created == "Pending" ? "yellow" : (obj.created == "Planning" ? "blue" : "green"); 17 | return `${obj.created}`; 18 | } } 19 | ] 20 | }; 21 | } 22 | init(grid){ 23 | grid.parse([ 24 | { id:"248-701", widget:"Webix", author:"Corvo Attano", created:"Planning", data:[ 25 | { 26 | id:"248-702", widget:"Layout branch", author:"Booker DeWitt", created:"In progress", data:[ 27 | { id:"248-703", widget:"Accordion", author:"Elizabeth DeWitt", created:"Planning" }, 28 | { id:"248-704", widget:"Multiview", author:"Daisy Fitzroy", created:"Pending" }, 29 | { id:"248-705", widget:"Layout", author:"Rosalind Lutece", created:"Planning" }, 30 | { id:"248-706", widget:"Dashboard", author:"Lady Comstock", created:"Planning" }, 31 | { id:"248-707", widget:"GridLayout", author:"Robert Lutece", created:"Planning" } 32 | ] 33 | }, 34 | { 35 | id:"248-708", widget:"Components", author:"Emily Kaldwin", created:"Pending", data:[ 36 | { id:"248-709", widget:"Datatable", author:"Granny Rags", created:"Planning" }, 37 | { id:"248-710", widget:"List", author:"Piero Joplin", created:"Planning" }, 38 | { id:"248-711", widget:"Dataview", author:"The Outsider", created:"In progress" }, 39 | { id:"248-712", widget:"Tree", author:"Jessamine Kaldwin", created:"In progress" }, 40 | { id:"248-713", widget:"Treetable", author:"Daud Knife", created:"Planning" }, 41 | { id:"248-714", widget:"Bar Chart", author:"Billie Lurk", created:"Planning" }, 42 | { id:"248-715", widget:"Area Chart", author:"Delilah Copperspoon", created:"Planning" }, 43 | { id:"248-716", widget:"Gauge", author:"Anton Sokolov", created:"In progress" }, 44 | { id:"248-717", widget:"Multicombo", author:"Aramis Stilton", created:"Planning" } 45 | ] 46 | } 47 | ]} 48 | ]); 49 | grid.openAll(); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /sources/webix/photo.js: -------------------------------------------------------------------------------- 1 | webix.protoUI({ 2 | name:"photo", 3 | getValue(){ 4 | return this.config.value; 5 | }, 6 | setValue(value){ 7 | this.setHTML(""); 8 | this.config.value = value; 9 | } 10 | }, 11 | webix.ui.template); 12 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require("path"); 2 | var webpack = require("webpack"); 3 | 4 | module.exports = function(env) { 5 | 6 | var pack = require("./package.json"); 7 | var ExtractTextPlugin = require("extract-text-webpack-plugin"); 8 | var production = !!(env && env.production === "true"); 9 | var babelSettings = { 10 | extends: path.join(__dirname, '/.babelrc') 11 | }; 12 | 13 | var config = { 14 | entry: "./sources/app.js", 15 | output: { 16 | path: path.join(__dirname, "codebase"), 17 | publicPath:"/codebase/", 18 | library: "AppDemo", 19 | libraryExport: "default", 20 | libraryTarget: "var", 21 | filename: "app.js" 22 | }, 23 | devtool: "inline-source-map", 24 | module: { 25 | rules: [ 26 | { 27 | test: /\.js$/, 28 | loader: "babel-loader?" + JSON.stringify(babelSettings) 29 | }, 30 | { 31 | test: /\.(svg|png|jpg|gif)$/, 32 | loader: "url-loader?limit=25000" 33 | }, 34 | { 35 | test: /\.(less|css)$/, 36 | loader: ExtractTextPlugin.extract("css-loader!less-loader") 37 | } 38 | ] 39 | }, 40 | resolve: { 41 | extensions: [".js"], 42 | modules: ["./sources", "node_modules"], 43 | alias:{ 44 | "jet-views":path.resolve(__dirname, "sources/views"), 45 | "jet-locales":path.resolve(__dirname, "sources/locales") 46 | } 47 | }, 48 | plugins: [ 49 | new ExtractTextPlugin("./app.css"), 50 | new webpack.DefinePlugin({ 51 | VERSION: `"${pack.version}"`, 52 | APPNAME: `"${pack.name}"`, 53 | PRODUCTION : production 54 | }) 55 | ] 56 | }; 57 | 58 | if (production) { 59 | config.plugins.push( 60 | new webpack.optimize.UglifyJsPlugin({ 61 | test: /\.js$/ 62 | }) 63 | ); 64 | } 65 | 66 | return config; 67 | } --------------------------------------------------------------------------------