@@ -5,15 +5,8 @@ storage.db | |||
*.sublime-project | |||
*.sublime-workspace | |||
src/server/mods/iwd-* | |||
!helpers/item-tooltip/styles.css | |||
!helpers/passives/**/*.css | |||
creds.js | |||
.directory | |||
firebaseConfig.js | |||
helpers/sqlite-to-rethink/rethinkdb_data | |||
helpers/sqlite-to-rethink/tmp | |||
helpers/sqlite-to-rethink/log_file | |||
helpers/sqlite-to-rethink/rethinkdb.exe | |||
.directory | |||
.idea | |||
.vscode |
@@ -1,385 +0,0 @@ | |||
{ "backgroundcolor":"#32222e", | |||
"height":4, | |||
"layers":[ | |||
{ | |||
"data":[377, 377, 337, 377, 337, 377, 377, 495, 495, 340, 377, 377, 377, 377, 337, 377], | |||
"height":4, | |||
"name":"tiles", | |||
"opacity":0.550000011920929, | |||
"properties": | |||
{ | |||
"tileset":"tiles" | |||
}, | |||
"propertytypes": | |||
{ | |||
"tileset":"string" | |||
}, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":4, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |||
"height":4, | |||
"name":"doodads", | |||
"opacity":1, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":4, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"data":[29, 31, 0, 117, 0, 0, 0, 0, 0, 0, 0, 30, 30, 138, 0, 209], | |||
"height":4, | |||
"name":"walls", | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"tileset":"walls" | |||
}, | |||
"propertytypes": | |||
{ | |||
"tileset":"string" | |||
}, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":4, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"mobs", | |||
"objects":[ | |||
{ | |||
"gid":314, | |||
"height":8, | |||
"id":824, | |||
"name":"", | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":8, | |||
"x":8, | |||
"y":16 | |||
}], | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"faction":"2", | |||
"tileset":"mobs" | |||
}, | |||
"propertytypes": | |||
{ | |||
"faction":"string", | |||
"tileset":"string" | |||
}, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"objects", | |||
"objects":[], | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"blocking":"1", | |||
"tileset":"objects" | |||
}, | |||
"propertytypes": | |||
{ | |||
"blocking":"string", | |||
"tileset":"string" | |||
}, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"clientObjects", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"notices", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"rooms", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}], | |||
"nextobjectid":826, | |||
"orientation":"orthogonal", | |||
"properties": | |||
{ | |||
"instanced":"0", | |||
"name":"Test Zone", | |||
"spawn":"[{\"maxLevel\":1,\"x\":100,\"y\":186},{\"maxLevel\":999,\"x\":132,\"y\":118}]" | |||
}, | |||
"propertytypes": | |||
{ | |||
"instanced":"string", | |||
"name":"string", | |||
"spawn":"string" | |||
}, | |||
"renderorder":"right-down", | |||
"tileheight":8, | |||
"tilesets":[ | |||
{ | |||
"columns":8, | |||
"firstgid":1, | |||
"image":"..\/..\/src\/client\/images\/walls.png", | |||
"imageheight":256, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"walls", | |||
"spacing":0, | |||
"tilecount":256, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"0": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"2": | |||
{ | |||
"probability":0.600000023841858 | |||
}, | |||
"29": | |||
{ | |||
"probability":0.800000011920929 | |||
}, | |||
"3": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"30": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"31": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"4": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"50": | |||
{ | |||
"probability":0.400000005960464 | |||
}, | |||
"8": | |||
{ | |||
"probability":0.100000001490116 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":257, | |||
"image":"..\/..\/src\/client\/images\/mobs.png", | |||
"imageheight":80, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"mobs", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":8, | |||
"tileproperties": | |||
{ | |||
"19": | |||
{ | |||
"portal":"midgaard-inn-room_2,1" | |||
} | |||
}, | |||
"tilepropertytypes": | |||
{ | |||
"19": | |||
{ | |||
"portal":"string" | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":337, | |||
"image":"..\/..\/src\/client\/images\/tiles.png", | |||
"imageheight":192, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"tiles", | |||
"spacing":0, | |||
"tilecount":192, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"0": | |||
{ | |||
"probability":2 | |||
}, | |||
"11": | |||
{ | |||
"probability":4 | |||
}, | |||
"14": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"2": | |||
{ | |||
"probability":4 | |||
}, | |||
"23": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"24": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"29": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"3": | |||
{ | |||
"probability":7 | |||
}, | |||
"30": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"31": | |||
{ | |||
"probability":10 | |||
}, | |||
"38": | |||
{ | |||
"probability":3 | |||
}, | |||
"39": | |||
{ | |||
"probability":3 | |||
}, | |||
"40": | |||
{ | |||
"probability":15 | |||
}, | |||
"41": | |||
{ | |||
"probability":2 | |||
}, | |||
"42": | |||
{ | |||
"probability":26 | |||
}, | |||
"47": | |||
{ | |||
"probability":10 | |||
}, | |||
"5": | |||
{ | |||
"probability":0.00999999977648258 | |||
}, | |||
"54": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"6": | |||
{ | |||
"probability":0.00499999988824129 | |||
}, | |||
"7": | |||
{ | |||
"probability":0.100000001490116 | |||
}, | |||
"8": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"9": | |||
{ | |||
"probability":4 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":529, | |||
"image":"..\/..\/src\/client\/images\/objects.png", | |||
"imageheight":176, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"objects", | |||
"spacing":0, | |||
"tilecount":176, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"42": | |||
{ | |||
"probability":5 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":705, | |||
"image":"..\/..\/src\/client\/images\/bigObjects.png", | |||
"imageheight":240, | |||
"imagewidth":192, | |||
"margin":0, | |||
"name":"bigObjects", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":24, | |||
"tilewidth":24 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":785, | |||
"image":"..\/..\/src\/client\/images\/bosses.png", | |||
"imageheight":240, | |||
"imagewidth":192, | |||
"margin":0, | |||
"name":"bosses", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":24, | |||
"tilewidth":24 | |||
}], | |||
"tilewidth":8, | |||
"type":"map", | |||
"version":"2017.05.26", | |||
"width":4 | |||
} |
@@ -1,385 +0,0 @@ | |||
{ "backgroundcolor":"#32222e", | |||
"height":4, | |||
"layers":[ | |||
{ | |||
"data":[340, 337, 377, 369, 340, 403, 403, 403, 370, 403, 403, 403, 377, 403, 403, 403], | |||
"height":4, | |||
"name":"tiles", | |||
"opacity":0.550000011920929, | |||
"properties": | |||
{ | |||
"tileset":"tiles" | |||
}, | |||
"propertytypes": | |||
{ | |||
"tileset":"string" | |||
}, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":4, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |||
"height":4, | |||
"name":"doodads", | |||
"opacity":1, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":4, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"data":[19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0], | |||
"height":4, | |||
"name":"walls", | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"tileset":"walls" | |||
}, | |||
"propertytypes": | |||
{ | |||
"tileset":"string" | |||
}, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":4, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"mobs", | |||
"objects":[ | |||
{ | |||
"gid":2147484435, | |||
"height":24, | |||
"id":824, | |||
"name":"", | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":24, | |||
"x":8, | |||
"y":32 | |||
}], | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"faction":"2", | |||
"tileset":"mobs" | |||
}, | |||
"propertytypes": | |||
{ | |||
"faction":"string", | |||
"tileset":"string" | |||
}, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"objects", | |||
"objects":[], | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"blocking":"1", | |||
"tileset":"objects" | |||
}, | |||
"propertytypes": | |||
{ | |||
"blocking":"string", | |||
"tileset":"string" | |||
}, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"clientObjects", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"notices", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"rooms", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}], | |||
"nextobjectid":826, | |||
"orientation":"orthogonal", | |||
"properties": | |||
{ | |||
"instanced":"0", | |||
"name":"Test Zone", | |||
"spawn":"[{\"maxLevel\":1,\"x\":100,\"y\":186},{\"maxLevel\":999,\"x\":132,\"y\":118}]" | |||
}, | |||
"propertytypes": | |||
{ | |||
"instanced":"string", | |||
"name":"string", | |||
"spawn":"string" | |||
}, | |||
"renderorder":"right-down", | |||
"tileheight":8, | |||
"tilesets":[ | |||
{ | |||
"columns":8, | |||
"firstgid":1, | |||
"image":"..\/..\/src\/client\/images\/walls.png", | |||
"imageheight":256, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"walls", | |||
"spacing":0, | |||
"tilecount":256, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"0": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"2": | |||
{ | |||
"probability":0.600000023841858 | |||
}, | |||
"29": | |||
{ | |||
"probability":0.800000011920929 | |||
}, | |||
"3": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"30": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"31": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"4": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"50": | |||
{ | |||
"probability":0.400000005960464 | |||
}, | |||
"8": | |||
{ | |||
"probability":0.100000001490116 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":257, | |||
"image":"..\/..\/src\/client\/images\/mobs.png", | |||
"imageheight":80, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"mobs", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":8, | |||
"tileproperties": | |||
{ | |||
"19": | |||
{ | |||
"portal":"midgaard-inn-room_2,1" | |||
} | |||
}, | |||
"tilepropertytypes": | |||
{ | |||
"19": | |||
{ | |||
"portal":"string" | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":337, | |||
"image":"..\/..\/src\/client\/images\/tiles.png", | |||
"imageheight":192, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"tiles", | |||
"spacing":0, | |||
"tilecount":192, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"0": | |||
{ | |||
"probability":2 | |||
}, | |||
"11": | |||
{ | |||
"probability":4 | |||
}, | |||
"14": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"2": | |||
{ | |||
"probability":4 | |||
}, | |||
"23": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"24": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"29": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"3": | |||
{ | |||
"probability":7 | |||
}, | |||
"30": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"31": | |||
{ | |||
"probability":10 | |||
}, | |||
"38": | |||
{ | |||
"probability":3 | |||
}, | |||
"39": | |||
{ | |||
"probability":3 | |||
}, | |||
"40": | |||
{ | |||
"probability":15 | |||
}, | |||
"41": | |||
{ | |||
"probability":2 | |||
}, | |||
"42": | |||
{ | |||
"probability":26 | |||
}, | |||
"47": | |||
{ | |||
"probability":10 | |||
}, | |||
"5": | |||
{ | |||
"probability":0.00999999977648258 | |||
}, | |||
"54": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"6": | |||
{ | |||
"probability":0.00499999988824129 | |||
}, | |||
"7": | |||
{ | |||
"probability":0.100000001490116 | |||
}, | |||
"8": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"9": | |||
{ | |||
"probability":4 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":529, | |||
"image":"..\/..\/src\/client\/images\/objects.png", | |||
"imageheight":176, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"objects", | |||
"spacing":0, | |||
"tilecount":176, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"42": | |||
{ | |||
"probability":5 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":705, | |||
"image":"..\/..\/src\/client\/images\/bigObjects.png", | |||
"imageheight":240, | |||
"imagewidth":192, | |||
"margin":0, | |||
"name":"bigObjects", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":24, | |||
"tilewidth":24 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":785, | |||
"image":"..\/..\/src\/client\/images\/bosses.png", | |||
"imageheight":240, | |||
"imagewidth":192, | |||
"margin":0, | |||
"name":"bosses", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":24, | |||
"tilewidth":24 | |||
}], | |||
"tilewidth":8, | |||
"type":"map", | |||
"version":"2017.05.26", | |||
"width":4 | |||
} |
@@ -1,385 +0,0 @@ | |||
{ "backgroundcolor":"#32222e", | |||
"height":4, | |||
"layers":[ | |||
{ | |||
"data":[0, 0, 0, 0, 0, 402, 401, 341, 365, 401, 0, 470, 0, 403, 486, 401], | |||
"height":4, | |||
"name":"tiles", | |||
"opacity":0.550000011920929, | |||
"properties": | |||
{ | |||
"tileset":"tiles" | |||
}, | |||
"propertytypes": | |||
{ | |||
"tileset":"string" | |||
}, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":4, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 683, 0], | |||
"height":4, | |||
"name":"doodads", | |||
"opacity":1, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":4, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"data":[342, 382, 343, 342, 383, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0], | |||
"height":4, | |||
"name":"walls", | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"tileset":"walls" | |||
}, | |||
"propertytypes": | |||
{ | |||
"tileset":"string" | |||
}, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":4, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"mobs", | |||
"objects":[ | |||
{ | |||
"gid":2147483930, | |||
"height":8, | |||
"id":823, | |||
"name":"", | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":8, | |||
"x":16, | |||
"y":24 | |||
}], | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"faction":"2", | |||
"tileset":"mobs" | |||
}, | |||
"propertytypes": | |||
{ | |||
"faction":"string", | |||
"tileset":"string" | |||
}, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"objects", | |||
"objects":[], | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"blocking":"1", | |||
"tileset":"objects" | |||
}, | |||
"propertytypes": | |||
{ | |||
"blocking":"string", | |||
"tileset":"string" | |||
}, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"clientObjects", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"notices", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"rooms", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}], | |||
"nextobjectid":824, | |||
"orientation":"orthogonal", | |||
"properties": | |||
{ | |||
"instanced":"0", | |||
"name":"Test Zone", | |||
"spawn":"[{\"maxLevel\":1,\"x\":100,\"y\":186},{\"maxLevel\":999,\"x\":132,\"y\":118}]" | |||
}, | |||
"propertytypes": | |||
{ | |||
"instanced":"string", | |||
"name":"string", | |||
"spawn":"string" | |||
}, | |||
"renderorder":"right-down", | |||
"tileheight":8, | |||
"tilesets":[ | |||
{ | |||
"columns":8, | |||
"firstgid":1, | |||
"image":"..\/..\/src\/client\/images\/walls.png", | |||
"imageheight":256, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"walls", | |||
"spacing":0, | |||
"tilecount":256, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"0": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"2": | |||
{ | |||
"probability":0.600000023841858 | |||
}, | |||
"29": | |||
{ | |||
"probability":0.800000011920929 | |||
}, | |||
"3": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"30": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"31": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"4": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"50": | |||
{ | |||
"probability":0.400000005960464 | |||
}, | |||
"8": | |||
{ | |||
"probability":0.100000001490116 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":257, | |||
"image":"..\/..\/src\/client\/images\/mobs.png", | |||
"imageheight":80, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"mobs", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":8, | |||
"tileproperties": | |||
{ | |||
"19": | |||
{ | |||
"portal":"midgaard-inn-room_2,1" | |||
} | |||
}, | |||
"tilepropertytypes": | |||
{ | |||
"19": | |||
{ | |||
"portal":"string" | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":337, | |||
"image":"..\/..\/src\/client\/images\/tiles.png", | |||
"imageheight":192, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"tiles", | |||
"spacing":0, | |||
"tilecount":192, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"0": | |||
{ | |||
"probability":2 | |||
}, | |||
"11": | |||
{ | |||
"probability":4 | |||
}, | |||
"14": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"2": | |||
{ | |||
"probability":4 | |||
}, | |||
"23": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"24": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"29": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"3": | |||
{ | |||
"probability":7 | |||
}, | |||
"30": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"31": | |||
{ | |||
"probability":10 | |||
}, | |||
"38": | |||
{ | |||
"probability":3 | |||
}, | |||
"39": | |||
{ | |||
"probability":3 | |||
}, | |||
"40": | |||
{ | |||
"probability":15 | |||
}, | |||
"41": | |||
{ | |||
"probability":2 | |||
}, | |||
"42": | |||
{ | |||
"probability":26 | |||
}, | |||
"47": | |||
{ | |||
"probability":10 | |||
}, | |||
"5": | |||
{ | |||
"probability":0.00999999977648258 | |||
}, | |||
"54": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"6": | |||
{ | |||
"probability":0.00499999988824129 | |||
}, | |||
"7": | |||
{ | |||
"probability":0.100000001490116 | |||
}, | |||
"8": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"9": | |||
{ | |||
"probability":4 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":529, | |||
"image":"..\/..\/src\/client\/images\/objects.png", | |||
"imageheight":176, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"objects", | |||
"spacing":0, | |||
"tilecount":176, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"42": | |||
{ | |||
"probability":5 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":705, | |||
"image":"..\/..\/src\/client\/images\/bigObjects.png", | |||
"imageheight":240, | |||
"imagewidth":192, | |||
"margin":0, | |||
"name":"bigObjects", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":24, | |||
"tilewidth":24 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":785, | |||
"image":"..\/..\/src\/client\/images\/bosses.png", | |||
"imageheight":240, | |||
"imagewidth":192, | |||
"margin":0, | |||
"name":"bosses", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":24, | |||
"tilewidth":24 | |||
}], | |||
"tilewidth":8, | |||
"type":"map", | |||
"version":"2017.05.26", | |||
"width":4 | |||
} |
@@ -1,385 +0,0 @@ | |||
{ "backgroundcolor":"#32222e", | |||
"height":4, | |||
"layers":[ | |||
{ | |||
"data":[377, 377, 377, 337, 340, 495, 377, 377, 377, 0, 368, 0, 337, 0, 408, 408], | |||
"height":4, | |||
"name":"tiles", | |||
"opacity":0.550000011920929, | |||
"properties": | |||
{ | |||
"tileset":"tiles" | |||
}, | |||
"propertytypes": | |||
{ | |||
"tileset":"string" | |||
}, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":4, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"data":[0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |||
"height":4, | |||
"name":"doodads", | |||
"opacity":1, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":4, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"data":[0, 52, 0, 0, 0, 0, 0, 52, 52, 45, 0, 51, 0, 51, 0, 0], | |||
"height":4, | |||
"name":"walls", | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"tileset":"walls" | |||
}, | |||
"propertytypes": | |||
{ | |||
"tileset":"string" | |||
}, | |||
"type":"tilelayer", | |||
"visible":true, | |||
"width":4, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"mobs", | |||
"objects":[ | |||
{ | |||
"gid":2147483938, | |||
"height":8, | |||
"id":824, | |||
"name":"", | |||
"rotation":0, | |||
"type":"", | |||
"visible":true, | |||
"width":8, | |||
"x":24, | |||
"y":32 | |||
}], | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"faction":"2", | |||
"tileset":"mobs" | |||
}, | |||
"propertytypes": | |||
{ | |||
"faction":"string", | |||
"tileset":"string" | |||
}, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"objects", | |||
"objects":[], | |||
"opacity":1, | |||
"properties": | |||
{ | |||
"blocking":"1", | |||
"tileset":"objects" | |||
}, | |||
"propertytypes": | |||
{ | |||
"blocking":"string", | |||
"tileset":"string" | |||
}, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"clientObjects", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"notices", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}, | |||
{ | |||
"draworder":"topdown", | |||
"name":"rooms", | |||
"objects":[], | |||
"opacity":1, | |||
"type":"objectgroup", | |||
"visible":true, | |||
"x":0, | |||
"y":0 | |||
}], | |||
"nextobjectid":825, | |||
"orientation":"orthogonal", | |||
"properties": | |||
{ | |||
"instanced":"0", | |||
"name":"Test Zone", | |||
"spawn":"[{\"maxLevel\":1,\"x\":100,\"y\":186},{\"maxLevel\":999,\"x\":132,\"y\":118}]" | |||
}, | |||
"propertytypes": | |||
{ | |||
"instanced":"string", | |||
"name":"string", | |||
"spawn":"string" | |||
}, | |||
"renderorder":"right-down", | |||
"tileheight":8, | |||
"tilesets":[ | |||
{ | |||
"columns":8, | |||
"firstgid":1, | |||
"image":"..\/..\/src\/client\/images\/walls.png", | |||
"imageheight":256, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"walls", | |||
"spacing":0, | |||
"tilecount":256, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"0": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"2": | |||
{ | |||
"probability":0.600000023841858 | |||
}, | |||
"29": | |||
{ | |||
"probability":0.800000011920929 | |||
}, | |||
"3": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"30": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"31": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"4": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"50": | |||
{ | |||
"probability":0.400000005960464 | |||
}, | |||
"8": | |||
{ | |||
"probability":0.100000001490116 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":257, | |||
"image":"..\/..\/src\/client\/images\/mobs.png", | |||
"imageheight":80, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"mobs", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":8, | |||
"tileproperties": | |||
{ | |||
"19": | |||
{ | |||
"portal":"midgaard-inn-room_2,1" | |||
} | |||
}, | |||
"tilepropertytypes": | |||
{ | |||
"19": | |||
{ | |||
"portal":"string" | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":337, | |||
"image":"..\/..\/src\/client\/images\/tiles.png", | |||
"imageheight":192, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"tiles", | |||
"spacing":0, | |||
"tilecount":192, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"0": | |||
{ | |||
"probability":2 | |||
}, | |||
"11": | |||
{ | |||
"probability":4 | |||
}, | |||
"14": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"2": | |||
{ | |||
"probability":4 | |||
}, | |||
"23": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"24": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"29": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"3": | |||
{ | |||
"probability":7 | |||
}, | |||
"30": | |||
{ | |||
"probability":0.200000002980232 | |||
}, | |||
"31": | |||
{ | |||
"probability":10 | |||
}, | |||
"38": | |||
{ | |||
"probability":3 | |||
}, | |||
"39": | |||
{ | |||
"probability":3 | |||
}, | |||
"40": | |||
{ | |||
"probability":15 | |||
}, | |||
"41": | |||
{ | |||
"probability":2 | |||
}, | |||
"42": | |||
{ | |||
"probability":26 | |||
}, | |||
"47": | |||
{ | |||
"probability":10 | |||
}, | |||
"5": | |||
{ | |||
"probability":0.00999999977648258 | |||
}, | |||
"54": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"6": | |||
{ | |||
"probability":0.00499999988824129 | |||
}, | |||
"7": | |||
{ | |||
"probability":0.100000001490116 | |||
}, | |||
"8": | |||
{ | |||
"probability":0.5 | |||
}, | |||
"9": | |||
{ | |||
"probability":4 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":529, | |||
"image":"..\/..\/src\/client\/images\/objects.png", | |||
"imageheight":176, | |||
"imagewidth":64, | |||
"margin":0, | |||
"name":"objects", | |||
"spacing":0, | |||
"tilecount":176, | |||
"tileheight":8, | |||
"tiles": | |||
{ | |||
"42": | |||
{ | |||
"probability":5 | |||
} | |||
}, | |||
"tilewidth":8 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":705, | |||
"image":"..\/..\/src\/client\/images\/bigObjects.png", | |||
"imageheight":240, | |||
"imagewidth":192, | |||
"margin":0, | |||
"name":"bigObjects", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":24, | |||
"tilewidth":24 | |||
}, | |||
{ | |||
"columns":8, | |||
"firstgid":785, | |||
"image":"..\/..\/src\/client\/images\/bosses.png", | |||
"imageheight":240, | |||
"imagewidth":192, | |||
"margin":0, | |||
"name":"bosses", | |||
"spacing":0, | |||
"tilecount":80, | |||
"tileheight":24, | |||
"tilewidth":24 | |||
}], | |||
"tilewidth":8, | |||
"type":"map", | |||
"version":"2017.05.26", | |||
"width":4 | |||
} |
@@ -1,81 +0,0 @@ | |||
$(function () { | |||
var items = [{ | |||
name: `Infernal Bite`, | |||
type: 'Curved Sword', | |||
rqr: { | |||
level: 25, | |||
dex: 200 | |||
}, | |||
quality: 4, | |||
stats: { | |||
Dexterity: '[200 - 300]', | |||
'Increased Crit Multiplier': '[40% - 65%]', | |||
'Your hits always critically hit': null, | |||
'50% of your damage is converted to fire damage': null, | |||
'You take [2% - 5%] of all damage you deal yourself': null | |||
}, | |||
spritesheet: '../../src/client/images/items.png', | |||
sprite: [9, 9] | |||
}, { | |||
name: `Cowl of Obscurity`, | |||
type: 'Silk Cowl', | |||
rqr: { | |||
level: 20, | |||
dex: 150 | |||
}, | |||
quality: 4, | |||
stats: { | |||
Vitality: '[20 - 35]', | |||
Dexterity: '[150 - 220]', | |||
'Critical hits heal you for [1% - 3%] of your maximum health': null, | |||
'Your hits have a 50% chance to miss': null, | |||
}, | |||
spritesheet: '../../src/client/images/items.png', | |||
sprite: [0, 4] | |||
}]; | |||
for (var i = 0; i < items.length - 1; i++) { | |||
$('.tooltip:first-child').clone().appendTo('body'); | |||
} | |||
items.forEach(function (item, i) { | |||
var div = $('.tooltip').eq(i); | |||
for (var p in item) { | |||
var val = item[p]; | |||
div.find('.' + p).html(val); | |||
} | |||
var stats = item.stats; | |||
if (stats) { | |||
var val = ''; | |||
for (var s in stats) { | |||
var v = s; | |||
if (stats[s]) | |||
v = stats[s] + ' ' + s; | |||
val += '<div class="stat">' + v + '</div>'; | |||
} | |||
div.find('.stats').html(val); | |||
} | |||
var rqr = item.rqr; | |||
if (rqr) { | |||
var val = 'Requires: '; | |||
for (var s in rqr) { | |||
val += rqr[s] + ' ' + s; | |||
if (Object.keys(rqr).indexOf(s) < Object.keys(rqr).length - 1) | |||
val += ', '; | |||
} | |||
div.find('.rqr').html(val); | |||
} | |||
div.find('.sprite') | |||
.css({ | |||
background: 'url(' + item.spritesheet + ') ' + (-item.sprite[0] * 64) + 'px ' + (-item.sprite[1] * 64) + 'px' | |||
}) | |||
.html(''); | |||
div.find('.name').addClass('q' + item.quality); | |||
}); | |||
}); |
@@ -1,21 +0,0 @@ | |||
<!doctype html> | |||
<html> | |||
<head> | |||
<title>builder</title> | |||
<link rel="stylesheet" href="styles.css"> | |||
<script src="../../src/client/plugins/jquery.min.js"></script> | |||
<script src="builder.js"></script> | |||
</head> | |||
<body> | |||
<div class="tooltip"> | |||
<div class="sprite-box"> | |||
<div class="sprite"></div> | |||
</div> | |||
<div class="name"></div> | |||
<div class="type"></div> | |||
<div class="rqr"></div> | |||
<div class="stats"></div> | |||
<div class="description"></div> | |||
</div> | |||
</body> | |||
</html> |
@@ -1,76 +0,0 @@ | |||
body { | |||
background-color: #2d2136; | |||
padding: 10px; | |||
margin: 0px; | |||
} | |||
@font-face | |||
{ | |||
font-family: bitty; | |||
src: url('../../src/client/fonts/bitty.ttf'); | |||
} | |||
.tooltip { | |||
background-color: #3c3f4c; | |||
text-align: center; | |||
padding: 10px; | |||
margin-bottom: 10px; | |||
font-family: bitty; | |||
width: 400px; | |||
} | |||
.sprite-box { | |||
margin: 0 auto; | |||
height: 64px; | |||
width: 64px; | |||
margin-bottom: 15px; | |||
background-color: #2d2136; | |||
padding: 5px; | |||
} | |||
.sprite { | |||
height: 64px; | |||
} | |||
.name.q0 { | |||
color: #fafcfc; | |||
} | |||
.name.q1 { | |||
color: #3fa7dd; | |||
} | |||
.name.q2 { | |||
color: #ffeb38; | |||
} | |||
.name.q3 { | |||
color: #a24eff; | |||
} | |||
.name.q4 { | |||
color: #ff6942; | |||
} | |||
.type { | |||
color: #69696e; | |||
margin-bottom: 15px; | |||
} | |||
.rqr { | |||
color: #fafcfc; | |||
margin-bottom: 15px; | |||
} | |||
.stats { | |||
color: #929398; | |||
} | |||
.stat { | |||
margin-bottom: 5px; | |||
} | |||
.stat:before { | |||
content: '*'; | |||
margin-right: 5px; | |||
} |
@@ -1 +0,0 @@ | |||
.q0{color:#f2f5f5}.q1{color:#4ac441}.q2{color:#3fa7dd}.q3{color:#a24eff}.q4{color:#ff6942}.color-red{color:#d43346 !important}.color-redA{color:#ff4252 !important}.color-blueA{color:#48edff !important}.color-blueB{color:#3fa7dd !important}.color-greenB{color:#4ac441 !important}.color-yellowB{color:#faac45 !important}.color-green{color:#80f643 !important}.color-brownC{color:#b15a30 !important}.color-brownD{color:#763b3b !important}.color-grayA{color:#f2f5f5 !important}.color-grayB{color:#c0c3cf !important}.color-grayC{color:#929398 !important}.color-grayD{color:#69696e !important}.color-pinkB{color:#de43ae !important}html,body{width:100vw;height:100vh}body{background-color:#2d2136;padding:0;margin:0;overflow:hidden}.canvas,.ui-container{position:absolute}.ui-container{width:100%;height:100%;pointer-events:none}.ui-container>*{pointer-events:auto}*{box-sizing:border-box;font-family:bitty;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-family:"courier"}.disabled{opacity:.4 !important;pointer-events:none !important}::-webkit-scrollbar{width:16px}::-webkit-scrollbar-track{background-color:#3c3f4c;-webkit-border-radius:0;border-radius:0}::-webkit-scrollbar-thumb{-webkit-border-radius:10px;border-radius:0;background:#929398} |
@@ -1,59 +0,0 @@ | |||
@import "../../../src/client/css/colors.less"; | |||
html, body { | |||
width: 100vw; | |||
height: 100vh; | |||
} | |||
body { | |||
background-color: @black; | |||
padding: 0px; | |||
margin: 0px; | |||
overflow: hidden; | |||
} | |||
.canvas, .ui-container { | |||
position: absolute; | |||
} | |||
.ui-container { | |||
width: 100%; | |||
height: 100%; | |||
pointer-events: none; | |||
> * { | |||
pointer-events: auto; | |||
} | |||
} | |||
* { | |||
box-sizing: border-box; | |||
font-family: bitty; | |||
-webkit-touch-callout: none; | |||
-webkit-user-select: none; | |||
-khtml-user-select: none; | |||
-moz-user-select: none; | |||
-ms-user-select: none; | |||
user-select: none; | |||
font-family: "courier"; | |||
} | |||
.disabled { | |||
opacity: 0.4 !important; | |||
pointer-events: none !important; | |||
} | |||
::-webkit-scrollbar { | |||
width: 16px; | |||
} | |||
::-webkit-scrollbar-track { | |||
background-color: @gray; | |||
-webkit-border-radius: 0px; | |||
border-radius: 0px; | |||
} | |||
::-webkit-scrollbar-thumb { | |||
-webkit-border-radius: 10px; | |||
border-radius: 0px; | |||
background: @lightGray; | |||
} | |||
@@ -1 +0,0 @@ | |||
@import "../../../src/client/css/colors.less"; |
@@ -1,12 +0,0 @@ | |||
<!doctype html> | |||
<html> | |||
<head> | |||
<title>test</title> | |||
<link rel="stylesheet" href="css/main.css"> | |||
<script src="plugins/require.js" data-main="js/app"></script> | |||
</head> | |||
<body> | |||
<canvas class="canvas"></canvas> | |||
<div class="ui-container"></div> | |||
</body> | |||
</html> |
@@ -1,31 +0,0 @@ | |||
require.config({ | |||
baseUrl: '', | |||
waitSeconds: 120, | |||
paths: { | |||
'jquery': 'plugins/jquery.min', | |||
'text': 'plugins/text', | |||
'html': 'plugins/html', | |||
'css': 'plugins/css', | |||
'socket': 'plugins/socket' | |||
}, | |||
shim: { | |||
'jquery': { | |||
exports: '$' | |||
}, | |||
'socket': { | |||
exports: 'io' | |||
} | |||
} | |||
}); | |||
require([ | |||
'js/helpers', | |||
'jquery', | |||
'js/main' | |||
], function ( | |||
helpers, | |||
jQuery, | |||
main | |||
) { | |||
main.init(); | |||
}); |
@@ -1,50 +0,0 @@ | |||
define([ | |||
'socket' | |||
], function ( | |||
io | |||
) { | |||
return { | |||
socket: null, | |||
init: function (onReady) { | |||
let tType = 'websocket'; | |||
this.socket = io({ | |||
transports: [tType] | |||
}); | |||
this.socket.on('connect', this.onConnected.bind(this, onReady)); | |||
}, | |||
load: function (fileName, callback) { | |||
this.socket.emit('request', { | |||
fileName: fileName, | |||
action: 'load' | |||
}, callback); | |||
}, | |||
save: function (fileName, data, callback) { | |||
this.socket.emit('request', { | |||
fileName: fileName, | |||
action: 'save', | |||
data: data | |||
}, callback); | |||
}, | |||
persist: function (data) { | |||
this.socket.emit('request', { | |||
action: 'persist', | |||
data: data | |||
}); | |||
}, | |||
getFileList: function (callback) { | |||
this.socket.emit('request', { | |||
action: 'getFileList' | |||
}, callback); | |||
}, | |||
onConnected: function (onReady) { | |||
onReady(); | |||
} | |||
}; | |||
}); |
@@ -1,63 +0,0 @@ | |||
define([ | |||
], function ( | |||
) { | |||
return { | |||
standAlone: false, | |||
lineWidth: 5, | |||
blockSize: 20, | |||
defaultDistance: 50, | |||
defaultDistanceInc: 60, | |||
defaultAngle: Math.PI / 2, | |||
defaultAngleInc: Math.PI / 8, | |||
gridSize: 30, | |||
scrollSpeed: 0.75, | |||
stats: { | |||
str: 'strength', | |||
int: 'intellect', | |||
dex: 'dexterity', | |||
vit: 'vitality', | |||
regenHp: 'health regeneration', | |||
manaMax: 'maximum mana', | |||
regenMana: 'mana regeneration', | |||
armor: 'armor', | |||
attackSpeed: 'attack speed', | |||
castSpeed: 'cast speed', | |||
blockAttackChance: 'chance to block attacks', | |||
blockSpellChance: 'chance to block spells', | |||
addCritChance: 'increased crit chance', | |||
addCritMultiplier: 'increased crit multiplier', | |||
magicFind: 'increased item quality', | |||
itemQuantity: 'increased item quantity', | |||
sprintChance: 'sprint chance', | |||
allAttributes: 'to all attributes', | |||
xpIncrease: 'additional xp per kill', | |||
lvlRequire: 'level requirement reduction', | |||
elementArcanePercent: 'increased arcane damage', | |||
elementFrostPercent: 'increased frost damage', | |||
elementFirePercent: 'increased fire damage', | |||
elementHolyPercent: 'increased holy damage', | |||
elementPoisonPercent: 'increased poison damage', | |||
elementAllResist: 'all resistance', | |||
elementArcaneResist: 'arcane resistance', | |||
elementFrostResist: 'frost resistance', | |||
elementFireResist: 'fire resistance', | |||
elementHolyResist: 'holy resistance', | |||
elementPoisonResist: 'poison resistance', | |||
elementAllResist: 'all resistance', | |||
physicalPercent: 'increased physical damage', | |||
spellPercent: 'increased spell damage', | |||
elementPercent: 'increased elemental damage', | |||
addSpellCritChance: 'increased spell crit chance', | |||
addSpellCritMultiplier: 'increased spell crit multiplier', | |||
addAttackCritChance: 'increased attack crit chance', | |||
addAttackCritMultiplier: 'increased attack crit multiplier', | |||
dodgeAttackChance: 'chance to dodge attacks' | |||
} | |||
}; | |||
}); |
@@ -1,47 +0,0 @@ | |||
define([ | |||
], function ( | |||
) { | |||
var events = { | |||
events: {}, | |||
on: function (event, callback) { | |||
var list = this.events[event] || (this.events[event] = []); | |||
list.push(callback); | |||
return callback; | |||
}, | |||
off: function (event, callback) { | |||
var list = this.events[event] || []; | |||
var lLen = list.length; | |||
for (var i = 0; i < lLen; i++) { | |||
if (list[i] == callback) { | |||
list.splice(i, 1); | |||
i--; | |||
lLen--; | |||
} | |||
} | |||
if (lLen == 0) | |||
delete this.events[event]; | |||
}, | |||
emit: function (event) { | |||
var args = [].slice.call(arguments, 1); | |||
var list = this.events[event]; | |||
if (!list) | |||
return; | |||
var len = list.length | |||
for (var i = 0; i < len; i++) { | |||
var l = list[i]; | |||
l.apply(null, args); | |||
} | |||
} | |||
}; | |||
return events; | |||
}); |
@@ -1,303 +0,0 @@ | |||
define([ | |||
'js/tplNode', | |||
'js/events', | |||
'js/client', | |||
'js/input' | |||
], function ( | |||
tplNode, | |||
events, | |||
client, | |||
input | |||
) { | |||
return { | |||
links: [], | |||
nodes: [], | |||
mode: 'none', | |||
init: function () { | |||
events.on('onAreaSelect', this.events.onAreaSelect.bind(this)); | |||
events.on('onMouseMove', this.events.onMouseMove.bind(this)); | |||
}, | |||
findNode: function (x, y) { | |||
let res = this.nodes.find(n => ((n.pos.x == x) && (n.pos.y == y))); | |||
if (!res) { | |||
res = this.nodes.find(function (n) { | |||
return ((n.size > 0) && (Math.abs(n.pos.x - x) <= 1) && (Math.abs(n.pos.y - y) <= 1)); | |||
}); | |||
} | |||
return res; | |||
}, | |||
callAction: function (action, options = {}) { | |||
let node = options.node || this.findNode(options.x, options.y); | |||
options.node = node; | |||
return !this.actions[action].call(this, options); | |||
}, | |||
getSelected: function (single) { | |||
let selected = this.nodes.filter(n => n.selected); | |||
if ((single) && (selected.length != 1)) | |||
return null; | |||
if (single) | |||
return selected[0]; | |||
return selected; | |||
}, | |||
serialize: function () { | |||
return JSON.stringify({ | |||
nodes: this.nodes, | |||
links: this.links.map(function (l) { | |||
return { | |||
from: { | |||
id: l.from.id | |||
}, | |||
to: { | |||
id: l.to.id | |||
} | |||
}; | |||
}) | |||
}); | |||
}, | |||
getData: function () { | |||
return { | |||
nodes: this.nodes.map(function (n) { | |||
let res = { | |||
id: n.id, | |||
pos: n.pos | |||
}; | |||
['size', 'color', 'stats', 'spiritStart'].forEach(function (s) { | |||
if (n[s] !== undefined) | |||
res[s] = n[s]; | |||
}); | |||
return res; | |||
}), | |||
links: this.links.map(function (l) { | |||
return { | |||
from: l.from.id, | |||
to: l.to.id | |||
}; | |||
}) | |||
}; | |||
}, | |||
getNextId: function () { | |||
for (var i = 0; i < this.nodes.length; i++) { | |||
if (!this.nodes.some(n => (n.id == i))) | |||
return i; | |||
} | |||
return this.nodes.length; | |||
}, | |||
setMode: function (mode) { | |||
this.mode = mode; | |||
}, | |||
actions: { | |||
reset: function () { | |||
this.nodes = []; | |||
this.links = []; | |||
events.emit('onNew'); | |||
}, | |||
load: function (data) { | |||
this.nodes = data.nodes; | |||
this.nodes.forEach(function (n) { | |||
if ((n.group) && (!n.group.push)) | |||
n.group = [n.group]; | |||
}); | |||
this.links = data.links.map(function (l) { | |||
l.from = this.nodes.find(n => (n.id == l.from.id)); | |||
l.to = this.nodes.find(n => (n.id == l.to.id)); | |||
return l; | |||
}, this); | |||
events.emit('onTreeLoaded', { | |||
nodes: this.nodes, | |||
links: this.links | |||
}); | |||
}, | |||
selectNode: function (options) { | |||
if ( | |||
( | |||
(!options.node) || | |||
(!this.nodes.some(n => ((n.selected) && (n == options.node)))) | |||
) && | |||
( | |||
(!input.isKeyDown('shift')) || | |||
(options.force) | |||
) | |||
) | |||
this.nodes.forEach(n => (n.selected = false)); | |||
if (options.node) | |||
options.node.selected = true; | |||
else if (options instanceof Array) | |||
options.forEach(n => (n.selected = true)); | |||
events.emit('onSelectNode', this.nodes.filter(n => n.selected)); | |||
if (options.node) | |||
events.emit('onFocusNode', options.node); | |||
return !options.node; | |||
}, | |||
addNode: function (options) { | |||
this.nodes.push(tplNode.build({ | |||
id: this.getNextId(), | |||
x: options.x, | |||
y: options.y | |||
})); | |||
this.callAction('selectNode'); | |||
}, | |||
connectNode: function (options) { | |||
let node = options.node; | |||
if (!node) { | |||
this.callAction('selectNode'); | |||
return true; | |||
} | |||
let singleSelected = this.getSelected(true); | |||
if ((singleSelected) && (input.isKeyDown('ctrl'))) { | |||
if (options.shiftDown) { | |||
this.links.spliceWhere(l => ( | |||
( | |||
(l.from == node) || | |||
(l.to == node) | |||
) && | |||
( | |||
(l.from == singleSelected) || | |||
(l.to == singleSelected) | |||
) && | |||
(node != singleSelected) | |||
)); | |||
} else { | |||
this.links.push({ | |||
from: singleSelected, | |||
to: node | |||
}); | |||
} | |||
this.callAction('selectNode', { | |||
force: true | |||
}); | |||
this.callAction('selectNode', { | |||
node: options.node | |||
}); | |||
} else { | |||
return this.callAction('selectNode', { | |||
node: node | |||
}); | |||
} | |||
}, | |||
moveNode: function (options) { | |||
let selected = this.getSelected(); | |||
if (!selected.length) | |||
return true; | |||
if (selected.length == 0) | |||
return; | |||
selected.sort(function (a, b) { | |||
let distanceA = Math.abs(a.pos.x - options.x) + Math.abs(a.pos.y - options.y); | |||
let distanceB = Math.abs(b.pos.x - options.x) + Math.abs(b.pos.y - options.y); | |||
return (distanceA > distanceB) ? 1 : -1; | |||
}); | |||
let deltaX = selected[0].pos.x - options.x; | |||
let deltaY = selected[0].pos.y - options.y; | |||
selected.forEach(function (s) { | |||
s.pos.x -= deltaX; | |||
s.pos.y -= deltaY; | |||
}); | |||
}, | |||
deleteNode: function (options) { | |||
let selected = this.getSelected(); | |||
selected.forEach(function (s) { | |||
this.nodes.spliceWhere(n => (n == s)); | |||
this.links.spliceWhere(n => ((n.from == s) || (n.to == s))); | |||
s.selected = false; | |||
events.emit('onDeleteNode', s); | |||
}, this); | |||
}, | |||
recolorNode: function () { | |||
let selected = this.getSelected(true); | |||
if (!selected) | |||
return true; | |||
selected.color = (selected.color + 1) % 7; | |||
}, | |||
resizeNode: function () { | |||
let selected = this.getSelected(true); | |||
if (!selected) | |||
return true; | |||
selected.size = (selected.size + 1) % 3; | |||
} | |||
}, | |||
events: { | |||
onAreaSelect: function (from, to) { | |||
if (!input.isKeyDown('ctrl')) | |||
this.nodes.forEach(n => (n.selected = false)); | |||
let lowX = Math.min(from.x, to.x); | |||
let lowY = Math.min(from.y, to.y); | |||
let highX = Math.max(from.x, to.x); | |||
let highY = Math.max(from.y, to.y); | |||
for (let i = lowX; i <= highX; i++) { | |||
for (let j = lowY; j <= highY; j++) { | |||
let node = this.findNode(i, j); | |||
if (!node) | |||
continue; | |||
node.selected = true; | |||
} | |||
} | |||
events.emit('onSelectNode', this.nodes.filter(n => n.selected)); | |||
}, | |||
onMouseMove: function (e) { | |||
let hoverNode = this.findNode(e.x, e.y); | |||
if (hoverNode) { | |||
let text = ''; | |||
let stats = hoverNode.stats || {}; | |||
for (let s in stats) | |||
text += s + ': ' + stats[s] + '<br />'; | |||
text = text.substr(0, text.length - 6); | |||
if (text.length > 0) | |||
events.emit('onShowTooltip', e, text); | |||
} else | |||
events.emit('onHideTooltip'); | |||
} | |||
} | |||
}; | |||
}); |
@@ -1,113 +0,0 @@ | |||
Array.prototype.firstIndex = function (callback, thisArg) { | |||
var T = thisArg; | |||
var O = Object(this); | |||
var len = O.length >>> 0; | |||
var k = 0; | |||
while (k < len) { | |||
var kValue; | |||
if (k in O) { | |||
kValue = O[k]; | |||
if (callback.call(T, kValue, k, O)) | |||
return k; | |||
} | |||
k++; | |||
} | |||
return -1; | |||
}; | |||
Array.prototype.spliceWhere = function (callback, thisArg) { | |||
var T = thisArg; | |||
var O = Object(this); | |||
var len = O.length >>> 0; | |||
var k = 0; | |||
while (k < len) { | |||
var kValue; | |||
if (k in O) { | |||
kValue = O[k]; | |||
if (callback.call(T, kValue, k, O)) { | |||
O.splice(k, 1); | |||
k--; | |||
} | |||
} | |||
k++; | |||
} | |||
}; | |||
Array.prototype.spliceFirstWhere = function (callback, thisArg) { | |||
var T = thisArg; | |||
var O = Object(this); | |||
var len = O.length >>> 0; | |||
var k = 0; | |||
while (k < len) { | |||
var kValue; | |||
if (k in O) { | |||
kValue = O[k]; | |||
if (callback.call(T, kValue, k, O)) { | |||
O.splice(k, 1); | |||
return kValue; | |||
} | |||
} | |||
k++; | |||
} | |||
}; | |||
window._ = { | |||
create: function () { | |||
var result = {}; | |||
[].slice.call(arguments).forEach(function (a) { | |||
$.extend(true, result, a); | |||
}); | |||
return result; | |||
}, | |||
get2dArray: function (w, h, def) { | |||
def = def || 0; | |||
var result = []; | |||
for (var i = 0; i < w; i++) { | |||
var inner = []; | |||
for (var j = 0; j < h; j++) { | |||
if (def == 'array') | |||
inner.push([]); | |||
else | |||
inner.push(def); | |||
} | |||
result.push(inner); | |||
} | |||
return result; | |||
}, | |||
randWeighted: function (weights) { | |||
var sample = []; | |||
weights.forEach(function (w, i) { | |||
for (var j = 0; j < w; j++) { | |||
sample.push(i); | |||
} | |||
}); | |||
return sample[~~(Math.random() * sample.length)]; | |||
} | |||
}; | |||
define([ | |||
], function ( | |||
) { | |||
return window._; | |||
}); |
@@ -1,163 +0,0 @@ | |||
define([ | |||
'js/events', | |||
'js/renderer', | |||
'js/constants' | |||
], function ( | |||
events, | |||
renderer, | |||
constants | |||
) { | |||
return { | |||
mappings: { | |||
8: 'backspace', | |||
9: 'tab', | |||
13: 'enter', | |||
16: 'shift', | |||
17: 'ctrl', | |||
27: 'esc', | |||
37: 'left', | |||
38: 'up', | |||
39: 'right', | |||
40: 'down', | |||
46: 'del' | |||
}, | |||
mouse: { | |||
button: null, | |||
x: 0, | |||
y: 0, | |||
raw: null | |||
}, | |||
keys: {}, | |||
init: function () { | |||
$(window).on('keydown', this.events.keyboard.onKeyDown.bind(this)); | |||
$(window).on('keyup', this.events.keyboard.onKeyUp.bind(this)); | |||
$('canvas') | |||
.on('mousedown', this.events.mouse.onMouseDown.bind(this)) | |||
.on('mouseup', this.events.mouse.onMouseUp.bind(this)) | |||
.on('mousemove', this.events.mouse.onMouseMove.bind(this)) | |||
.on('mousewheel', this.events.mouse.onMouseWheel.bind(this)); | |||
}, | |||
resetKeys: function () { | |||
for (let k in this.keys) | |||
events.emit('onKeyUp', k); | |||
this.keys = {}; | |||
}, | |||
getMapping: function (charCode) { | |||
if (charCode >= 97) | |||
return (charCode - 96).toString(); | |||
return ( | |||
this.mappings[charCode] || | |||
String.fromCharCode(charCode).toLowerCase() | |||
); | |||
}, | |||
isKeyDown: function (key, consume) { | |||
let down = this.keys[key]; | |||
if (down != null) { | |||
if (!consume) | |||
return true; | |||
this.keys[key] = 2; | |||
return (down == 1); | |||
} return false; | |||
}, | |||
events: { | |||
keyboard: { | |||
onKeyDown: function (e) { | |||
if (e.target != document.body) | |||
return true; | |||
if ((e.keyCode == 9) || (e.keyCode == 8) || (e.keyCode == 122)) | |||
e.preventDefault(); | |||
let key = this.getMapping(e.which); | |||
if (this.keys[key] != null) | |||
this.keys[key] = 2; | |||
else { | |||
this.keys[key] = 1; | |||
events.emit('onKeyDown', key); | |||
} | |||
if (key == 'backspace') | |||
return false; | |||
}, | |||
onKeyUp: function (e) { | |||
if (e.target != document.body) | |||
return; | |||
let key = this.getMapping(e.which); | |||
delete this.keys[key]; | |||
events.emit('onKeyUp', key); | |||
} | |||
}, | |||
mouse: { | |||
onMouseDown: function (e) { | |||
let el = $(e.target); | |||
if ((!el.hasClass('canvas')) || (el.hasClass('blocking'))) | |||
return; | |||
let button = e.button; | |||
this.mouse.button = button; | |||
this.mouse.down = true; | |||
this.mouse.event = e; | |||
events.emit('onMouseDown', this.mouse); | |||
}, | |||
onMouseUp: function (e) { | |||
let el = $(e.target); | |||
if ((!el.hasClass('canvas')) || (el.hasClass('blocking'))) | |||
return; | |||
let button = e.button; | |||
this.mouse.down = false; | |||
events.emit('onMouseUp', this.mouse); | |||
this.mouse.button = null; | |||
}, | |||
onMouseMove: function (e) { | |||
if (e) | |||
this.mouse.raw = e; | |||
else | |||
e = this.mouse.raw; | |||
if (!e) | |||
return; | |||
let el = $(e.target); | |||
if ((!el.hasClass('canvas')) || (el.hasClass('blocking'))) | |||
return; | |||
let x = ~~((renderer.pos.x + (e.offsetX / renderer.currentZoom)) / constants.gridSize); | |||
let y = ~~((renderer.pos.y + (e.offsetY / renderer.currentZoom)) / constants.gridSize); | |||
this.mouse.x = x; | |||
this.mouse.y = y; | |||
events.emit('onMouseMove', this.mouse); | |||
}, | |||
onMouseWheel: function (e) { | |||
events.emit('onMouseWheel', { | |||
delta: (e.deltaY > 0) ? 1 : -1 | |||
}); | |||
} | |||
} | |||
} | |||
}; | |||
}); |
@@ -1,152 +0,0 @@ | |||
define([ | |||
'js/events', | |||
'js/generator', | |||
'js/renderer', | |||
'js/input', | |||
'ui/factory', | |||
'js/client', | |||
'js/constants' | |||
], function ( | |||
events, | |||
generator, | |||
renderer, | |||
input, | |||
uiFactory, | |||
client, | |||
constants | |||
) { | |||
return { | |||
init: function () { | |||
if (constants.standAlone) | |||
this.events.onConnected.call(this); | |||
else | |||
client.init(this.events.onConnected.bind(this)); | |||
}, | |||
render: function () { | |||
if (renderer.dirty) | |||
renderer.render(generator.nodes, generator.links); | |||
window.requestAnimationFrame(this.render.bind(this)); | |||
}, | |||
events: { | |||
onConnected: function () { | |||
uiFactory.init(); | |||
generator.init(); | |||
renderer.init(); | |||
input.init(); | |||
events.on('onMouseDown', this.events.onMouseDown.bind(this, true)); | |||
events.on('onMouseUp', this.events.onMouseDown.bind(this, false)); | |||
events.on('onMouseMove', this.events.onMouseMove.bind(this)); | |||
events.on('onMouseWheel', this.events.onMouseWheel.bind(this)); | |||
events.on('onKeyDown', this.events.onKeyDown.bind(this)); | |||
$(window).on('focus', this.events.onFocus.bind(this)); | |||
uiFactory.build('mode'); | |||
uiFactory.build('menu'); | |||
uiFactory.build('groups'); | |||
uiFactory.build('nodeInfo'); | |||
uiFactory.build('tooltip'); | |||
renderer.center(generator.nodes[0]); | |||
this.render(); | |||
}, | |||
onMouseDown: function (isDown, e) { | |||
var success = false; | |||
if ((input.isKeyDown('shift')) && (e.button == 2)) { | |||
success = true; | |||
if (e.down) | |||
events.emit('onStartAreaSelect', e); | |||
else | |||
events.emit('onEndAreaSelect', e); | |||
} else if (isDown) { | |||
if (generator.mode != 'none') { | |||
e.button = ([ | |||
'place', | |||
'link', | |||
'select' | |||
]).indexOf(generator.mode); | |||
} | |||
var action = ([ | |||
'addNode', | |||
'connectNode', | |||
'selectNode' | |||
])[e.button]; | |||
success = generator.callAction(action, { | |||
x: e.x, | |||
y: e.y, | |||
shiftDown: input.isKeyDown('shift') | |||
}); | |||
} else if ((!isDown) && (e.button != 1) && (generator.getSelected().length <= 1)) | |||
generator.callAction('selectNode', {}); | |||
if ((!isDown) || (!success)) | |||
renderer.pan(e.raw, isDown ? 'down' : 'up'); | |||
renderer.makeDirty(); | |||
}, | |||
onMouseMove: function (e) { | |||
if ((!e.down) || (e.button != 2) || (input.isKeyDown('shift'))) | |||
return; | |||
if (generator.callAction('moveNode', { | |||
x: e.x, | |||
y: e.y | |||
})) | |||
return; | |||
renderer.pan(e.raw, 'move'); | |||
}, | |||
onMouseWheel: function (e) { | |||
var delta = (e.delta > 0) ? 1 : 0; | |||
var action = ([ | |||
'resizeNode', | |||
'recolorNode' | |||
])[delta]; | |||
if (!action) | |||
return; | |||
if (!generator.callAction(action, {})) | |||
renderer.zoom(delta); | |||
renderer.makeDirty(); | |||
}, | |||
onKeyDown: function (key) { | |||
if (key == 'z') { | |||
renderer.zoom(0, 1); | |||
renderer.makeDirty(); | |||
return; | |||
} | |||
var action = ({ | |||
d: 'deleteNode', | |||
c: 'recolorNode', | |||
r: 'resizeNode' | |||
})[key]; | |||
if (!action) | |||
return; | |||
generator.callAction(action, {}); | |||
renderer.makeDirty(); | |||
}, | |||
onFocus: function () { | |||
renderer.makeDirty(); | |||
} | |||
} | |||
}; | |||
}); |
@@ -1,312 +0,0 @@ | |||
define([ | |||
'js/constants', | |||
'js/events' | |||
], function ( | |||
constants, | |||
events | |||
) { | |||
return { | |||
canvas: null, | |||
ctx: null, | |||
areaSelectOrigin: null, | |||
panOrigin: null, | |||
currentZoom: 1, | |||
screen: { | |||
w: 0, | |||
h: 0 | |||
}, | |||
pos: { | |||
x: 0, | |||
y: 0 | |||
}, | |||
oldPos: null, | |||
mouse: { | |||
x: 0, | |||
y: 0 | |||
}, | |||
dirty: true, | |||
init: function () { | |||
this.canvas = $('.canvas')[0]; | |||
this.screen.w = this.canvas.width = $('body').width(); | |||
this.screen.h = this.canvas.height = $('body').height(); | |||
this.ctx = this.canvas.getContext('2d'); | |||
this.ctx.lineWidth = constants.lineWidth; | |||
$(this.canvas) | |||
.on('contextmenu', function () { | |||
return false; | |||
}); | |||
events.on('onMouseMove', this.events.onMouseMove.bind(this)); | |||
events.on('onStartAreaSelect', this.events.onStartAreaSelect.bind(this)); | |||
events.on('onEndAreaSelect', this.events.onEndAreaSelect.bind(this)); | |||
events.on('onSelectGroup', this.events.onSelectGroup.bind(this)); | |||
}, | |||
center: function (node) { | |||
if (!node) | |||
return; | |||
this.pos.x = ~~(node.pos.x * constants.gridSize) + (constants.blockSize / 2) - (this.screen.w / 2); | |||
this.pos.y = ~~(node.pos.y * constants.gridSize) + (constants.blockSize / 2) - (this.screen.h / 2); | |||
this.makeDirty(); | |||
}, | |||
pan: function (e, event) { | |||
var action = ({ | |||
down: 'onPanStart', | |||
up: 'onPanEnd', | |||
move: 'onPan' | |||
})[event]; | |||
this.events[action].call(this, e); | |||
}, | |||
makeDirty: function () { | |||
this.dirty = true; | |||
}, | |||
renderNodes: function (nodes, links) { | |||
links.forEach(function (l) { | |||
var linked = ( | |||
nodes.find(n => (n == l.from)).selected && | |||
nodes.find(n => (n == l.to)).selected | |||
); | |||
this.renderers.line.call(this, l.from, l.to, linked); | |||
}, this); | |||
nodes.forEach(function (n) { | |||
this.renderers.node.call(this, n, n.pos.x, n.pos.y); | |||
}, this); | |||
}, | |||
render: function (nodes, links) { | |||
this.dirty = false; | |||
this.renderers.clear.call(this); | |||
this.renderers.grid.call(this); | |||
this.renderNodes(nodes, links); | |||
if (this.areaSelectOrigin) | |||
this.renderers.selectArea.call(this); | |||
}, | |||
zoom: function (delta, zoom) { | |||
delta = delta ? -1 : 1; | |||
this.renderers.clear.call(this); | |||
this.ctx.restore(); | |||
var newZoom = zoom || (this.currentZoom + (delta * 0.2)); | |||
this.currentZoom = newZoom; | |||
if (this.currentZoom < 0.4) | |||
this.currentZoom = 0.4; | |||
else if (this.currentZoom > 3) | |||
this.currentZoom = 3; | |||
this.screen.w = $('body').width() / this.currentZoom; | |||
this.screen.h = $('body').height() / this.currentZoom; | |||
this.ctx.save(); | |||
this.ctx.scale(this.currentZoom, this.currentZoom); | |||
}, | |||
renderers: { | |||
clear: function () { | |||
var pos = this.oldPos || this.pos; | |||
this.ctx.clearRect(0, 0, this.screen.w, this.screen.h); | |||
delete this.oldPos; | |||
}, | |||
selectArea: function () { | |||
var ctx = this.ctx; | |||
var area = this.areaSelectOrigin; | |||
var mouse = this.mouse; | |||
ctx.fillStyle = '#51fc9a'; | |||
ctx.globalAlpha = 0.1; | |||
var lowX = (Math.min(area.x, mouse.x) * constants.gridSize) - this.pos.x; | |||
var lowY = (Math.min(area.y, mouse.y) * constants.gridSize) - this.pos.y; | |||
var highX = (Math.max(area.x, mouse.x) * constants.gridSize) - this.pos.x; | |||
var highY = (Math.max(area.y, mouse.y) * constants.gridSize) - this.pos.y; | |||
ctx.fillRect(lowX, lowY, highX - lowX, highY - lowY); | |||
ctx.globalAlpha = 1; | |||
}, | |||
grid: function () { | |||
var gridSize = constants.gridSize; | |||
var ctx = this.ctx; | |||
var mouse = this.mouse; | |||
var gapSize = (constants.blockSize - 4) / 2; | |||
var x = ~~(this.pos.x / gridSize) - (this.pos.x / gridSize); | |||
var y = ~~(this.pos.y / gridSize) - (this.pos.y / gridSize); | |||
w = ~~(this.screen.w / gridSize); | |||
h = ~~(this.screen.h / gridSize); | |||
ctx.fillStyle = '#3c3f4c'; | |||
for (var i = x; i < w; i++) { | |||
for (var j = y; j < h; j++) { | |||
ctx.fillRect((i * gridSize) + gapSize, (j * gridSize) + gapSize, 4, 4); | |||
} | |||
} | |||
ctx.strokeStyle = '#44cb95'; | |||
ctx.strokeRect( | |||
(this.mouse.x * constants.gridSize) - this.pos.x + (gapSize / 1), | |||
(this.mouse.y * constants.gridSize) - this.pos.y + (gapSize / 1), | |||
8, | |||
8 | |||
); | |||
}, | |||
node: function (node) { | |||
var color = (node.color >= 0) ? (node.color + 1) : -1; | |||
if ((!node.stats) || (Object.keys(node.stats).length == 0)) | |||
color = 0; | |||
this.ctx.fillStyle = ([ | |||
'#69696e', | |||
'#c0c3cf', | |||
'#3fa7dd', | |||
'#4ac441', | |||
'#d43346', | |||
'#a24eff', | |||
'#faac45', | |||
'#44cb95' | |||
])[color]; | |||
var size = ([ | |||
constants.blockSize, | |||
constants.blockSize * 2, | |||
constants.blockSize * 3 | |||
])[node.size]; | |||
var x = (node.pos.x * constants.gridSize) - ((size - constants.blockSize) / 2) - this.pos.x; | |||
var y = (node.pos.y * constants.gridSize) - ((size - constants.blockSize) / 2) - this.pos.y; | |||
this.ctx.fillRect(x, y, size, size); | |||
this.ctx.strokeStyle = ([ | |||
'#69696e', | |||
'#69696e', | |||
'#42548d', | |||
'#386646', | |||
'#763b3b', | |||
'#533399', | |||
'#d07840', | |||
'#3f8d6d' | |||
])[color]; | |||
this.ctx.strokeRect(x, y, size, size); | |||
if (node.selected) { | |||
this.ctx.strokeStyle = '#fafcfc'; | |||
this.ctx.strokeRect(x, y, size, size); | |||
} | |||
}, | |||
line: function (fromNode, toNode, linked) { | |||
var ctx = this.ctx; | |||
var halfSize = constants.blockSize / 2; | |||
var fromX = (fromNode.pos.x * constants.gridSize) + halfSize - this.pos.x; | |||
var fromY = (fromNode.pos.y * constants.gridSize) + halfSize - this.pos.y; | |||
var toX = (toNode.pos.x * constants.gridSize) + halfSize - this.pos.x; | |||
var toY = (toNode.pos.y * constants.gridSize) + halfSize - this.pos.y; | |||
ctx.strokeStyle = linked ? '#fafcfc' : '#69696e'; | |||
ctx.beginPath(); | |||
ctx.moveTo(fromX, fromY); | |||
ctx.lineTo(toX, toY); | |||
ctx.closePath(); | |||
ctx.stroke(); | |||
} | |||
}, | |||
events: { | |||
onMouseMove: function (pos) { | |||
if ((this.mouse.x == pos.x) && (this.mouse.y == pos.y)) | |||
return; | |||
this.mouse = { | |||
x: pos.x, | |||
y: pos.y | |||
}; | |||
this.makeDirty(); | |||
}, | |||
onPanStart: function (e) { | |||
this.panOrigin = { | |||
x: e.clientX, | |||
y: e.clientY | |||
}; | |||
}, | |||
onPan: function (e) { | |||
if (!this.panOrigin) | |||
return; | |||
if (!this.oldPos) { | |||
this.oldPos = { | |||
x: this.pos.x, | |||
y: this.pos.y | |||
}; | |||
} | |||
var zoomPanMultiplier = this.currentZoom; | |||
var scrollSpeed = constants.scrollSpeed / zoomPanMultiplier; | |||
this.pos.x += (this.panOrigin.x - e.clientX) * scrollSpeed; | |||
this.pos.y += (this.panOrigin.y - e.clientY) * scrollSpeed; | |||
this.panOrigin = { | |||
x: e.clientX, | |||
y: e.clientY | |||
}; | |||
this.makeDirty(); | |||
}, | |||
onPanEnd: function (e) { | |||
this.panOrigin = null; | |||
}, | |||
onStartAreaSelect: function (e) { | |||
this.areaSelectOrigin = { | |||
x: e.x, | |||
y: e.y | |||
}; | |||
}, | |||
onEndAreaSelect: function (e) { | |||
events.emit('onAreaSelect', this.areaSelectOrigin, e); | |||
this.areaSelectOrigin = null; | |||
}, | |||
onSelectGroup: function (pos) { | |||
this.pos.x = pos.x; | |||
this.pos.y = pos.y; | |||
this.makeDirty(); | |||
} | |||
} | |||
}; | |||
}); |
@@ -1,27 +0,0 @@ | |||
define([ | |||
], function ( | |||
) { | |||
return { | |||
color: 0, | |||
size: 0, | |||
pos: { | |||
x: 0, | |||
y: 0 | |||
}, | |||
build: function (options) { | |||
var res = $.extend(true, {}, this, { | |||
id: options.id, | |||
pos: { | |||
x: options.x, | |||
y: options.y | |||
} | |||
}); | |||
delete res.build; | |||
return res; | |||
} | |||
}; | |||
}); |
@@ -1,174 +0,0 @@ | |||
/* | |||
* Require-CSS RequireJS css! loader plugin | |||
* 0.1.8 | |||
* Guy Bedford 2014 | |||
* MIT | |||
*/ | |||
/* | |||
* | |||
* Usage: | |||
* require(['css!./mycssFile']); | |||
* | |||
* Tested and working in (up to latest versions as of March 2013): | |||
* Android | |||
* iOS 6 | |||
* IE 6 - 10 | |||
* Chome 3 - 26 | |||
* Firefox 3.5 - 19 | |||
* Opera 10 - 12 | |||
* | |||
* browserling.com used for virtual testing environment | |||
* | |||
* Credit to B Cavalier & J Hann for the IE 6 - 9 method, | |||
* refined with help from Martin Cermak | |||
* | |||
* Sources that helped along the way: | |||
* - https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent | |||
* - http://www.phpied.com/when-is-a-stylesheet-really-loaded/ | |||
* - https://github.com/cujojs/curl/blob/master/src/curl/plugin/css.js | |||
* | |||
*/ | |||
define(function() { | |||
//>>excludeStart('excludeRequireCss', pragmas.excludeRequireCss) | |||
if (typeof window == 'undefined') | |||
return { | |||
load: function(n, r, load) { | |||
load() | |||
} | |||
}; | |||
var head = document.getElementsByTagName('head')[0]; | |||
var engine = window.navigator.userAgent.match(/Trident\/([^ ;]*)|AppleWebKit\/([^ ;]*)|Opera\/([^ ;]*)|rv\:([^ ;]*)(.*?)Gecko\/([^ ;]*)|MSIE\s([^ ;]*)|AndroidWebKit\/([^ ;]*)/) || 0; | |||
// use <style> @import load method (IE < 9, Firefox < 18) | |||
var useImportLoad = false; | |||
// set to false for explicit <link> load checking when onload doesn't work perfectly (webkit) | |||
var useOnload = true; | |||
// trident / msie | |||
if (engine[1] || engine[7]) | |||
useImportLoad = parseInt(engine[1]) < 6 || parseInt(engine[7]) <= 9; | |||
// webkit | |||
else if (engine[2] || engine[8]) | |||
useOnload = false; | |||
// gecko | |||
else if (engine[4]) | |||
useImportLoad = parseInt(engine[4]) < 18; | |||
//>>excludeEnd('excludeRequireCss') | |||
//main api object | |||
var cssAPI = {}; | |||
//>>excludeStart('excludeRequireCss', pragmas.excludeRequireCss) | |||
cssAPI.pluginBuilder = './css-builder'; | |||
// <style> @import load method | |||
var curStyle, curSheet; | |||
var createStyle = function() { | |||
curStyle = document.createElement('style'); | |||
head.appendChild(curStyle); | |||
curSheet = curStyle.styleSheet || curStyle.sheet; | |||
} | |||
var ieCnt = 0; | |||
var ieLoads = []; | |||
var ieCurCallback; | |||
var createIeLoad = function(url) { | |||
curSheet.addImport(url); | |||
curStyle.onload = function() { | |||
processIeLoad() | |||
}; | |||
ieCnt++; | |||
if (ieCnt == 31) { | |||
createStyle(); | |||
ieCnt = 0; | |||
} | |||
} | |||
var processIeLoad = function() { | |||
ieCurCallback(); | |||
var nextLoad = ieLoads.shift(); | |||
if (!nextLoad) { | |||
ieCurCallback = null; | |||
return; | |||
} | |||
ieCurCallback = nextLoad[1]; | |||
createIeLoad(nextLoad[0]); | |||
} | |||
var importLoad = function(url, callback) { | |||
if (!curSheet || !curSheet.addImport) | |||
createStyle(); | |||
if (curSheet && curSheet.addImport) { | |||
// old IE | |||
if (ieCurCallback) { | |||
ieLoads.push([url, callback]); | |||
} else { | |||
createIeLoad(url); | |||
ieCurCallback = callback; | |||
} | |||
} else { | |||
// old Firefox | |||
curStyle.textContent = '@import "' + url + '";'; | |||
var loadInterval = setInterval(function() { | |||
try { | |||
curStyle.sheet.cssRules; | |||
clearInterval(loadInterval); | |||
callback(); | |||
} catch (e) {} | |||
}, 10); | |||
} | |||
} | |||
// <link> load method | |||
var linkLoad = function(url, callback) { | |||
var link = document.createElement('link'); | |||
link.type = 'text/css'; | |||
link.rel = 'stylesheet'; | |||
if (useOnload) { | |||
link.onload = function() { | |||
link.onload = function() {}; | |||
// for style dimensions queries, a short delay can still be necessary | |||
setTimeout(callback, 7); | |||
} | |||
} else { | |||
var loadInterval = setInterval(function() { | |||
for (var i = 0; i < document.styleSheets.length; i++) { | |||
var sheet = document.styleSheets[i]; | |||
if (sheet.href == link.href) { | |||
clearInterval(loadInterval); | |||
return callback(); | |||
} | |||
} | |||
}, 10); | |||
} | |||
link.href = url; | |||
head.appendChild(link); | |||
} | |||
//>>excludeEnd('excludeRequireCss') | |||
cssAPI.normalize = function(name, normalize) { | |||
if (name.substr(name.length - 4, 4) == '.css') | |||
name = name.substr(0, name.length - 4); | |||
return normalize(name); | |||
} | |||
//>>excludeStart('excludeRequireCss', pragmas.excludeRequireCss) | |||
cssAPI.load = function(cssId, req, load, config) { | |||
(useImportLoad ? importLoad : linkLoad)(req.toUrl(cssId + '.css'), load); | |||
} | |||
//>>excludeEnd('excludeRequireCss') | |||
return cssAPI; | |||
}); |
@@ -1,123 +0,0 @@ | |||
define(['text'], function(textPlugin) { | |||
var buildText = {}; | |||
return { | |||
load: function(name, req, onLoad, config) { | |||
var self = this, | |||
file = name, | |||
segments = file.split('/'); | |||
// If the module name does not have an extension, append the default one | |||
if (segments[segments.length - 1].lastIndexOf('.') == -1) { | |||
file += '.html'; | |||
} | |||
textPlugin.get(req.toUrl(file), function(html) { | |||
for (var option in config.config.html) { | |||
if (option in self.transform) { | |||
html = self.transform[option](config.config.html[option], html); | |||
} | |||
} | |||
if (config.isBuild) { | |||
buildText[name] = textPlugin.jsEscape(html); | |||
} | |||
onLoad(html); | |||
}, onLoad.error); | |||
}, | |||
write: function(pluginName, moduleName, write) { | |||
if (buildText.hasOwnProperty(moduleName)) { | |||
var name = "'" + pluginName + "!" + moduleName + "'", | |||
text = "function () {return '" + buildText[moduleName] + "';}"; | |||
write("define(" + name + ", " + text + ");\n"); | |||
} | |||
}, | |||
transform: { | |||
comments: function(action, html) { | |||
if (action === 'strip') { | |||
return html.replace(/<!--(.|[\n\r])*?-->/gm, ''); | |||
} else { | |||
return html; | |||
} | |||
}, | |||
whitespaceBetweenTags: function(action, html) { | |||
var pattern = />[\n\r\s]+</gm; | |||
if (action === 'strip') { | |||
return html.replace(pattern, '><'); | |||
} else if (action === 'collapse') { | |||
return html.replace(pattern, '> <'); | |||
} else { | |||
return html; | |||
} | |||
}, | |||
whitespaceBetweenTagsAndText: function(action, html) { | |||
var afterTagPattern = />[\n\r\s]+/gm, | |||
beforeTagPattern = /[\n\r\s]+</gm; | |||
if (action === 'strip') { | |||
return html.replace(afterTagPattern, '>').replace(beforeTagPattern, '<'); | |||
} else if (action === 'collapse') { | |||
return html.replace(afterTagPattern, '> ').replace(beforeTagPattern, ' <'); | |||
} else { | |||
return html; | |||
} | |||
}, | |||
whitespaceWithinTags: function(action, html) { | |||
if (action === 'collapse') { | |||
var tagPattern = /<([^>"']*?|"[^"]*?"|'[^']*?')+>/g, | |||
attrPattern = /([^\0\n\r\s"'>\/=]+)(?:\s*(=)\s*([^\n\r\s"'=><`]+|"[^"]*"|'[^']*'))?/gi, | |||
lastIndex = 0, | |||
result = '', | |||
match, | |||
tag; | |||
while ((match = tagPattern.exec(html)) !== null) { | |||
// Copy text between the beginning of this match and the end of the last one | |||
result += html.substring(lastIndex, match.index); | |||
tag = match[0]; | |||
if (/^<[^\/]/.test(tag)) { // It's a start tag | |||
var attrs = tag.match(attrPattern), | |||
start = attrs.shift(), | |||
end = /\/>$/.test(tag) ? '/>' : '>'; | |||
result += start + attrs.map(function(attr) { | |||
return attr.replace(attrPattern, ' $1$2$3'); | |||
}).join('') + end; | |||
} else { // It's an end tag | |||
result += tag.replace(/[\n\r\s]+/g, ''); | |||
} | |||
lastIndex = tagPattern.lastIndex; | |||
} | |||
return result + html.substring(lastIndex); | |||
} else { | |||
return html; | |||
} | |||
} | |||
} | |||
}; | |||
}); |
@@ -1,72 +0,0 @@ | |||
/** @license | |||
* RequireJS plugin for loading JSON files | |||
* - depends on Text plugin and it was HEAVILY "inspired" by it as well. | |||
* Author: Miller Medeiros | |||
* Version: 0.4.0 (2014/04/10) | |||
* Released under the MIT license | |||
*/ | |||
define(['text'], function(text){ | |||
var CACHE_BUST_QUERY_PARAM = 'bust', | |||
CACHE_BUST_FLAG = '!bust', | |||
jsonParse = (typeof JSON !== 'undefined' && typeof JSON.parse === 'function')? JSON.parse : function(val){ | |||
return eval('('+ val +')'); //quick and dirty | |||
}, | |||
buildMap = {}; | |||
function cacheBust(url){ | |||
url = url.replace(CACHE_BUST_FLAG, ''); | |||
url += (url.indexOf('?') < 0)? '?' : '&'; | |||
return url + CACHE_BUST_QUERY_PARAM +'='+ Math.round(2147483647 * Math.random()); | |||
} | |||
//API | |||
return { | |||
load : function(name, req, onLoad, config) { | |||
if (( config.isBuild && (config.inlineJSON === false || name.indexOf(CACHE_BUST_QUERY_PARAM +'=') !== -1)) || (req.toUrl(name).indexOf('empty:') === 0)) { | |||
//avoid inlining cache busted JSON or if inlineJSON:false | |||
//and don't inline files marked as empty! | |||
onLoad(null); | |||
} else { | |||
text.get(req.toUrl(name), function(data){ | |||
var parsed; | |||
if (config.isBuild) { | |||
buildMap[name] = data; | |||
onLoad(data); | |||
} else { | |||
try { | |||
parsed = jsonParse(data); | |||
} catch (e) { | |||
onLoad.error(e); | |||
} | |||
onLoad(parsed); | |||
} | |||
}, | |||
onLoad.error, { | |||
accept: 'application/json' | |||
} | |||
); | |||
} | |||
}, | |||
normalize : function (name, normalize) { | |||
// used normalize to avoid caching references to a "cache busted" request | |||
if (name.indexOf(CACHE_BUST_FLAG) !== -1) { | |||
name = cacheBust(name); | |||
} | |||
// resolve any relative paths | |||
return normalize(name); | |||
}, | |||
//write method based on RequireJS official text plugin by James Burke | |||
//https://github.com/jrburke/requirejs/blob/master/text.js | |||
write : function(pluginName, moduleName, write){ | |||
if(moduleName in buildMap){ | |||
var content = buildMap[moduleName]; | |||
write('define("'+ pluginName +'!'+ moduleName +'", function(){ return '+ content +';});\n'); | |||
} | |||
} | |||
}; | |||
}); |
@@ -1,391 +0,0 @@ | |||
/** | |||
* @license RequireJS text 2.0.14 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. | |||
* Available via the MIT or new BSD license. | |||
* see: http://github.com/requirejs/text for details | |||
*/ | |||
/*jslint regexp: true */ | |||
/*global require, XMLHttpRequest, ActiveXObject, | |||
define, window, process, Packages, | |||
java, location, Components, FileUtils */ | |||
define(['module'], function (module) { | |||
'use strict'; | |||
var text, fs, Cc, Ci, xpcIsWindows, | |||
progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], | |||
xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, | |||
bodyRegExp = /<body[^>]*>\s*([\s\S]+)\s*<\/body>/im, | |||
hasLocation = typeof location !== 'undefined' && location.href, | |||
defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), | |||
defaultHostName = hasLocation && location.hostname, | |||
defaultPort = hasLocation && (location.port || undefined), | |||
buildMap = {}, | |||
masterConfig = (module.config && module.config()) || {}; | |||
text = { | |||
version: '2.0.14', | |||
strip: function (content) { | |||
//Strips <?xml ...?> declarations so that external SVG and XML | |||
//documents can be added to a document without worry. Also, if the string | |||
//is an HTML document, only the part inside the body tag is returned. | |||
if (content) { | |||
content = content.replace(xmlRegExp, ""); | |||
var matches = content.match(bodyRegExp); | |||
if (matches) { | |||
content = matches[1]; | |||
} | |||
} else { | |||
content = ""; | |||
} | |||
return content; | |||
}, | |||
jsEscape: function (content) { | |||
return content.replace(/(['\\])/g, '\\$1') | |||
.replace(/[\f]/g, "\\f") | |||
.replace(/[\b]/g, "\\b") | |||
.replace(/[\n]/g, "\\n") | |||
.replace(/[\t]/g, "\\t") | |||
.replace(/[\r]/g, "\\r") | |||
.replace(/[\u2028]/g, "\\u2028") | |||
.replace(/[\u2029]/g, "\\u2029"); | |||
}, | |||
createXhr: masterConfig.createXhr || function () { | |||
//Would love to dump the ActiveX crap in here. Need IE 6 to die first. | |||
var xhr, i, progId; | |||
if (typeof XMLHttpRequest !== "undefined") { | |||
return new XMLHttpRequest(); | |||
} else if (typeof ActiveXObject !== "undefined") { | |||
for (i = 0; i < 3; i += 1) { | |||
progId = progIds[i]; | |||
try { | |||
xhr = new ActiveXObject(progId); | |||
} catch (e) {} | |||
if (xhr) { | |||
progIds = [progId]; // so faster next time | |||
break; | |||
} | |||
} | |||
} | |||
return xhr; | |||
}, | |||
/** | |||
* Parses a resource name into its component parts. Resource names | |||
* look like: module/name.ext!strip, where the !strip part is | |||
* optional. | |||
* @param {String} name the resource name | |||
* @returns {Object} with properties "moduleName", "ext" and "strip" | |||
* where strip is a boolean. | |||
*/ | |||
parseName: function (name) { | |||
var modName, ext, temp, | |||
strip = false, | |||
index = name.lastIndexOf("."), | |||
isRelative = name.indexOf('./') === 0 || | |||
name.indexOf('../') === 0; | |||
if (index !== -1 && (!isRelative || index > 1)) { | |||
modName = name.substring(0, index); | |||
ext = name.substring(index + 1); | |||
} else { | |||
modName = name; | |||
} | |||
temp = ext || modName; | |||
index = temp.indexOf("!"); | |||
if (index !== -1) { | |||
//Pull off the strip arg. | |||
strip = temp.substring(index + 1) === "strip"; | |||
temp = temp.substring(0, index); | |||
if (ext) { | |||
ext = temp; | |||
} else { | |||
modName = temp; | |||
} | |||
} | |||
return { | |||
moduleName: modName, | |||
ext: ext, | |||
strip: strip | |||
}; | |||
}, | |||
xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, | |||
/** | |||
* Is an URL on another domain. Only works for browser use, returns | |||
* false in non-browser environments. Only used to know if an | |||
* optimized .js version of a text resource should be loaded | |||
* instead. | |||
* @param {String} url | |||
* @returns Boolean | |||
*/ | |||
useXhr: function (url, protocol, hostname, port) { | |||
var uProtocol, uHostName, uPort, | |||
match = text.xdRegExp.exec(url); | |||
if (!match) { | |||
return true; | |||
} | |||
uProtocol = match[2]; | |||
uHostName = match[3]; | |||
uHostName = uHostName.split(':'); | |||
uPort = uHostName[1]; | |||
uHostName = uHostName[0]; | |||
return (!uProtocol || uProtocol === protocol) && | |||
(!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && | |||
((!uPort && !uHostName) || uPort === port); | |||
}, | |||
finishLoad: function (name, strip, content, onLoad) { | |||
content = strip ? text.strip(content) : content; | |||
if (masterConfig.isBuild) { | |||
buildMap[name] = content; | |||
} | |||
onLoad(content); | |||
}, | |||
load: function (name, req, onLoad, config) { | |||
//Name has format: some.module.filext!strip | |||
//The strip part is optional. | |||
//if strip is present, then that means only get the string contents | |||
//inside a body tag in an HTML string. For XML/SVG content it means | |||
//removing the <?xml ...?> declarations so the content can be inserted | |||
//into the current doc without problems. | |||
// Do not bother with the work if a build and text will | |||
// not be inlined. | |||
if (config && config.isBuild && !config.inlineText) { | |||
onLoad(); | |||
return; | |||
} | |||
masterConfig.isBuild = config && config.isBuild; | |||
var parsed = text.parseName(name), | |||
nonStripName = parsed.moduleName + | |||
(parsed.ext ? '.' + parsed.ext : ''), | |||
url = req.toUrl(nonStripName), | |||
useXhr = (masterConfig.useXhr) || | |||
text.useXhr; | |||
// Do not load if it is an empty: url | |||
if (url.indexOf('empty:') === 0) { | |||
onLoad(); | |||
return; | |||
} | |||
//Load the text. Use XHR if possible and in a browser. | |||
if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { | |||
text.get(url, function (content) { | |||
text.finishLoad(name, parsed.strip, content, onLoad); | |||
}, function (err) { | |||
if (onLoad.error) { | |||
onLoad.error(err); | |||
} | |||
}); | |||
} else { | |||
//Need to fetch the resource across domains. Assume | |||
//the resource has been optimized into a JS module. Fetch | |||
//by the module name + extension, but do not include the | |||
//!strip part to avoid file system issues. | |||
req([nonStripName], function (content) { | |||
text.finishLoad(parsed.moduleName + '.' + parsed.ext, | |||
parsed.strip, content, onLoad); | |||
}); | |||
} | |||
}, | |||
write: function (pluginName, moduleName, write, config) { | |||
if (buildMap.hasOwnProperty(moduleName)) { | |||
var content = text.jsEscape(buildMap[moduleName]); | |||
write.asModule(pluginName + "!" + moduleName, | |||
"define(function () { return '" + | |||
content + | |||
"';});\n"); | |||
} | |||
}, | |||
writeFile: function (pluginName, moduleName, req, write, config) { | |||
var parsed = text.parseName(moduleName), | |||
extPart = parsed.ext ? '.' + parsed.ext : '', | |||
nonStripName = parsed.moduleName + extPart, | |||
//Use a '.js' file name so that it indicates it is a | |||
//script that can be loaded across domains. | |||
fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; | |||
//Leverage own load() method to load plugin value, but only | |||
//write out values that do not have the strip argument, | |||
//to avoid any potential issues with ! in file names. | |||
text.load(nonStripName, req, function (value) { | |||
//Use own write() method to construct full module value. | |||
//But need to create shell that translates writeFile's | |||
//write() to the right interface. | |||
var textWrite = function (contents) { | |||
return write(fileName, contents); | |||
}; | |||
textWrite.asModule = function (moduleName, contents) { | |||
return write.asModule(moduleName, fileName, contents); | |||
}; | |||
text.write(pluginName, nonStripName, textWrite, config); | |||
}, config); | |||
} | |||
}; | |||
if (masterConfig.env === 'node' || (!masterConfig.env && | |||
typeof process !== "undefined" && | |||
process.versions && | |||
!!process.versions.node && | |||
!process.versions['node-webkit'] && | |||
!process.versions['atom-shell'])) { | |||
//Using special require.nodeRequire, something added by r.js. | |||
fs = require.nodeRequire('fs'); | |||
text.get = function (url, callback, errback) { | |||
try { | |||
var file = fs.readFileSync(url, 'utf8'); | |||
//Remove BOM (Byte Mark Order) from utf8 files if it is there. | |||
if (file[0] === '\uFEFF') { | |||
file = file.substring(1); | |||
} | |||
callback(file); | |||
} catch (e) { | |||
if (errback) { | |||
errback(e); | |||
} | |||
} | |||
}; | |||
} else if (masterConfig.env === 'xhr' || (!masterConfig.env && | |||
text.createXhr())) { | |||
text.get = function (url, callback, errback, headers) { | |||
var xhr = text.createXhr(), header; | |||
xhr.open('GET', url, true); | |||
//Allow plugins direct access to xhr headers | |||
if (headers) { | |||
for (header in headers) { | |||
if (headers.hasOwnProperty(header)) { | |||
xhr.setRequestHeader(header.toLowerCase(), headers[header]); | |||
} | |||
} | |||
} | |||
//Allow overrides specified in config | |||
if (masterConfig.onXhr) { | |||
masterConfig.onXhr(xhr, url); | |||
} | |||
xhr.onreadystatechange = function (evt) { | |||
var status, err; | |||
//Do not explicitly handle errors, those should be | |||
//visible via console output in the browser. | |||
if (xhr.readyState === 4) { | |||
status = xhr.status || 0; | |||
if (status > 399 && status < 600) { | |||
//An http 4xx or 5xx error. Signal an error. | |||
err = new Error(url + ' HTTP status: ' + status); | |||
err.xhr = xhr; | |||
if (errback) { | |||
errback(err); | |||
} | |||
} else { | |||
callback(xhr.responseText); | |||
} | |||
if (masterConfig.onXhrComplete) { | |||
masterConfig.onXhrComplete(xhr, url); | |||
} | |||
} | |||
}; | |||
xhr.send(null); | |||
}; | |||
} else if (masterConfig.env === 'rhino' || (!masterConfig.env && | |||
typeof Packages !== 'undefined' && typeof java !== 'undefined')) { | |||
//Why Java, why is this so awkward? | |||
text.get = function (url, callback) { | |||
var stringBuffer, line, | |||
encoding = "utf-8", | |||
file = new java.io.File(url), | |||
lineSeparator = java.lang.System.getProperty("line.separator"), | |||
input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), | |||
content = ''; | |||
try { | |||
stringBuffer = new java.lang.StringBuffer(); | |||
line = input.readLine(); | |||
// Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 | |||
// http://www.unicode.org/faq/utf_bom.html | |||
// Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: | |||
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 | |||
if (line && line.length() && line.charAt(0) === 0xfeff) { | |||
// Eat the BOM, since we've already found the encoding on this file, | |||
// and we plan to concatenating this buffer with others; the BOM should | |||
// only appear at the top of a file. | |||
line = line.substring(1); | |||
} | |||
if (line !== null) { | |||
stringBuffer.append(line); | |||
} | |||
while ((line = input.readLine()) !== null) { | |||
stringBuffer.append(lineSeparator); | |||
stringBuffer.append(line); | |||
} | |||
//Make sure we return a JavaScript string and not a Java string. | |||
content = String(stringBuffer.toString()); //String | |||
} finally { | |||
input.close(); | |||
} | |||
callback(content); | |||
}; | |||
} else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && | |||
typeof Components !== 'undefined' && Components.classes && | |||
Components.interfaces)) { | |||
//Avert your gaze! | |||
Cc = Components.classes; | |||
Ci = Components.interfaces; | |||
Components.utils['import']('resource://gre/modules/FileUtils.jsm'); | |||
xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc); | |||
text.get = function (url, callback) { | |||
var inStream, convertStream, fileObj, | |||
readData = {}; | |||
if (xpcIsWindows) { | |||
url = url.replace(/\//g, '\\'); | |||
} | |||
fileObj = new FileUtils.File(url); | |||
//XPCOM, you so crazy | |||
try { | |||
inStream = Cc['@mozilla.org/network/file-input-stream;1'] | |||
.createInstance(Ci.nsIFileInputStream); | |||
inStream.init(fileObj, 1, 0, false); | |||
convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] | |||
.createInstance(Ci.nsIConverterInputStream); | |||
convertStream.init(inStream, "utf-8", inStream.available(), | |||
Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); | |||
convertStream.readString(inStream.available(), readData); | |||
convertStream.close(); | |||
inStream.close(); | |||
callback(readData.value); | |||
} catch (e) { | |||
throw new Error((fileObj && fileObj.path || '') + ': ' + e); | |||
} | |||
}; | |||
} | |||
return text; | |||
}); |
@@ -1,78 +0,0 @@ | |||
define([ | |||
'ui/uiBase', | |||
'js/events' | |||
], function ( | |||
uiBase, | |||
events | |||
) { | |||
return { | |||
uis: [], | |||
root: '', | |||
init: function (root) { | |||
if (root) | |||
this.root = root + '/'; | |||
events.on('onKeyDown', this.events.onKeyDown.bind(this)); | |||
}, | |||
build: function (type, options) { | |||
let className = 'ui' + type[0].toUpperCase() + type.substr(1); | |||
let el = $('.' + className); | |||
if (el.length > 0) | |||
return; | |||
this.getTemplate(type, options); | |||
$(window).on('resize', this.onResize.bind(this)); | |||
}, | |||
getTemplate: function (type, options) { | |||
require([this.root + 'ui/templates/' + type + '/' + type], this.onGetTemplate.bind(this, options)); | |||
}, | |||
onGetTemplate: function (options, template) { | |||
let ui = $.extend(true, {}, uiBase, template); | |||
ui.setOptions(options); | |||
ui.render(); | |||
ui.el.data('ui', ui); | |||
this.uis.push(ui); | |||
if ((options) && (options.onDone)) | |||
options.onDone(ui); | |||
}, | |||
onResize: function () { | |||
this.uis.forEach(function (ui) { | |||
if (ui.centered) | |||
ui.center(); | |||
else if ((ui.centeredX) || (ui.centeredY)) | |||
ui.center(ui.centeredX, ui.centeredY); | |||
}, this); | |||
}, | |||
update: function () { | |||
let uis = this.uis; | |||
let uLen = uis.length; | |||
for (let i = 0; i < uLen; i++) { | |||
let u = uis[i]; | |||
if (u.update) | |||
u.update(); | |||
} | |||
}, | |||
events: { | |||
onKeyDown: function (key) { | |||
if (key == 'esc') { | |||
this.uis.forEach(function (u) { | |||
if (!u.modal) | |||
return; | |||
u.destroy(); | |||
}); | |||
$('.uiOverlay').hide(); | |||
} | |||
} | |||
} | |||
}; | |||
}); |
@@ -1,20 +0,0 @@ | |||
define([ | |||
'html!./template', | |||
'css!./styles', | |||
'js/generator' | |||
], function ( | |||
template, | |||
styles, | |||
generator | |||
) { | |||
return { | |||
tpl: template, | |||
modal: true, | |||
centered: true, | |||
postRender: function () { | |||
var data = generator.serialize(); | |||
this.find('textarea').val(data); | |||
} | |||
} | |||
}); |
@@ -1 +0,0 @@ | |||
.q0{color:#f2f5f5}.q1{color:#3fa7dd}.q2{color:#ffeb38}.q3{color:#a24eff}.q4{color:#ff6942}.color-red{color:#d43346}.color-green{color:#80f643}.uiExport{position:absolute;right:10px;top:10px;padding:10px;width:400px;height:300px;background-color:#373041;text-align:center}.uiExport .heading-text{color:#f2f5f5;margin-bottom:15px}.uiExport textarea{border:none;outline:none;width:100%;display:block;height:245px;padding:5px;display:box;font-size:16px} |
@@ -1,28 +0,0 @@ | |||
@import "../../../css/colors.less"; | |||
.uiExport { | |||
position: absolute; | |||
right: 10px; | |||
top: 10px; | |||
padding: 10px; | |||
width: 400px; | |||
height: 300px; | |||
background-color: #373041; | |||
text-align: center; | |||
.heading-text { | |||
color: @white; | |||
margin-bottom: 15px; | |||
} | |||
textarea { | |||
border: none; | |||
outline: none; | |||
width: 100%; | |||
display: block; | |||
height: 245px; | |||
padding: 5px; | |||
display: box; | |||
font-size: 16px; | |||
} | |||
} |
@@ -1,8 +0,0 @@ | |||
<div class="uiExport"> | |||
<div uiLoad="heading"> | |||
<div class="heading-text">Export</div> | |||
</div> | |||
<div class="content"> | |||
<textarea class="data" /> | |||
</div> | |||
</div> |
@@ -1,210 +0,0 @@ | |||
define([ | |||
'html!./template', | |||
'css!./styles', | |||
'js/generator', | |||
'js/client', | |||
'js/renderer', | |||
'js/input', | |||
'ui/factory', | |||
'js/events' | |||
], function ( | |||
template, | |||
styles, | |||
generator, | |||
client, | |||
renderer, | |||
input, | |||
uiFactory, | |||
events | |||
) { | |||
return { | |||
tpl: template, | |||
postRender: function () { | |||
this.onEvent('onTreeLoaded', this.events.onTreeLoaded.bind(this)); | |||
this.onEvent('onNew', this.events.onNew.bind(this)); | |||
this.onEvent('onDeleteNode', this.events.onDeleteNode.bind(this)); | |||
this.onEvent('onSelectNode', this.events.onSelectNode.bind(this)); | |||
this.on('.btnAdd', 'click', this.actions.add.bind(this)); | |||
this.on('.btnRename', 'click', this.events.onClickRename.bind(this)); | |||
this.on('.btnRemove', 'click', this.events.onClickRemove.bind(this)); | |||
}, | |||
addGroup: function (groupName) { | |||
var el = $('<div class="item">' + groupName + '</div>') | |||
.appendTo(this.find('.list')) | |||
.attr('group', groupName); | |||
el.on('click', this.events.onClickGroup.bind(this)); | |||
}, | |||
actions: { | |||
add: function () { | |||
var selected = generator.nodes.filter(n => n.selected); | |||
var groupName = 'group-' + this.find('.list .item').length; | |||
selected.forEach(function (s) { | |||
if (!s.group) | |||
s.group = []; | |||
s.group.push(groupName) | |||
}); | |||
this.addGroup(groupName); | |||
}, | |||
rename: function (newName) { | |||
var el = this.find('.list .active').eq(0); | |||
if (!el) | |||
return; | |||
var oldName = el.attr('group'); | |||
el | |||
.html(newName) | |||
.attr('group', newName); | |||
generator.nodes | |||
.filter(n => ((n.group) && (n.group.indexOf(oldName) > -1))) | |||
.forEach(function (n) { | |||
var group = n.group; | |||
group.spliceWhere(g => (g == oldName)); | |||
group.push(newName); | |||
}); | |||
}, | |||
remove: function (group) { | |||
generator.nodes.forEach(function (g) { | |||
if ((g.group) && (g.group.indexOf(group) > -1)) { | |||
g.group.spliceWhere(g => (g == group)); | |||
if (g.group.length == 0) | |||
delete g.group; | |||
} | |||
}); | |||
this.find('.item[group="' + group + '"]').remove(); | |||
} | |||
}, | |||
events: { | |||
onNew: function () { | |||
this.find('.list').empty(); | |||
}, | |||
onDeleteNode: function (node) { | |||
if ((!node.group) || (node.group.length == 0)) | |||
return; | |||
node.group.forEach(function (g) { | |||
var hasSiblings = generator.nodes.some(n => ((n.group) && (n.group.indexOf(g) > -1))) | |||
if (!hasSiblings) | |||
this.find('.item[group="' + g + '"]').remove(); | |||
}, this); | |||
}, | |||
onClickRename: function (e) { | |||
uiFactory.build('renameGroup', { | |||
onDone: this.events.onRenameGroupBuilt.bind(this) | |||
}); | |||
}, | |||
onRenameGroupBuilt: function () { | |||
var oldName = null; | |||
var el = this.find('.list .active').eq(0); | |||
if (el) | |||
oldName = el.attr('group'); | |||
events.emit('onRenameGroup', oldName, this.actions.rename.bind(this)); | |||
}, | |||
onClickRemove: function (e) { | |||
var el = this.find('.list .active').eq(0); | |||
if (!el) | |||
return; | |||
el.remove(); | |||
var groupName = el.attr('group'); | |||
generator.nodes | |||
.filter(n => ((n.group) && (n.group.indexOf(groupName) > -1))) | |||
.forEach(function (n) { | |||
n.group.spliceWhere(g => (g == groupName)); | |||
}); | |||
}, | |||
onTreeLoaded: function (tree) { | |||
var container = this.find('.list').empty(); | |||
var groups = []; | |||
tree.nodes | |||
.filter(n => !!n.group) | |||
.sort(function (a, b) { | |||
if (a.group < b.group) | |||
return -1; | |||
else if (b.group < a.group) | |||
return 1; | |||
}) | |||
.forEach(function (n) { | |||
n.group.forEach(function (g) { | |||
if (groups.indexOf(g) > -1) | |||
return; | |||
this.addGroup(g); | |||
groups.push(g); | |||
}, this); | |||
}, this); | |||
}, | |||
onClickGroup: function (e) { | |||
var group = $(e.currentTarget).attr('group'); | |||
var pos = { | |||
x: 0, | |||
y: 0 | |||
}; | |||
var nodes = generator.nodes | |||
.filter(function (n) { | |||
if ((!n.group) || (n.group.indexOf(group) == -1)) | |||
return false; | |||
pos.x += n.pos.x; | |||
pos.y += n.pos.y; | |||
return true; | |||
}); | |||
pos.x /= nodes.length; | |||
pos.y /= nodes.length; | |||
generator.callAction('selectNode', nodes); | |||
if (input.isKeyDown('shift')) { | |||
renderer.center({ | |||
pos: pos | |||
}); | |||
} | |||
renderer.makeDirty(); | |||
}, | |||
onSelectNode: function (nodes) { | |||
this.find('.list .active').removeClass('active'); | |||
var selectedGroup = null; | |||
nodes.forEach(function (n) { | |||
(n.group || []).forEach(function (g) { | |||
var list = generator.nodes.filter(a => ((a.group) && (a.group.indexOf(g) > -1))); | |||
var check = nodes.filter(a => ((a.group) && (a.group.indexOf(g) > -1))); | |||
if (list.length == check.length) | |||
selectedGroup = g; | |||
}); | |||
}); | |||
if (selectedGroup) | |||
this.find('.list .item[group="' + selectedGroup + '"]').addClass('active'); | |||
} | |||
} | |||
} | |||
}); |
@@ -1 +0,0 @@ | |||
.q0{color:#f2f5f5}.q1{color:#4ac441}.q2{color:#3fa7dd}.q3{color:#a24eff}.q4{color:#ff6942}.color-red{color:#d43346 !important}.color-redA{color:#ff4252 !important}.color-blueA{color:#48edff !important}.color-blueB{color:#3fa7dd !important}.color-greenB{color:#4ac441 !important}.color-yellowB{color:#faac45 !important}.color-green{color:#80f643 !important}.color-brownC{color:#b15a30 !important}.color-brownD{color:#763b3b !important}.color-grayA{color:#f2f5f5 !important}.color-grayB{color:#c0c3cf !important}.color-grayC{color:#929398 !important}.color-grayD{color:#69696e !important}.color-pinkB{color:#de43ae !important}.uiGroups{position:absolute;left:10px;bottom:10px;padding:10px;width:200px;background-color:#373041;text-align:center}.uiGroups .heading-text{color:#f2f5f5;margin-bottom:15px}.uiGroups .list:not(:empty){margin-bottom:15px}.uiGroups .list .item{width:100%;color:#f2f5f5;background-color:#505360;padding:5px 0 5px 0;margin-bottom:5px;cursor:pointer}.uiGroups .list .item:hover{background-color:#929398}.uiGroups .list .item:last-child{margin-bottom:0}.uiGroups .list .item.active{background-color:#929398}.uiGroups .btn{width:calc((100% - 30px) / 3);color:#f2f5f5;background-color:#3fa7dd;padding:5px;box-sizing:border-box;float:left;cursor:pointer}.uiGroups .btn:hover{background-color:#51fc9a;color:#3c3f4c}.uiGroups .btn:not(:last-child){margin-right:15px} |
@@ -1,62 +0,0 @@ | |||
@import "../../../css/colors.less"; | |||
.uiGroups { | |||
position: absolute; | |||
left: 10px; | |||
bottom: 10px; | |||
padding: 10px; | |||
width: 200px; | |||
background-color: #373041; | |||
text-align: center; | |||
.heading-text { | |||
color: @white; | |||
margin-bottom: 15px; | |||
} | |||
.list { | |||
&:not(:empty) { | |||
margin-bottom: 15px; | |||
} | |||
.item { | |||
width: 100%; | |||
color: @white; | |||
background-color: @blackA; | |||
padding: 5px 0px 5px 0px; | |||
margin-bottom: 5px; | |||
cursor: pointer; | |||
&:hover { | |||
background-color: @grayC; | |||
} | |||
&:last-child { | |||
margin-bottom: 0px; | |||
} | |||
&.active { | |||
background-color: @grayC; | |||
} | |||
} | |||
} | |||
.btn { | |||
width: calc((100% - 30px) / 3); | |||
color: @white; | |||
background-color: @blueB; | |||
padding: 5px; | |||
box-sizing: border-box; | |||
float: left; | |||
cursor: pointer; | |||
&:hover { | |||
background-color: @tealB; | |||
color: @blackB; | |||
} | |||
&:not(:last-child) { | |||
margin-right: 15px; | |||
} | |||
} | |||
} |
@@ -1,13 +0,0 @@ | |||
<div class="uiGroups"> | |||
<div uiLoad="heading"> | |||
<div class="heading-text">Groups</div> | |||
</div> | |||
<div class="content"> | |||
<div class="list"> | |||
</div> | |||
<div class="btn btnAdd">+</div> | |||
<div class="btn btnRename">" "</div> | |||
<div class="btn btnRemove">-</div> | |||
</div> | |||
</div> |
@@ -1,31 +0,0 @@ | |||
define([ | |||
'html!./template', | |||
'css!./styles', | |||
'js/generator' | |||
], function ( | |||
template, | |||
styles, | |||
generator | |||
) { | |||
return { | |||
tpl: template, | |||
modal: true, | |||
centered: true, | |||
postRender: function () { | |||
this.on('.btnImport', 'click', this.events.onImport.bind(this)); | |||
}, | |||
events: { | |||
onImport: function () { | |||
var val = this.find('textarea').val(); | |||
try { | |||
var data = JSON.parse(val); | |||
generator.callAction('load', data); | |||
this.destroy(); | |||
} catch (e) {} | |||
} | |||
} | |||
} | |||
}); |
@@ -1 +0,0 @@ | |||
.q0{color:#f2f5f5}.q1{color:#3fa7dd}.q2{color:#ffeb38}.q3{color:#a24eff}.q4{color:#ff6942}.color-red{color:#d43346}.color-green{color:#80f643}.uiImport{position:absolute;right:10px;top:10px;padding:10px;width:400px;height:340px;background-color:#373041;text-align:center}.uiImport .heading-text{color:#f2f5f5;margin-bottom:15px}.uiImport textarea{border:none;outline:none;width:100%;display:block;height:245px;padding:5px;display:box;font-size:16px;margin-bottom:15px}.uiImport .btnImport{width:calc((100% - 15px) / 2);color:#f2f5f5;margin-top:15px;background-color:#3fa7dd;padding:5px;box-sizing:border-box;margin:0 auto;cursor:pointer}.uiImport .btnImport:hover{background-color:#51fc9a;color:#3c3f4c} |
@@ -1,45 +0,0 @@ | |||
@import "../../../css/colors.less"; | |||
.uiImport { | |||
position: absolute; | |||
right: 10px; | |||
top: 10px; | |||
padding: 10px; | |||
width: 400px; | |||
height: 340px; | |||
background-color: #373041; | |||
text-align: center; | |||
.heading-text { | |||
color: @white; | |||
margin-bottom: 15px; | |||
} | |||
textarea { | |||
border: none; | |||
outline: none; | |||
width: 100%; | |||
display: block; | |||
height: 245px; | |||
padding: 5px; | |||
display: box; | |||
font-size: 16px; | |||
margin-bottom: 15px; | |||
} | |||
.btnImport { | |||
width: calc((100% - 15px) / 2); | |||
color: @white; | |||
margin-top: 15px; | |||
background-color: @blueB; | |||
padding: 5px; | |||
box-sizing: border-box; | |||
margin: 0 auto; | |||
cursor: pointer; | |||
&:hover { | |||
background-color: @tealB; | |||
color: @blackB; | |||
} | |||
} | |||
} |
@@ -1,9 +0,0 @@ | |||
<div class="uiImport"> | |||
<div uiLoad="heading"> | |||
<div class="heading-text">Import</div> | |||
</div> | |||
<div class="content"> | |||
<textarea class="data" placeholder="Paste data here..."/> | |||
<div class="btn btnImport">Import</div> | |||
</div> | |||
</div> |
@@ -1,48 +0,0 @@ | |||
define([ | |||
'html!./template', | |||
'css!./styles', | |||
'js/generator', | |||
'js/client' | |||
], function ( | |||
template, | |||
styles, | |||
generator, | |||
client | |||
) { | |||
return { | |||
tpl: template, | |||
modal: true, | |||
centered: true, | |||
postRender: function () { | |||
this.on('.btnLoad', 'click', this.actions.onLoad.bind(this)); | |||
client.getFileList(this.events.onGetFileList.bind(this)); | |||
}, | |||
actions: { | |||
onLoad: function (fileName) { | |||
client.load(fileName, generator.actions.load.bind(generator)); | |||
this.destroy(); | |||
} | |||
}, | |||
events: { | |||
onGetFileList: function (list) { | |||
var el = this.find('.list').empty(); | |||
list.forEach(function (l) { | |||
$('<div class="item">' + l + '</div>') | |||
.appendTo(el) | |||
.on('click', this.events.onClickItem.bind(this, l)); | |||
}, this); | |||
}, | |||
onClickItem: function (item) { | |||
this.actions.onLoad.call(this, item); | |||
$('.uiMenu').data('ui').loaded = item; | |||
} | |||
} | |||
} | |||
}); |
@@ -1 +0,0 @@ | |||
.q0{color:#f2f5f5}.q1{color:#4ac441}.q2{color:#3fa7dd}.q3{color:#a24eff}.q4{color:#ff6942}.color-red{color:#d43346 !important}.color-redA{color:#ff4252 !important}.color-blueA{color:#48edff !important}.color-blueB{color:#3fa7dd !important}.color-greenB{color:#4ac441 !important}.color-yellowB{color:#faac45 !important}.color-green{color:#80f643 !important}.color-brownC{color:#b15a30 !important}.color-brownD{color:#763b3b !important}.color-grayA{color:#f2f5f5 !important}.color-grayB{color:#c0c3cf !important}.color-grayC{color:#929398 !important}.color-grayD{color:#69696e !important}.color-pinkB{color:#de43ae !important}.uiLoad{position:absolute;right:10px;top:10px;padding:10px;width:200px;background-color:#373041;text-align:center}.uiLoad .heading-text{color:#f2f5f5;margin-bottom:15px}.uiLoad .list .item{width:100%;color:#f2f5f5;background-color:#505360;padding:5px 0 5px 0;margin-bottom:5px;cursor:pointer}.uiLoad .list .item:hover{background-color:#929398}.uiLoad .list .item:last-child{margin-bottom:0} |
@@ -1,37 +0,0 @@ | |||
@import "../../../css/colors.less"; | |||
.uiLoad { | |||
position: absolute; | |||
right: 10px; | |||
top: 10px; | |||
padding: 10px; | |||
width: 200px; | |||
background-color: #373041; | |||
text-align: center; | |||
.heading-text { | |||
color: @white; | |||
margin-bottom: 15px; | |||
} | |||
.list { | |||
.item { | |||
width: 100%; | |||
color: @white; | |||
background-color: @blackA; | |||
padding: 5px 0px 5px 0px; | |||
margin-bottom: 5px; | |||
cursor: pointer; | |||
&:hover { | |||
background-color: @grayC; | |||
} | |||
&:last-child { | |||
margin-bottom: 0px; | |||
} | |||
} | |||
} | |||
} |
@@ -1,10 +0,0 @@ | |||
<div class="uiLoad"> | |||
<div uiLoad="heading"> | |||
<div class="heading-text">Load Tree</div> | |||
</div> | |||
<div class="content"> | |||
<div class="list"> | |||
</div> | |||
</div> | |||
</div> |
@@ -1,63 +0,0 @@ | |||
define([ | |||
'html!./template', | |||
'css!./styles', | |||
'ui/factory', | |||
'js/generator', | |||
'js/renderer', | |||
'js/constants', | |||
'js/client' | |||
], function ( | |||
template, | |||
styles, | |||
uiFactory, | |||
generator, | |||
renderer, | |||
constants, | |||
client | |||
) { | |||
return { | |||
tpl: template, | |||
loaded: null, | |||
postRender: function () { | |||
if (constants.standAlone) | |||
this.find('.content > *:not(.btnNew):not(.btnImport):not(.btnExport)').addClass('disabled'); | |||
this.on('.btnNew', 'click', this.actions.onNew.bind(this)); | |||
this.on('.btnLoad', 'click', this.actions.onLoad.bind(this)); | |||
this.on('.btnSave', 'click', this.actions.onSave.bind(this)); | |||
this.on('.btnExport', 'click', this.actions.onExport.bind(this)); | |||
this.on('.btnImport', 'click', this.actions.onImport.bind(this)); | |||
this.on('.btnPersist', 'click', this.actions.onPersist.bind(this)); | |||
}, | |||
actions: { | |||
onNew: function () { | |||
this.loaded = null; | |||
generator.callAction('reset'); | |||
renderer.makeDirty(); | |||
}, | |||
onLoad: function () { | |||
uiFactory.build('load'); | |||
}, | |||
onSave: function () { | |||
uiFactory.build('save'); | |||
}, | |||
onExport: function () { | |||
uiFactory.build('export'); | |||
}, | |||
onImport: function () { | |||
uiFactory.build('import'); | |||
}, | |||
onPersist: function () { | |||
client.persist(generator.getData()); | |||
} | |||
} | |||
}; | |||
}); |
@@ -1 +0,0 @@ | |||
.q0{color:#f2f5f5}.q1{color:#4ac441}.q2{color:#3fa7dd}.q3{color:#a24eff}.q4{color:#ff6942}.color-red{color:#d43346 !important}.color-redA{color:#ff4252 !important}.color-blueA{color:#48edff !important}.color-blueB{color:#3fa7dd !important}.color-greenB{color:#4ac441 !important}.color-yellowB{color:#faac45 !important}.color-green{color:#80f643 !important}.color-brownC{color:#b15a30 !important}.color-brownD{color:#763b3b !important}.color-grayA{color:#f2f5f5 !important}.color-grayB{color:#c0c3cf !important}.color-grayC{color:#929398 !important}.color-grayD{color:#69696e !important}.color-pinkB{color:#de43ae !important}.uiMenu{position:absolute;right:10px;bottom:10px;padding:10px;width:120px;background-color:#373041;text-align:center}.uiMenu .heading{color:#f2f5f5;margin-bottom:15px}.uiMenu input{border:none;outline:none;width:calc(100% - 10px);height:20px;padding:5px;display:box}.uiMenu .btn{float:left;width:100%;color:#f2f5f5;background-color:#3fa7dd;padding:5px;box-sizing:border-box;cursor:pointer}.uiMenu .btn:not(:last-child){margin-bottom:15px}.uiMenu .btn:hover{background-color:#51fc9a;color:#3c3f4c}.uiMenu .btn:nth-child(3),.uiMenu .btn:nth-child(5){clear:both} |
@@ -1,48 +0,0 @@ | |||
@import "../../../css/colors.less"; | |||
.uiMenu { | |||
position: absolute; | |||
right: 10px; | |||
bottom: 10px; | |||
padding: 10px; | |||
width: 120px; | |||
background-color: @blackC; | |||
text-align: center; | |||
.heading { | |||
color: @white; | |||
margin-bottom: 15px; | |||
} | |||
input { | |||
border: none; | |||
outline: none; | |||
width: calc(100% - 10px); | |||
height: 20px; | |||
padding: 5px; | |||
display: box; | |||
} | |||
.btn { | |||
float: left; | |||
width: 100%; | |||
color: @white; | |||
background-color: @blueB; | |||
padding: 5px; | |||
box-sizing: border-box; | |||
cursor: pointer; | |||
&:not(:last-child) { | |||
margin-bottom: 15px; | |||
} | |||
&:hover { | |||
background-color: @tealB; | |||
color: @blackB; | |||
} | |||
&:nth-child(3), &:nth-child(5) { | |||
clear: both; | |||
} | |||
} | |||
} |
@@ -1,13 +0,0 @@ | |||
<div class="uiMenu"> | |||
<div class="heading"> | |||
<div class="heading-text">Menu</div> | |||
</div> | |||
<div class="content"> | |||
<div class="btn btnLoad">Load</div> | |||
<div class="btn btnSave">Save</div> | |||
<div class="btn btnExport">Export</div> | |||
<div class="btn btnImport">Import</div> | |||
<div class="btn btnPersist">Persist</div> | |||
<div class="btn btnNew">New</div> | |||
</div> | |||
</div> |
@@ -1,30 +0,0 @@ | |||
define([ | |||
'html!./template', | |||
'css!./styles', | |||
'js/generator' | |||
], function ( | |||
template, | |||
styles, | |||
generator | |||
) { | |||
return { | |||
tpl: template, | |||
loaded: null, | |||
postRender: function () { | |||
this.on('.btn', 'click', this.events.onChangeMode.bind(this)); | |||
}, | |||
events: { | |||
onChangeMode: function (event, e) { | |||
var el = $(e.currentTarget); | |||
this.find('.active').removeClass('active'); | |||
el.addClass('active'); | |||
var mode = el.attr('mode'); | |||
generator.setMode(mode); | |||
} | |||
} | |||
} | |||
}); |
@@ -1 +0,0 @@ | |||
.q0{color:#f2f5f5}.q1{color:#4ac441}.q2{color:#3fa7dd}.q3{color:#a24eff}.q4{color:#ff6942}.color-red{color:#d43346 !important}.color-redA{color:#ff4252 !important}.color-blueA{color:#48edff !important}.color-blueB{color:#3fa7dd !important}.color-greenB{color:#4ac441 !important}.color-yellowB{color:#faac45 !important}.color-green{color:#80f643 !important}.color-brownC{color:#b15a30 !important}.color-brownD{color:#763b3b !important}.color-grayA{color:#f2f5f5 !important}.color-grayB{color:#c0c3cf !important}.color-grayC{color:#929398 !important}.color-grayD{color:#69696e !important}.color-pinkB{color:#de43ae !important}.uiMode{position:absolute;left:10px;top:10px;padding:10px;width:120px;background-color:#373041;text-align:center}.uiMode .heading{color:#f2f5f5;margin-bottom:15px}.uiMode input{border:none;outline:none;width:calc(100% - 10px);height:20px;padding:5px;display:box}.uiMode .btn{float:left;width:100%;color:#f2f5f5;background-color:#3fa7dd;padding:5px;box-sizing:border-box;cursor:pointer}.uiMode .btn:not(:last-child){margin-bottom:15px}.uiMode .btn:hover,.uiMode .btn.active{background-color:#51fc9a;color:#3c3f4c}.uiMode .btn:nth-child(3){clear:both} |
@@ -1,48 +0,0 @@ | |||
@import "../../../css/colors.less"; | |||
.uiMode { | |||
position: absolute; | |||
left: 10px; | |||
top: 10px; | |||
padding: 10px; | |||
width: 120px; | |||
background-color: @blackC; | |||
text-align: center; | |||
.heading { | |||
color: @white; | |||
margin-bottom: 15px; | |||
} | |||
input { | |||
border: none; | |||
outline: none; | |||
width: calc(100% - 10px); | |||
height: 20px; | |||
padding: 5px; | |||
display: box; | |||
} | |||
.btn { | |||
float: left; | |||
width: 100%; | |||
color: @white; | |||
background-color: @blueB; | |||
padding: 5px; | |||
box-sizing: border-box; | |||
cursor: pointer; | |||
&:not(:last-child) { | |||
margin-bottom: 15px; | |||
} | |||
&:hover, &.active { | |||
background-color: @tealB; | |||
color: @blackB; | |||
} | |||
&:nth-child(3) { | |||
clear: both; | |||
} | |||
} | |||
} |
@@ -1,11 +0,0 @@ | |||
<div class="uiMode"> | |||
<div class="heading"> | |||
<div class="heading-text">Mode</div> | |||
</div> | |||
<div class="content"> | |||
<div class="btn btnNone active" mode="none">None</div> | |||
<div class="btn btnPlace" mode="place">Place</div> | |||
<div class="btn btnSelect" mode="select">Move</div> | |||
<div class="btn btnLink" mode="link">Link</div> | |||
</div> | |||
</div> |
@@ -1,177 +0,0 @@ | |||
define([ | |||
'html!ui/templates/nodeInfo/template', | |||
'css!ui/templates/nodeInfo/styles', | |||
'js/constants', | |||
'js/input' | |||
], function ( | |||
template, | |||
styles, | |||
constants, | |||
input | |||
) { | |||
return { | |||
tpl: template, | |||
nodes: null, | |||
statEl: null, | |||
postRender: function () { | |||
this.onEvent('onSelectNode', this.events.onSelectNode.bind(this)); | |||
this.onEvent('onFocusNode', this.events.onFocusNode.bind(this)); | |||
this.buildLookup(); | |||
}, | |||
buildLookup: function () { | |||
var container = this.find('.lookup'); | |||
for (var p in constants.stats) { | |||
var statName = constants.stats[p]; | |||
$('<div class="item">' + statName + '</div>') | |||
.appendTo(container) | |||
.on('click', this.events.onClickStat.bind(this, p)); | |||
} | |||
}, | |||
updateLabels: function () { | |||
var nodes = this.nodes; | |||
if (nodes.length == 1) | |||
nodes = nodes[0]; | |||
var isArray = !!nodes.push; | |||
this.find('.lblId').html(isArray ? '' : nodes.id); | |||
var group = nodes.group; | |||
if (isArray) { | |||
group = nodes[0].group; | |||
if (nodes.some(n => (n.group != group))) | |||
group = ''; | |||
} | |||
this.find('.lblGroup').html((group || []).toString()); | |||
var size = nodes.size; | |||
if (isArray) { | |||
size = nodes[0].size; | |||
if (nodes.some(n => (n.size != size))) | |||
size = ''; | |||
} | |||
size = ([ | |||
'Lesser', | |||
'Greater', | |||
'Core' | |||
])[size]; | |||
this.find('.lblType').html(size); | |||
var pos = isArray ? '' : nodes.pos.x + ', ' + nodes.pos.y; | |||
this.find('.lblPos').html(pos); | |||
}, | |||
setStats: function () { | |||
var node = this.nodes[0]; | |||
this.find('.stats').empty(); | |||
if (!node.stats) | |||
node.stats = {}; | |||
for (var p in node.stats) { | |||
this.buildStatSelector(p, node.stats[p]); | |||
} | |||
this.buildStatSelector(); | |||
}, | |||
buildStatSelector: function (stat, value) { | |||
var string = stat ? stat + ': ' + value : 'Select a stat...'; | |||
$('<div class="item">' + string + '</div>') | |||
.appendTo(this.find('.stats')) | |||
.data('stat', { | |||
stat: stat, | |||
value: value | |||
}) | |||
.on('mousewheel', this.events.onScrollStat.bind(this)) | |||
.on('click', this.events.onShowLookup.bind(this)); | |||
}, | |||
updateNode: function () { | |||
var stats = {}; | |||
this.find('.stats .item').toArray().forEach(function (s) { | |||
var stat = $(s).data('stat'); | |||
if (!stat.stat) | |||
return; | |||
stats[stat.stat] = stat.value; | |||
}); | |||
this.nodes[0].stats = stats; | |||
}, | |||
actions: { | |||
}, | |||
events: { | |||
onFocusNode: function (node) { | |||
this.events.onSelectNode.call(this, [node]); | |||
}, | |||
onSelectNode: function (nodes) { | |||
this.nodes = nodes; | |||
if (nodes.length > 0) | |||
this.updateLabels(); | |||
else if (nodes.length == 0) | |||
return; | |||
this.find('.nodeCount').html(nodes.length); | |||
this.setStats(); | |||
}, | |||
onClickStat: function (stat) { | |||
var string = stat + ': 1'; | |||
this.statEl | |||
.html(string) | |||
.data('stat', { | |||
stat: stat, | |||
value: 1 | |||
}); | |||
this.statEl = null; | |||
this.find('.lookup').hide(); | |||
this.updateNode(); | |||
this.setStats(); | |||
this.el.removeClass('picking'); | |||
}, | |||
onShowLookup: function (e) { | |||
this.statEl = $(e.currentTarget); | |||
this.find('.lookup').show(); | |||
this.el.addClass('picking'); | |||
}, | |||
onScrollStat: function (e) { | |||
var el = $(e.currentTarget); | |||
var stat = el.data('stat'); | |||
var delta = (e.originalEvent.deltaY > 0) ? -1 : 1; | |||
if (input.isKeyDown('shift')) { | |||
var nextValue = ~~((stat.value + (delta * 10)) / 10) * 10; | |||
delta = nextValue - stat.value; | |||
} | |||
stat.value += delta; | |||
var string = stat.stat + ': ' + stat.value; | |||
el.html(string); | |||
this.updateNode(); | |||
} | |||
} | |||
} | |||
}); |
@@ -1 +0,0 @@ | |||
.q0{color:#f2f5f5}.q1{color:#4ac441}.q2{color:#3fa7dd}.q3{color:#a24eff}.q4{color:#ff6942}.color-red{color:#d43346 !important}.color-redA{color:#ff4252 !important}.color-blueA{color:#48edff !important}.color-blueB{color:#3fa7dd !important}.color-greenB{color:#4ac441 !important}.color-yellowB{color:#faac45 !important}.color-green{color:#80f643 !important}.color-brownC{color:#b15a30 !important}.color-brownD{color:#763b3b !important}.color-grayA{color:#f2f5f5 !important}.color-grayB{color:#c0c3cf !important}.color-grayC{color:#929398 !important}.color-grayD{color:#69696e !important}.color-pinkB{color:#de43ae !important}.uiNodeInfo{position:absolute;right:10px;top:10px;padding:10px;width:250px;background-color:#373041;text-align:center}.uiNodeInfo.picking{height:calc(100% - 15px)}.uiNodeInfo .heading-text{color:#f2f5f5;margin-bottom:15px}.uiNodeInfo .content{height:calc(100% - 15px)}.uiNodeInfo .lbl{color:#f2f5f5}.uiNodeInfo .lbl:not(:empty).lblId:before{content:'Id: '}.uiNodeInfo .lbl:not(:empty).lblGroup:before{content:'Group: '}.uiNodeInfo .lbl:not(:empty).lblType:before{content:'Type: '}.uiNodeInfo .lbl:not(:empty).lblPos:before{content:'Pos: '}.uiNodeInfo .lbl:not(:empty).lblLinks:before{content:'Links: '}.uiNodeInfo .stats:not(:empty){margin-top:15px}.uiNodeInfo .stats .item{width:100%;height:28px;color:#f2f5f5;background-color:#505360;padding:5px 0 5px 0;margin-bottom:5px;cursor:pointer}.uiNodeInfo .stats .item:hover{background-color:#929398}.uiNodeInfo .stats .item:last-child{margin-bottom:0}.uiNodeInfo .nodeCount{color:#f2f5f5;margin-top:10px}.uiNodeInfo .nodeCount:before{content:'Selected: '}.uiNodeInfo .lookup{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#373041;overflow:auto}.uiNodeInfo .lookup .item{width:100%;color:#f2f5f5;background-color:#505360;padding:5px 0 5px 0;margin-bottom:5px;cursor:pointer}.uiNodeInfo .lookup .item:hover{background-color:#929398}.uiNodeInfo .lookup .item:last-child{margin-bottom:0} |
@@ -1,111 +0,0 @@ | |||
@import "../../../css/colors.less"; | |||
.uiNodeInfo { | |||
position: absolute; | |||
right: 10px; | |||
top: 10px; | |||
padding: 10px; | |||
width: 250px; | |||
background-color: #373041; | |||
text-align: center; | |||
&.picking { | |||
height: calc(100% - 15px); | |||
} | |||
.heading-text { | |||
color: @white; | |||
margin-bottom: 15px; | |||
} | |||
.content { | |||
height: calc(100% - 15px); | |||
} | |||
.lbl { | |||
color: @white; | |||
&:not(:empty) { | |||
&.lblId:before { | |||
content: 'Id: '; | |||
} | |||
&.lblGroup:before { | |||
content: 'Group: '; | |||
} | |||
&.lblType:before { | |||
content: 'Type: '; | |||
} | |||
&.lblPos:before { | |||
content: 'Pos: '; | |||
} | |||
&.lblLinks:before { | |||
content: 'Links: '; | |||
} | |||
} | |||
} | |||
.stats { | |||
&:not(:empty) { | |||
margin-top: 15px; | |||
} | |||
.item { | |||
width: 100%; | |||
height: 28px; | |||
color: @white; | |||
background-color: @blackA; | |||
padding: 5px 0px 5px 0px; | |||
margin-bottom: 5px; | |||
cursor: pointer; | |||
&:hover { | |||
background-color: @grayC; | |||
} | |||
&:last-child { | |||
margin-bottom: 0px; | |||
} | |||
} | |||
} | |||
.nodeCount { | |||
color: @white; | |||
margin-top: 10px; | |||
&:before { | |||
content: 'Selected: '; | |||
} | |||
} | |||
.lookup { | |||
display: none; | |||
position: absolute; | |||
left: 0px; | |||
top: 0px; | |||
width: 100%; | |||
height: 100%; | |||
background-color: #373041; | |||
overflow: auto; | |||
.item { | |||
width: 100%; | |||
color: @white; | |||
background-color: @blackA; | |||
padding: 5px 0px 5px 0px; | |||
margin-bottom: 5px; | |||
cursor: pointer; | |||
&:hover { | |||
background-color: @grayC; | |||
} | |||
&:last-child { | |||
margin-bottom: 0px; | |||
} | |||
} | |||
} | |||
} |
@@ -1,15 +0,0 @@ | |||
<div class="uiNodeInfo"> | |||
<div uiLoad="heading"> | |||
<div class="heading-text">Node Info</div> | |||
</div> | |||
<div class="content"> | |||
<div class="lbl lblId"></div> | |||
<div class="lbl lblGroup"></div> | |||
<div class="lbl lblType"></div> | |||
<div class="lbl lblPos"></div> | |||
<div class="stats"></div> | |||
</div> | |||
<div class="nodeCount"></div> | |||
<div class="lookup"></div> | |||
</div> |
@@ -1,39 +0,0 @@ | |||
define([ | |||
'html!./template', | |||
'css!./styles', | |||
'js/events' | |||
], function ( | |||
template, | |||
styles, | |||
events | |||
) { | |||
return { | |||
tpl: template, | |||
modal: true, | |||
centered: true, | |||
postRender: function () { | |||
this.find('input').focus(); | |||
this.onEvent('onRenameGroup', this.events.onRenameGroup.bind(this)); | |||
}, | |||
actions: { | |||
onOk: function (callback) { | |||
var groupName = this.val('.groupName'); | |||
this.destroy(); | |||
callback(groupName); | |||
} | |||
}, | |||
events: { | |||
onRenameGroup: function (oldName, callback) { | |||
if (oldName) | |||
this.find('input').val(oldName); | |||
this.on('.btnOk', 'click', this.actions.onOk.bind(this, callback)); | |||
} | |||
} | |||
} | |||
}); |
@@ -1 +0,0 @@ | |||
.q0{color:#f2f5f5}.q1{color:#4ac441}.q2{color:#3fa7dd}.q3{color:#a24eff}.q4{color:#ff6942}.color-red{color:#d43346 !important}.color-redA{color:#ff4252 !important}.color-blueA{color:#48edff !important}.color-blueB{color:#3fa7dd !important}.color-greenB{color:#4ac441 !important}.color-yellowB{color:#faac45 !important}.color-green{color:#80f643 !important}.color-brownC{color:#b15a30 !important}.color-brownD{color:#763b3b !important}.color-grayA{color:#f2f5f5 !important}.color-grayB{color:#c0c3cf !important}.color-grayC{color:#929398 !important}.color-grayD{color:#69696e !important}.color-pinkB{color:#de43ae !important}.uiRenameGroup{position:absolute;right:10px;top:10px;padding:10px;width:200px;background-color:#373041;text-align:center}.uiRenameGroup .heading{color:#f2f5f5;margin-bottom:15px}.uiRenameGroup input{border:none;outline:none;width:100%;display:block;height:28px;padding:5px;display:box;margin-bottom:15px;font-size:16px}.uiRenameGroup .btn{width:calc((100% - 15px) / 2);color:#f2f5f5;margin-top:15px;background-color:#3fa7dd;padding:5px;box-sizing:border-box;margin:0 auto;cursor:pointer}.uiRenameGroup .btn:hover{background-color:#51fc9a;color:#3c3f4c} |
@@ -1,44 +0,0 @@ | |||
@import "../../../css/colors.less"; | |||
.uiRenameGroup { | |||
position: absolute; | |||
right: 10px; | |||
top: 10px; | |||
padding: 10px; | |||
width: 200px; | |||
background-color: #373041; | |||
text-align: center; | |||
.heading { | |||
color: @white; | |||
margin-bottom: 15px; | |||
} | |||
input { | |||
border: none; | |||
outline: none; | |||
width: 100%; | |||
display: block; | |||
height: 28px; | |||
padding: 5px; | |||
display: box; | |||
margin-bottom: 15px; | |||
font-size: 16px; | |||
} | |||
.btn { | |||
width: calc((100% - 15px) / 2); | |||
color: @white; | |||
margin-top: 15px; | |||
background-color: @blueB; | |||
padding: 5px; | |||
box-sizing: border-box; | |||
margin: 0 auto; | |||
cursor: pointer; | |||
&:hover { | |||
background-color: @tealB; | |||
color: @blackB; | |||
} | |||
} | |||
} |
@@ -1,9 +0,0 @@ | |||
<div class="uiRenameGroup"> | |||
<div class="heading"> | |||
<div class="heading-text">Rename Group</div> | |||
</div> | |||
<div class="content"> | |||
<input type="text" class="groupName" placeholder="Group Name..."> | |||
<div class="btn btnOk">Ok</div> | |||
</div> | |||
</div> |
@@ -1,35 +0,0 @@ | |||
define([ | |||
'html!./template', | |||
'css!./styles', | |||
'js/generator', | |||
'js/client' | |||
], function ( | |||
template, | |||
styles, | |||
generator, | |||
client | |||
) { | |||
return { | |||
tpl: template, | |||
modal: true, | |||
centered: true, | |||
postRender: function () { | |||
this.find('input').focus(); | |||
this.on('.btnSave', 'click', this.actions.onSave.bind(this)); | |||
var loaded = $('.uiMenu').data('ui').loaded; | |||
if (loaded) | |||
this.find('.fileName').val(loaded); | |||
}, | |||
actions: { | |||
onSave: function () { | |||
var fileName = this.val('.fileName'); | |||
var data = generator.serialize(); | |||
client.save(fileName, data); | |||
this.destroy(); | |||
} | |||
} | |||
} | |||
}); |
@@ -1 +0,0 @@ | |||
.q0{color:#f2f5f5}.q1{color:#4ac441}.q2{color:#3fa7dd}.q3{color:#a24eff}.q4{color:#ff6942}.color-red{color:#d43346 !important}.color-redA{color:#ff4252 !important}.color-blueA{color:#48edff !important}.color-blueB{color:#3fa7dd !important}.color-greenB{color:#4ac441 !important}.color-yellowB{color:#faac45 !important}.color-green{color:#80f643 !important}.color-brownC{color:#b15a30 !important}.color-brownD{color:#763b3b !important}.color-grayA{color:#f2f5f5 !important}.color-grayB{color:#c0c3cf !important}.color-grayC{color:#929398 !important}.color-grayD{color:#69696e !important}.color-pinkB{color:#de43ae !important}.uiSave{position:absolute;right:10px;top:10px;padding:10px;width:200px;background-color:#373041;text-align:center}.uiSave .heading{color:#f2f5f5;margin-bottom:15px}.uiSave input{border:none;outline:none;width:100%;display:block;height:28px;padding:5px;display:box;margin-bottom:15px;font-size:16px}.uiSave .btn{width:calc((100% - 15px) / 2);color:#f2f5f5;margin-top:15px;background-color:#3fa7dd;padding:5px;box-sizing:border-box;margin:0 auto;cursor:pointer}.uiSave .btn:hover{background-color:#51fc9a;color:#3c3f4c} |
@@ -1,44 +0,0 @@ | |||
@import "../../../css/colors.less"; | |||
.uiSave { | |||
position: absolute; | |||
right: 10px; | |||
top: 10px; | |||
padding: 10px; | |||
width: 200px; | |||
background-color: #373041; | |||
text-align: center; | |||
.heading { | |||
color: @white; | |||
margin-bottom: 15px; | |||
} | |||
input { | |||
border: none; | |||
outline: none; | |||
width: 100%; | |||
display: block; | |||
height: 28px; | |||
padding: 5px; | |||
display: box; | |||
margin-bottom: 15px; | |||
font-size: 16px; | |||
} | |||
.btn { | |||
width: calc((100% - 15px) / 2); | |||
color: @white; | |||
margin-top: 15px; | |||
background-color: @blueB; | |||
padding: 5px; | |||
box-sizing: border-box; | |||
margin: 0 auto; | |||
cursor: pointer; | |||
&:hover { | |||
background-color: @tealB; | |||
color: @blackB; | |||
} | |||
} | |||
} |
@@ -1,9 +0,0 @@ | |||
<div class="uiSave"> | |||
<div class="heading"> | |||
<div class="heading-text">Save Tree</div> | |||
</div> | |||
<div class="content"> | |||
<input type="text" class="fileName" placeholder="File Name..."> | |||
<div class="btn btnSave">Save</div> | |||
</div> | |||
</div> |
@@ -1 +0,0 @@ | |||
.q0{color:#f2f5f5}.q1{color:#4ac441}.q2{color:#3fa7dd}.q3{color:#a24eff}.q4{color:#ff6942}.color-red{color:#d43346 !important}.color-redA{color:#ff4252 !important}.color-blueA{color:#48edff !important}.color-blueB{color:#3fa7dd !important}.color-greenB{color:#4ac441 !important}.color-yellowB{color:#faac45 !important}.color-green{color:#80f643 !important}.color-brownC{color:#b15a30 !important}.color-brownD{color:#763b3b !important}.color-grayA{color:#f2f5f5 !important}.color-grayB{color:#c0c3cf !important}.color-grayC{color:#929398 !important}.color-grayD{color:#69696e !important}.color-pinkB{color:#de43ae !important}.uiTooltip{position:absolute;padding:5px;background-color:rgba(55,48,65,0.9);text-align:center;color:#f2f5f5;display:none} |
@@ -1,10 +0,0 @@ | |||
@import "../../../css/colors.less"; | |||
.uiTooltip { | |||
position: absolute; | |||
padding: 5px; | |||
background-color: fade(@blackC, 90%); | |||
text-align: center; | |||
color: @white; | |||
display: none; | |||
} |
@@ -1 +0,0 @@ | |||
<div class="uiTooltip"></div> |
@@ -1,33 +0,0 @@ | |||
define([ | |||
'html!./template', | |||
'css!./styles' | |||
], function ( | |||
template, | |||
styles | |||
) { | |||
return { | |||
tpl: template, | |||
postRender: function () { | |||
this.onEvent('onShowTooltip', this.events.onShowTooltip.bind(this)); | |||
this.onEvent('onHideTooltip', this.events.onHideTooltip.bind(this)); | |||
}, | |||
events: { | |||
onShowTooltip: function (mouse, text) { | |||
this.show(); | |||
this.el.html(text); | |||
this.el.css({ | |||
left: mouse.raw.clientX + 20, | |||
top: mouse.raw.clientY | |||
}); | |||
}, | |||
onHideTooltip: function () { | |||
this.hide(); | |||
} | |||
} | |||
} | |||
}); |
@@ -1,153 +0,0 @@ | |||
define([ | |||
'js/events' | |||
], function ( | |||
events | |||
) { | |||
return { | |||
centeredX: false, | |||
centeredY: false, | |||
el: null, | |||
options: null, | |||
shown: true, | |||
eventCallbacks: {}, | |||
render: function () { | |||
var container = '.ui-container'; | |||
if (this.container) | |||
container += ' > ' + this.container; | |||
this.el = $(this.tpl) | |||
.appendTo(container) | |||
.data('ui', this); | |||
this.el.on('mouseenter', this.onMouseEnter.bind(this, true)); | |||
this.el.on('mouseleave', this.onMouseEnter.bind(this, false)); | |||
if (this.modal) | |||
this.el.addClass('modal'); | |||
this.postRender && this.postRender(); | |||
if (this.centered) { | |||
this.centeredX = true; | |||
this.centeredY = true; | |||
} | |||
if ((this.centeredX) || (this.centeredY)) | |||
this.center(this.centeredX, this.centeredY); | |||
this.shown = this.el.is(':visible'); | |||
}, | |||
onMouseEnter: function (enter) { | |||
events.emit('onUiHover', enter); | |||
}, | |||
setOptions: function (options) { | |||
this.options = options; | |||
}, | |||
on: function (el, event, callback) { | |||
if (typeof (el) == 'string') | |||
el = this.find(el); | |||
else | |||
el = $(el); | |||
el.on(event, function (e) { | |||
var args = [].slice.call(arguments, 1); | |||
args.splice(0, 0, event); | |||
callback.apply(null, [...args, e]); | |||
}); | |||
}, | |||
find: function (selector) { | |||
return this.el.find(selector); | |||
}, | |||
center: function (x, y) { | |||
if (x == null) | |||
x = true; | |||
if (y == null) | |||
y = true; | |||
this.centeredX = x; | |||
this.centeredY = y; | |||
var el = this.el; | |||
var pat = el.parent(); | |||
var posX = ~~((pat.width() / 2) - (el.width() / 2)) - 10; | |||
var posY = ~~((pat.height() / 2) - (el.height() / 2)) - 10; | |||
el.css('position', 'absolute'); | |||
if (x) | |||
el.css('left', posX); | |||
if (y) | |||
el.css('top', posY); | |||
}, | |||
show: function () { | |||
if (this.modal) | |||
$('.modal').hide(); | |||
this.shown = true; | |||
this.el.show(); | |||
}, | |||
hide: function () { | |||
if (this.beforeHide) | |||
this.beforeHide(); | |||
this.shown = false; | |||
this.el.hide(); | |||
}, | |||
destroy: function () { | |||
this.offEvents(); | |||
if (this.beforeDestroy) | |||
this.beforeDestroy(); | |||
this.el.remove(); | |||
}, | |||
val: function (selector) { | |||
return this.find(selector).val(); | |||
}, | |||
setDisabled: function (isDisabled) { | |||
this.el.removeClass('disabled') | |||
if (isDisabled) | |||
this.el.addClass('disabled'); | |||
}, | |||
onEvent: function (event, callback) { | |||
var list = this.eventCallbacks[event] || (this.eventCallbacks[event] = []); | |||
var eventCallback = events.on(event, callback); | |||
list.push(eventCallback); | |||
return eventCallback; | |||
}, | |||
offEvent: function (eventCallback) { | |||
for (var e in this.eventCallbacks) { | |||
this.eventCallbacks[e].forEach(function (c) { | |||
if (c == eventCallback) | |||
events.off(e, c); | |||
}, this); | |||
} | |||
}, | |||
offEvents: function () { | |||
for (var e in this.eventCallbacks) { | |||
this.eventCallbacks[e].forEach(function (c) { | |||
events.off(e, c); | |||
}, this); | |||
} | |||
} | |||
}; | |||
}); |
@@ -1,75 +0,0 @@ | |||
let fs = require('fs'); | |||
let mod = { | |||
init: function (callback) { | |||
let app = require('express')(); | |||
let server = require('http').createServer(app); | |||
let io = require('socket.io')(server); | |||
app.use(function (req, res, next) { | |||
if (req.url.indexOf('/server') != 0) | |||
req.url = '/client/' + req.url; | |||
next(); | |||
}); | |||
let lessMiddleware = require('less-middleware'); | |||
app.use(lessMiddleware('../', { | |||
force: true, | |||
render: { | |||
strictMath: true | |||
} | |||
})); | |||
app.get('/', this.requests.root.bind(this)); | |||
app.get(/^(.*)$/, this.requests.default.bind(this)); | |||
io.on('connection', this.listeners.onConnection.bind(this)); | |||
let port = process.env.PORT || 5000; | |||
server.listen(port, function () { | |||
let message = 'Server: Ready'; | |||
console.log(message); | |||
}); | |||
}, | |||
listeners: { | |||
onConnection: function (socket) { | |||
socket.on('request', this.listeners.onRequest.bind(this, socket)); | |||
}, | |||
onRequest: function (socket, msg, callback) { | |||
if (msg.action == 'load') { | |||
let res = JSON.parse(fs.readFileSync('saves/' + msg.fileName + '.json')); | |||
callback(res); | |||
} else if (msg.action == 'save') | |||
fs.writeFileSync('saves/' + msg.fileName + '.json', msg.data); | |||
else if (msg.action == 'getFileList') { | |||
callback(fs.readdirSync('saves/').map(l => (l.split('.')[0]))); | |||
return; | |||
} else if (msg.action == 'persist') | |||
require('./persist')(msg.data); | |||
if (callback) | |||
callback(); | |||
} | |||
}, | |||
requests: { | |||
root: function (req, res) { | |||
res.sendFile('index.html'); | |||
}, | |||
default: function (req, res, next) { | |||
let root = req.url.split('/')[1]; | |||
let file = req.params[0]; | |||
file = file.replace('/' + root + '/', ''); | |||
res.sendFile(file, { | |||
root: '../' + root | |||
}); | |||
} | |||
} | |||
}; | |||
mod.init(); |
@@ -1,25 +0,0 @@ | |||
{ | |||
"restartable": "rs", | |||
"ignore": [ | |||
".git", | |||
"node_modules/**/node_modules", | |||
"**/*.json" | |||
], | |||
"verbose": true, | |||
"execMap": { | |||
"js": "node --harmony" | |||
}, | |||
"events": { | |||
}, | |||
"watch": [ | |||
"*.*" | |||
], | |||
"ignore": [ | |||
"client" | |||
], | |||
"env": { | |||
"NODE_ENV": "development" | |||
}, | |||
"ext": "js json" | |||
} |
@@ -1,10 +0,0 @@ | |||
{ | |||
"name": "", | |||
"version": "0.0.1", | |||
"description": "", | |||
"dependencies": { | |||
"express": "^4.16.2", | |||
"less-middleware": "^2.2.1", | |||
"socket.io": "^2.0.4" | |||
} | |||
} |
@@ -1,9 +0,0 @@ | |||
const fs = require('fs'); | |||
module.exports = function (data) { | |||
const serverString = `module.exports = ${JSON.stringify(data, null, '\t')};`; | |||
fs.writeFileSync('../../../src/server/config/passiveTree.js', serverString); | |||
const clientString = `define([], function() { return ${JSON.stringify(data)}; });`; | |||
fs.writeFileSync('../../../src/client/ui/templates/passives/temp.js', clientString); | |||
}; |
@@ -1,2 +0,0 @@ | |||
* Rename Group | |||
* Delete Group |
@@ -1,4 +0,0 @@ | |||
global.extend = require('../../../src/server/misc/clone'); | |||
const sim = require('./sim'); | |||
sim(); |
@@ -1,23 +0,0 @@ | |||
{ | |||
"restartable": "rs", | |||
"ignore": [ | |||
".git", | |||
"node_modules/**/node_modules" | |||
], | |||
"verbose": true, | |||
"execMap": { | |||
"js": "node --harmony" | |||
}, | |||
"events": { | |||
}, | |||
"watch": [ | |||
"*.*", | |||
"../../src/server/config/spellsConfig.js", | |||
"../../src/server/combat/combat.js" | |||
], | |||
"env": { | |||
"NODE_ENV": "development" | |||
}, | |||
"ext": "js json" | |||
} |
@@ -1,18 +0,0 @@ | |||
{ | |||
"name": "isleward-tests", | |||
"version": "0.0.1", | |||
"lockfileVersion": 1, | |||
"requires": true, | |||
"dependencies": { | |||
"extend": { | |||
"version": "3.0.1", | |||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", | |||
"integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" | |||
}, | |||
"requirejs": { | |||
"version": "2.3.5", | |||
"resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.5.tgz", | |||
"integrity": "sha512-svnO+aNcR/an9Dpi44C7KSAy5fFGLtmPbaaCeQaklUz8BQhS64tWWIIlvEA5jrWICzlO/X9KSzSeXFnZdBu8nw==" | |||
} | |||
} | |||
} |
@@ -1,10 +0,0 @@ | |||
{ | |||
"name": "isleward-tests", | |||
"version": "0.0.1", | |||
"description": "isleward-tests", | |||
"dependencies": { | |||
"extend": "^3.0.0", | |||
"requirejs": "^2.3.5" | |||
}, | |||
"devDependencies": {} | |||
} |
@@ -1,181 +0,0 @@ | |||
const spellsConfig = require('../../../src/server/config/spellsConfig'); | |||
const combat = require('../../../src/server/combat/combat'); | |||
let spells = spellsConfig.spells; | |||
let max = true; | |||
let maxTarget = false; | |||
spells['harvest life'] = { | |||
statType: ['str', 'int'], | |||
statMult: 1, | |||
cdMax: 10, | |||
castTimeMax: 3, | |||
manaCost: 5, | |||
isAttack: true, | |||
range: 1, | |||
random: { | |||
damage: [4, 14], | |||
healPercent: [10, 30] | |||
} | |||
}; | |||
/*let bloodBarrierMult = 1.25; | |||
spells['skeleton melee'] = { | |||
statType: ['str', 'int'], | |||
statMult: 1 * bloodBarrierMult, | |||
auto: true, | |||
cdMax: 5, | |||
manaCost: 0, | |||
range: 1, | |||
random: { | |||
damage: [1, 3.8] | |||
} | |||
};*/ | |||
let level = 20; | |||
let hp = [ | |||
32.70, | |||
65.40, | |||
98.10, | |||
130.80, | |||
163.50, | |||
196.20, | |||
228.90, | |||
261.60, | |||
294.30, | |||
327.00, | |||
359.70, | |||
392.40, | |||
425.10, | |||
457.80, | |||
490.50, | |||
523.20, | |||
555.90, | |||
588.60, | |||
621.30, | |||
654.00 | |||
]; | |||
let hpMax = [ | |||
160.48, | |||
324.53, | |||
489.90, | |||
660.79, | |||
841.44, | |||
1036.21, | |||
1249.50, | |||
1485.85, | |||
1749.87, | |||
2046.32, | |||
2380.05, | |||
2756.08, | |||
3179.54, | |||
3655.72, | |||
4190.09, | |||
4788.27, | |||
5456.08, | |||
6199.50, | |||
7024.73, | |||
7938.17 | |||
]; | |||
module.exports = function () { | |||
let res = []; | |||
for (let s in spells) { | |||
let c = spells[s]; | |||
c.statType = c.statType || 'int'; | |||
let d = c.random.damage || c.random.healing; | |||
if (!d) | |||
continue; | |||
let damage = d[0]; | |||
if (max) | |||
damage = d[1]; | |||
var config = { | |||
statType: c.statType, | |||
statMult: c.statMult, | |||
element: c.element, | |||
cd: c.cdMax, | |||
damage: damage, | |||
noCrit: true, | |||
noMitigate: true, | |||
source: { | |||
stats: { | |||
values: { | |||
level: level, | |||
elementArcanePercent: 0, | |||
elementFrostPercent: 0, | |||
elementPoisonPercent: 0, | |||
elementHolyPercent: 0, | |||
elementFirePercent: 0 | |||
} | |||
} | |||
}, | |||
target: { | |||
stats: { | |||
values: { | |||
armor: maxTarget ? (level * 50) : (level * 20), | |||
elementAllResist: maxTarget ? 100 : 0, | |||
elementArcaneResist: 0, | |||
elementFrostResist: 0, | |||
elementPoisonResist: 0, | |||
elementHolyResist: 0, | |||
elementFireResist: 0 | |||
} | |||
} | |||
} | |||
}; | |||
let stat = c.statType; | |||
if (!stat.push) | |||
stat = [stat]; | |||
const minStat = level; | |||
const maxStat = level * 10; | |||
stat.forEach(ss => { | |||
config.source.stats.values[ss] = (max ? maxStat : minStat); | |||
}); | |||
let amount = combat.getDamage(config).amount; | |||
let critChance = max ? 0.5 : 0.05; | |||
let critMult = max ? 3 : 1.5; | |||
let castTimeMax = c.castTimeMax; | |||
amount = (((amount / 100) * (100 - critChance)) + (((amount / 100) * critChance) * (critMult / 100))); | |||
let duration = c.random.i_duration; | |||
if (duration) | |||
amount *= max ? duration[1] : duration[0]; | |||
const div = (c.cdMax + castTimeMax) || 1; | |||
amount /= div; | |||
res.push({ | |||
name: s, | |||
dpt: ~~(~~(amount * 10) / 10), | |||
cd: c.cdMax, | |||
mana: c.manaCost || '', | |||
tpk: ~~((maxTarget ? hpMax : hp)[level - 1] / amount), | |||
amount: amount | |||
}); | |||
} | |||
res = res.sort((a, b) => (b.dpt - a.dpt)); | |||
console.log(); | |||
console.log('ability dpt'); | |||
console.log(); | |||
res.forEach(function (r) { | |||
let gap = new Array(20 - r.name.length); | |||
console.log(r.name + ': ' + gap.join(' ') + r.dpt + ' ' + r.tpk + ' ticks ' + (~~((r.tpk / 2.85) * 10) / 10) + ' seconds'); | |||
}); | |||
console.log(); | |||
}; | |||
@@ -1,147 +0,0 @@ | |||
//Hack to force eslint pass | |||
const r = null; | |||
//Count the amount of permadead characters | |||
r.db('live').table('character').filter({ | |||
value: { | |||
permadead: true | |||
} | |||
}).count(); | |||
//Count the amount of permadead characters per spirit | |||
r.db('live').table('character') | |||
.filter({ | |||
value: { | |||
permadead: true | |||
} | |||
}) | |||
.group(row => { | |||
return row('value')('class'); | |||
}) | |||
.count(); | |||
//All players that are level 20 | |||
r.db('live').table('character') | |||
.filter(row => { | |||
return row('value')('components').contains(cpn => { | |||
return cpn('type').eq('stats').and(cpn('values')('level').ge(20)); | |||
}); | |||
}); | |||
//Group by mod action source, aggregate and order by count | |||
r.db('live').table('modLog') | |||
.group(f => f('value')('source')).count().ungroup().orderBy('reduction'); | |||
//List Items with dex > 30 | |||
r.db('live').table('character') | |||
.concatMap(row => { | |||
return row('value')('components') | |||
.filter(cpn => { | |||
return cpn('type').eq('inventory'); | |||
}) | |||
.concatMap(c => { | |||
return [{ | |||
name: row('value')('name'), | |||
cpn: c('items').filter(item => { | |||
return item('stats')('dex').ge(30); | |||
}) | |||
}]; | |||
}) | |||
.filter(c => { | |||
return c('cpn').count().ge(1); | |||
}); | |||
}); | |||
r.db('live').table('character') | |||
.concatMap(row => { | |||
return row('value')('components') | |||
.filter(cpn => { | |||
return cpn('type').eq('inventory'); | |||
}) | |||
.concatMap(c => { | |||
return [{ | |||
name: row('value')('name'), | |||
account: row('value')('account'), | |||
cpn: c('items').filter(item => { | |||
return item('quantity').ge(30000); | |||
}) | |||
}]; | |||
}) | |||
.filter(c => { | |||
return c('cpn').count().ge(1); | |||
}); | |||
}); | |||
//Play time per account from low to high | |||
r.db('live').table('character') | |||
.concatMap(row => { | |||
return row('value')('components') | |||
.filter(cpn => { | |||
return cpn('type').eq('stats'); | |||
}) | |||
.concatMap(c => { | |||
return [{ | |||
account: row('value')('account'), | |||
name: row('value')('name'), | |||
played: c('stats')('played') | |||
}]; | |||
}); | |||
}) | |||
.group('account') | |||
.sum('played') | |||
.ungroup() | |||
.orderBy('reduction'); | |||
//Amount of characters per level | |||
r.db('live').table('character') | |||
.concatMap(row => { | |||
return row('value')('components') | |||
.filter(cpn => { | |||
return cpn('type').eq('stats'); | |||
}) | |||
.concatMap(c => { | |||
return [{ | |||
level: c('values')('level') | |||
}]; | |||
}); | |||
}) | |||
.group('level') | |||
.count(); | |||
r.db('live').table('character') | |||
.concatMap(row => { | |||
return row('value')('components') | |||
.filter(cpn => { | |||
return cpn('type').eq('stats'); | |||
}) | |||
.concatMap(c => { | |||
return [{ | |||
level: c('values')('level'), | |||
xp: c('values')('xpTotal') | |||
}]; | |||
}); | |||
}) | |||
.filter(c => { | |||
return c('level').eq(2); | |||
}) | |||
.group('xp') | |||
.count(); | |||
r.db('live').table('character') | |||
.concatMap(row => { | |||
return row('value')('components') | |||
.filter(cpn => { | |||
return cpn('type').eq('stats'); | |||
}) | |||
.concatMap(c => { | |||
return [{ | |||
level: c('values')('level'), | |||
xp: c('values')('xpTotal'), | |||
streaks: c('stats')('mobKillStreaks') | |||
}]; | |||
}); | |||
}) | |||
.filter(c => { | |||
return c('level').eq(2).and(c('xp').eq(10)); | |||
}); |
@@ -1,141 +0,0 @@ | |||
let sqlite = require('sqlite3').verbose(); | |||
let r = require('rethinkdb'); | |||
let util = require('util'); | |||
const config = { | |||
file: './storage.db', | |||
dbName: 'live', | |||
dropTables: true, | |||
maxBusy: 100, | |||
tables: [ | |||
'characterList', | |||
'stash', | |||
'skins', | |||
'login', | |||
'leaderboard', | |||
'customMap', | |||
'mail', | |||
'customChannels', | |||
'error', | |||
'modLog', | |||
'accountInfo', | |||
'character' | |||
] | |||
}; | |||
let converter = { | |||
dbS: null, | |||
dbR: null, | |||
connection: null, | |||
res: null, | |||
busy: 0, | |||
records: [], | |||
currentTable: null, | |||
init: async function () { | |||
this.dbS = new sqlite.Database(config.file, this.onDbCreated.bind(this)); | |||
}, | |||
onDbCreated: async function () { | |||
this.connection = await r.connect({ | |||
host: 'localhost', | |||
port: 28015 | |||
}); | |||
await this.setupRethink(); | |||
await this.convertTables(); | |||
}, | |||
setupRethink: async function () { | |||
try { | |||
await r.dbCreate(config.dbName).run(this.connection); | |||
} catch (e) {} | |||
await this.connection.use(config.dbName); | |||
for (const table of config.tables) { | |||
try { | |||
if (config.dropTables) { | |||
try { | |||
await r.tableDrop(table).run(this.connection); | |||
} catch (e) {} | |||
} | |||
await r.tableCreate(table).run(this.connection); | |||
} catch (e) { | |||
if (!e.msg.includes('already exists')) | |||
console.log(e); | |||
} | |||
} | |||
}, | |||
convertTables: async function () { | |||
for (let table of config.tables) { | |||
this.currentTable = table; | |||
this.records = await util.promisify(this.dbS.all.bind(this.dbS))(`SELECT * FROM ${table}`); | |||
console.log(`${table}: ${this.records.length} records`); | |||
await this.startConvert(); | |||
console.log('done'); | |||
} | |||
}, | |||
startConvert: async function () { | |||
return new Promise(res => { | |||
this.res = res; | |||
this.work(); | |||
}); | |||
}, | |||
work: function () { | |||
if (!this.records.length) { | |||
this.res(); | |||
return; | |||
} | |||
if (this.busy === config.maxBusy) | |||
return; | |||
let record = this.records.pop(); | |||
if (record) { | |||
this.processRecord(record); | |||
this.work(); | |||
} | |||
}, | |||
processRecord: async function (record) { | |||
this.busy++; | |||
let id = record.key; | |||
let value = record.value | |||
.split('`') | |||
.join('\''); | |||
let obj = value; | |||
if (!['login'].includes(this.currentTable)) { | |||
if (this.currentTable === 'mail' && value === '') | |||
value = '{}'; | |||
obj = JSON.parse(value); | |||
} | |||
await r.table(this.currentTable) | |||
.insert({ | |||
id, | |||
value: obj | |||
}) | |||
.run(this.connection); | |||
this.busy--; | |||
this.work(); | |||
} | |||
}; | |||
converter.init(); |
@@ -1,827 +0,0 @@ | |||
{ | |||
"version": "0.0.1", | |||
"lockfileVersion": 1, | |||
"requires": true, | |||
"dependencies": { | |||
"abbrev": { | |||
"version": "1.1.1", | |||
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", | |||
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" | |||
}, | |||
"ajv": { | |||
"version": "6.9.1", | |||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", | |||
"integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", | |||
"requires": { | |||
"fast-deep-equal": "^2.0.1", | |||
"fast-json-stable-stringify": "^2.0.0", | |||
"json-schema-traverse": "^0.4.1", | |||
"uri-js": "^4.2.2" | |||
} | |||
}, | |||
"ansi-regex": { | |||
"version": "2.1.1", | |||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", | |||
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" | |||
}, | |||
"aproba": { | |||
"version": "1.2.0", | |||
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", | |||
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" | |||
}, | |||
"are-we-there-yet": { | |||
"version": "1.1.5", | |||
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", | |||
"integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", | |||
"requires": { | |||
"delegates": "^1.0.0", | |||
"readable-stream": "^2.0.6" | |||
} | |||
}, | |||
"asn1": { | |||
"version": "0.2.4", | |||
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", | |||
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", | |||
"requires": { | |||
"safer-buffer": "~2.1.0" | |||
} | |||
}, | |||
"assert-plus": { | |||
"version": "1.0.0", | |||
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", | |||
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" | |||
}, | |||
"asynckit": { | |||
"version": "0.4.0", | |||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", | |||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" | |||
}, | |||
"aws-sign2": { | |||
"version": "0.7.0", | |||
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", | |||
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" | |||
}, | |||
"aws4": { | |||
"version": "1.8.0", | |||
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", | |||
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" | |||
}, | |||
"balanced-match": { | |||
"version": "1.0.0", | |||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", | |||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" | |||
}, | |||
"bcrypt-pbkdf": { | |||
"version": "1.0.2", | |||
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", | |||
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", | |||
"requires": { | |||
"tweetnacl": "^0.14.3" | |||
} | |||
}, | |||
"bluebird": { | |||
"version": "2.11.0", | |||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", | |||
"integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" | |||
}, | |||
"brace-expansion": { | |||
"version": "1.1.11", | |||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | |||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", | |||
"requires": { | |||
"balanced-match": "^1.0.0", | |||
"concat-map": "0.0.1" | |||
} | |||
}, | |||
"caseless": { | |||
"version": "0.12.0", | |||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", | |||
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" | |||
}, | |||
"chownr": { | |||
"version": "1.1.1", | |||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", | |||
"integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" | |||
}, | |||
"code-point-at": { | |||
"version": "1.1.0", | |||
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", | |||
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" | |||
}, | |||
"combined-stream": { | |||
"version": "1.0.7", | |||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", | |||
"integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", | |||
"requires": { | |||
"delayed-stream": "~1.0.0" | |||
} | |||
}, | |||
"concat-map": { | |||
"version": "0.0.1", | |||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", | |||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" | |||
}, | |||
"console-control-strings": { | |||
"version": "1.1.0", | |||
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", | |||
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" | |||
}, | |||
"core-util-is": { | |||
"version": "1.0.2", | |||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", | |||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" | |||
}, | |||
"dashdash": { | |||
"version": "1.14.1", | |||
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", | |||
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", | |||
"requires": { | |||
"assert-plus": "^1.0.0" | |||
} | |||
}, | |||
"debug": { | |||
"version": "2.6.9", | |||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | |||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", | |||
"requires": { | |||
"ms": "2.0.0" | |||
} | |||
}, | |||
"deep-extend": { | |||
"version": "0.6.0", | |||
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", | |||
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" | |||
}, | |||
"delayed-stream": { | |||
"version": "1.0.0", | |||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", | |||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" | |||
}, | |||
"delegates": { | |||
"version": "1.0.0", | |||
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", | |||
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" | |||
}, | |||
"detect-libc": { | |||
"version": "1.0.3", | |||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", | |||
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" | |||
}, | |||
"ecc-jsbn": { | |||
"version": "0.1.2", | |||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", | |||
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", | |||
"requires": { | |||
"jsbn": "~0.1.0", | |||
"safer-buffer": "^2.1.0" | |||
} | |||
}, | |||
"extend": { | |||
"version": "3.0.2", | |||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", | |||
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" | |||
}, | |||
"extsprintf": { | |||
"version": "1.3.0", | |||
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", | |||
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" | |||
}, | |||
"fast-deep-equal": { | |||
"version": "2.0.1", | |||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", | |||
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" | |||
}, | |||
"fast-json-stable-stringify": { | |||
"version": "2.0.0", | |||
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", | |||
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" | |||
}, | |||
"forever-agent": { | |||
"version": "0.6.1", | |||
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", | |||
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" | |||
}, | |||
"form-data": { | |||
"version": "2.3.3", | |||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", | |||
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", | |||
"requires": { | |||
"asynckit": "^0.4.0", | |||
"combined-stream": "^1.0.6", | |||
"mime-types": "^2.1.12" | |||
} | |||
}, | |||
"fs-minipass": { | |||
"version": "1.2.5", | |||
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", | |||
"integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", | |||
"requires": { | |||
"minipass": "^2.2.1" | |||
} | |||
}, | |||
"fs.realpath": { | |||
"version": "1.0.0", | |||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", | |||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" | |||
}, | |||
"gauge": { | |||
"version": "2.7.4", | |||
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", | |||
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", | |||
"requires": { | |||
"aproba": "^1.0.3", | |||
"console-control-strings": "^1.0.0", | |||
"has-unicode": "^2.0.0", | |||
"object-assign": "^4.1.0", | |||
"signal-exit": "^3.0.0", | |||
"string-width": "^1.0.1", | |||
"strip-ansi": "^3.0.1", | |||
"wide-align": "^1.1.0" | |||
} | |||
}, | |||
"getpass": { | |||
"version": "0.1.7", | |||
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", | |||
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", | |||
"requires": { | |||
"assert-plus": "^1.0.0" | |||
} | |||
}, | |||
"glob": { | |||
"version": "7.1.3", | |||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", | |||
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", | |||
"requires": { | |||
"fs.realpath": "^1.0.0", | |||
"inflight": "^1.0.4", | |||
"inherits": "2", | |||
"minimatch": "^3.0.4", | |||
"once": "^1.3.0", | |||
"path-is-absolute": "^1.0.0" | |||
} | |||
}, | |||
"har-schema": { | |||
"version": "2.0.0", | |||
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", | |||
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" | |||
}, | |||
"har-validator": { | |||
"version": "5.1.3", | |||
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", | |||
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", | |||
"requires": { | |||
"ajv": "^6.5.5", | |||
"har-schema": "^2.0.0" | |||
} | |||
}, | |||
"has-unicode": { | |||
"version": "2.0.1", | |||
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", | |||
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" | |||
}, | |||
"http-signature": { | |||
"version": "1.2.0", | |||
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", | |||
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", | |||
"requires": { | |||
"assert-plus": "^1.0.0", | |||
"jsprim": "^1.2.2", | |||
"sshpk": "^1.7.0" | |||
} | |||
}, | |||
"iconv-lite": { | |||
"version": "0.4.24", | |||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", | |||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", | |||
"requires": { | |||
"safer-buffer": ">= 2.1.2 < 3" | |||
} | |||
}, | |||
"ignore-walk": { | |||
"version": "3.0.1", | |||
"resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", | |||
"integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", | |||
"requires": { | |||
"minimatch": "^3.0.4" | |||
} | |||
}, | |||
"inflight": { | |||
"version": "1.0.6", | |||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", | |||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", | |||
"requires": { | |||
"once": "^1.3.0", | |||
"wrappy": "1" | |||
} | |||
}, | |||
"inherits": { | |||
"version": "2.0.3", | |||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", | |||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" | |||
}, | |||
"ini": { | |||
"version": "1.3.5", | |||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", | |||
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" | |||
}, | |||
"is-fullwidth-code-point": { | |||
"version": "1.0.0", | |||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", | |||
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", | |||
"requires": { | |||
"number-is-nan": "^1.0.0" | |||
} | |||
}, | |||
"is-typedarray": { | |||
"version": "1.0.0", | |||
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", | |||
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" | |||
}, | |||
"isarray": { | |||
"version": "1.0.0", | |||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", | |||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" | |||
}, | |||
"isstream": { | |||
"version": "0.1.2", | |||
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", | |||
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" | |||
}, | |||
"jsbn": { | |||
"version": "0.1.1", | |||
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", | |||
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" | |||
}, | |||
"json-schema": { | |||
"version": "0.2.3", | |||
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", | |||
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" | |||
}, | |||
"json-schema-traverse": { | |||
"version": "0.4.1", | |||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", | |||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" | |||
}, | |||
"json-stringify-safe": { | |||
"version": "5.0.1", | |||
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", | |||
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" | |||
}, | |||
"jsprim": { | |||
"version": "1.4.1", | |||
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", | |||
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", | |||
"requires": { | |||
"assert-plus": "1.0.0", | |||
"extsprintf": "1.3.0", | |||
"json-schema": "0.2.3", | |||
"verror": "1.10.0" | |||
} | |||
}, | |||
"mime-db": { | |||
"version": "1.38.0", | |||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", | |||
"integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" | |||
}, | |||
"mime-types": { | |||
"version": "2.1.22", | |||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", | |||
"integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", | |||
"requires": { | |||
"mime-db": "~1.38.0" | |||
} | |||
}, | |||
"minimatch": { | |||
"version": "3.0.4", | |||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", | |||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", | |||
"requires": { | |||
"brace-expansion": "^1.1.7" | |||
} | |||
}, | |||
"minimist": { | |||
"version": "0.0.8", | |||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", | |||
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" | |||
}, | |||
"minipass": { | |||
"version": "2.3.5", | |||
"resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", | |||
"integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", | |||
"requires": { | |||
"safe-buffer": "^5.1.2", | |||
"yallist": "^3.0.0" | |||
} | |||
}, | |||
"minizlib": { | |||
"version": "1.2.1", | |||
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", | |||
"integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", | |||
"requires": { | |||
"minipass": "^2.2.1" | |||
} | |||
}, | |||
"mkdirp": { | |||
"version": "0.5.1", | |||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", | |||
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", | |||
"requires": { | |||
"minimist": "0.0.8" | |||
} | |||
}, | |||
"ms": { | |||
"version": "2.0.0", | |||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | |||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | |||
}, | |||
"nan": { | |||
"version": "2.10.0", | |||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", | |||
"integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" | |||
}, | |||
"needle": { | |||
"version": "2.2.4", | |||
"resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", | |||
"integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", | |||
"requires": { | |||
"debug": "^2.1.2", | |||
"iconv-lite": "^0.4.4", | |||
"sax": "^1.2.4" | |||
} | |||
}, | |||
"node-pre-gyp": { | |||
"version": "0.11.0", | |||
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", | |||
"integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", | |||
"requires": { | |||
"detect-libc": "^1.0.2", | |||
"mkdirp": "^0.5.1", | |||
"needle": "^2.2.1", | |||
"nopt": "^4.0.1", | |||
"npm-packlist": "^1.1.6", | |||
"npmlog": "^4.0.2", | |||
"rc": "^1.2.7", | |||
"rimraf": "^2.6.1", | |||
"semver": "^5.3.0", | |||
"tar": "^4" | |||
} | |||
}, | |||
"nopt": { | |||
"version": "4.0.1", | |||
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", | |||
"integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", | |||
"requires": { | |||
"abbrev": "1", | |||
"osenv": "^0.1.4" | |||
} | |||
}, | |||
"npm-bundled": { | |||
"version": "1.0.6", | |||
"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", | |||
"integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==" | |||
}, | |||
"npm-packlist": { | |||
"version": "1.3.0", | |||
"resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.3.0.tgz", | |||
"integrity": "sha512-qPBc6CnxEzpOcc4bjoIBJbYdy0D/LFFPUdxvfwor4/w3vxeE0h6TiOVurCEPpQ6trjN77u/ShyfeJGsbAfB3dA==", | |||
"requires": { | |||
"ignore-walk": "^3.0.1", | |||
"npm-bundled": "^1.0.1" | |||
} | |||
}, | |||
"npmlog": { | |||
"version": "4.1.2", | |||
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", | |||
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", | |||
"requires": { | |||
"are-we-there-yet": "~1.1.2", | |||
"console-control-strings": "~1.1.0", | |||
"gauge": "~2.7.3", | |||
"set-blocking": "~2.0.0" | |||
} | |||
}, | |||
"number-is-nan": { | |||
"version": "1.0.1", | |||
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", | |||
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" | |||
}, | |||
"oauth-sign": { | |||
"version": "0.9.0", | |||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", | |||
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" | |||
}, | |||
"object-assign": { | |||
"version": "4.1.1", | |||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", | |||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" | |||
}, | |||
"once": { | |||
"version": "1.4.0", | |||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", | |||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", | |||
"requires": { | |||
"wrappy": "1" | |||
} | |||
}, | |||
"os-homedir": { | |||
"version": "1.0.2", | |||
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", | |||
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" | |||
}, | |||
"os-tmpdir": { | |||
"version": "1.0.2", | |||
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", | |||
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" | |||
}, | |||
"osenv": { | |||
"version": "0.1.5", | |||
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", | |||
"integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", | |||
"requires": { | |||
"os-homedir": "^1.0.0", | |||
"os-tmpdir": "^1.0.0" | |||
} | |||
}, | |||
"path-is-absolute": { | |||
"version": "1.0.1", | |||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", | |||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" | |||
}, | |||
"performance-now": { | |||
"version": "2.1.0", | |||
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", | |||
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" | |||
}, | |||
"process-nextick-args": { | |||
"version": "2.0.0", | |||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", | |||
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" | |||
}, | |||
"psl": { | |||
"version": "1.1.31", | |||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", | |||
"integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" | |||
}, | |||
"punycode": { | |||
"version": "2.1.1", | |||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", | |||
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" | |||
}, | |||
"qs": { | |||
"version": "6.5.2", | |||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", | |||
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" | |||
}, | |||
"rc": { | |||
"version": "1.2.8", | |||
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", | |||
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", | |||
"requires": { | |||
"deep-extend": "^0.6.0", | |||
"ini": "~1.3.0", | |||
"minimist": "^1.2.0", | |||
"strip-json-comments": "~2.0.1" | |||
}, | |||
"dependencies": { | |||
"minimist": { | |||
"version": "1.2.0", | |||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", | |||
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" | |||
} | |||
} | |||
}, | |||
"readable-stream": { | |||
"version": "2.3.6", | |||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", | |||
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", | |||
"requires": { | |||
"core-util-is": "~1.0.0", | |||
"inherits": "~2.0.3", | |||
"isarray": "~1.0.0", | |||
"process-nextick-args": "~2.0.0", | |||
"safe-buffer": "~5.1.1", | |||
"string_decoder": "~1.1.1", | |||
"util-deprecate": "~1.0.1" | |||
} | |||
}, | |||
"request": { | |||
"version": "2.88.0", | |||
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", | |||
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", | |||
"requires": { | |||
"aws-sign2": "~0.7.0", | |||
"aws4": "^1.8.0", | |||
"caseless": "~0.12.0", | |||
"combined-stream": "~1.0.6", | |||
"extend": "~3.0.2", | |||
"forever-agent": "~0.6.1", | |||
"form-data": "~2.3.2", | |||
"har-validator": "~5.1.0", | |||
"http-signature": "~1.2.0", | |||
"is-typedarray": "~1.0.0", | |||
"isstream": "~0.1.2", | |||
"json-stringify-safe": "~5.0.1", | |||
"mime-types": "~2.1.19", | |||
"oauth-sign": "~0.9.0", | |||
"performance-now": "^2.1.0", | |||
"qs": "~6.5.2", | |||
"safe-buffer": "^5.1.2", | |||
"tough-cookie": "~2.4.3", | |||
"tunnel-agent": "^0.6.0", | |||
"uuid": "^3.3.2" | |||
} | |||
}, | |||
"rethinkdb": { | |||
"version": "2.3.3", | |||
"resolved": "https://registry.npmjs.org/rethinkdb/-/rethinkdb-2.3.3.tgz", | |||
"integrity": "sha1-PcZYbiL6HavuDSVOZL0ON5+tL3I=", | |||
"requires": { | |||
"bluebird": ">= 2.3.2 < 3" | |||
} | |||
}, | |||
"rimraf": { | |||
"version": "2.6.3", | |||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", | |||
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", | |||
"requires": { | |||
"glob": "^7.1.3" | |||
} | |||
}, | |||
"safe-buffer": { | |||
"version": "5.1.2", | |||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", | |||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" | |||
}, | |||
"safer-buffer": { | |||
"version": "2.1.2", | |||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", | |||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" | |||
}, | |||
"sax": { | |||
"version": "1.2.4", | |||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", | |||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" | |||
}, | |||
"semver": { | |||
"version": "5.6.0", | |||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", | |||
"integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" | |||
}, | |||
"set-blocking": { | |||
"version": "2.0.0", | |||
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", | |||
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" | |||
}, | |||
"signal-exit": { | |||
"version": "3.0.2", | |||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", | |||
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" | |||
}, | |||
"sqlite3": { | |||
"version": "4.0.6", | |||
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.6.tgz", | |||
"integrity": "sha512-EqBXxHdKiwvNMRCgml86VTL5TK1i0IKiumnfxykX0gh6H6jaKijAXvE9O1N7+omfNSawR2fOmIyJZcfe8HYWpw==", | |||
"requires": { | |||
"nan": "~2.10.0", | |||
"node-pre-gyp": "^0.11.0", | |||
"request": "^2.87.0" | |||
} | |||
}, | |||
"sshpk": { | |||
"version": "1.16.1", | |||
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", | |||
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", | |||
"requires": { | |||
"asn1": "~0.2.3", | |||
"assert-plus": "^1.0.0", | |||
"bcrypt-pbkdf": "^1.0.0", | |||
"dashdash": "^1.12.0", | |||
"ecc-jsbn": "~0.1.1", | |||
"getpass": "^0.1.1", | |||
"jsbn": "~0.1.0", | |||
"safer-buffer": "^2.0.2", | |||
"tweetnacl": "~0.14.0" | |||
} | |||
}, | |||
"string-width": { | |||
"version": "1.0.2", | |||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", | |||
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", | |||
"requires": { | |||
"code-point-at": "^1.0.0", | |||
"is-fullwidth-code-point": "^1.0.0", | |||
"strip-ansi": "^3.0.0" | |||
} | |||
}, | |||
"string_decoder": { | |||
"version": "1.1.1", | |||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", | |||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", | |||
"requires": { | |||
"safe-buffer": "~5.1.0" | |||
} | |||
}, | |||
"strip-ansi": { | |||
"version": "3.0.1", | |||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", | |||
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", | |||
"requires": { | |||
"ansi-regex": "^2.0.0" | |||
} | |||
}, | |||
"strip-json-comments": { | |||
"version": "2.0.1", | |||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", | |||
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" | |||
}, | |||
"tar": { | |||
"version": "4.4.8", | |||
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", | |||
"integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", | |||
"requires": { | |||
"chownr": "^1.1.1", | |||
"fs-minipass": "^1.2.5", | |||
"minipass": "^2.3.4", | |||
"minizlib": "^1.1.1", | |||
"mkdirp": "^0.5.0", | |||
"safe-buffer": "^5.1.2", | |||
"yallist": "^3.0.2" | |||
} | |||
}, | |||
"tough-cookie": { | |||
"version": "2.4.3", | |||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", | |||
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", | |||
"requires": { | |||
"psl": "^1.1.24", | |||
"punycode": "^1.4.1" | |||
}, | |||
"dependencies": { | |||
"punycode": { | |||
"version": "1.4.1", | |||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", | |||
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" | |||
} | |||
} | |||
}, | |||
"tunnel-agent": { | |||
"version": "0.6.0", | |||
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", | |||
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", | |||
"requires": { | |||
"safe-buffer": "^5.0.1" | |||
} | |||
}, | |||
"tweetnacl": { | |||
"version": "0.14.5", | |||
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", | |||
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" | |||
}, | |||
"uri-js": { | |||
"version": "4.2.2", | |||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", | |||
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", | |||
"requires": { | |||
"punycode": "^2.1.0" | |||
} | |||
}, | |||
"util-deprecate": { | |||
"version": "1.0.2", | |||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", | |||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" | |||
}, | |||
"uuid": { | |||
"version": "3.3.2", | |||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", | |||
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" | |||
}, | |||
"verror": { | |||
"version": "1.10.0", | |||
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", | |||
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", | |||
"requires": { | |||
"assert-plus": "^1.0.0", | |||
"core-util-is": "1.0.2", | |||
"extsprintf": "^1.2.0" | |||
} | |||
}, | |||
"wide-align": { | |||
"version": "1.1.3", | |||
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", | |||
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", | |||
"requires": { | |||
"string-width": "^1.0.2 || 2" | |||
} | |||
}, | |||
"wrappy": { | |||
"version": "1.0.2", | |||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", | |||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" | |||
}, | |||
"yallist": { | |||
"version": "3.0.3", | |||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", | |||
"integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" | |||
} | |||
} | |||
} |
@@ -1,9 +0,0 @@ | |||
{ | |||
"name": "", | |||
"version": "0.0.1", | |||
"description": "", | |||
"dependencies": { | |||
"rethinkdb": "^2.3.3", | |||
"sqlite3": "^4.0.6" | |||
} | |||
} |
@@ -1,8 +0,0 @@ | |||
var requirejs = require('requirejs'); | |||
var extend = require('extend'); | |||
global.extend = extend; | |||
requirejs(['./tests', '../src/server/misc/helpers'], function(tests) { | |||
tests.init(); | |||
}); |
@@ -1,18 +0,0 @@ | |||
{ | |||
"name": "isleward-tests", | |||
"version": "0.0.1", | |||
"lockfileVersion": 1, | |||
"requires": true, | |||
"dependencies": { | |||
"extend": { | |||
"version": "3.0.1", | |||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", | |||
"integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" | |||
}, | |||
"requirejs": { | |||
"version": "2.3.5", | |||
"resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.5.tgz", | |||
"integrity": "sha512-svnO+aNcR/an9Dpi44C7KSAy5fFGLtmPbaaCeQaklUz8BQhS64tWWIIlvEA5jrWICzlO/X9KSzSeXFnZdBu8nw==" | |||
} | |||
} | |||
} |
@@ -1,10 +0,0 @@ | |||
{ | |||
"name": "isleward-tests", | |||
"version": "0.0.1", | |||
"description": "isleward-tests", | |||
"dependencies": { | |||
"extend": "^3.0.0", | |||
"requirejs": "^2.3.3" | |||
}, | |||
"devDependencies": {} | |||
} |
@@ -1,16 +0,0 @@ | |||
var module = require('module'); | |||
var originalRequire = module.prototype.require; | |||
module.prototype.require = function (name) { | |||
var res = null; | |||
try { | |||
res = originalRequire.call(this, name); | |||
} catch (e) { | |||
try { | |||
res = originalRequire.call(this, __dirname + '/' + name); | |||
} catch (err) { } | |||
} | |||
return res; | |||
} |
@@ -1,56 +0,0 @@ | |||
define([ | |||
'server/mocks/generator' | |||
], function( | |||
mocks | |||
) { | |||
return { | |||
//Do you get the correct reputation when talking to a faction vendor for the first time | |||
startTalk_DiscoverFaction: function() { | |||
var factionBase = require('../src/server/config/factionBase'); | |||
var anglers = require('../src/server/config/factions/anglers'); | |||
var factionBlueprint = extend(true, {}, factionBase, anglers); | |||
var player = mocks.player({ | |||
dialogue: { | |||
}, | |||
reputation: { | |||
getBlueprint: function() { | |||
return factionBlueprint; | |||
} | |||
} | |||
}); | |||
var resultMsg = null; | |||
player.instance.syncer.queue = function(event, msg) { | |||
resultMsg = msg.messages[0].message; | |||
}; | |||
var target = mocks.player({ | |||
dialogue: { | |||
}, | |||
trade: { | |||
faction: { | |||
id: 'anglers' | |||
} | |||
} | |||
}); | |||
player.dialogue.talk({ | |||
target: target | |||
}); | |||
var rep = player.reputation.list[0]; | |||
if (rep.rep != factionBlueprint.initialRep) | |||
return true; | |||
else if (resultMsg.indexOf(' friendly ') == -1) | |||
return true; | |||
else { | |||
var tierName = factionBlueprint.tiers.find(t => (t.rep == rep.rep)).name.toLowerCase(); | |||
if (resultMsg.indexOf(` ${tierName} `) == -1) | |||
return true; | |||
} | |||
} | |||
}; | |||
}); |
@@ -1,65 +0,0 @@ | |||
*/ | |||
Ways in which stats can be modified: | |||
* EQ or unEQ item | |||
-* Passives | |||
* Spells | |||
* Casting a Spell | |||
* Activating an Aura | |||
-* Gaining a level | |||
* Downscaling | |||
* Backscaling | |||
* Effects like HP Regen Aura being activated and deactivated | |||
-* Titangrip events | |||
*/ | |||
*/ | |||
Ok, here goes. | |||
So, the server has to keep track of your stats for multiple reasons. For example, when dealing damage you might want to query the character's strength. Or, when trying to equip an item, we have to check the character's level. The former has to check the downscaled value and the latter, the unscaled. It's important to note that character's aren't always scaled. | |||
There are tons of ways that a character's stats can be modified, for example: EQ an item, applying a passive tree node, casting a spell, activating an aura, gaining a level, etc... | |||
My question is. How do I bet manage this? Do i recalculate scaled stats every time your stats chang | |||
*/ | |||
*/ | |||
* On enter zone: | |||
* Hook prophecy events | |||
* Set level based stats | |||
* Apply Passives | |||
* EQ All Gear (Make sure to ignore stat issues until after all EQd then check all) | |||
* Downscale stats and store in scaledStats | |||
* On EQ, unEQ, spellcast, aura activation, aura deactivation, aura effect application, aura effect removal, damage taken, death and respawn | |||
* Modify both stats and scaledStats | |||
*/ | |||
define([ | |||
'server/mocks/generator' | |||
], function( | |||
mocks | |||
) { | |||
return { | |||
//Do we have the item equipped after equipping it | |||
equipItem_Stats: function() { | |||
var player = mocks.player({ | |||
inventory: { | |||
items: [{ | |||
id: 0, | |||
slot: 'head', | |||
stats: { | |||
int: 10 | |||
} | |||
}] | |||
}, | |||
equipment: {}, | |||
stats: {}, | |||
spellbook: {} | |||
}); | |||
player.equipment.equip(0); | |||
if (player.stats.values.int != 10) | |||
return true; | |||
} | |||
}; | |||
}); |