mirror of
https://github.com/spacedeck/spacedeck-open.git
synced 2026-01-30 23:05:25 +01:00
Compare commits
12 Commits
remove-cdn
...
feature-to
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
386d784952 | ||
|
|
352b01569f | ||
|
|
82515e3a8e | ||
|
|
16e926b76a | ||
|
|
0e97945b95 | ||
|
|
581ee8eb04 | ||
|
|
c1e29fb7e2 | ||
|
|
447076845c | ||
|
|
a051fc4e6f | ||
|
|
5a7839ceaa | ||
|
|
26f4da68ea | ||
|
|
c9b6e7c2c8 |
20
.github/ISSUE_TEMPLATE.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
## Expected Behavior
|
||||||
|
|
||||||
|
|
||||||
|
## Actual Behavior
|
||||||
|
|
||||||
|
|
||||||
|
## Possible Solution
|
||||||
|
|
||||||
|
|
||||||
|
## Steps to Reproduce the Problem
|
||||||
|
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
3.
|
||||||
|
|
||||||
|
## Specifications
|
||||||
|
|
||||||
|
- OS Platform and Distribution (e.g., Linux Ubuntu 16.04):
|
||||||
|
- Node version:
|
||||||
|
- Database engine (e.g., SQLite):
|
||||||
53
docs/nginx_setup.md
Normal file
53
docs/nginx_setup.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# Nginx as reverse proxy
|
||||||
|
|
||||||
|
Below theres an example of how the site configuration for nginx as a reverse proxy can look like:
|
||||||
|
|
||||||
|
```
|
||||||
|
map $http_upgrade $connection_upgrade {
|
||||||
|
default upgrade;
|
||||||
|
'' close;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
|
||||||
|
servername spacedeck.domain.de
|
||||||
|
|
||||||
|
return 301 https://$server_name$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
listen [::]:443 ssl http2;
|
||||||
|
ssl on;
|
||||||
|
|
||||||
|
server_name spacedeck.domain.de;
|
||||||
|
|
||||||
|
ssl_certificate /etc/ssl/spacedeck.domain.de.cer;
|
||||||
|
ssl_certificate_key /etc/ssl/spacedeck.domain.de.key;
|
||||||
|
|
||||||
|
include ssl_params;
|
||||||
|
|
||||||
|
charset utf-8;
|
||||||
|
client_max_body_size 50m;
|
||||||
|
|
||||||
|
add_header Content-Security-Policy "default-src https: wss:; script-src https: 'unsafe-inline' 'unsafe-eval'; style-src https: 'unsafe-inline'";
|
||||||
|
add_header X-XSS-Protection "1; mode=block;";
|
||||||
|
add_header Referrer-Policy "no-referrer";
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:9666;
|
||||||
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /socket {
|
||||||
|
proxy_pass http://127.0.0.1:9666;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -140,10 +140,9 @@ function render_space_as_html(space, artifacts) {
|
|||||||
var style="html, body, #space { overflow: visible !important; }\n";
|
var style="html, body, #space { overflow: visible !important; }\n";
|
||||||
style+=".wrapper { border: none !important; }\n";
|
style+=".wrapper { border: none !important; }\n";
|
||||||
|
|
||||||
h='<html>\n<head>\n<link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,700,600,800,300|Montserrat:400,700|EB+Garamond|Vollkorn|Fire+Sans|Lato|Roboto|Source+Code+Pro|Ubuntu|Raleway|Playfair+Display|Crimson+Text" rel="stylesheet" type="text/css">\n<link type="text/css" rel="stylesheet" href="https://fast.fonts.net/cssapi/ee1a3484-4d98-4f9f-9f55-020a7b37f3c5.css"/>\n<link rel="stylesheet" href="/stylesheets/style.css"><style>'+style+'</style>\n</head>\n<body id="main">\n'+h+"\n</html>\n";
|
h='<html>\n<head>\n<link rel="stylesheet" href="/stylesheets/style.css"><style>'+style+'</style>\n</head>\n<body id="main">\n'+h+"\n</html>\n";
|
||||||
|
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.render_space_as_html = render_space_as_html;
|
exports.render_space_as_html = render_space_as_html;
|
||||||
|
|
||||||
|
|||||||
@@ -322,6 +322,7 @@
|
|||||||
"follow_present": "Follow",
|
"follow_present": "Follow",
|
||||||
"mute_present": "Unfollow",
|
"mute_present": "Unfollow",
|
||||||
"follow_present_help": "If someone else is presenting this Space, the other members automatically follow the presentation. Switch following on or off with this button.",
|
"follow_present_help": "If someone else is presenting this Space, the other members automatically follow the presentation. Switch following on or off with this button.",
|
||||||
"export": "export",
|
"export": "Export",
|
||||||
"media": "Media"
|
"media": "Media",
|
||||||
|
"tool_edit_text": "Edit Text"
|
||||||
}
|
}
|
||||||
@@ -52,9 +52,18 @@ function setup_directives() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var play_func = function() {
|
var play_func = function() {
|
||||||
video.play();
|
var playPromise = video.play();
|
||||||
|
if (playPromise !== undefined) {
|
||||||
|
playPromise.then(_ => {
|
||||||
|
// Automatic playback started!
|
||||||
player_state = "playing";
|
player_state = "playing";
|
||||||
update_view();
|
update_view();
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
// Auto-play was prevented
|
||||||
|
// Show paused UI.
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var pause_func = function() {
|
var pause_func = function() {
|
||||||
|
|||||||
@@ -182,7 +182,8 @@ var SpacedeckSections = {
|
|||||||
toolbar_props_in: false,
|
toolbar_props_in: false,
|
||||||
toolbar_artifacts_x: "-1000px",
|
toolbar_artifacts_x: "-1000px",
|
||||||
toolbar_artifacts_y: "-1000px",
|
toolbar_artifacts_y: "-1000px",
|
||||||
toolbar_artifacts_in: true
|
toolbar_artifacts_in: true,
|
||||||
|
toolbar_lock_in: false
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
@@ -848,7 +849,7 @@ var SpacedeckSections = {
|
|||||||
if (!a) return false;
|
if (!a) return false;
|
||||||
if (!this.active_space) return false;
|
if (!this.active_space) return false;
|
||||||
|
|
||||||
if (this.active_space_role=="viewer" || (a.locked && this.active_space_role!="admin")) {
|
if (this.active_space_role=="viewer" || (a.locked && this.active_space_role=="viewer")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1018,8 +1019,7 @@ var SpacedeckSections = {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
update_selection_metrics: function(arts) {
|
update_selection_metrics: function(arts, temporary) {
|
||||||
|
|
||||||
if (this.active_tool == "scribble") {
|
if (this.active_tool == "scribble") {
|
||||||
this.selection_metrics.count = 1;
|
this.selection_metrics.count = 1;
|
||||||
return;
|
return;
|
||||||
@@ -1052,8 +1052,6 @@ var SpacedeckSections = {
|
|||||||
// FIXME make sure that menus fit in window
|
// FIXME make sure that menus fit in window
|
||||||
this.toolbar_props_x = pp.x+"px";
|
this.toolbar_props_x = pp.x+"px";
|
||||||
this.toolbar_props_y = pp.y+"px";
|
this.toolbar_props_y = pp.y+"px";
|
||||||
|
|
||||||
//this.hide_toolbar_artifacts();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.selection_metrics.x1 = sr.x1;
|
this.selection_metrics.x1 = sr.x1;
|
||||||
@@ -1068,6 +1066,7 @@ var SpacedeckSections = {
|
|||||||
|
|
||||||
if (!arts) arts = this.selected_artifacts();
|
if (!arts) arts = this.selected_artifacts();
|
||||||
|
|
||||||
|
if (!temporary) {
|
||||||
this.first_selected_artifact = arts[0];
|
this.first_selected_artifact = arts[0];
|
||||||
this.selection_metrics.count=arts.length;
|
this.selection_metrics.count=arts.length;
|
||||||
this.selection_metrics.scribble_selection = false;
|
this.selection_metrics.scribble_selection = false;
|
||||||
@@ -1087,6 +1086,7 @@ var SpacedeckSections = {
|
|||||||
this.selection_metrics.has_link=true;
|
this.selection_metrics.has_link=true;
|
||||||
this.insert_link_url = arts[0].meta.link_uri;
|
this.insert_link_url = arts[0].meta.link_uri;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
begin_transaction: function() {
|
begin_transaction: function() {
|
||||||
@@ -1435,13 +1435,13 @@ var SpacedeckSections = {
|
|||||||
this.color_picker_rgb = rgb_to_hex(rgba.r,rgba.g,rgba.b);
|
this.color_picker_rgb = rgb_to_hex(rgba.r,rgba.g,rgba.b);
|
||||||
},
|
},
|
||||||
|
|
||||||
update_selected_artifacts: function(change_func, override_locked) {
|
update_selected_artifacts: function(change_func, override_locked, temporary) {
|
||||||
var artifacts = this.selected_artifacts(!override_locked);
|
var artifacts = this.selected_artifacts(!override_locked);
|
||||||
|
|
||||||
if (!artifacts.length) return;
|
if (!artifacts.length) return;
|
||||||
|
|
||||||
this.update_artifacts(artifacts, change_func);
|
this.update_artifacts(artifacts, change_func);
|
||||||
this.update_selection_metrics();
|
this.update_selection_metrics(null, temporary||false);
|
||||||
},
|
},
|
||||||
|
|
||||||
nudge_selected_artifacts: function(dx, dy, event) {
|
nudge_selected_artifacts: function(dx, dy, event) {
|
||||||
@@ -1922,10 +1922,7 @@ var SpacedeckSections = {
|
|||||||
}.bind(this));
|
}.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
delayed_edit_artifact: function(evt) {
|
delayed_edit_artifact: function() {
|
||||||
evt.stopPropagation();
|
|
||||||
evt.preventDefault();
|
|
||||||
|
|
||||||
var a = this.selected_artifacts()[0];
|
var a = this.selected_artifacts()[0];
|
||||||
|
|
||||||
var el = $("#ios-focuser-"+a._id);
|
var el = $("#ios-focuser-"+a._id);
|
||||||
@@ -2086,8 +2083,6 @@ var SpacedeckSections = {
|
|||||||
if (a.description!=dom.innerHTML) {
|
if (a.description!=dom.innerHTML) {
|
||||||
a.description = dom.innerHTML;
|
a.description = dom.innerHTML;
|
||||||
|
|
||||||
console.log("new DOM:",dom.innerHTML);
|
|
||||||
|
|
||||||
this.update_board_artifact_viewmodel(a);
|
this.update_board_artifact_viewmodel(a);
|
||||||
this.queue_artifact_for_save(a);
|
this.queue_artifact_for_save(a);
|
||||||
|
|
||||||
@@ -2526,11 +2521,18 @@ var SpacedeckSections = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
show_toolbar_props: function() {
|
show_toolbar_props: function() {
|
||||||
if (this.selection_metrics.count==0) return;
|
if (this.selection_metrics.count==0) {
|
||||||
|
this.toolbar_lock_in = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
arts = this.selected_artifacts();
|
arts = this.selected_artifacts();
|
||||||
|
// check if selected artifacts are all from the same user
|
||||||
|
let same_user = true;
|
||||||
for (var i=0;i<arts.length; i++) {
|
for (var i=0;i<arts.length; i++) {
|
||||||
if (arts[i].mime=="x-spacedeck/zone") return;
|
if (arts[i].mime=="x-spacedeck/zone") return;
|
||||||
|
if (arts[i].user_id!==this.user._id) same_user = false;
|
||||||
}
|
}
|
||||||
|
this.toolbar_lock_in = same_user;
|
||||||
this.toolbar_props_in = true;
|
this.toolbar_props_in = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -285,6 +285,7 @@ function setup_whiteboard_directives() {
|
|||||||
$scope.start_adding_placeholder(evt);
|
$scope.start_adding_placeholder(evt);
|
||||||
return;
|
return;
|
||||||
} else if ($scope.active_tool=="pan") {
|
} else if ($scope.active_tool=="pan") {
|
||||||
|
this.deselect();
|
||||||
this.start_pan(evt);
|
this.start_pan(evt);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -723,6 +724,9 @@ function setup_whiteboard_directives() {
|
|||||||
|
|
||||||
//save_artifact(ars[i], null, $scope.display_saving_error);
|
//save_artifact(ars[i], null, $scope.display_saving_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update vector handles
|
||||||
|
$scope.update_selection_metrics();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.mouse_state == "text_editor") {
|
if (this.mouse_state == "text_editor") {
|
||||||
@@ -941,18 +945,14 @@ function setup_whiteboard_directives() {
|
|||||||
|
|
||||||
// special case for arrow's 3rd point
|
// special case for arrow's 3rd point
|
||||||
if (a.shape == "arrow" && $scope.selected_control_point_idx!=2) {
|
if (a.shape == "arrow" && $scope.selected_control_point_idx!=2) {
|
||||||
/*control_points[2].dx += dx/2;
|
|
||||||
control_points[2].dy += dy/2; */
|
|
||||||
|
|
||||||
control_points[2].dx = (control_points[0].dx+control_points[1].dx)/2;
|
control_points[2].dx = (control_points[0].dx+control_points[1].dx)/2;
|
||||||
control_points[2].dy = (control_points[0].dy+control_points[1].dy)/2;
|
control_points[2].dy = (control_points[0].dy+control_points[1].dy)/2;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _this.normalize_control_points(control_points, old_a);
|
return _this.normalize_control_points(control_points, old_a);
|
||||||
});
|
}, false, true); // override_locked: false, temporary: true
|
||||||
|
|
||||||
} else if (this.mouse_state == "scribble") {
|
} else if (this.mouse_state == "scribble") {
|
||||||
|
|
||||||
$scope.update_selected_artifacts(function(a) {
|
$scope.update_selected_artifacts(function(a) {
|
||||||
var old_a = a;
|
var old_a = a;
|
||||||
|
|
||||||
|
|||||||
@@ -15217,6 +15217,8 @@ button.close {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-size: cover; }
|
background-size: cover; }
|
||||||
|
.artifact .video.playing video {
|
||||||
|
z-index: 1; }
|
||||||
.artifact .video .title {
|
.artifact .video .title {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
@@ -15230,13 +15232,15 @@ button.close {
|
|||||||
font-size: 10px; }
|
font-size: 10px; }
|
||||||
.artifact .video video {
|
.artifact .video video {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%; }
|
height: 100%;
|
||||||
|
position: absolute; }
|
||||||
.artifact .video .tl-controls {
|
.artifact .video .tl-controls {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 10px;
|
top: 10px;
|
||||||
left: 10px;
|
left: 10px;
|
||||||
right: 10px;
|
right: 10px;
|
||||||
text-align: center; }
|
text-align: center;
|
||||||
|
z-index: 2; }
|
||||||
.artifact .video .tl-controls .btn {
|
.artifact .video .tl-controls .btn {
|
||||||
margin-top: 20px; }
|
margin-top: 20px; }
|
||||||
.artifact .audio {
|
.artifact .audio {
|
||||||
|
|||||||
@@ -324,6 +324,12 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
|
|
||||||
|
&.playing {
|
||||||
|
video {
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
@@ -340,14 +346,16 @@
|
|||||||
video {
|
video {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tl-controls {
|
.tl-controls {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 10px;
|
top: 10px;
|
||||||
left: 10px;
|
left: 10px;
|
||||||
right: 10px;
|
right: 10px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
z-index: 2;
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
|
|||||||
@@ -85,13 +85,13 @@
|
|||||||
v-bind:class="{text-editing:(editing_artifact_id==a._id && (a.view.major_type=='text' || a.view.major_type=='shape'))}"
|
v-bind:class="{text-editing:(editing_artifact_id==a._id && (a.view.major_type=='text' || a.view.major_type=='shape'))}"
|
||||||
id="artifact-{{a._id}}">
|
id="artifact-{{a._id}}">
|
||||||
|
|
||||||
|
|
||||||
<div v-if="a.view && a.view.major_type" style="height:100%; width:100%" v-bind:title="(a.editor_name || (a.user && a.user.nickname) || '')">
|
<div v-if="a.view && a.view.major_type" style="height:100%; width:100%" v-bind:title="(a.editor_name || (a.user && a.user.nickname) || '')">
|
||||||
<span v-if="a.locked && is_selected(a)" class="link-wrapper">
|
<span v-if="a.locked && is_selected(a)" class="link-wrapper">
|
||||||
<span class="btn btn-sm btn-icon btn-round btn-primary">
|
<span class="btn btn-sm btn-icon btn-round btn-primary">
|
||||||
<span class="icon icon-lock-closed"></span>
|
<span class="icon icon-lock-closed"></span>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<!-- text -->
|
<!-- text -->
|
||||||
<div v-if="a.view.major_type == 'text'" class="text" v-bind:style="a.view.inner_style">
|
<div v-if="a.view.major_type == 'text'" class="text" v-bind:style="a.view.inner_style">
|
||||||
<div class="text-table">
|
<div class="text-table">
|
||||||
@@ -151,28 +151,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- video -->
|
<!-- video -->
|
||||||
<div v-if="a.view.major_type == 'video'" v-videoplayer="a" class="video" v-bind:style="a.view.inner_style">
|
<div v-if="a.view.major_type == 'video'" class="video">
|
||||||
<video preload="metadata" v-bind:poster="a.view.thumbnail_uri">
|
<video preload="metadata" controls="auto" v-bind:poster="a.view.thumbnail_uri">
|
||||||
<source v-for="rep in a.view.payload_alternatives" v-bind:src="rep.payload_uri" v-bind:type="rep.mime" />
|
<source v-for="rep in a.view.payload_alternatives" v-bind:src="rep.payload_uri" v-bind:type="rep.mime" />
|
||||||
<source v-if="a.view.payload_uri && a.view.mime" v-bind:src="a.view.payload_uri" v-bind:type="a.view.mime" />
|
<source v-if="a.view.payload_uri && a.view.mime" v-bind:src="a.view.payload_uri" v-bind:type="a.view.mime" />
|
||||||
</video>
|
</video>
|
||||||
|
|
||||||
<div class="tl-controls">
|
|
||||||
<div class="btn btn-md btn-toggle btn-round" v-bind:class="{alt:a.player_view.state=='playing'}">
|
|
||||||
<span class="btn-option play">
|
|
||||||
<span class="icon icon-controls-play"></span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<span class="btn-option pause">
|
|
||||||
<span class="icon icon-controls-pause"></span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<span class="btn btn-md btn-round btn-icon stop" v-show="a.player_view.state=='playing' || a.player_view.state=='paused'">
|
|
||||||
<span class="icon icon-controls-stop"></span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="spinner"></div>
|
<div class="spinner"></div>
|
||||||
<div class="progress" v-bind:style="{width: a.view.progress+'%'}">{{a.description}}</div>
|
<div class="progress" v-bind:style="{width: a.view.progress+'%'}">{{a.description}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<div class="dialog-section">
|
<div class="dialog-section">
|
||||||
<label class="btn btn-xxl btn-transparent btn-icon">
|
<label class="btn btn-xxl btn-transparent btn-icon">
|
||||||
<span class="icon icon-picture-upload"></span>
|
<span class="icon icon-picture-upload"></span>
|
||||||
<input type="file" accept="*/*" multiple v-on:change="handle_image_file_upload($event)" id="image_file_upload">
|
<input type="file" multiple v-on:change="handle_image_file_upload($event)" id="image_file_upload">
|
||||||
</label>
|
</label>
|
||||||
<p>Click to Upload<br/> or drag file(s) anywhere.</p>
|
<p>Click to Upload<br/> or drag file(s) anywhere.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -7,12 +7,12 @@
|
|||||||
|
|
||||||
<button class="btn btn-divider"></button>
|
<button class="btn btn-divider"></button>
|
||||||
|
|
||||||
<button class="btn btn-transparent btn-icon-labeled" v-on:click="lock_selected_artifacts()" v-if="active_space_role=='admin'" title="<%=__("lock")%>">
|
<button class="btn btn-transparent btn-icon-labeled" v-on:click="lock_selected_artifacts()" v-if="active_space_role=='admin' || toolbar_lock_in" title="<%=__("lock")%>">
|
||||||
<span class="icon icon-lock-closed"></span>
|
<span class="icon icon-lock-closed"></span>
|
||||||
<span class="icon-label"><%=__("lock")%></span>
|
<span class="icon-label"><%=__("lock")%></span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button class="btn btn-transparent btn-icon-labeled" v-on:click="unlock_selected_artifacts()" v-if="active_space_role=='admin'" title="<%=__("unlock")%>">
|
<button class="btn btn-transparent btn-icon-labeled" v-on:click="unlock_selected_artifacts()" v-if="active_space_role=='admin' || toolbar_lock_in" title="<%=__("unlock")%>">
|
||||||
<span class="icon icon-lock-open"></span>
|
<span class="icon icon-lock-open"></span>
|
||||||
<span class="icon-label"><%=__("unlock")%></span>
|
<span class="icon-label"><%=__("unlock")%></span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -43,7 +43,8 @@
|
|||||||
|
|
||||||
<div class="dropdown bottom light center">
|
<div class="dropdown bottom light center">
|
||||||
<div class="btn-collapse in">
|
<div class="btn-collapse in">
|
||||||
<button class="btn btn-transparent btn-icon-labeled" v-on:click="handle_insert_image_url()" v-on:touchstart="handle_insert_image_url()" title="<%=__("media")%>">
|
<input type="file" multiple v-on:change="handle_image_file_upload($event)" id="image_file_upload" class="btn btn-transparent btn-icon-labeled" style="position: absolute; z-index: 1; opacity: 0;">
|
||||||
|
<button class="btn btn-transparent btn-icon-labeled" title="<%=__("media")%>">
|
||||||
<span class="icon icon-upload"></span>
|
<span class="icon icon-upload"></span>
|
||||||
<span class="icon-label" ><%=__("media")%></span>
|
<span class="icon-label" ><%=__("media")%></span>
|
||||||
</button>
|
</button>
|
||||||
@@ -59,19 +60,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="dropdown top left light">
|
|
||||||
<div class="btn-collapse">
|
|
||||||
<button class="btn btn-transparent btn-icon-labeled" v-bind:class="{open:opened_dialog=='image'}" v-on:click="open_dialog('image')" title="<%=__("image")%>">
|
|
||||||
<span class="icon icon-picture"></span>
|
|
||||||
<span class="icon-label"><%=__("image")%></span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="dialog">
|
|
||||||
<%- include("./image.html") %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="dropdown top left light" v-bind:class="{open:opened_dialog=='zones'}">
|
<div class="dropdown top left light" v-bind:class="{open:opened_dialog=='zones'}">
|
||||||
<div class="btn-collapse in">
|
<div class="btn-collapse in">
|
||||||
<button class="btn btn-transparent btn-icon-labeled" v-bind:class="{open:opened_dialog=='zones'}" v-on:click="open_dialog('zones')" title="<%=__("tool_zones")%>">
|
<button class="btn btn-transparent btn-icon-labeled" v-bind:class="{open:opened_dialog=='zones'}" v-on:click="open_dialog('zones')" title="<%=__("tool_zones")%>">
|
||||||
|
|||||||
@@ -97,6 +97,17 @@
|
|||||||
|
|
||||||
<button class="btn btn-divider"></button>
|
<button class="btn btn-divider"></button>
|
||||||
|
|
||||||
|
<div class="dropdown bottom light center">
|
||||||
|
<div class="btn-collapse" v-bind:class="{in:selection_metrics.contains_text}">
|
||||||
|
<button
|
||||||
|
class="btn btn-icon-labeled btn-transparent"
|
||||||
|
v-on:click="delayed_edit_artifact()">
|
||||||
|
<span class="icon icon-pencil"></span>
|
||||||
|
<span class="icon-label"><%=__("tool_edit_text")%></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="dropdown top light right" v-bind:class="{open:opened_dialog=='object-options'}">
|
<div class="dropdown top light right" v-bind:class="{open:opened_dialog=='object-options'}">
|
||||||
<button class="btn btn-transparent btn-icon-labeled" v-on:click="open_dialog('object-options')" v-bind:class="{open : opened_dialog=='object-options'}">
|
<button class="btn btn-transparent btn-icon-labeled" v-on:click="open_dialog('object-options')" v-bind:class="{open : opened_dialog=='object-options'}">
|
||||||
<span class="icon icon-cogwheel"></span>
|
<span class="icon icon-cogwheel"></span>
|
||||||
|
|||||||
@@ -7,15 +7,11 @@
|
|||||||
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||||
|
|
||||||
<link href="/images/favicon.png" rel="icon" type="image/x-icon" />
|
<link href="/images/favicon.png" rel="icon" type="image/x-icon" />
|
||||||
<link href='https://fonts.googleapis.com/css?family=Inter' rel='stylesheet' type='text/css'>
|
|
||||||
<link rel="stylesheet" href="/stylesheets/style.css">
|
<link rel="stylesheet" href="/stylesheets/style.css">
|
||||||
|
|
||||||
<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
|
<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
//window.browser_lang = '< %= locale %>';
|
|
||||||
var ENV = {
|
var ENV = {
|
||||||
name: 'development',
|
name: 'development',
|
||||||
webHost: location.host,
|
webHost: location.host,
|
||||||
|
|||||||
Reference in New Issue
Block a user