summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--public/assets/javascripts/mx/primitives/mx.video.js12
-rw-r--r--public/assets/javascripts/mx/primitives/mx.vimeo.js43
-rw-r--r--public/assets/javascripts/mx/primitives/mx.youtube.js21
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/move.js6
-rw-r--r--public/assets/javascripts/ui/_router.js12
-rw-r--r--public/assets/javascripts/ui/builder/BuilderSettings.js4
-rw-r--r--public/assets/javascripts/ui/builder/BuilderView.js2
-rw-r--r--public/assets/javascripts/ui/editor/EditorSettings.js4
-rw-r--r--public/assets/javascripts/ui/editor/EditorView.js4
-rw-r--r--public/assets/javascripts/ui/editor/MediaEditor.js17
-rw-r--r--public/assets/javascripts/ui/editor/MediaUpload.js8
-rw-r--r--public/assets/javascripts/ui/editor/MediaViewer.js4
-rw-r--r--public/assets/javascripts/ui/lib/FormView.js4
-rw-r--r--public/assets/javascripts/ui/reader/ReaderView.js2
-rw-r--r--public/assets/javascripts/ui/site/DocumentModal.js4
-rw-r--r--public/assets/javascripts/ui/site/EditProfileModal.js4
-rw-r--r--public/assets/javascripts/ui/site/EditProjectModal.js4
-rw-r--r--public/assets/javascripts/ui/site/LayoutsModal.js6
-rwxr-xr-xpublic/assets/stylesheets/app.css10
-rw-r--r--views/controls/editor/media-editor.ejs2
20 files changed, 111 insertions, 62 deletions
diff --git a/public/assets/javascripts/mx/primitives/mx.video.js b/public/assets/javascripts/mx/primitives/mx.video.js
index b1b9f6b..f92fe9f 100644
--- a/public/assets/javascripts/mx/primitives/mx.video.js
+++ b/public/assets/javascripts/mx/primitives/mx.video.js
@@ -28,8 +28,8 @@ MX.Video = MX.Object3D.extend({
this.paused = true
this.player = document.createElement('video')
- this.player.addEventListener("loadedmetadata", $.proxy(this.ready, this))
- this.player.addEventListener("error", $.proxy(this.error, this))
+ this.player.addEventListener("loadedmetadata", this.ready.bind(this))
+ this.player.addEventListener("error", this.error.bind(this))
this.player.width = this.width
this.player.height = this.height
this.player.src = this.media.url
@@ -62,7 +62,10 @@ MX.Video = MX.Object3D.extend({
},
seek: function(n){
- this.player.currentTime = n
+ if (n < 1) {
+ n = n * this.duration()
+ }
+ this.player.currentTime = n
},
duration: function(){
@@ -71,6 +74,9 @@ MX.Video = MX.Object3D.extend({
finished: function(){
console.log("video finished")
+ if (this.media.bound) {
+ $(".playButton").removeClass('playing')
+ }
},
diff --git a/public/assets/javascripts/mx/primitives/mx.vimeo.js b/public/assets/javascripts/mx/primitives/mx.vimeo.js
index e558bc3..5a373ff 100644
--- a/public/assets/javascripts/mx/primitives/mx.vimeo.js
+++ b/public/assets/javascripts/mx/primitives/mx.vimeo.js
@@ -26,30 +26,34 @@ MX.Vimeo = MX.Object3D.extend({
load: function (ops) {
var uid = 'player-' + Uid ()
- var preload = document.createElement("div")
+ var preload = document.createElement("iframe")
preload.id = uid
+ preload.setAttribute("src", "//player.vimeo.com/video/" + this.media.token + "?api=1&badge=0&controls=0branding=0&byline=0&player_id=" + uid)
preload.style.backgroundImage = "url(" + this.media.thumbnail + ")"
preload.style.width = this.media.width + "px"
preload.style.height = this.media.height + "px"
+ preload.style.border = "0"
preload.style.pointerEvents = "none"
preload.className = "preload"
this.el.appendChild(preload)
-
this.player = $f(preload)
- this.player.addEvent('ready', $.proxy(this.ready, this))
+
+ this.player.addEvent('ready', this.ready.bind(this))
},
ready: function(){
console.log("vimeo ready")
// wait until ready before binding events. other events: play, pause
- this.player.addEvent('finish', $.proxy(this.finished, this))
+ this.player.addEvent('play', this.onPlay.bind(this))
+ this.player.addEvent('pause', this.onPause.bind(this))
+ this.player.addEvent('finish', this.finished.bind(this))
// so annoying that this is async!!
- this.player.api('getDuration', $.proxy(function(n){
+ this.player.api('getDuration', function(n){
console.log("vimeo duration", n)
this.player.duration = n
- }, this))
+ }.bind(this))
},
@@ -68,14 +72,39 @@ MX.Vimeo = MX.Object3D.extend({
},
seek: function(n){
- this.player.api('seekTo', n)
+ if (n < 1) {
+ n = n * this.duration()
+ }
+ this.player.api('seekTo', max(0, n-1))
+ if (this.paused) {
+ this.paused = false
+ this.play()
+ setTimeout(function(){
+ this.pause()
+ }.bind(this), 1000)
+ }
},
duration: function(){
return this.player.duration
},
+ onPlay: function(){
+ if (this.paused) {
+ this.pause()
+ }
+ },
+
+ onPause: function(){
+ if (! this.paused) {
+ this.play()
+ }
+ },
+
finished: function(){
+ if (this.media.bound) {
+ $(".playButton").removeClass('playing')
+ }
}
})
diff --git a/public/assets/javascripts/mx/primitives/mx.youtube.js b/public/assets/javascripts/mx/primitives/mx.youtube.js
index cc0ec0a..a31a24d 100644
--- a/public/assets/javascripts/mx/primitives/mx.youtube.js
+++ b/public/assets/javascripts/mx/primitives/mx.youtube.js
@@ -56,9 +56,9 @@ MX.Youtube = MX.Object3D.extend({
width: this.width,
height: this.height,
events: {
- onReady: $.proxy(this.ready, this),
- onError: $.proxy(this.error, this),
- onStateChange: $.proxy(this.statechange, this),
+ onReady: this.ready.bind(this),
+ onError: this.error.bind(this),
+ onStateChange: this.statechange.bind(this),
},
playerVars: {
autohide: 1,
@@ -93,10 +93,11 @@ MX.Youtube = MX.Object3D.extend({
this.finished()
break
case 1: // play
- this.paused = false
+ if (this.paused) {
+ this.pause()
+ }
break
case 2: // pause
- this.paused = true
break
case 3: // buffering
break
@@ -106,15 +107,20 @@ MX.Youtube = MX.Object3D.extend({
},
play: function(){
+ this.paused = false
this.player.playVideo()
},
pause: function(){
+ this.paused = true
this.player.pauseVideo()
},
seek: function(n, allowSeekAhead){
- allowSeekAhead = typeof allowSeekAhead == "boolean" ? allowSeekAhead : true
+ if (n < 1) {
+ n = n * this.duration()
+ }
+ allowSeekAhead = typeof allowSeekAhead == "boolean" ? allowSeekAhead : true
this.player.seekTo(n, true) // set to false if seeking manually
},
@@ -124,6 +130,9 @@ MX.Youtube = MX.Object3D.extend({
finished: function(){
console.log("youtube finished")
+ if (this.media.bound) {
+ $(".playButton").removeClass('playing')
+ }
}
})
diff --git a/public/assets/javascripts/rectangles/engine/scenery/move.js b/public/assets/javascripts/rectangles/engine/scenery/move.js
index aa7ddd1..6229162 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/move.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/move.js
@@ -27,10 +27,8 @@ Scenery.move = function(base){
return
}
- if (editor.permissions.pick) {
- // load the modal
- app.router.editorView.mediaEditor.pick(base)
- }
+ // load the modal
+ app.router.editorView.mediaEditor.pick(base)
if (! (editor.permissions.move || editor.permissions.resize) ) {
e.clickAccepted = false
diff --git a/public/assets/javascripts/ui/_router.js b/public/assets/javascripts/ui/_router.js
index b3e868a..886b8be 100644
--- a/public/assets/javascripts/ui/_router.js
+++ b/public/assets/javascripts/ui/_router.js
@@ -189,13 +189,13 @@ var SiteRouter = Router.extend({
var name = e ? $(e.currentTarget).data("name") : name
- confirmModal.confirm("Are you sure you want to delete " + name + "?", $.proxy(function(){
- this.documentModal.destroy(name, $.proxy(function(){
- AlertModal.alert("Document deleted!", $.proxy(function(){
+ confirmModal.confirm("Are you sure you want to delete " + name + "?", function(){
+ this.documentModal.destroy(name, function(){
+ AlertModal.alert("Document deleted!", function(){
window.location.href = "/about"
- }, this))
- }, this))
- }, this))
+ }.bind(this))
+ }.bind(this))
+ }.bind(this))
// this.documentModal.destroy(name)
},
diff --git a/public/assets/javascripts/ui/builder/BuilderSettings.js b/public/assets/javascripts/ui/builder/BuilderSettings.js
index 9fcd55f..6006868 100644
--- a/public/assets/javascripts/ui/builder/BuilderSettings.js
+++ b/public/assets/javascripts/ui/builder/BuilderSettings.js
@@ -57,7 +57,7 @@ var BuilderSettings = FormView.extend({
destroy: function(){
var msg = "Are you sure you want to delete the layout " + sanitize(this.$name.val()) + "?"
- ConfirmModal.confirm(msg, $.proxy(function(){
+ ConfirmModal.confirm(msg, function(){
$.ajax({
url: this.destroyAction,
type: "delete",
@@ -66,7 +66,7 @@ var BuilderSettings = FormView.extend({
window.location.href = "/layout"
}
})
- }, this))
+ }.bind(this))
},
toggle: function(){
diff --git a/public/assets/javascripts/ui/builder/BuilderView.js b/public/assets/javascripts/ui/builder/BuilderView.js
index b42d3e7..a83bf43 100644
--- a/public/assets/javascripts/ui/builder/BuilderView.js
+++ b/public/assets/javascripts/ui/builder/BuilderView.js
@@ -20,7 +20,7 @@ var BuilderView = View.extend({
name = sanitize(name)
- $.get(this.action + name, $.proxy(this.ready, this))
+ $.get(this.action + name, this.ready.bind(this))
},
ready: function(data){
diff --git a/public/assets/javascripts/ui/editor/EditorSettings.js b/public/assets/javascripts/ui/editor/EditorSettings.js
index 1d68b1b..887c894 100644
--- a/public/assets/javascripts/ui/editor/EditorSettings.js
+++ b/public/assets/javascripts/ui/editor/EditorSettings.js
@@ -65,7 +65,7 @@ var EditorSettings = FormView.extend({
destroy: function(){
var msg = "Are you sure you want to delete the project " + sanitize(this.$name.val()) + "?"
- ConfirmModal.confirm(msg, $.proxy(function(){
+ ConfirmModal.confirm(msg, function(){
$.ajax({
url: this.destroyAction,
type: "delete",
@@ -74,7 +74,7 @@ var EditorSettings = FormView.extend({
window.location.href = "/project"
}
})
- }, this))
+ }.bind(this))
},
toggle: function(){
diff --git a/public/assets/javascripts/ui/editor/EditorView.js b/public/assets/javascripts/ui/editor/EditorView.js
index 017e241..322637e 100644
--- a/public/assets/javascripts/ui/editor/EditorView.js
+++ b/public/assets/javascripts/ui/editor/EditorView.js
@@ -20,12 +20,12 @@ var EditorView = View.extend({
load: function(name){
name = sanitize(name)
- $.get(this.projectAction + name, $.proxy(this.ready, this))
+ $.get(this.projectAction + name, this.ready.bind(this))
},
loadLayout: function(layout){
layout = sanitize(layout)
- $.get(this.layoutAction + layout, $.proxy(this.readyLayout, this))
+ $.get(this.layoutAction + layout, this.readyLayout.bind(this))
},
ready: function(data){
diff --git a/public/assets/javascripts/ui/editor/MediaEditor.js b/public/assets/javascripts/ui/editor/MediaEditor.js
index 47a938b..29ec9e5 100644
--- a/public/assets/javascripts/ui/editor/MediaEditor.js
+++ b/public/assets/javascripts/ui/editor/MediaEditor.js
@@ -3,7 +3,8 @@ var MediaEditor = FormView.extend({
el: "#mediaEditor",
events: {
- "click .play": "togglePlaying",
+ "click .playButton": "togglePlaying",
+ "change [name=keyframe]": "seek",
},
initialize: function(opt){
@@ -20,7 +21,7 @@ var MediaEditor = FormView.extend({
this.$units = this.$("[name=units]")
// video fields
- this.$playButton = this.$(".play")
+ this.$playButton = this.$(".playButton")
this.$loop = this.$("[name=loop]")
this.$mute = this.$("[name=mute]")
this.$keyframe = this.$("[name=keyframe]")
@@ -39,7 +40,7 @@ var MediaEditor = FormView.extend({
if (this.scenery) {
this.unbind()
}
-
+
this.bind(scenery)
this.$el.addClass("active")
@@ -71,17 +72,23 @@ var MediaEditor = FormView.extend({
this.$mute
this.$keyframe
*/
-
-
break
}
+
+ },
+
+ seek: function(){
+ var n = parseFloat( this.$keyframe.val() )
+ this.scenery.seek(n)
},
bind: function(scenery){
this.scenery = scenery
+ this.scenery.media.bound = true
},
unbind: function(){
+ this.scenery.media.bound = false
this.scenery = null
},
diff --git a/public/assets/javascripts/ui/editor/MediaUpload.js b/public/assets/javascripts/ui/editor/MediaUpload.js
index b7fea07..86bf767 100644
--- a/public/assets/javascripts/ui/editor/MediaUpload.js
+++ b/public/assets/javascripts/ui/editor/MediaUpload.js
@@ -39,7 +39,7 @@ var MediaUpload = View.extend({
var url = this.$url.val()
this.$url.val("")
- Parser.parse(url, $.proxy(function(media){
+ Parser.parse(url, function(media){
if (! media) {
alert("Not a valid image/video link")
return
@@ -53,8 +53,8 @@ var MediaUpload = View.extend({
url: this.createAction,
data: media,
})
- request.done($.proxy(this.add, this))
- }, this))
+ request.done(this.add.bind(this))
+ }.bind(this))
},
handleFileSelect: function(e) {
@@ -109,7 +109,7 @@ var MediaUpload = View.extend({
processData: false,
contentType: false,
})
- request.done($.proxy(this.add, this))
+ request.done(this.add.bind(this))
},
add: function(media){
diff --git a/public/assets/javascripts/ui/editor/MediaViewer.js b/public/assets/javascripts/ui/editor/MediaViewer.js
index 88c3b18..264ed7c 100644
--- a/public/assets/javascripts/ui/editor/MediaViewer.js
+++ b/public/assets/javascripts/ui/editor/MediaViewer.js
@@ -40,12 +40,12 @@ var MediaViewer = ModalView.extend({
},
load: function(){
- $.get("/api/media/user", $.proxy(this.populate, this))
+ $.get("/api/media/user", this.populate.bind(this))
},
populate: function(data){
this.loaded = true
- data && data.forEach($.proxy(this.add, this))
+ data && data.forEach(this.add.bind(this))
this.__super__.show.call(this)
},
diff --git a/public/assets/javascripts/ui/lib/FormView.js b/public/assets/javascripts/ui/lib/FormView.js
index 0106ce0..219952d 100644
--- a/public/assets/javascripts/ui/lib/FormView.js
+++ b/public/assets/javascripts/ui/lib/FormView.js
@@ -26,9 +26,9 @@ var FormView = View.extend({
this.$errorList.append('<div>' + errors[i] + '</div>');
}
this.$errors.css("opacity", 1.0);
- setTimeout($.proxy(function(){
+ setTimeout(function(){
this.$errors.show().css("opacity", 1.0);
- }, this), 200)
+ }.bind(this), 200)
}
},
diff --git a/public/assets/javascripts/ui/reader/ReaderView.js b/public/assets/javascripts/ui/reader/ReaderView.js
index add1ea1..bbdd437 100644
--- a/public/assets/javascripts/ui/reader/ReaderView.js
+++ b/public/assets/javascripts/ui/reader/ReaderView.js
@@ -15,7 +15,7 @@ var ReaderView = View.extend({
$(".logo,.topLinks,#editorView").hide()
}
name = sanitize(name)
- $.get(this.projectAction + name, $.proxy(this.ready, this))
+ $.get(this.projectAction + name, this.ready.bind(this))
},
ready: function(data){
diff --git a/public/assets/javascripts/ui/site/DocumentModal.js b/public/assets/javascripts/ui/site/DocumentModal.js
index 6f16169..067977d 100644
--- a/public/assets/javascripts/ui/site/DocumentModal.js
+++ b/public/assets/javascripts/ui/site/DocumentModal.js
@@ -20,7 +20,7 @@ var DocumentModal = ModalFormView.extend({
this.action = this.updateAction
- $.get("/api/docs", { name: name }, $.proxy(function(data){
+ $.get("/api/docs", { name: name }, function(data){
if (data.isNew) {
this.action = this.createAction
}
@@ -31,7 +31,7 @@ var DocumentModal = ModalFormView.extend({
this.$("[name='new_name']").val(name)
this.show()
- }, this))
+ }.bind(this))
},
success: function(res){
diff --git a/public/assets/javascripts/ui/site/EditProfileModal.js b/public/assets/javascripts/ui/site/EditProfileModal.js
index 6b89ad8..b023923 100644
--- a/public/assets/javascripts/ui/site/EditProfileModal.js
+++ b/public/assets/javascripts/ui/site/EditProfileModal.js
@@ -6,7 +6,7 @@ var EditProfileModal = ModalFormView.extend({
load: function(){
this.reset()
- $.get("/api/profile", $.proxy(function(data){
+ $.get("/api/profile", function(data){
console.log(data)
for (var i in data) {
@@ -23,7 +23,7 @@ var EditProfileModal = ModalFormView.extend({
}
this.show()
- }, this))
+ }.bind(this))
},
validate: function(){
diff --git a/public/assets/javascripts/ui/site/EditProjectModal.js b/public/assets/javascripts/ui/site/EditProjectModal.js
index 356d8b7..20baa54 100644
--- a/public/assets/javascripts/ui/site/EditProjectModal.js
+++ b/public/assets/javascripts/ui/site/EditProjectModal.js
@@ -31,7 +31,7 @@ var EditProjectModal = ModalView.extend({
var fields = this.$form.serializeArray()
var request = $.post(this.action, $.param(fields));
- request.done($.proxy(function (response) {
+ request.done(function (response) {
if (response.error) {
this.$errors.show();
for (var key in response.error.errors) {
@@ -42,7 +42,7 @@ var EditProjectModal = ModalView.extend({
else {
window.location.href = "/profile"
}
- }, this));
+ }.bind(this));
}
})
diff --git a/public/assets/javascripts/ui/site/LayoutsModal.js b/public/assets/javascripts/ui/site/LayoutsModal.js
index d474aa7..3b9e6cd 100644
--- a/public/assets/javascripts/ui/site/LayoutsModal.js
+++ b/public/assets/javascripts/ui/site/LayoutsModal.js
@@ -8,18 +8,18 @@ var LayoutsIndex = View.extend({
load: function(type){
this.$templates.children("span").remove()
- $.get(this.action, $.proxy(this.populate, this))
+ $.get(this.action, this.populate.bind(this))
},
populate: function(data){
- data.forEach($.proxy(function(room){
+ data.forEach(function(room){
var $span = $("<span>")
// $span.html(JSON.stringify(room))
$span.data("slug", room.slug)
$span.css("background-image", "url(" + room.photo + ")")
this.$templates.append($span)
- }, this))
+ }.bind(this))
this.show()
}
diff --git a/public/assets/stylesheets/app.css b/public/assets/stylesheets/app.css
index 4296223..500f444 100755
--- a/public/assets/stylesheets/app.css
+++ b/public/assets/stylesheets/app.css
@@ -1220,23 +1220,23 @@ input[type="range"]::-webkit-slider-thumb {
padding-right: 5px;
}
-.setting .play {
+.setting .playButton {
color: white;
background: black;
border-radius: 50px;
padding: 6px 7px 5px;
cursor: pointer;
}
-.setting .play .icon-play {
+.setting .playButton .icon-play {
display: inline;
}
-.setting .play.playing .icon-play {
+.setting .playButton.playing .icon-play {
display: none;
}
-.setting .play .icon-pause {
+.setting .playButton .icon-pause {
display: none;
}
-.setting .play.playing .icon-pause {
+.setting .playButton.playing .icon-pause {
display: inline;
}
diff --git a/views/controls/editor/media-editor.ejs b/views/controls/editor/media-editor.ejs
index 12ab2b4..46b8a42 100644
--- a/views/controls/editor/media-editor.ejs
+++ b/views/controls/editor/media-editor.ejs
@@ -11,7 +11,7 @@
</div>
<div class="video setting">
- <span class="play">
+ <span class="playButton">
<span class="icon-play"></span>
<span class="icon-pause"></span>
</span>