diff --git a/build/js/ox.ui.js b/build/js/ox.ui.js index 0773eeb6..de1c1732 100644 --- a/build/js/ox.ui.js +++ b/build/js/ox.ui.js @@ -7095,8 +7095,7 @@ requires return; } //Ox.print('loadPage', page); - var keys = $.inArray('id', self.options.keys) > -1 ? self.options.keys : - $.merge(self.options.keys, ['id']), + var keys = $.merge(self.options.keys.indexOf(self.options.unique) == -1 ? [self.options.unique] : [], self.options.keys), offset = page * self.pageLength, range = [offset, offset + (page < self.pages - 1 ? self.pageLength : self.listLength % self.pageLength)]; @@ -8643,7 +8642,7 @@ requires $('
') .addClass('OxCell OxTarget') .css({ - width: (self.options.width - padding - 32) + 'px' + width: (self.options.width - padding - 32 + !data.items * 16) + 'px' }) .html(data.title) .appendTo($item); @@ -10712,8 +10711,12 @@ requires .html(data.value); }, items: $.map(self.options.items, function(v, i) { - return {value: v.value.replace(/\n/g, '
')}; + return { + id: i + '', + value: v.value.replace(/\n/g, '
') + }; }), + unique: 'id' }) .bindEvent({ select: selectAnnotation @@ -10736,13 +10739,9 @@ requires */ function selectAnnotation(event, data) { - var pos = data.selected.ids[0], + var pos = parseInt(data.ids[0]), item = self.options.items[pos]; if (pos != self.selected) { - self.selected > -1 && - self.$annotation[self.selected].removeClass('OxSelected'); - self.selected = pos; - self.$annotation[self.selected].addClass('OxSelected'); that.triggerEvent('select', { 'in': item.in, 'out': item.out @@ -11602,16 +11601,16 @@ requires key_alt_shift_right: function() { }, key_backslash: function() { - // select current cut + select('subtitle'); }, key_closebracket: function() { - movePositionTo('cut', 1); + movePositionTo('subtitle', 1); }, key_comma: function() { - movePositionTo('subtitle', -1); + movePositionTo('cut', -1); }, key_dot: function() { - movePositionTo('subtitle', 1); + movePositionTo('cut', 1); }, key_down: function() { movePositionBy(self.sizes.timeline[0].width); @@ -11627,7 +11626,7 @@ requires setPoint('out'); }, key_openbracket: function() { - movePositionTo('cut', -1); + movePositionTo('subtitle', -1); }, key_p: playInToOut, key_right: function() { @@ -11662,6 +11661,9 @@ requires key_shift_up: function() { movePositionBy(-self.options.duration); }, + key_slash: function() { + select('cut'); + }, key_space: togglePlay, key_up: function() { movePositionBy(-self.sizes.timeline[0].width); @@ -11676,7 +11678,11 @@ requires videoRatio: self.options.videoWidth / self.options.videoHeight }); - self.$video = new Ox.Element().addClass('OxVideoEditor'); + self.$editor = new Ox.Element() + .addClass('OxVideoEditor') + .click(function() { + that.gainFocus() + }); self.sizes = getSizes(); @@ -11709,7 +11715,7 @@ requires setPoint(type); } }) - .appendTo(self.$video); + .appendTo(self.$editor); }); self.$timeline[0] = new Ox.LargeTimeline({ @@ -11730,7 +11736,7 @@ requires }) .bindEvent('change', changeTimelineLarge) .bindEvent('changeEnd', changeTimelineLarge) - .appendTo(self.$video); + .appendTo(self.$editor); self.$timeline[1] = new Ox.BlockTimeline({ cuts: self.options.cuts, @@ -11749,7 +11755,7 @@ requires top: self.sizes.timeline[1].top + 'px' }) .bindEvent('change', changeTimelineSmall) - .appendTo(self.$video); + .appendTo(self.$editor); self.$annotations = new Ox.Element() .css({ @@ -11776,7 +11782,7 @@ requires that.$element = new Ox.SplitPanel({ elements: [ { - element: self.$video + element: self.$editor }, { collapsed: !self.options.showAnnotations, @@ -11850,6 +11856,33 @@ requires return position; } + function getPoints(type) { + var found = false, + points, + positions = []; + if (type == 'cut') { + positions = self.options.cuts; + } else if (type == 'match') { + // ... + } else if (type == 'subtitle') { + self.options.subtitles.forEach(function(v, i) { + positions.push(v.in); + positions.push(v.out); + }); + } + positions.indexOf(0) == -1 && positions.unshift(0); + positions.indexOf(self.options.duration) == -1 && + positions.push(self.options.duration); + $.each(positions, function(i, v) { + if (v > self.options.position) { + points = [positions[i - 1], positions[i]]; + found = true; + return false; + } + }); + return points; + } + function getSizes(scrollbarIsVisible) { //Ox.print('getSizes', scrollbarIsVisible) var scrollbarWidth = oxui.scrollbarSize, @@ -11909,7 +11942,7 @@ requires lines = Math.ceil(self.options.duration / size.timeline[1].width); height = getHeight(); //Ox.print('lines', lines, getHeight(), self.options.height, (scrollbarIsVisible && getHeight() <= self.options.height) ? 'scroll' : 'auto') - self.$video.css({ + self.$editor.css({ overflowY: (scrollbarIsVisible && height <= self.options.height) ? 'scroll' : 'auto' }); return (!scrollbarIsVisible && height > self.options.height) ? getSizes(true) : size; @@ -11979,30 +12012,31 @@ requires function selectAnnotation(event, data) { self.options.position = data.in - self.options.points = [data.in, data.out]; + self.options.points = [data.in, data.out - 0.001]; setPosition(); setPoints(); } + function select(type) { + self.options.points = getPoints(type); + setPoints(); + } + function setPoint(point) { self.options.points[point == 'in' ? 0 : 1] = self.options.position; - self.$player[point == 'in' ? 1 : 2].options({ - position: self.options.position - }); if (self.options.points[1] < self.options.points[0]) { self.options.points[point == 'in' ? 1 : 0] = self.options.position; - self.$player[point == 'in' ? 2 : 1].options({ - position: self.options.position - }); } setPoints(); } function setPoints() { $.each(self.$player, function(i, v) { - v.options({ + v.options($.extend({ points: self.options.points - }); + }, i ? { + position: self.options.points[i - 1] + } : {})); }); $.each(self.$timeline, function(i, v) { v.options({ @@ -13227,7 +13261,7 @@ requires }, { align: 'left', - id: 'hash', + id: 'oshash', operator: '+', title: 'Hash', unique: true,