diff --git a/build/css/ox.ui.css b/build/css/ox.ui.css index 95c4ba5f..7d84b82c 100644 --- a/build/css/ox.ui.css +++ b/build/css/ox.ui.css @@ -1224,6 +1224,10 @@ Video ================================================================================ */ +.OxEditor { + overflow-x: hidden; + overflow-y: auto; +} .OxEditor .OxVideoPlayer { position: absolute; margin: 4px; diff --git a/build/js/ox.js b/build/js/ox.js index 9bde4049..28be12e6 100644 --- a/build/js/ox.js +++ b/build/js/ox.js @@ -171,7 +171,7 @@ Ox.equals = function(obj0, obj1) { ret = true; } else if (Ox.isArray(obj0) && obj0.length == obj1.length) { Ox.each(obj0, function(i, v) { - ret = v == obj1[i]; + ret = Ox.equals(v, obj1[i]); return ret; }); } else if (Ox.isObject(obj0)) { @@ -1861,7 +1861,7 @@ Ox.isBoolean = function(val) { >>> Ox.isBoolean(false) true */ - return typeof val == "boolean"; + return typeof val == 'boolean'; }; Ox.isDate = function(val) { @@ -1879,7 +1879,7 @@ Ox.isFunction = function(val) { // is in jQuery >>> Ox.isFunction(/ /) false */ - return typeof val == "function" && !Ox.isRegExp(val); + return typeof val == 'function' && !Ox.isRegExp(val); }; Ox.isNull = function(val) { @@ -1899,7 +1899,7 @@ Ox.isNumber = function(val) { >>> Ox.isNumber(NaN) false */ - return typeof val == "number" && isFinite(val); + return typeof val == 'number' && isFinite(val); }; Ox.isObject = function(val) { @@ -1913,7 +1913,7 @@ Ox.isObject = function(val) { >>> Ox.isObject(null) false */ - return typeof val == "object" && !$.isArray(val) && + return typeof val == 'object' && !$.isArray(val) && !Ox.isDate(val) && !Ox.isNull(val); }; @@ -1927,10 +1927,10 @@ Ox.isRegExp = function(val) { Ox.isString = function(val) { /* - >>> Ox.isString("") + >>> Ox.isString('') true */ - return typeof val == "string"; + return typeof val == 'string'; }; Ox.isUndefined = function(val) { @@ -1938,5 +1938,5 @@ Ox.isUndefined = function(val) { >>> Ox.isUndefined() true */ - return typeof val == "undefined"; + return typeof val == 'undefined'; }; diff --git a/build/js/ox.ui.js b/build/js/ox.ui.js index 351619a6..56d38d41 100644 --- a/build/js/ox.ui.js +++ b/build/js/ox.ui.js @@ -103,6 +103,8 @@ requires $elements = {}, $window, $document, $body; + //_$elements = $elements; + $(function() { $window = $(window), $document = $(document), @@ -902,17 +904,11 @@ requires } }); $elements[that.id] = that; + self.$eventHandler = $('
'); wrapjQuery(); })(); // private - function eventCallback(fn) { - return function(event, data) { - event.stopPropagation(); - fn(event, data); - }; - } - function wrapjQuery() { $.each(oxui.jQueryFunctions, function(i, fn) { that[fn] = function() { @@ -988,11 +984,11 @@ requires if (arguments.length == 1) { $.each(arguments[0], function(event, fn) { Ox.print(that.id, 'bind', event); - that.bind('ox_' + event, eventCallback(fn)); + self.$eventHandler.bind('ox_' + event, fn); }); } else { Ox.print(that.id, 'bind', arguments[0]); - that.bind('ox_' + arguments[0], eventCallback(arguments[1])); + self.$eventHandler.bind('ox_' + arguments[0], arguments[1]); } return that; } @@ -1061,6 +1057,7 @@ requires that.remove = function() { // fixme: clashes with jquery, should be removeElement //self.options && Ox.Event.unbind(self.options.id); // there are optionless elements, like the dialog layer //that.loseFocus(); + delete self.$eventHandler; that.$element.remove(); delete $elements[that.ox]; return that; @@ -1074,11 +1071,11 @@ requires if (Ox.isObject(arguments[0])) { $.each(arguments[0], function(event, data) { Ox.print(that.id, self.options.id, 'trigger', event, data); - that.trigger('ox_' + event, data); + self.$eventHandler.trigger('ox_' + event, data); }); } else { Ox.print(that.id, self.options ? self.options.id : '', 'trigger', arguments[0], arguments[1] || {}); - that.trigger('ox_' + arguments[0], arguments[1] || {}); + self.$eventHandler.trigger('ox_' + arguments[0], arguments[1] || {}); } return that; }; @@ -1091,11 +1088,11 @@ requires if (arguments.length == 1) { $.each(arguments[0], function(event, fn) { Ox.print(that.id, 'unbind', arguments[0]); - that.unbind('ox_' + event, eventCallback(fn)); + self.$eventHandler.unbind('ox_' + event, fn); }); } else { Ox.print(that.id, 'unbind', arguments[0]); - that.unbind('ox_' + arguments[0], eventCallback(arguments[1])); + self.$eventHandler.unbind('ox_' + arguments[0], arguments[1]); } return that; }; @@ -9832,12 +9829,12 @@ requires width: 0 }) .options(options || {}) - .addClass('OxEditor') - .css({ + .addClass('OxEditor'); + /*.css({ //height: self.options.height + 'px', overflowY: 'scroll', //width: self.options.width + 'px' - }); + });*/ $.extend(self, { $player: [], @@ -10050,9 +10047,11 @@ requires return position; } - function getSizes() { + function getSizes(scrollbarIsVisible) { + Ox.print('getSizes', scrollbarIsVisible) var scrollbarWidth = oxui.scrollbarSize, - contentWidth = self.options.width - scrollbarWidth, + contentWidth = self.options.width - (scrollbarIsVisible ? scrollbarWidth : 0), + lines, size = { player: [], timeline: [] @@ -10101,7 +10100,17 @@ requires top: size.timeline[0].top + size.timeline[0].height + self.margin, width: size.timeline[0].width } - return size; + lines = Math.ceil(self.options.duration / size.timeline[1].width); + Ox.print('lines', lines, getHeight(), self.options.height, (scrollbarIsVisible && getHeight() <= self.options.height) ? 'scroll' : 'auto') + that.css({ + overflowY: (scrollbarIsVisible && getHeight() <= self.options.height) ? 'scroll' : 'auto' + }); + return (!scrollbarIsVisible && getHeight() > self.options.height) ? getSizes(true) : size; + function getHeight() { + return size.player[0].height + self.controlsHeight + + size.timeline[0].height + lines * 16 + + (lines + 3) * self.margin; + } } function goToPoint(point) {