Compare commits
296 Commits
0.1.1
...
dark-theme
Author | SHA1 | Date | |
---|---|---|---|
a7337fa918 | |||
da047a976a | |||
379826f16b | |||
5dc64492cb | |||
5ac5101ced | |||
f91ffba2a4 | |||
affe9a96f5 | |||
44fa0bea24 | |||
e77b509202 | |||
06b43732a9 | |||
ee2689ad84 | |||
8eadb03d59 | |||
6e0b3a4345 | |||
c633ce13b5 | |||
40593e00ed | |||
e214573e4e | |||
0825aba022 | |||
7a65263873 | |||
97f476e416 | |||
3dce138811 | |||
28edb3122f | |||
2cd9338417 | |||
0af31052b4 | |||
81ba811622 | |||
4b7008b5ba | |||
02744d5c72 | |||
52c963cf1b | |||
52d1328f93 | |||
50b40ac5b0 | |||
e1c3b0c002 | |||
f859abcb2f | |||
6e08208fed | |||
391c74df62 | |||
5f2deebfb5 | |||
6fa2123d57 | |||
536570abf1 | |||
ad67f6d852 | |||
ac6539a82c | |||
1e1021fd49 | |||
499aefbc1d | |||
c973b33ac8 | |||
3397ddbf44 | |||
607d2fafca | |||
ec7abaaf14 | |||
a389d731c2 | |||
4d7a99aeea | |||
04b80782dc | |||
837bc35a6b | |||
c98683e573 | |||
f6eea9ebf8 | |||
7e99e8b14b | |||
95b4c5fbc7 | |||
a50cca62d3 | |||
f122da1306 | |||
0692a689f1 | |||
fc8abc6d56 | |||
547daf4741 | |||
476f1b24a7 | |||
693b1fa26c | |||
655432a500 | |||
bd888f0f47 | |||
ede515f7a2 | |||
fa24c2d090 | |||
1522248793 | |||
cc1e4dd22a | |||
61a20e8708 | |||
a5815272c8 | |||
f66aba031c | |||
059fcc72b6 | |||
acb4e1b384 | |||
74e06a2b89 | |||
2032017b0c | |||
500633862e | |||
57306d6872 | |||
31bbc2326c | |||
5c0cdced85 | |||
07af7c961d | |||
ddd54e05e5 | |||
1fb1e62fb6 | |||
80630dae58 | |||
85c117ff81 | |||
a62d2a495e | |||
51c248e463 | |||
665cbb8374 | |||
5cfee77bb2 | |||
a8e686d59b | |||
6111e527e0 | |||
1b9ccfc95b | |||
59c917f599 | |||
b67f3b055f | |||
1d88b8ea69 | |||
d541506820 | |||
c9d0a597f5 | |||
e805dda4fb | |||
0be49b0d35 | |||
0c20b97b2f | |||
d32c1428cf | |||
f90dc5d9ae | |||
89df9f0315 | |||
561a3e9342 | |||
66392491b5 | |||
a100d4a403 | |||
9866298f19 | |||
3bda514879 | |||
7db41a9183 | |||
dfce597139 | |||
24357aeb05 | |||
a438eb81f0 | |||
1d92a5bf1c | |||
eb69734a38 | |||
6239d43f05 | |||
4c3985fc24 | |||
218e9b6fbe | |||
30696174f2 | |||
a3ddd525d0 | |||
2b8a7f08cb | |||
e28b99f40c | |||
b527b3a22d | |||
0b5e50aade | |||
dd53a39c4b | |||
f4e1b47d9d | |||
28cb1e22e7 | |||
7ff7bceca3 | |||
074b724d68 | |||
1ae92eeac8 | |||
30fd40ad72 | |||
972232b370 | |||
2e0b130ac5 | |||
2c07e76684 | |||
9325cdd68b | |||
19797b8731 | |||
4ea1761c72 | |||
e0d5e50357 | |||
f5638c3196 | |||
fa1c1596d5 | |||
bde2b5dde6 | |||
91f8edd2de | |||
9a7c3245c4 | |||
79da14e0bc | |||
683a8eb0e6 | |||
b0c4971838 | |||
d01b9f4803 | |||
f4d019046d | |||
f41ac3b107 | |||
8777832600 | |||
8458c6190d | |||
725871dab1 | |||
d687e9962e | |||
7abe97c1c2 | |||
cfa5be5612 | |||
b679b7e651 | |||
2fc2b0d641 | |||
c2b8177792 | |||
b9cc47f05d | |||
ec13b6902b | |||
19576cebed | |||
ebd2fcf4f5 | |||
73dfc842af | |||
1f636b7a5f | |||
4a20815619 | |||
bf00a52430 | |||
bca2e6449e | |||
46912f47c7 | |||
7a473d1aa8 | |||
92c7c80fbc | |||
701d070efd | |||
4ec6213877 | |||
e06a658422 | |||
d086f9dfab | |||
8f668c1bfa | |||
88308778d7 | |||
7db7ecf69a | |||
f447f30c6c | |||
e9b6df8536 | |||
e32a7c67e1 | |||
e376c789a6 | |||
1d9ae0dadd | |||
1a922704ed | |||
7a3387b550 | |||
5e29916f97 | |||
d0ae8d0620 | |||
4ef2e7f219 | |||
b412214976 | |||
1e299b6d5e | |||
5c5110a7cf | |||
84df7adc89 | |||
7ccfec5845 | |||
b69811105f | |||
925e0b11e8 | |||
9126a08d2f | |||
4383efa32c | |||
688a9de2b1 | |||
2c260c7174 | |||
42c934b723 | |||
cb2a7a5b04 | |||
28097368e1 | |||
877d9b40f5 | |||
aefc20198c | |||
4ac1b15520 | |||
b457786ae9 | |||
d6413887c2 | |||
e55614b4c8 | |||
53edcd8ffc | |||
99f86060a4 | |||
0c68b8dd5d | |||
11d5bdf752 | |||
27401c9070 | |||
beafe2580a | |||
2dae59e749 | |||
e54998128f | |||
1e2637ab48 | |||
03d1e8a91a | |||
f4df523b1c | |||
66a67d1491 | |||
ae445af083 | |||
d6d6c2aa4c | |||
1044e3ff64 | |||
0ee542a3ac | |||
a52e074e5b | |||
ee468de97d | |||
f50dca1864 | |||
2f399d17c0 | |||
34e38a505a | |||
998e500154 | |||
df26ed4d38 | |||
14fc7daf15 | |||
2dc1bb0732 | |||
4dfe69da37 | |||
e533d1e2f8 | |||
612949a86a | |||
944df583a6 | |||
d67cd14640 | |||
f6297b39fb | |||
7887080073 | |||
8bb4df9f40 | |||
8740c2128a | |||
3221cf2732 | |||
4f9946063d | |||
67acbbab4e | |||
8367a76906 | |||
159108b08b | |||
a61e6905bc | |||
1509ca3533 | |||
f5818cf142 | |||
210e8406ad | |||
370512a6b6 | |||
7b71aeed08 | |||
09fbdb2933 | |||
6170a4eb03 | |||
9bfd55c7df | |||
40cdb339c3 | |||
5a317f0f0c | |||
ce3a4c82a5 | |||
4e295b9a16 | |||
348cf881d5 | |||
a773170e55 | |||
7d7fb2c499 | |||
3cee773de0 | |||
b05a26d734 | |||
25525dcd94 | |||
90a79e7fae | |||
cc50cc8538 | |||
e18df207e2 | |||
eb2a9b3947 | |||
94b2406d89 | |||
590e538741 | |||
f7cdc43978 | |||
6e73f91aa5 | |||
9b32ee19e8 | |||
7726145a63 | |||
1fc8be35dd | |||
4df770e68c | |||
e065b6ac18 | |||
afb65e1d81 | |||
4d9aeb7041 | |||
ba87b35382 | |||
643ebd235d | |||
b932a12faa | |||
3f4b2ea290 | |||
6288af5899 | |||
991a950a42 | |||
71932197fa | |||
b61b27736c | |||
fb03f0db43 | |||
0815c4ff85 | |||
7015e10dd3 | |||
99adb1ec0a | |||
b6ec8f53e2 | |||
be1be86c20 | |||
268753af51 | |||
5115371bac | |||
bfd8bb2cf0 | |||
e4e23fa15c | |||
0c68a6c8e8 | |||
cca7b536b2 | |||
cf3207ddc9 |
3
.gitignore
vendored
@ -1,4 +1,5 @@
|
||||
# ---> VisualStudioCode
|
||||
.settings
|
||||
|
||||
|
||||
# Build directory
|
||||
output/*
|
||||
|
13
.travis.yml
Normal file
@ -0,0 +1,13 @@
|
||||
sudo: required
|
||||
|
||||
language: php
|
||||
|
||||
services:
|
||||
- docker
|
||||
|
||||
#Target PHP versions
|
||||
php:
|
||||
- 7.2
|
||||
|
||||
script:
|
||||
- docker run -t -v $(pwd):/data pierre42100/docker-comunicwebappscratch /data/builder build offline
|
11
Jenkinsfile
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
pipeline {
|
||||
agent { docker { image "registry.docker.internal/pierre42100/docker-comunicwebappscratch" } }
|
||||
stages {
|
||||
stage("build") {
|
||||
steps {
|
||||
sh 'php --version'
|
||||
sh './builder build offline'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
2
LICENSE
@ -1,5 +1,5 @@
|
||||
MIT License
|
||||
Copyright (c) <year> <copyright holders>
|
||||
Copyright (c) 2017-2018 Pierre HUBERT
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
|
@ -20,3 +20,9 @@ ComunicWeb would not exists without the following technologies developped by the
|
||||
- VideoJS
|
||||
- jquery.hotkeys
|
||||
- bootstrap-wysiwyg (https://github.com/steveathon/bootstrap-wysiwyg/)
|
||||
- wdt-emoji-bundle (http://ned.im/wdt-emoji-bundle)
|
||||
- PNGLib (http://www.xarg.org/2010/03/generate-client-side-png-files-using-javascript/) (BSD Licence)
|
||||
- Identicon (http://github.com/stewartlord/identicon.js) (BSD Licence)
|
||||
- FileSaver.js (http://eligrey.com) (by Eli Grey) (MIT Licence)
|
||||
- JSZip (https://github.com/Stuk/jszip.git) (MIT Licence)
|
||||
- JSZip Utils (https://github.com/Stuk/jszip-utils.git) (MIT Licence)
|
247
assets/3rdparty/FileSaver.js
vendored
Normal file
@ -0,0 +1,247 @@
|
||||
/*! FileSaver.js
|
||||
* A saveAs() FileSaver implementation.
|
||||
* 2014-01-24
|
||||
*
|
||||
* By Eli Grey, http://eligrey.com
|
||||
* License: X11/MIT
|
||||
* See LICENSE.md
|
||||
*/
|
||||
|
||||
/*global self */
|
||||
/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
|
||||
|
||||
/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
|
||||
|
||||
var saveAs = saveAs
|
||||
// IE 10+ (native saveAs)
|
||||
|| (typeof navigator !== "undefined" &&
|
||||
navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator))
|
||||
// Everyone else
|
||||
|| (function(view) {
|
||||
"use strict";
|
||||
// IE <10 is explicitly unsupported
|
||||
if (typeof navigator !== "undefined" &&
|
||||
/MSIE [1-9]\./.test(navigator.userAgent)) {
|
||||
return;
|
||||
}
|
||||
var
|
||||
doc = view.document
|
||||
// only get URL when necessary in case BlobBuilder.js hasn't overridden it yet
|
||||
, get_URL = function() {
|
||||
return view.URL || view.webkitURL || view;
|
||||
}
|
||||
, URL = view.URL || view.webkitURL || view
|
||||
, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
|
||||
, can_use_save_link = !view.externalHost && "download" in save_link
|
||||
, click = function(node) {
|
||||
var event = doc.createEvent("MouseEvents");
|
||||
event.initMouseEvent(
|
||||
"click", true, false, view, 0, 0, 0, 0, 0
|
||||
, false, false, false, false, 0, null
|
||||
);
|
||||
node.dispatchEvent(event);
|
||||
}
|
||||
, webkit_req_fs = view.webkitRequestFileSystem
|
||||
, req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
|
||||
, throw_outside = function(ex) {
|
||||
(view.setImmediate || view.setTimeout)(function() {
|
||||
throw ex;
|
||||
}, 0);
|
||||
}
|
||||
, force_saveable_type = "application/octet-stream"
|
||||
, fs_min_size = 0
|
||||
, deletion_queue = []
|
||||
, process_deletion_queue = function() {
|
||||
var i = deletion_queue.length;
|
||||
while (i--) {
|
||||
var file = deletion_queue[i];
|
||||
if (typeof file === "string") { // file is an object URL
|
||||
URL.revokeObjectURL(file);
|
||||
} else { // file is a File
|
||||
file.remove();
|
||||
}
|
||||
}
|
||||
deletion_queue.length = 0; // clear queue
|
||||
}
|
||||
, dispatch = function(filesaver, event_types, event) {
|
||||
event_types = [].concat(event_types);
|
||||
var i = event_types.length;
|
||||
while (i--) {
|
||||
var listener = filesaver["on" + event_types[i]];
|
||||
if (typeof listener === "function") {
|
||||
try {
|
||||
listener.call(filesaver, event || filesaver);
|
||||
} catch (ex) {
|
||||
throw_outside(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
, FileSaver = function(blob, name) {
|
||||
// First try a.download, then web filesystem, then object URLs
|
||||
var
|
||||
filesaver = this
|
||||
, type = blob.type
|
||||
, blob_changed = false
|
||||
, object_url
|
||||
, target_view
|
||||
, get_object_url = function() {
|
||||
var object_url = get_URL().createObjectURL(blob);
|
||||
deletion_queue.push(object_url);
|
||||
return object_url;
|
||||
}
|
||||
, dispatch_all = function() {
|
||||
dispatch(filesaver, "writestart progress write writeend".split(" "));
|
||||
}
|
||||
// on any filesys errors revert to saving with object URLs
|
||||
, fs_error = function() {
|
||||
// don't create more object URLs than needed
|
||||
if (blob_changed || !object_url) {
|
||||
object_url = get_object_url(blob);
|
||||
}
|
||||
if (target_view) {
|
||||
target_view.location.href = object_url;
|
||||
} else {
|
||||
window.open(object_url, "_blank");
|
||||
}
|
||||
filesaver.readyState = filesaver.DONE;
|
||||
dispatch_all();
|
||||
}
|
||||
, abortable = function(func) {
|
||||
return function() {
|
||||
if (filesaver.readyState !== filesaver.DONE) {
|
||||
return func.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
}
|
||||
, create_if_not_found = {create: true, exclusive: false}
|
||||
, slice
|
||||
;
|
||||
filesaver.readyState = filesaver.INIT;
|
||||
if (!name) {
|
||||
name = "download";
|
||||
}
|
||||
if (can_use_save_link) {
|
||||
object_url = get_object_url(blob);
|
||||
// FF for Android has a nasty garbage collection mechanism
|
||||
// that turns all objects that are not pure javascript into 'deadObject'
|
||||
// this means `doc` and `save_link` are unusable and need to be recreated
|
||||
// `view` is usable though:
|
||||
doc = view.document;
|
||||
save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a");
|
||||
save_link.href = object_url;
|
||||
save_link.download = name;
|
||||
var event = doc.createEvent("MouseEvents");
|
||||
event.initMouseEvent(
|
||||
"click", true, false, view, 0, 0, 0, 0, 0
|
||||
, false, false, false, false, 0, null
|
||||
);
|
||||
save_link.dispatchEvent(event);
|
||||
filesaver.readyState = filesaver.DONE;
|
||||
dispatch_all();
|
||||
return;
|
||||
}
|
||||
// Object and web filesystem URLs have a problem saving in Google Chrome when
|
||||
// viewed in a tab, so I force save with application/octet-stream
|
||||
// http://code.google.com/p/chromium/issues/detail?id=91158
|
||||
if (view.chrome && type && type !== force_saveable_type) {
|
||||
slice = blob.slice || blob.webkitSlice;
|
||||
blob = slice.call(blob, 0, blob.size, force_saveable_type);
|
||||
blob_changed = true;
|
||||
}
|
||||
// Since I can't be sure that the guessed media type will trigger a download
|
||||
// in WebKit, I append .download to the filename.
|
||||
// https://bugs.webkit.org/show_bug.cgi?id=65440
|
||||
if (webkit_req_fs && name !== "download") {
|
||||
name += ".download";
|
||||
}
|
||||
if (type === force_saveable_type || webkit_req_fs) {
|
||||
target_view = view;
|
||||
}
|
||||
if (!req_fs) {
|
||||
fs_error();
|
||||
return;
|
||||
}
|
||||
fs_min_size += blob.size;
|
||||
req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) {
|
||||
fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) {
|
||||
var save = function() {
|
||||
dir.getFile(name, create_if_not_found, abortable(function(file) {
|
||||
file.createWriter(abortable(function(writer) {
|
||||
writer.onwriteend = function(event) {
|
||||
target_view.location.href = file.toURL();
|
||||
deletion_queue.push(file);
|
||||
filesaver.readyState = filesaver.DONE;
|
||||
dispatch(filesaver, "writeend", event);
|
||||
};
|
||||
writer.onerror = function() {
|
||||
var error = writer.error;
|
||||
if (error.code !== error.ABORT_ERR) {
|
||||
fs_error();
|
||||
}
|
||||
};
|
||||
"writestart progress write abort".split(" ").forEach(function(event) {
|
||||
writer["on" + event] = filesaver["on" + event];
|
||||
});
|
||||
writer.write(blob);
|
||||
filesaver.abort = function() {
|
||||
writer.abort();
|
||||
filesaver.readyState = filesaver.DONE;
|
||||
};
|
||||
filesaver.readyState = filesaver.WRITING;
|
||||
}), fs_error);
|
||||
}), fs_error);
|
||||
};
|
||||
dir.getFile(name, {create: false}, abortable(function(file) {
|
||||
// delete file if it already exists
|
||||
file.remove();
|
||||
save();
|
||||
}), abortable(function(ex) {
|
||||
if (ex.code === ex.NOT_FOUND_ERR) {
|
||||
save();
|
||||
} else {
|
||||
fs_error();
|
||||
}
|
||||
}));
|
||||
}), fs_error);
|
||||
}), fs_error);
|
||||
}
|
||||
, FS_proto = FileSaver.prototype
|
||||
, saveAs = function(blob, name) {
|
||||
return new FileSaver(blob, name);
|
||||
}
|
||||
;
|
||||
FS_proto.abort = function() {
|
||||
var filesaver = this;
|
||||
filesaver.readyState = filesaver.DONE;
|
||||
dispatch(filesaver, "abort");
|
||||
};
|
||||
FS_proto.readyState = FS_proto.INIT = 0;
|
||||
FS_proto.WRITING = 1;
|
||||
FS_proto.DONE = 2;
|
||||
|
||||
FS_proto.error =
|
||||
FS_proto.onwritestart =
|
||||
FS_proto.onprogress =
|
||||
FS_proto.onwrite =
|
||||
FS_proto.onabort =
|
||||
FS_proto.onerror =
|
||||
FS_proto.onwriteend =
|
||||
null;
|
||||
|
||||
view.addEventListener("unload", process_deletion_queue, false);
|
||||
saveAs.unload = function() {
|
||||
process_deletion_queue();
|
||||
view.removeEventListener("unload", process_deletion_queue, false);
|
||||
};
|
||||
return saveAs;
|
||||
}(
|
||||
typeof self !== "undefined" && self
|
||||
|| typeof window !== "undefined" && window
|
||||
|| this.content
|
||||
));
|
||||
// `self` is undefined in Firefox for Android content script context
|
||||
// while `this` is nsIContentFrameMessageManager
|
||||
// with an attribute `content` that corresponds to the window
|
||||
|
||||
if (typeof module !== "undefined") module.exports = saveAs;
|
@ -2,41 +2,41 @@
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(toadOcfmlt9b38dHJxOBGNbE_oMaV8t2eFeISPpzbdE.woff) format('woff');
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url(googleFonts/toadOcfmlt9b38dHJxOBGNbE_oMaV8t2eFeISPpzbdE.woff) format('woff');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url(ODelI1aHBYDBqgeIAH2zlBM0YzuT7MdOe03otPbuUS0.woff) format('woff');
|
||||
src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url(googleFonts/ODelI1aHBYDBqgeIAH2zlBM0YzuT7MdOe03otPbuUS0.woff) format('woff');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro Semibold'), local('SourceSansPro-Semibold'), url(toadOcfmlt9b38dHJxOBGJ6-ys_j0H4QL65VLqzI3wI.woff) format('woff');
|
||||
src: local('Source Sans Pro Semibold'), local('SourceSansPro-Semibold'), url(googleFonts/toadOcfmlt9b38dHJxOBGJ6-ys_j0H4QL65VLqzI3wI.woff) format('woff');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(toadOcfmlt9b38dHJxOBGFkQc6VGVFSmCnC_l7QZG60.woff) format('woff');
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(googleFonts/toadOcfmlt9b38dHJxOBGFkQc6VGVFSmCnC_l7QZG60.woff) format('woff');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightIt'), url(fpTVHK8qsXbIeTHTrnQH6GGomRtBD2u8FwSY4jjlmeA.woff) format('woff');
|
||||
src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightIt'), url(googleFonts/fpTVHK8qsXbIeTHTrnQH6GGomRtBD2u8FwSY4jjlmeA.woff) format('woff');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-It'), url(M2Jd71oPJhLKp0zdtTvoMzNrcjQuD0pTu1za2FULaMs.woff) format('woff');
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-It'), url(googleFonts/M2Jd71oPJhLKp0zdtTvoMzNrcjQuD0pTu1za2FULaMs.woff) format('woff');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro Semibold Italic'), local('SourceSansPro-SemiboldIt'), url(fpTVHK8qsXbIeTHTrnQH6PULlOK_XQENnt2ryrY843E.woff) format('woff');
|
||||
src: local('Source Sans Pro Semibold Italic'), local('SourceSansPro-SemiboldIt'), url(googleFonts/fpTVHK8qsXbIeTHTrnQH6PULlOK_XQENnt2ryrY843E.woff) format('woff');
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(flat.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/flat.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -49,7 +49,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat,
|
||||
.iradio_flat {
|
||||
background-image: url(flat@2x.png);
|
||||
background-image: url(icheck-flat-imgs/flat@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
@ -65,7 +65,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(red.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/red.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -105,7 +105,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-red,
|
||||
.iradio_flat-red {
|
||||
background-image: url(red@2x.png);
|
||||
background-image: url(icheck-flat-imgs/red@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
@ -121,7 +121,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(green.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/green.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -161,7 +161,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-green,
|
||||
.iradio_flat-green {
|
||||
background-image: url(green@2x.png);
|
||||
background-image: url(icheck-flat-imgs/green@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
@ -177,7 +177,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(blue.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/blue.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -217,7 +217,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-blue,
|
||||
.iradio_flat-blue {
|
||||
background-image: url(blue@2x.png);
|
||||
background-image: url(icheck-flat-imgs/blue@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
@ -233,7 +233,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(aero.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/aero.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -273,7 +273,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-aero,
|
||||
.iradio_flat-aero {
|
||||
background-image: url(aero@2x.png);
|
||||
background-image: url(icheck-flat-imgs/aero@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
@ -289,7 +289,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(grey.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/grey.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -329,7 +329,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-grey,
|
||||
.iradio_flat-grey {
|
||||
background-image: url(grey@2x.png);
|
||||
background-image: url(icheck-flat-imgs/grey@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
@ -345,7 +345,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(orange.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/orange.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -385,7 +385,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-orange,
|
||||
.iradio_flat-orange {
|
||||
background-image: url(orange@2x.png);
|
||||
background-image: url(icheck-flat-imgs/orange@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
@ -401,7 +401,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(yellow.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/yellow.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -441,7 +441,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-yellow,
|
||||
.iradio_flat-yellow {
|
||||
background-image: url(yellow@2x.png);
|
||||
background-image: url(icheck-flat-imgs/yellow@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
@ -457,7 +457,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(pink.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/pink.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -497,7 +497,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-pink,
|
||||
.iradio_flat-pink {
|
||||
background-image: url(pink@2x.png);
|
||||
background-image: url(icheck-flat-imgs/pink@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
@ -513,7 +513,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(purple.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/purple.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -553,7 +553,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-purple,
|
||||
.iradio_flat-purple {
|
||||
background-image: url(purple@2x.png);
|
||||
background-image: url(icheck-flat-imgs/purple@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(aero.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/aero.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -49,7 +49,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-aero,
|
||||
.iradio_flat-aero {
|
||||
background-image: url(aero@2x.png);
|
||||
background-image: url(icheck-flat-imgs/aero@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(blue.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/blue.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -49,7 +49,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-blue,
|
||||
.iradio_flat-blue {
|
||||
background-image: url(blue@2x.png);
|
||||
background-image: url(icheck-flat-imgs/blue@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(flat.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/flat.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -49,7 +49,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat,
|
||||
.iradio_flat {
|
||||
background-image: url(flat@2x.png);
|
||||
background-image: url(icheck-flat-imgs/flat@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(green.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/green.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -49,7 +49,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-green,
|
||||
.iradio_flat-green {
|
||||
background-image: url(green@2x.png);
|
||||
background-image: url(icheck-flat-imgs/green@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(grey.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/grey.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -49,7 +49,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-grey,
|
||||
.iradio_flat-grey {
|
||||
background-image: url(grey@2x.png);
|
||||
background-image: url(icheck-flat-imgs/grey@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
@ -9,7 +9,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(orange.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/orange.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -49,7 +49,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-orange,
|
||||
.iradio_flat-orange {
|
||||
background-image: url(orange@2x.png);
|
||||
background-image: url(icheck-flat-imgs/orange@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(pink.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/pink.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -49,7 +49,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-pink,
|
||||
.iradio_flat-pink {
|
||||
background-image: url(pink@2x.png);
|
||||
background-image: url(icheck-flat-imgs/pink@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(purple.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/purple.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -49,7 +49,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-purple,
|
||||
.iradio_flat-purple {
|
||||
background-image: url(purple@2x.png);
|
||||
background-image: url(icheck-flat-imgs/purple@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(red.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/red.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -49,7 +49,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-red,
|
||||
.iradio_flat-red {
|
||||
background-image: url(red@2x.png);
|
||||
background-image: url(icheck-flat-imgs/red@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
padding: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url(yellow.png) no-repeat;
|
||||
background: url(icheck-flat-imgs/yellow.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -49,7 +49,7 @@
|
||||
only screen and (min-device-pixel-ratio: 1.5) {
|
||||
.icheckbox_flat-yellow,
|
||||
.iradio_flat-yellow {
|
||||
background-image: url(yellow@2x.png);
|
||||
background-image: url(icheck-flat-imgs/yellow@2x.png);
|
||||
-webkit-background-size: 176px 22px;
|
||||
background-size: 176px 22px;
|
||||
}
|
||||
|
5
assets/3rdparty/bootstrap-wysiwyg.js
vendored
@ -59,6 +59,11 @@
|
||||
}.bind( this ) );
|
||||
|
||||
$( window ).bind( "touchend", function( e ) {
|
||||
|
||||
//COMUNIC FIX
|
||||
if(!this.getCurrentRange)
|
||||
return;
|
||||
|
||||
var isInside = ( editor.is( e.target ) || editor.has( e.target ).length > 0 ),
|
||||
currentRange = this.getCurrentRange(),
|
||||
clear = currentRange && ( currentRange.startContainer === currentRange.endContainer && currentRange.startOffset === currentRange.endOffset );
|
||||
|
8
assets/3rdparty/identicon.js/LICENSE
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
Copyright (c) 2018, Stewart Lord
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
73
assets/3rdparty/identicon.js/README.md
vendored
Normal file
@ -0,0 +1,73 @@
|
||||
identicon.js
|
||||
============
|
||||
|
||||

|
||||
|
||||
[](https://cdnjs.com/libraries/identicon.js)
|
||||
|
||||
GitHub-style identicons as PNGs or SVGs in JS.
|
||||
|
||||
This little library will produce the same shape and (nearly) the same color as GitHub when given the same hash value. Supports PNG and SVG output formats. Note that GitHub uses an internal database identifier for the hash, so you can't simply md5 the username and get the same result. The creative visual design is borrowed from [Jason Long](http://twitter.com/jasonlong) of Git and GitHub fame.
|
||||
|
||||
Demo
|
||||
----
|
||||
[View Demo](https://rawgithub.com/stewartlord/identicon.js/master/demo.html)
|
||||
|
||||
Installation
|
||||
-----
|
||||
```
|
||||
npm install identicon.js --save
|
||||
```
|
||||
[](https://npmjs.org/package/identicon.js)
|
||||
|
||||
Options
|
||||
----
|
||||
* **hash** - A hexadecimal string of 15+ characters that will be used to generate the image.
|
||||
* **options** - [Optional] An options object used to customize the generated image.
|
||||
* **size** - The size in pixels of the height and width of the generated (square) image. Defaults to 64 pixels.
|
||||
* **margin** - The decimal fraction of the size to use for margin. For example, use 0.2 for a 20% margin. Defaults to 0.08 for an 8% margin.
|
||||
* **foreground** - The foreground color is automatically derived from the hash value. Use this option to override that behavior and provide a rgba value array instead (e.g. [255,0,0,255] for red).
|
||||
* **background** - The background color expressed as an rgba value array to use for the image background. For example, use [255,0,0,255] for red. Defaults to an opaque light gray [240,240,240,255].
|
||||
* **saturation** - The saturation of the derived foreground color as a value from 0-1. Defaults to 0.7.
|
||||
* **brightness** - The brightness of the derived foreground color as a value from 0-1. Defaults to 0.5.
|
||||
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
##### Simple
|
||||
Generate the Identicon by supplying a hash string and size.
|
||||
```js
|
||||
|
||||
// create a base64 encoded PNG
|
||||
var data = new Identicon('d3b07384d113edec49eaa6238ad5ff00', 420).toString();
|
||||
|
||||
// write to a data URI
|
||||
document.write('<img width=420 height=420 src="data:image/png;base64,' + data + '">');
|
||||
```
|
||||
|
||||
##### Advanced
|
||||
To customize additional properties, generate the Identicon by supplying a hexadecimal string and an options object.
|
||||
```js
|
||||
// set up options
|
||||
var hash = "c157a79031e1c40f85931829bc5fc552"; // 15+ hex chars
|
||||
var options = {
|
||||
foreground: [0, 0, 0, 255], // rgba black
|
||||
background: [255, 255, 255, 255], // rgba white
|
||||
margin: 0.2, // 20% margin
|
||||
size: 420, // 420px square
|
||||
format: 'svg' // use SVG instead of PNG
|
||||
};
|
||||
|
||||
// create a base64 encoded SVG
|
||||
var data = new Identicon(hash, options).toString();
|
||||
|
||||
// write to a data URI
|
||||
document.write('<img width=420 height=420 src="data:image/svg+xml;base64,' + data + '">');
|
||||
```
|
||||
|
||||
|
||||
[PNG output requires PNGLib](http://www.xarg.org/download/pnglib.js)
|
||||
|
||||
Copyright 2018, [Stewart Lord](https://github.com/stewartlord)
|
||||
Released under the [BSD license](http://www.opensource.org/licenses/bsd-license.php)
|
205
assets/3rdparty/identicon.js/identicon.js
vendored
Normal file
@ -0,0 +1,205 @@
|
||||
/**
|
||||
* Identicon.js 2.3.2
|
||||
* http://github.com/stewartlord/identicon.js
|
||||
*
|
||||
* PNGLib required for PNG output
|
||||
* http://www.xarg.org/download/pnglib.js
|
||||
*
|
||||
* Copyright 2018, Stewart Lord
|
||||
* Released under the BSD license
|
||||
* http://www.opensource.org/licenses/bsd-license.php
|
||||
*/
|
||||
|
||||
(function() {
|
||||
var PNGlib;
|
||||
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
|
||||
PNGlib = require('./pnglib');
|
||||
} else {
|
||||
PNGlib = window.PNGlib;
|
||||
}
|
||||
|
||||
var Identicon = function(hash, options){
|
||||
if (typeof(hash) !== 'string' || hash.length < 15) {
|
||||
throw 'A hash of at least 15 characters is required.';
|
||||
}
|
||||
|
||||
this.defaults = {
|
||||
background: [240, 240, 240, 255],
|
||||
margin: 0.08,
|
||||
size: 64,
|
||||
saturation: 0.7,
|
||||
brightness: 0.5,
|
||||
format: 'png'
|
||||
};
|
||||
|
||||
this.options = typeof(options) === 'object' ? options : this.defaults;
|
||||
|
||||
// backward compatibility with old constructor (hash, size, margin)
|
||||
if (typeof(arguments[1]) === 'number') { this.options.size = arguments[1]; }
|
||||
if (arguments[2]) { this.options.margin = arguments[2]; }
|
||||
|
||||
this.hash = hash
|
||||
this.background = this.options.background || this.defaults.background;
|
||||
this.size = this.options.size || this.defaults.size;
|
||||
this.format = this.options.format || this.defaults.format;
|
||||
this.margin = this.options.margin !== undefined ? this.options.margin : this.defaults.margin;
|
||||
|
||||
// foreground defaults to last 7 chars as hue at 70% saturation, 50% brightness
|
||||
var hue = parseInt(this.hash.substr(-7), 16) / 0xfffffff;
|
||||
var saturation = this.options.saturation || this.defaults.saturation;
|
||||
var brightness = this.options.brightness || this.defaults.brightness;
|
||||
this.foreground = this.options.foreground || this.hsl2rgb(hue, saturation, brightness);
|
||||
};
|
||||
|
||||
Identicon.prototype = {
|
||||
background: null,
|
||||
foreground: null,
|
||||
hash: null,
|
||||
margin: null,
|
||||
size: null,
|
||||
format: null,
|
||||
|
||||
image: function(){
|
||||
return this.isSvg()
|
||||
? new Svg(this.size, this.foreground, this.background)
|
||||
: new PNGlib(this.size, this.size, 256);
|
||||
},
|
||||
|
||||
render: function(){
|
||||
var image = this.image(),
|
||||
size = this.size,
|
||||
baseMargin = Math.floor(size * this.margin),
|
||||
cell = Math.floor((size - (baseMargin * 2)) / 5),
|
||||
margin = Math.floor((size - cell * 5) / 2),
|
||||
bg = image.color.apply(image, this.background),
|
||||
fg = image.color.apply(image, this.foreground);
|
||||
|
||||
// the first 15 characters of the hash control the pixels (even/odd)
|
||||
// they are drawn down the middle first, then mirrored outwards
|
||||
var i, color;
|
||||
for (i = 0; i < 15; i++) {
|
||||
color = parseInt(this.hash.charAt(i), 16) % 2 ? bg : fg;
|
||||
if (i < 5) {
|
||||
this.rectangle(2 * cell + margin, i * cell + margin, cell, cell, color, image);
|
||||
} else if (i < 10) {
|
||||
this.rectangle(1 * cell + margin, (i - 5) * cell + margin, cell, cell, color, image);
|
||||
this.rectangle(3 * cell + margin, (i - 5) * cell + margin, cell, cell, color, image);
|
||||
} else if (i < 15) {
|
||||
this.rectangle(0 * cell + margin, (i - 10) * cell + margin, cell, cell, color, image);
|
||||
this.rectangle(4 * cell + margin, (i - 10) * cell + margin, cell, cell, color, image);
|
||||
}
|
||||
}
|
||||
|
||||
return image;
|
||||
},
|
||||
|
||||
rectangle: function(x, y, w, h, color, image){
|
||||
if (this.isSvg()) {
|
||||
image.rectangles.push({x: x, y: y, w: w, h: h, color: color});
|
||||
} else {
|
||||
var i, j;
|
||||
for (i = x; i < x + w; i++) {
|
||||
for (j = y; j < y + h; j++) {
|
||||
image.buffer[image.index(i, j)] = color;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// adapted from: https://gist.github.com/aemkei/1325937
|
||||
hsl2rgb: function(h, s, b){
|
||||
h *= 6;
|
||||
s = [
|
||||
b += s *= b < .5 ? b : 1 - b,
|
||||
b - h % 1 * s * 2,
|
||||
b -= s *= 2,
|
||||
b,
|
||||
b + h % 1 * s,
|
||||
b + s
|
||||
];
|
||||
|
||||
return[
|
||||
s[ ~~h % 6 ] * 255, // red
|
||||
s[ (h|16) % 6 ] * 255, // green
|
||||
s[ (h|8) % 6 ] * 255 // blue
|
||||
];
|
||||
},
|
||||
|
||||
toString: function(raw){
|
||||
// backward compatibility with old toString, default to base64
|
||||
if (raw) {
|
||||
return this.render().getDump();
|
||||
} else {
|
||||
return this.render().getBase64();
|
||||
}
|
||||
},
|
||||
|
||||
isSvg: function(){
|
||||
return this.format.match(/svg/i)
|
||||
}
|
||||
};
|
||||
|
||||
var Svg = function(size, foreground, background){
|
||||
this.size = size;
|
||||
this.foreground = this.color.apply(this, foreground);
|
||||
this.background = this.color.apply(this, background);
|
||||
this.rectangles = [];
|
||||
};
|
||||
|
||||
Svg.prototype = {
|
||||
size: null,
|
||||
foreground: null,
|
||||
background: null,
|
||||
rectangles: null,
|
||||
|
||||
color: function(r, g, b, a){
|
||||
var values = [r, g, b].map(Math.round);
|
||||
values.push((a >= 0) && (a <= 255) ? a/255 : 1);
|
||||
return 'rgba(' + values.join(',') + ')';
|
||||
},
|
||||
|
||||
getDump: function(){
|
||||
var i,
|
||||
xml,
|
||||
rect,
|
||||
fg = this.foreground,
|
||||
bg = this.background,
|
||||
stroke = this.size * 0.005;
|
||||
|
||||
xml = "<svg xmlns='http://www.w3.org/2000/svg'"
|
||||
+ " width='" + this.size + "' height='" + this.size + "'"
|
||||
+ " style='background-color:" + bg + ";'>"
|
||||
+ "<g style='fill:" + fg + "; stroke:" + fg + "; stroke-width:" + stroke + ";'>";
|
||||
|
||||
for (i = 0; i < this.rectangles.length; i++) {
|
||||
rect = this.rectangles[i];
|
||||
if (rect.color == bg) continue;
|
||||
xml += "<rect "
|
||||
+ " x='" + rect.x + "'"
|
||||
+ " y='" + rect.y + "'"
|
||||
+ " width='" + rect.w + "'"
|
||||
+ " height='" + rect.h + "'"
|
||||
+ "/>";
|
||||
}
|
||||
xml += "</g></svg>"
|
||||
|
||||
return xml;
|
||||
},
|
||||
|
||||
getBase64: function(){
|
||||
if (btoa) {
|
||||
return btoa(this.getDump());
|
||||
} else if (Buffer) {
|
||||
return new Buffer(this.getDump(), 'binary').toString('base64');
|
||||
} else {
|
||||
throw 'Cannot generate base64 output';
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
|
||||
module.exports = Identicon;
|
||||
} else {
|
||||
window.Identicon = Identicon;
|
||||
}
|
||||
})();
|
19
assets/3rdparty/identicon.js/package.json
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "identicon.js",
|
||||
"version": "2.3.2",
|
||||
"description": "GitHub-style identicons as PNGs or SVGs in JS.",
|
||||
"main": "identicon.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/stewartlord/identicon.js"
|
||||
},
|
||||
"keywords": [
|
||||
"identicon"
|
||||
],
|
||||
"author": "stewardlord",
|
||||
"license": "BSD",
|
||||
"bugs": {
|
||||
"url": "https://github.com/stewartlord/identicon.js/issues"
|
||||
},
|
||||
"homepage": "https://github.com/stewartlord/identicon.js"
|
||||
}
|
214
assets/3rdparty/identicon.js/pnglib.js
vendored
Normal file
@ -0,0 +1,214 @@
|
||||
/**
|
||||
* A handy class to calculate color values.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Robert Eisele <robert@xarg.org>
|
||||
* @copyright Copyright (c) 2010, Robert Eisele
|
||||
* @link http://www.xarg.org/2010/03/generate-client-side-png-files-using-javascript/
|
||||
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
|
||||
*
|
||||
*/
|
||||
|
||||
(function() {
|
||||
|
||||
// helper functions for that ctx
|
||||
function write(buffer, offs) {
|
||||
for (var i = 2; i < arguments.length; i++) {
|
||||
for (var j = 0; j < arguments[i].length; j++) {
|
||||
buffer[offs++] = arguments[i].charAt(j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function byte2(w) {
|
||||
return String.fromCharCode((w >> 8) & 255, w & 255);
|
||||
}
|
||||
|
||||
function byte4(w) {
|
||||
return String.fromCharCode((w >> 24) & 255, (w >> 16) & 255, (w >> 8) & 255, w & 255);
|
||||
}
|
||||
|
||||
function byte2lsb(w) {
|
||||
return String.fromCharCode(w & 255, (w >> 8) & 255);
|
||||
}
|
||||
|
||||
// modified from original source to support NPM
|
||||
var PNGlib = function(width,height,depth) {
|
||||
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.depth = depth;
|
||||
|
||||
// pixel data and row filter identifier size
|
||||
this.pix_size = height * (width + 1);
|
||||
|
||||
// deflate header, pix_size, block headers, adler32 checksum
|
||||
this.data_size = 2 + this.pix_size + 5 * Math.floor((0xfffe + this.pix_size) / 0xffff) + 4;
|
||||
|
||||
// offsets and sizes of Png chunks
|
||||
this.ihdr_offs = 0; // IHDR offset and size
|
||||
this.ihdr_size = 4 + 4 + 13 + 4;
|
||||
this.plte_offs = this.ihdr_offs + this.ihdr_size; // PLTE offset and size
|
||||
this.plte_size = 4 + 4 + 3 * depth + 4;
|
||||
this.trns_offs = this.plte_offs + this.plte_size; // tRNS offset and size
|
||||
this.trns_size = 4 + 4 + depth + 4;
|
||||
this.idat_offs = this.trns_offs + this.trns_size; // IDAT offset and size
|
||||
this.idat_size = 4 + 4 + this.data_size + 4;
|
||||
this.iend_offs = this.idat_offs + this.idat_size; // IEND offset and size
|
||||
this.iend_size = 4 + 4 + 4;
|
||||
this.buffer_size = this.iend_offs + this.iend_size; // total PNG size
|
||||
|
||||
this.buffer = new Array();
|
||||
this.palette = new Object();
|
||||
this.pindex = 0;
|
||||
|
||||
var _crc32 = new Array();
|
||||
|
||||
// initialize buffer with zero bytes
|
||||
for (var i = 0; i < this.buffer_size; i++) {
|
||||
this.buffer[i] = "\x00";
|
||||
}
|
||||
|
||||
// initialize non-zero elements
|
||||
write(this.buffer, this.ihdr_offs, byte4(this.ihdr_size - 12), 'IHDR', byte4(width), byte4(height), "\x08\x03");
|
||||
write(this.buffer, this.plte_offs, byte4(this.plte_size - 12), 'PLTE');
|
||||
write(this.buffer, this.trns_offs, byte4(this.trns_size - 12), 'tRNS');
|
||||
write(this.buffer, this.idat_offs, byte4(this.idat_size - 12), 'IDAT');
|
||||
write(this.buffer, this.iend_offs, byte4(this.iend_size - 12), 'IEND');
|
||||
|
||||
// initialize deflate header
|
||||
var header = ((8 + (7 << 4)) << 8) | (3 << 6);
|
||||
header+= 31 - (header % 31);
|
||||
|
||||
write(this.buffer, this.idat_offs + 8, byte2(header));
|
||||
|
||||
// initialize deflate block headers
|
||||
for (var i = 0; (i << 16) - 1 < this.pix_size; i++) {
|
||||
var size, bits;
|
||||
if (i + 0xffff < this.pix_size) {
|
||||
size = 0xffff;
|
||||
bits = "\x00";
|
||||
} else {
|
||||
size = this.pix_size - (i << 16) - i;
|
||||
bits = "\x01";
|
||||
}
|
||||
write(this.buffer, this.idat_offs + 8 + 2 + (i << 16) + (i << 2), bits, byte2lsb(size), byte2lsb(~size));
|
||||
}
|
||||
|
||||
/* Create crc32 lookup table */
|
||||
for (var i = 0; i < 256; i++) {
|
||||
var c = i;
|
||||
for (var j = 0; j < 8; j++) {
|
||||
if (c & 1) {
|
||||
c = -306674912 ^ ((c >> 1) & 0x7fffffff);
|
||||
} else {
|
||||
c = (c >> 1) & 0x7fffffff;
|
||||
}
|
||||
}
|
||||
_crc32[i] = c;
|
||||
}
|
||||
|
||||
// compute the index into a png for a given pixel
|
||||
this.index = function(x,y) {
|
||||
var i = y * (this.width + 1) + x + 1;
|
||||
var j = this.idat_offs + 8 + 2 + 5 * Math.floor((i / 0xffff) + 1) + i;
|
||||
return j;
|
||||
}
|
||||
|
||||
// convert a color and build up the palette
|
||||
this.color = function(red, green, blue, alpha) {
|
||||
|
||||
alpha = alpha >= 0 ? alpha : 255;
|
||||
var color = (((((alpha << 8) | red) << 8) | green) << 8) | blue;
|
||||
|
||||
if (typeof this.palette[color] == "undefined") {
|
||||
if (this.pindex == this.depth) return "\x00";
|
||||
|
||||
var ndx = this.plte_offs + 8 + 3 * this.pindex;
|
||||
|
||||
this.buffer[ndx + 0] = String.fromCharCode(red);
|
||||
this.buffer[ndx + 1] = String.fromCharCode(green);
|
||||
this.buffer[ndx + 2] = String.fromCharCode(blue);
|
||||
this.buffer[this.trns_offs+8+this.pindex] = String.fromCharCode(alpha);
|
||||
|
||||
this.palette[color] = String.fromCharCode(this.pindex++);
|
||||
}
|
||||
return this.palette[color];
|
||||
}
|
||||
|
||||
// output a PNG string, Base64 encoded
|
||||
this.getBase64 = function() {
|
||||
|
||||
var s = this.getDump();
|
||||
|
||||
var ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||
var c1, c2, c3, e1, e2, e3, e4;
|
||||
var l = s.length;
|
||||
var i = 0;
|
||||
var r = "";
|
||||
|
||||
do {
|
||||
c1 = s.charCodeAt(i);
|
||||
e1 = c1 >> 2;
|
||||
c2 = s.charCodeAt(i+1);
|
||||
e2 = ((c1 & 3) << 4) | (c2 >> 4);
|
||||
c3 = s.charCodeAt(i+2);
|
||||
if (l < i+2) { e3 = 64; } else { e3 = ((c2 & 0xf) << 2) | (c3 >> 6); }
|
||||
if (l < i+3) { e4 = 64; } else { e4 = c3 & 0x3f; }
|
||||
r+= ch.charAt(e1) + ch.charAt(e2) + ch.charAt(e3) + ch.charAt(e4);
|
||||
} while ((i+= 3) < l);
|
||||
return r;
|
||||
}
|
||||
|
||||
// output a PNG string
|
||||
this.getDump = function() {
|
||||
|
||||
// compute adler32 of output pixels + row filter bytes
|
||||
var BASE = 65521; /* largest prime smaller than 65536 */
|
||||
var NMAX = 5552; /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
|
||||
var s1 = 1;
|
||||
var s2 = 0;
|
||||
var n = NMAX;
|
||||
|
||||
for (var y = 0; y < this.height; y++) {
|
||||
for (var x = -1; x < this.width; x++) {
|
||||
s1+= this.buffer[this.index(x, y)].charCodeAt(0);
|
||||
s2+= s1;
|
||||
if ((n-= 1) == 0) {
|
||||
s1%= BASE;
|
||||
s2%= BASE;
|
||||
n = NMAX;
|
||||
}
|
||||
}
|
||||
}
|
||||
s1%= BASE;
|
||||
s2%= BASE;
|
||||
write(this.buffer, this.idat_offs + this.idat_size - 8, byte4((s2 << 16) | s1));
|
||||
|
||||
// compute crc32 of the PNG chunks
|
||||
function crc32(png, offs, size) {
|
||||
var crc = -1;
|
||||
for (var i = 4; i < size-4; i += 1) {
|
||||
crc = _crc32[(crc ^ png[offs+i].charCodeAt(0)) & 0xff] ^ ((crc >> 8) & 0x00ffffff);
|
||||
}
|
||||
write(png, offs+size-4, byte4(crc ^ -1));
|
||||
}
|
||||
|
||||
crc32(this.buffer, this.ihdr_offs, this.ihdr_size);
|
||||
crc32(this.buffer, this.plte_offs, this.plte_size);
|
||||
crc32(this.buffer, this.trns_offs, this.trns_size);
|
||||
crc32(this.buffer, this.idat_offs, this.idat_size);
|
||||
crc32(this.buffer, this.iend_offs, this.iend_size);
|
||||
|
||||
// convert PNG to string
|
||||
return "\x89PNG\r\n\x1a\n"+this.buffer.join('');
|
||||
}
|
||||
}
|
||||
|
||||
// modified from original source to support NPM
|
||||
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
|
||||
module.exports = PNGlib;
|
||||
} else {
|
||||
window.PNGlib = PNGlib;
|
||||
}
|
||||
})();
|
121
assets/3rdparty/jszip-utils/jszip-utils.js
vendored
Normal file
@ -0,0 +1,121 @@
|
||||
/*!
|
||||
|
||||
JSZipUtils - A collection of cross-browser utilities to go along with JSZip.
|
||||
<http://stuk.github.io/jszip-utils>
|
||||
|
||||
(c) 2014 Stuart Knightley, David Duponchel
|
||||
Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown.
|
||||
|
||||
*/
|
||||
!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.JSZipUtils=e():"undefined"!=typeof global?global.JSZipUtils=e():"undefined"!=typeof self&&(self.JSZipUtils=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||
'use strict';
|
||||
|
||||
var JSZipUtils = {};
|
||||
// just use the responseText with xhr1, response with xhr2.
|
||||
// The transformation doesn't throw away high-order byte (with responseText)
|
||||
// because JSZip handles that case. If not used with JSZip, you may need to
|
||||
// do it, see https://developer.mozilla.org/En/Using_XMLHttpRequest#Handling_binary_data
|
||||
JSZipUtils._getBinaryFromXHR = function (xhr) {
|
||||
// for xhr.responseText, the 0xFF mask is applied by JSZip
|
||||
return xhr.response || xhr.responseText;
|
||||
};
|
||||
|
||||
// taken from jQuery
|
||||
function createStandardXHR() {
|
||||
try {
|
||||
return new window.XMLHttpRequest();
|
||||
} catch( e ) {}
|
||||
}
|
||||
|
||||
function createActiveXHR() {
|
||||
try {
|
||||
return new window.ActiveXObject("Microsoft.XMLHTTP");
|
||||
} catch( e ) {}
|
||||
}
|
||||
|
||||
// Create the request object
|
||||
var createXHR = window.ActiveXObject ?
|
||||
/* Microsoft failed to properly
|
||||
* implement the XMLHttpRequest in IE7 (can't request local files),
|
||||
* so we use the ActiveXObject when it is available
|
||||
* Additionally XMLHttpRequest can be disabled in IE7/IE8 so
|
||||
* we need a fallback.
|
||||
*/
|
||||
function() {
|
||||
return createStandardXHR() || createActiveXHR();
|
||||
} :
|
||||
// For all other browsers, use the standard XMLHttpRequest object
|
||||
createStandardXHR;
|
||||
|
||||
|
||||
|
||||
JSZipUtils.getBinaryContent = function(path, callback) {
|
||||
/*
|
||||
* Here is the tricky part : getting the data.
|
||||
* In firefox/chrome/opera/... setting the mimeType to 'text/plain; charset=x-user-defined'
|
||||
* is enough, the result is in the standard xhr.responseText.
|
||||
* cf https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Receiving_binary_data_in_older_browsers
|
||||
* In IE <= 9, we must use (the IE only) attribute responseBody
|
||||
* (for binary data, its content is different from responseText).
|
||||
* In IE 10, the 'charset=x-user-defined' trick doesn't work, only the
|
||||
* responseType will work :
|
||||
* http://msdn.microsoft.com/en-us/library/ie/hh673569%28v=vs.85%29.aspx#Binary_Object_upload_and_download
|
||||
*
|
||||
* I'd like to use jQuery to avoid this XHR madness, but it doesn't support
|
||||
* the responseType attribute : http://bugs.jquery.com/ticket/11461
|
||||
*/
|
||||
try {
|
||||
|
||||
var xhr = createXHR();
|
||||
|
||||
xhr.open('GET', path, true);
|
||||
|
||||
// recent browsers
|
||||
if ("responseType" in xhr) {
|
||||
xhr.responseType = "arraybuffer";
|
||||
}
|
||||
|
||||
// older browser
|
||||
if(xhr.overrideMimeType) {
|
||||
xhr.overrideMimeType("text/plain; charset=x-user-defined");
|
||||
}
|
||||
|
||||
//Allow big files download
|
||||
xhr.setRequestHeader("Range", "bytes=0-9999999999999999999999999999999");
|
||||
|
||||
xhr.onreadystatechange = function(evt) {
|
||||
var file, err;
|
||||
// use `xhr` and not `this`... thanks IE
|
||||
if (xhr.readyState === 4) {
|
||||
if (xhr.status === 200 || xhr.status === 0) {
|
||||
file = null;
|
||||
err = null;
|
||||
try {
|
||||
file = JSZipUtils._getBinaryFromXHR(xhr);
|
||||
} catch(e) {
|
||||
err = new Error(e);
|
||||
}
|
||||
callback(err, file);
|
||||
} else {
|
||||
callback(new Error("Ajax error for " + path + " : " + this.status + " " + this.statusText), null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
xhr.send();
|
||||
|
||||
} catch (e) {
|
||||
callback(new Error(e), null);
|
||||
}
|
||||
};
|
||||
|
||||
// export
|
||||
module.exports = JSZipUtils;
|
||||
|
||||
// enforcing Stuk's coding style
|
||||
// vim: set shiftwidth=4 softtabstop=4:
|
||||
|
||||
},{}]},{},[1])
|
||||
(1)
|
||||
});
|
||||
;
|
10
assets/3rdparty/jszip-utils/jszip-utils.min.js
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
/*!
|
||||
|
||||
JSZipUtils - A collection of cross-browser utilities to go along with JSZip.
|
||||
<http://stuk.github.io/jszip-utils>
|
||||
|
||||
(c) 2014 Stuart Knightley, David Duponchel
|
||||
Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown.
|
||||
|
||||
*/
|
||||
!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b){"use strict";function c(){try{return new window.XMLHttpRequest}catch(a){}}function d(){try{return new window.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}}var e={};e._getBinaryFromXHR=function(a){return a.response||a.responseText};var f=window.ActiveXObject?function(){return c()||d()}:c;e.getBinaryContent=function(a,b){try{var c=f();c.open("GET",a,!0),"responseType"in c&&(c.responseType="arraybuffer"),c.overrideMimeType&&c.overrideMimeType("text/plain; charset=x-user-defined"),c.onreadystatechange=function(){var d,f;if(4===c.readyState)if(200===c.status||0===c.status){d=null,f=null;try{d=e._getBinaryFromXHR(c)}catch(g){f=new Error(g)}b(f,d)}else b(new Error("Ajax error for "+a+" : "+this.status+" "+this.statusText),null)},c.send()}catch(d){b(new Error(d),null)}},b.exports=e},{}]},{},[1])(1)});
|
11623
assets/3rdparty/jszip/jszip.js
vendored
Normal file
15
assets/3rdparty/jszip/jszip.min.js
vendored
Normal file
3
assets/3rdparty/wdt-emoji/emoji.min.js
vendored
Normal file
BIN
assets/3rdparty/wdt-emoji/sheets/sheet_twitter_64_indexed_128.png
vendored
Normal file
After Width: | Height: | Size: 862 KiB |
483
assets/3rdparty/wdt-emoji/wdt-emoji-bundle.css
vendored
Normal file
@ -0,0 +1,483 @@
|
||||
.wdt-emoji-popup,
|
||||
.wdt-emoji-popup * {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* hide unavailable fonts @todo - check fallbacks */
|
||||
body[data-wdt-emoji-bundle='google'] .wdt-emoji[data-has-img-google='false'],
|
||||
body[data-wdt-emoji-bundle='emojione'] .wdt-emoji[data-has-img-emojione='false'],
|
||||
body[data-wdt-emoji-bundle='google'] .wdt-emoji[data-has-img-google='false'],
|
||||
body[data-wdt-emoji-bundle='apple'] .wdt-emoji[data-has-img-apple='false'] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* picker styles */
|
||||
.wdt-emoji-picker {
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.wdt-emoji-picker:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.wdt-emoji-picker-parent {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.wdt-emoji-picker span.emoji-outer.emoji-sizer {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* bundle popup styles */
|
||||
.wdt-emoji-popup {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
visibility: hidden;
|
||||
|
||||
width: 357px;
|
||||
max-width: 100%;
|
||||
height: 357px;
|
||||
max-height: 100%;
|
||||
|
||||
transition: opacity 50ms ease, bottom 1s ease-out;
|
||||
|
||||
opacity: 0;
|
||||
border: 1px solid #dedede;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.wdt-emoji-popup.open {
|
||||
visibility: visible;
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#wdt-emoji-menu-header {
|
||||
padding: 4px 0 0 7px;
|
||||
|
||||
border-bottom: 1px solid rgba(0, 0, 0, .15);
|
||||
background: #f7f7f7;
|
||||
}
|
||||
|
||||
.wdt-emoji-tab {
|
||||
display: inline-block;
|
||||
|
||||
width: 28px;
|
||||
margin-right: 2.5px;
|
||||
padding: 4px;
|
||||
|
||||
transition: border-color 150ms ease-out;
|
||||
text-align: center;
|
||||
|
||||
color: #9e9ea6;
|
||||
border-bottom: 3px solid transparent;
|
||||
}
|
||||
|
||||
.wdt-emoji-tab:hover {
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.wdt-emoji-tab.active {
|
||||
padding-top: 3px;
|
||||
|
||||
color: #9e9ea6;
|
||||
border-bottom: 3px solid #e7543d;
|
||||
}
|
||||
|
||||
#wdt-emoji-search,
|
||||
#wdt-emoji-search:focus {
|
||||
font-size: 15px;
|
||||
line-height: 20px;
|
||||
|
||||
width: 95%;
|
||||
max-width: 100%;
|
||||
height: 28px;
|
||||
margin: .5rem 9px .6rem;
|
||||
padding: 15px 2rem;
|
||||
|
||||
transition: border-color 150ms ease-out;
|
||||
|
||||
color: #444;
|
||||
border: 1px solid #c5c5c5;
|
||||
border-radius: 3px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#wdt-emoji-search:focus {
|
||||
border-color: #a0a0a0;
|
||||
}
|
||||
|
||||
.wdt-emoji-popup h3 {
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
line-height: 15px;
|
||||
|
||||
position: relative;
|
||||
|
||||
margin: 0;
|
||||
padding: 8px;
|
||||
|
||||
color: #555;
|
||||
background: rgba(255, 255, 255, .95);
|
||||
}
|
||||
|
||||
.wdt-emoji-popup h3.sticky {
|
||||
position: absolute;
|
||||
z-index: 4;
|
||||
|
||||
width: 330px;
|
||||
}
|
||||
|
||||
.wdt-emoji-scroll-wrapper {
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
overflow-anchor: none;
|
||||
height: 257px;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
.wdt-emoji-sections {
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.wdt-emoji {
|
||||
line-height: 1rem;
|
||||
|
||||
position: relative;
|
||||
|
||||
display: inline-block;
|
||||
|
||||
margin-right: 2.5px !important;
|
||||
margin-bottom: 1px;
|
||||
padding: 6px;
|
||||
|
||||
-webkit-transition: background 500ms ease-out;
|
||||
-moz-transition: background 500ms ease-out;
|
||||
-ms-transition: background 500ms ease-out;
|
||||
-o-transition: background 500ms ease-out;
|
||||
transition: background 500ms ease-out;
|
||||
text-align: center;
|
||||
|
||||
-webkit-border-radius: 6px;
|
||||
-moz-border-radius: 6px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.wdt-emoji.not-matched {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.wdt-emoji:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.wdt-emoji.gray:hover {
|
||||
background-color: rgba(175, 175, 175, .32);
|
||||
}
|
||||
|
||||
.wdt-emoji.green:hover {
|
||||
background-color: #b7e887;
|
||||
}
|
||||
|
||||
.wdt-emoji.pink:hover {
|
||||
background-color: #f3c1fd;
|
||||
}
|
||||
|
||||
.wdt-emoji.yellow:hover {
|
||||
background-color: #f9ef67;
|
||||
}
|
||||
|
||||
.wdt-emoji.blue:hover {
|
||||
background-color: #b5e0fe;
|
||||
}
|
||||
|
||||
.wdt-emoji-tab .emoji-outer {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
|
||||
span.emoji {
|
||||
display: -moz-inline-box;
|
||||
display: inline-block;
|
||||
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
|
||||
vertical-align: baseline;
|
||||
text-indent: -9999px;
|
||||
|
||||
background-repeat: no-repeat;
|
||||
background-position: 50%, 50%;
|
||||
background-size: 1em;
|
||||
background-size: contain;
|
||||
|
||||
-moz-box-orient: vertical;
|
||||
*vertical-align: auto;
|
||||
*zoom: 1;
|
||||
*display: inline;
|
||||
}
|
||||
|
||||
span.emoji-sizer {
|
||||
font-size: 1em;
|
||||
line-height: .81em;
|
||||
}
|
||||
|
||||
span.emoji-outer {
|
||||
display: -moz-inline-box;
|
||||
display: inline-block;
|
||||
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
margin-top: -2px;
|
||||
|
||||
vertical-align: middle;
|
||||
|
||||
*display: inline;
|
||||
}
|
||||
|
||||
span.emoji-inner {
|
||||
display: -moz-inline-box;
|
||||
display: inline-block;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
vertical-align: baseline;
|
||||
text-indent: -9999px;
|
||||
|
||||
*vertical-align: auto;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
img.emoji {
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
}
|
||||
|
||||
#wdt-emoji-footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
|
||||
width: 100%;
|
||||
padding-bottom: .4rem;
|
||||
|
||||
border-top: 1px solid rgba(0, 0, 0, .15);
|
||||
background: #f7f7f7;
|
||||
}
|
||||
|
||||
#wdt-emoji-no-result {
|
||||
font-size: 10px;
|
||||
font-weight: 400;
|
||||
|
||||
clear: both;
|
||||
|
||||
padding: 20px;
|
||||
|
||||
text-align: center;
|
||||
|
||||
color: #bababa;
|
||||
}
|
||||
|
||||
#wdt-emoji-preview {
|
||||
padding: .3rem 0 0 .7rem;
|
||||
|
||||
-webkit-transition: opacity .1s ease-in .1s;
|
||||
-moz-transition: opacity .1s ease-in .1s;
|
||||
transition: opacity .1s ease-in .1s;
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#wdt-emoji-preview-img {
|
||||
font-size: 2rem;
|
||||
line-height: 2rem;
|
||||
|
||||
float: left;
|
||||
|
||||
width: 46px;
|
||||
height: 54px;
|
||||
padding: .6rem .5rem 0 .1rem;
|
||||
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#wdt-emoji-preview-bundle {
|
||||
font-size: 17px;
|
||||
font-weight: bold;
|
||||
|
||||
position: absolute;
|
||||
bottom: 19px;
|
||||
left: 14px;
|
||||
|
||||
-webkit-transition: opacity .1s ease-in .1s;
|
||||
-moz-transition: opacity .1s ease-in .1s;
|
||||
transition: opacity .1s ease-in .1s;
|
||||
|
||||
opacity: 1;
|
||||
color: #989ba0;
|
||||
}
|
||||
|
||||
#wdt-emoji-search-result-title,
|
||||
#wdt-emoji-no-result {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#wdt-emoji-search-result-title.wdt-show,
|
||||
#wdt-emoji-no-result.wdt-show {
|
||||
display: block;
|
||||
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
.wdt-inline {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.wdt-search-on {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.wdt-emoji-popup.preview-mode #wdt-emoji-preview-bundle {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.wdt-emoji-popup.preview-mode #wdt-emoji-preview {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#wdt-emoji-preview-img span.emoji-outer.emoji-sizer {
|
||||
position: relative;
|
||||
top: 3px;
|
||||
left: 4px;
|
||||
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
#wdt-emoji-preview-text {
|
||||
font-size: 13px;
|
||||
|
||||
position: relative;
|
||||
top: 9px;
|
||||
left: 10px !important;
|
||||
|
||||
color: #777;
|
||||
}
|
||||
|
||||
#wdt-emoji-preview-name {
|
||||
font-weight: bold;
|
||||
|
||||
position: relative;
|
||||
left: 3px;
|
||||
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.wdt-emoji-popup-mobile-closer {
|
||||
font-size: 25px !important;
|
||||
font-weight: bold;
|
||||
line-height: 35px;
|
||||
|
||||
position: absolute;
|
||||
top: -35px;
|
||||
left: 50%;
|
||||
|
||||
visibility: hidden;
|
||||
|
||||
width: 40px;
|
||||
height: 35px;
|
||||
|
||||
transform: translateX(-50%);
|
||||
text-align: center;
|
||||
|
||||
opacity: 0;
|
||||
color: #444;
|
||||
border: 1px solid rgba(0, 0, 0, .1);
|
||||
border-bottom-color: #e7543d;
|
||||
border-radius: 50% 50% 0 0;
|
||||
background-color: rgba(255, 255, 255, .8);
|
||||
}
|
||||
|
||||
/* iPhone 2G-4S-5-5S in portrait */
|
||||
@media only screen
|
||||
and (min-device-width: 320px)
|
||||
and (max-device-width: 480px)
|
||||
and (orientation: portrait) {
|
||||
.wdt-emoji-picker {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.wdt-emoji-tab {
|
||||
width: 24px;
|
||||
}
|
||||
|
||||
.wdt-emoji {
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
|
||||
#wdt-emoji-footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.wdt-emoji-scroll-wrapper {
|
||||
height: 170px;
|
||||
}
|
||||
|
||||
.wdt-emoji-popup {
|
||||
height: 206px;
|
||||
|
||||
-webkit-border-radius: 0;
|
||||
-moz-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
#wdt-emoji-search {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.wdt-emoji-popup-mobile-closer {
|
||||
visibility: visible;
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.wdt-emoji-popup h3.sticky {
|
||||
width: 300px;
|
||||
}
|
||||
}
|
||||
|
||||
/* iPhone 6 in portrait */
|
||||
@media only screen
|
||||
and (min-device-width: 375px)
|
||||
and (max-device-width: 667px)
|
||||
and (orientation: portrait) {
|
||||
.wdt-emoji {
|
||||
margin-right: -1px !important;
|
||||
}
|
||||
|
||||
.wdt-emoji-tab {
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
.wdt-emoji-popup h3.sticky {
|
||||
width: 359px;
|
||||
}
|
||||
}
|
1096
assets/3rdparty/wdt-emoji/wdt-emoji-bundle.js
vendored
Normal file
16
assets/3rdparty/wdt-emoji/wdt-emoji-bundle.min.js
vendored
Normal file
@ -10,3 +10,17 @@
|
||||
a {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/**
|
||||
* <a> like elements
|
||||
*/
|
||||
.a {
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
color: #3c8dbc;
|
||||
}
|
||||
|
||||
.a:focus, .a:hover {
|
||||
color: #72afd2;
|
||||
}
|
9
assets/css/common/page/error.css
Normal file
@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Errors pages stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.error-page .error-content p {
|
||||
word-wrap: break-word;
|
||||
}
|
@ -12,6 +12,15 @@
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
.comment-creation-form .input-group-btn .comment-emoji-select .btn {
|
||||
padding-left: 4px;
|
||||
padding-right: 2px;
|
||||
}
|
||||
.comment-creation-form .input-group-btn .comment-image-select .btn {
|
||||
padding-left: 2px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.comment-creation-form .comment-image-select {
|
||||
margin-bottom: -2px !important;
|
||||
}
|
||||
@ -20,6 +29,7 @@
|
||||
display: none;
|
||||
}
|
||||
|
||||
.comment-creation-form .comment-image-select a {
|
||||
.comment-creation-form .comment-image-select a,
|
||||
.comment-creation-form .comment-emoji-select a {
|
||||
color: black;
|
||||
}
|
@ -8,7 +8,7 @@
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.post-comments .comment-img-contener {
|
||||
.post-comments .comment-img-container {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
@ -7,3 +7,8 @@
|
||||
.no-unread-conversation-msg {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.new-conversations-dropdown .message-content {
|
||||
white-space: normal;
|
||||
font-style: italic;
|
||||
}
|
@ -29,15 +29,28 @@
|
||||
padding-right:8px;
|
||||
}
|
||||
|
||||
#conversationsElem .create-message-form .btn.btn-add-emoji,
|
||||
#conversationsElem .create-message-form .btn.btn-add-image {
|
||||
background: none;
|
||||
color: #808080;
|
||||
}
|
||||
|
||||
#conversationsElem .create-message-form .btn.btn-add-emoji:hover,
|
||||
#conversationsElem .create-message-form .btn.btn-add-image:hover{
|
||||
color: black;
|
||||
}
|
||||
|
||||
#conversationsElem .create-message-form .btn.btn-add-emoji {
|
||||
padding-left: 4px;
|
||||
padding-right: 2px;
|
||||
}
|
||||
|
||||
#conversationsElem .create-message-form .btn.btn-add-image {
|
||||
padding-left: 2px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Conversation settings pane
|
||||
*/
|
||||
@ -67,15 +80,39 @@
|
||||
/**
|
||||
* Conversations messages
|
||||
*/
|
||||
|
||||
#conversationsElem .date-conversation-message {
|
||||
margin-top: 2px;
|
||||
text-align: center;
|
||||
font-size: 70%;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
#conversationsElem .conversation-msg-image {
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
#conversationsElem .direct-chat-text {
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
#conversationsElem .direct-chat-text .emoji {
|
||||
height: 1em;
|
||||
}
|
||||
|
||||
#conversationsElem .direct-chat-text a, #conversationsElem .direct-chat-text .a {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
#conversationsElem .direct-chat-text.not-first-message::before,
|
||||
#conversationsElem .direct-chat-text.not-first-message::after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#conversationsElem .direct-chat-msg.not-last-message-from-user {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
#conversationsElem .direct-chat-msg.not-last-message-from-user .direct-chat-img {
|
||||
margin-bottom: -5px;
|
||||
}
|
@ -8,5 +8,6 @@
|
||||
* Emoji images global style
|
||||
*/
|
||||
.emoji {
|
||||
height: 2em;
|
||||
width: auto !important;
|
||||
height: 2em !important;
|
||||
}
|
14
assets/css/components/emoji/picker.css
Normal file
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Emoji picker stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
#emojiPicker {
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.wdt-emoji-popup {
|
||||
z-index: 1000;
|
||||
margin-top: 7px;
|
||||
}
|
9
assets/css/components/languagePicker.css
Normal file
@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Language picker modal stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.pick-language-modal .modal-body {
|
||||
text-align: center;
|
||||
}
|
@ -20,6 +20,29 @@ header .dropdown .fa-gear {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.main-header .alternate-latest-posts-button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media (max-width: 360px) {
|
||||
.main-header[forActiveUser="true"] .navbar-brand {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.main-header .alternate-latest-posts-button {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.nav > li > a {
|
||||
padding: 10px 10px;
|
||||
}
|
||||
|
||||
.navbar-custom-menu > .navbar-nav > li > .dropdown-menu {
|
||||
width: 100%;
|
||||
left: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.skin-blue .main-header .navbar .dropdown-user-menu-action .dropdown-menu li a {
|
||||
color: #333 !important;
|
||||
|
@ -5,7 +5,7 @@
|
||||
*/
|
||||
|
||||
.pick-movie-modal .modal-body {
|
||||
max-height: 500px;
|
||||
/*max-height: 500px;*/
|
||||
}
|
||||
|
||||
.pick-movie-modal video {
|
||||
|
@ -4,10 +4,10 @@
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.notification-contener p {
|
||||
.notification-container p {
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.notification-contener .notification-creation-time {
|
||||
.notification-container .notification-creation-time {
|
||||
color: #888888;
|
||||
}
|
@ -64,23 +64,23 @@
|
||||
/**
|
||||
* Visibility choice
|
||||
*/
|
||||
.post-form .post-visiblity-contener {
|
||||
.post-form .post-visiblity-container {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.post-form .post-visiblity-contener label {
|
||||
.post-form .post-visiblity-container label {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.post-form .post-visiblity-contener input {
|
||||
.post-form .post-visiblity-container input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.post-form .post-visiblity-contener span {
|
||||
.post-form .post-visiblity-container span {
|
||||
color: #b5bbc8;
|
||||
}
|
||||
|
||||
.post-form .post-visiblity-contener input:checked ~ span {
|
||||
.post-form .post-visiblity-container input:checked ~ span {
|
||||
color: #111111;
|
||||
}
|
@ -81,7 +81,7 @@
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.post .post-survey-chart-contener {
|
||||
.post .post-survey-chart-container {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
|
483
assets/css/dark_theme.css
Normal file
@ -0,0 +1,483 @@
|
||||
/**
|
||||
* ComunicWeb dark theme
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
/**
|
||||
* General definitions
|
||||
*/
|
||||
:root {
|
||||
--black: #1119;
|
||||
--black2: #111111;
|
||||
--black3: #000;
|
||||
--black4: #686a6c;
|
||||
--black5: #232426;
|
||||
--black6: #0f0f0f;
|
||||
--white: silver;
|
||||
}
|
||||
|
||||
p, h1, h2, h3, h4, h5, h6 {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.content-wrapper {
|
||||
background-color: var(--black3);
|
||||
}
|
||||
|
||||
.link-black {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.table-hover > tbody > tr:hover {
|
||||
background-color: var(--black3);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Buttons
|
||||
*/
|
||||
.btn {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.btn-primary,
|
||||
.btn-success,
|
||||
.btn-default,
|
||||
.btn-danger,
|
||||
.btn-info {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.btn-default:active, .btn-default:focus {
|
||||
background-color: var(--white);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Forms
|
||||
*/
|
||||
.form-control {
|
||||
background-color: var(--black);
|
||||
color: var(--white);
|
||||
border-color: var(--black5);
|
||||
}
|
||||
|
||||
.form-control:focus {
|
||||
background-color: var(--black5);
|
||||
border-color: var(--black4);
|
||||
}
|
||||
|
||||
.form-group label {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.form-control[disabled],
|
||||
.form-control[readonly],
|
||||
fieldset[disabled] .form-control {
|
||||
background-color: var(--black6);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Boxes
|
||||
*/
|
||||
.box {
|
||||
background-color: var(--black5);
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.box-footer {
|
||||
background-color: var(--black5);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Modals
|
||||
*/
|
||||
.modal-header,
|
||||
.modal-footer {
|
||||
background-color: var(--black5);
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
background-color: var(--black6);
|
||||
}
|
||||
|
||||
.modal-primary .modal-header,
|
||||
.modal-primary .modal-footer {
|
||||
background-color: var(--black5) !important;;
|
||||
}
|
||||
|
||||
.modal-primary .modal-body {
|
||||
background-color: var(--black6) !important;
|
||||
}
|
||||
|
||||
.modal-danger .modal-header,
|
||||
.modal-danger .modal-footer {
|
||||
background-color: #a22819 !important;
|
||||
}
|
||||
|
||||
.modal-danger .modal-body {
|
||||
background-color: #872f24 !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dropdown menus
|
||||
*/
|
||||
.dropdown-menu {
|
||||
background-color: var(--black5) !important;
|
||||
}
|
||||
|
||||
.dropdown-menu > li > a {
|
||||
color: var(--white) !important;
|
||||
}
|
||||
|
||||
.dropdown-menu > li > a:hover {
|
||||
background-color: var(--black3) !important;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Navbar
|
||||
*/
|
||||
.navbar {
|
||||
background-color: var(--black6) !important;;
|
||||
}
|
||||
|
||||
.navbar-nav > .notifications-menu > .dropdown-menu > li.header,
|
||||
.navbar-nav > .messages-menu > .dropdown-menu > li.header,
|
||||
.navbar-nav > .tasks-menu > .dropdown-menu > li.header {
|
||||
background-color: var(--black6);
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,
|
||||
.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,
|
||||
.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {
|
||||
background-color: var(--black6) !important;
|
||||
color: var(--white) !important;
|
||||
}
|
||||
|
||||
.main-header #navbar-search-input.form-control:focus,
|
||||
.main-header #navbar-search-input.form-control:active {
|
||||
background-color: var(--black3);
|
||||
}
|
||||
|
||||
.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a:hover,
|
||||
.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:hover,
|
||||
.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a:hover {
|
||||
background-color: var(--black6);
|
||||
}
|
||||
|
||||
.skin-blue .main-header .navbar .dropdown-user-menu-action .dropdown-menu li a {
|
||||
color: var(--white) !important;;
|
||||
}
|
||||
|
||||
.skin-blue .main-header .navbar .nav > li > a:hover,
|
||||
.skin-blue .main-header .navbar .nav > li > a:active,
|
||||
.skin-blue .main-header .navbar .nav > li > a:focus,
|
||||
.skin-blue .main-header .navbar .nav .open > a,
|
||||
.skin-blue .main-header .navbar .nav .open > a:hover,
|
||||
.skin-blue .main-header .navbar .nav .open > a:focus,
|
||||
.skin-blue .main-header .navbar .nav > .active > a {
|
||||
background-color: var(--black4);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Footer
|
||||
*/
|
||||
.main-footer {
|
||||
background-color: var(--black3);
|
||||
}
|
||||
|
||||
.main-footer span {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Friends list
|
||||
*/
|
||||
@media screen and (min-width: 1200px) {
|
||||
|
||||
#friendsList {
|
||||
background-color: var(--black6);
|
||||
}
|
||||
|
||||
#friendsList:hover {
|
||||
background-color: var(--black5);
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1200px) and (min-width: 513px) {
|
||||
#friendsList {
|
||||
background-color: var(--black5);
|
||||
}
|
||||
}
|
||||
|
||||
#friendsList h4 {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
#friendsList li:hover {
|
||||
background-color: var(--black4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Emoji picker
|
||||
*/
|
||||
.wdt-emoji-popup {
|
||||
background-color: var(--black6);
|
||||
border: 1px var(--black6) solid;
|
||||
border-radius: 2;
|
||||
}
|
||||
|
||||
#wdt-emoji-menu-header {
|
||||
background-color: var(--black5);
|
||||
}
|
||||
|
||||
#wdt-emoji-footer {
|
||||
background-color: var(--black5);
|
||||
}
|
||||
|
||||
.wdt-emoji-popup h3 {
|
||||
background-color: var(--black4);
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
#wdt-emoji-search {
|
||||
background-color: var(--black5);
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
#wdt-emoji-search:focus {
|
||||
background-color: var(--black4);
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.wdt-emoji:hover {
|
||||
background-color: var(--black4) !important;;
|
||||
}
|
||||
|
||||
/**
|
||||
* Conversations
|
||||
*/
|
||||
.open-conversation-button {
|
||||
background-color: var(--black5);
|
||||
}
|
||||
|
||||
.nav-stacked > li > a {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.conversations-list-box .last-activity {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.nav > li > a:hover,
|
||||
.nav > li > a:active,
|
||||
.nav > li > a:focus {
|
||||
color: var(--black5);
|
||||
}
|
||||
|
||||
.select2-dropdown {
|
||||
background-color: var(--black5);
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.select2-container--default .select2-results__option--highlighted[aria-selected] {
|
||||
background-color: var(--black4);
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
#conversationsElem .create-message-form .btn.btn-add-emoji:hover,
|
||||
#conversationsElem .create-message-form .btn.btn-add-image:hover {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
/**
|
||||
* Home page
|
||||
*/
|
||||
#homeLandingScreen {
|
||||
background-image: none !important;
|
||||
background-color: var(--black5);
|
||||
}
|
||||
|
||||
#homeLandingScreen #homeMessage {
|
||||
background-color: var(--black);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Login page
|
||||
*/
|
||||
.login-page, .register-page {
|
||||
background-color: var(--black2);
|
||||
}
|
||||
|
||||
.login-box-body {
|
||||
background-color: var(--black3);
|
||||
}
|
||||
|
||||
.login-logo b, #loginForm label {
|
||||
color: var(--white) !important;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create account page
|
||||
*/
|
||||
.create-account-form label {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* User information
|
||||
*/
|
||||
.list-group-item {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Posts
|
||||
*/
|
||||
.attachment-block {
|
||||
background-color: var(--black6);
|
||||
}
|
||||
|
||||
.post-comments {
|
||||
background-color: var(--black);
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.post {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.post-image {
|
||||
filter: brightness(80%);
|
||||
transition: filter 1s;
|
||||
}
|
||||
|
||||
.post-image:hover {
|
||||
filter: brightness(100%);
|
||||
}
|
||||
|
||||
.box-comments .username,
|
||||
.box-comments .comment-content {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
|
||||
.comment-creation-form .comment-image-select a,
|
||||
.comment-creation-form .comment-emoji-select a {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Posts creation form
|
||||
*/
|
||||
|
||||
.post-form-choice span {
|
||||
color: var(--black4);
|
||||
}
|
||||
|
||||
.post-form .post-form-choice input:checked ~ span {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.datepicker.dropdown-menu {
|
||||
background-color: var(--black6);
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.select2-container--default .select2-selection--multiple {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.post-form .post-visiblity-container span {
|
||||
color: var(--black4);
|
||||
}
|
||||
|
||||
.post-form .post-visiblity-container input:checked ~ span {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Posts edit modal
|
||||
*/
|
||||
.editor {
|
||||
background-color: var(--black5);
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Search page
|
||||
*/
|
||||
.nav > li > a:hover,
|
||||
.nav > li > a:active,
|
||||
.nav > li > a:focus {
|
||||
background-color: var(--black4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Conversation page
|
||||
*/
|
||||
.conversations-page-container a {
|
||||
background-color: var(--black6) !important;;
|
||||
}
|
||||
|
||||
.conversations-page-container a {
|
||||
color: var(--white) !important;
|
||||
}
|
||||
|
||||
.conversations-page-container a:hover {
|
||||
background-color: var(--black5) !important;;
|
||||
}
|
||||
|
||||
.conversations-page-container a:active {
|
||||
background-color: var(--black6) !important;;
|
||||
}
|
||||
|
||||
.conversations-page-container a.selected {
|
||||
background-color: var(--black5) !important;;
|
||||
}
|
||||
|
||||
.conversations-page-container .box-conversation .input-group-btn .btn {
|
||||
background-color: var(--black5);
|
||||
}
|
||||
|
||||
.conversations-page-container .box-conversation .input-group-btn .btn:hover {
|
||||
background-color: var(--black4);
|
||||
color: var(--black6);
|
||||
}
|
||||
|
||||
.conversations-page-container .box-conversation .input-group-btn .btn:focus,
|
||||
.conversations-page-container .box-conversation .input-group-btn .btn:active {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.big-box-conversation .direct-chat-text .a,
|
||||
.big-box-conversation .direct-chat-text a {
|
||||
background-color: transparent !important;
|
||||
color: inherit !important;
|
||||
}
|
29
assets/css/pages/conversations/conversation.css
Normal file
@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Conversation pane stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.big-box-conversation .direct-chat-text {
|
||||
display: inline-block;
|
||||
margin-left: 10px;
|
||||
max-width: 150px;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.big-box-conversation .right .direct-chat-text {
|
||||
float: right;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.big-box-conversation .direct-chat-text .message-img {
|
||||
max-width: 100%;
|
||||
max-height: 200px;
|
||||
display: block;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.big-box-conversation .direct-chat-text .a,
|
||||
.big-box-conversation .direct-chat-text a {
|
||||
color: white;
|
||||
}
|
17
assets/css/pages/conversations/listPane.css
Normal file
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Conversations list pane
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.conversations-page-container .conversations-list-box {
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.conversations-page-container .conversations-list-box ul {
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.conversations-page-container a.selected {
|
||||
background: #f7f7f7;
|
||||
}
|
17
assets/css/pages/conversations/main.css
Normal file
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Conversations page main script file
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.conversations-page-container {
|
||||
max-width: 1000px;
|
||||
margin: auto;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
|
||||
.conversations-page-container .conv-list-loading-msg {
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
}
|
35
assets/css/pages/createAccount.css
Normal file
@ -0,0 +1,35 @@
|
||||
/**
|
||||
* Create account stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.create-account-form {
|
||||
border: 1px gray solid;
|
||||
max-width: 500px;
|
||||
margin: auto;
|
||||
margin-top: 30px;
|
||||
padding: 0px 10px 10px 10px;
|
||||
}
|
||||
|
||||
.create-account-form h2 {
|
||||
text-align: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.create-account-form p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.create-account-form .callout p {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
.create-account-form .submit-form {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.create-account-form .bottom-form-links {
|
||||
text-align: center;
|
||||
margin-top: 15px;
|
||||
}
|
25
assets/css/pages/groups/pages/create.css
Normal file
@ -0,0 +1,25 @@
|
||||
/**
|
||||
* Create groups page main stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.create-group-page {
|
||||
max-width: 450px;
|
||||
margin: auto;
|
||||
padding-top: 60px;
|
||||
}
|
||||
|
||||
.create-group-page form {
|
||||
border: 1px #162935 solid;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.create-group-page form h3 {
|
||||
text-align: center;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
.create-group-page .submit-button-container {
|
||||
text-align: center;
|
||||
}
|
22
assets/css/pages/groups/pages/forbidden.css
Normal file
@ -0,0 +1,22 @@
|
||||
/**
|
||||
* Access forbidden to page groups stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.group-forbidden-page-container {
|
||||
max-width: 300px;
|
||||
margin: auto;
|
||||
margin-top: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.group-forbidden-page-container .group-logo {
|
||||
width: 130px;
|
||||
margin: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.group-forbidden-page-container .group-name {
|
||||
margin-bottom: 15px;
|
||||
}
|
14
assets/css/pages/groups/pages/group.css
Normal file
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Group page main stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.group-page {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.group-page .col-md-6 {
|
||||
margin: auto;
|
||||
float: none;
|
||||
}
|
54
assets/css/pages/groups/pages/main.css
Normal file
@ -0,0 +1,54 @@
|
||||
/**
|
||||
* Groups main page stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.groups-main-page {
|
||||
max-width: 450px;
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
padding-top: 50px;
|
||||
}
|
||||
|
||||
.groups-main-page .group-item {
|
||||
text-align: justify;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.groups-main-page .group-item .group-icon {
|
||||
max-width: 50px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.groups-main-page .group-item div {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.groups-main-page .group-item .group-name {
|
||||
width: 180px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.groups-main-page .group-item .buttons-area {
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
.groups-main-page .group-item .buttons-area .fa {
|
||||
color: #b5bbc8;
|
||||
}
|
||||
|
||||
.groups-main-page .group-item .buttons-area .fa:active {
|
||||
color: black;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 450px){
|
||||
|
||||
.groups-main-page {
|
||||
max-width: 317px;
|
||||
}
|
||||
|
||||
.groups-main-page .group-item .group-name {
|
||||
width: 120px;
|
||||
}
|
||||
}
|
55
assets/css/pages/groups/pages/members.css
Normal file
@ -0,0 +1,55 @@
|
||||
/**
|
||||
* Groups members page stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.group-members-page {
|
||||
float: none;
|
||||
margin: auto;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.group-members-page .backward-link {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.group-members-page .title {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.group-members-page .member {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.group-members-page .member div {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.group-members-page .member .user-image {
|
||||
border-radius: 50%;
|
||||
max-width: 50px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.group-members-page .member .member-name {
|
||||
margin-left: 5px;
|
||||
font-weight: bold;
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
.group-members-page .member .delete-link {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.group-members-page .member .delete-link:active {
|
||||
color: #3c8dbc;
|
||||
}
|
||||
|
||||
.group-members-page .member .delete-link {
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
.group-members-page .member .btn-membership-level {
|
||||
width: 130px;;
|
||||
}
|
38
assets/css/pages/groups/pages/settings.css
Normal file
@ -0,0 +1,38 @@
|
||||
/**
|
||||
* Group settings stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.group-settings-container {
|
||||
float: none;
|
||||
margin: auto;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.group-settings-container .title {
|
||||
text-align: center;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.group-settings-container .separated-block {
|
||||
margin-top: 25px;
|
||||
margin-bottom: 30px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.group-settings-container .submit-button-container {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.group-settings-container .groupLogoSettingsContainer {
|
||||
margin-top: 100px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.group-settings-container .group-logo-settings-img {
|
||||
width: 150px;
|
||||
margin: auto;
|
||||
margin-bottom: 10px;
|
||||
display: block;
|
||||
}
|
37
assets/css/pages/groups/sections/header.css
Normal file
@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Groups header
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
|
||||
.group-header .group-icon {
|
||||
max-height: 150px;
|
||||
}
|
||||
|
||||
.group-header .group-name {
|
||||
font-size: 200%;
|
||||
}
|
||||
|
||||
.group-header .group-tag {
|
||||
color: #6f737b;
|
||||
}
|
||||
|
||||
.group-header .col-info .fa,
|
||||
.group-header .col-metadata .fa {
|
||||
margin-right: 10px;
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
.group-header .group-col-icon {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.group-header .group-col-icon span {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.group-header .col-md-4 {
|
||||
display: table;
|
||||
margin: auto;
|
||||
}
|
9
assets/css/pages/groups/sections/membershipBlock.css
Normal file
@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Membership block stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.reject-group-invitation-link {
|
||||
color: #f56954;
|
||||
}
|
9
assets/css/pages/groups/sections/posts.css
Normal file
@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Groups posts section stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.box-group-posts .second-user-area {
|
||||
display: none;
|
||||
}
|
@ -21,4 +21,6 @@
|
||||
.latest-posts-row .col-md-5 {
|
||||
margin: auto;
|
||||
float: none;
|
||||
width: 100%;
|
||||
max-width: 800px;
|
||||
}
|
18
assets/css/pages/passwordForgotten/mailAdmin.css
Normal file
@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Mail admin to reset password
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.reset-password-by-mail-step .title {
|
||||
text-align: center;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
.reset-password-by-mail-step p {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
.reset-password-by-mail-step .btn-mail {
|
||||
width: 100%;
|
||||
}
|
11
assets/css/pages/passwordForgotten/main.css
Normal file
@ -0,0 +1,11 @@
|
||||
/**
|
||||
* Password forgotten page main stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.box-password-forgotten {
|
||||
max-width: 350px;
|
||||
margin: auto;
|
||||
margin-top: 20px;
|
||||
}
|
14
assets/css/pages/passwordForgotten/promptOption.css
Normal file
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Password forgotten prompt option section stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.password-reset-prompt-option-section p {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
.password-reset-prompt-option-section .btn {
|
||||
width: 100%;
|
||||
margin-top: 10px;
|
||||
}
|
15
assets/css/pages/resetPassword/main.css
Normal file
@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Reset password main script
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.reset-password-box {
|
||||
max-width: 300px;
|
||||
margin: auto;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.reset-password-box .btn {
|
||||
display: block;
|
||||
}
|
24
assets/css/pages/search/main.css
Normal file
@ -0,0 +1,24 @@
|
||||
/**
|
||||
* Search page main stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.searchPage {
|
||||
max-width: 500px;
|
||||
margin: auto;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.searchPage .results-container {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
|
||||
.searchPage .results-container li a img {
|
||||
margin: auto 10px auto auto;
|
||||
max-width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 50%;
|
||||
visibility: visible;
|
||||
}
|
11
assets/css/pages/settings/main.css
Normal file
@ -0,0 +1,11 @@
|
||||
/**
|
||||
* Main settings styleesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.settings-page-container {
|
||||
max-width: 1000px;
|
||||
margin: auto;
|
||||
margin-top: 10px;
|
||||
}
|
21
assets/css/pages/settings/sections/accountImage.css
Normal file
@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Account image settings section stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.box-account-image-settings .box-body {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.box-account-image-settings .settings-account-image-preview {
|
||||
max-width: 100%;
|
||||
display: block;
|
||||
margin: auto;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.box-account-image-settings .account-image-visibility-form {
|
||||
text-align: justify;
|
||||
}
|
27
assets/css/pages/settings/sections/general.css
Normal file
@ -0,0 +1,27 @@
|
||||
/**
|
||||
* General settings stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.box-general-settings .input-user-id {
|
||||
width: 29%;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.box-general-settings .input-user-email {
|
||||
width: 70%;
|
||||
display: inline-block;
|
||||
margin-left: 1%;
|
||||
}
|
||||
|
||||
.box-general-settings .submit-form {
|
||||
width: 100px;
|
||||
margin: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
invalidDirectory {
|
||||
color: red;
|
||||
font-size: 120%;
|
||||
}
|
5
assets/css/pages/settings/sections/language.css
Normal file
@ -0,0 +1,5 @@
|
||||
/**
|
||||
* Settings language section
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
11
assets/css/pages/settings/sections/password.css
Normal file
@ -0,0 +1,11 @@
|
||||
/**
|
||||
* Settings password section stylesheet
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.box-password-settings .submit-form {
|
||||
width: 150px;
|
||||
margin: auto;
|
||||
display: block;
|
||||
}
|
13
assets/css/pages/settings/sections/privacy.css
Normal file
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Settings privacy settings section
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
.box-export-account-data-settings .btn {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.box-delete-account-settings .btn {
|
||||
float: right;
|
||||
}
|