From c4413d9fd71fe810457f6b3fe32c4e6c1ccc8986 Mon Sep 17 00:00:00 2001 From: j Date: Tue, 15 Jun 2021 20:58:52 +0100 Subject: [PATCH 01/51] icon fallback --- source/UI/js/Core/UI.js | 1 + 1 file changed, 1 insertion(+) diff --git a/source/UI/js/Core/UI.js b/source/UI/js/Core/UI.js index 5875480f..00155a51 100644 --- a/source/UI/js/Core/UI.js +++ b/source/UI/js/Core/UI.js @@ -88,6 +88,7 @@ Ox.UI.getImageURL = Ox.cache(function(name, color, theme) { color = color || 'default'; theme = theme || Ox.Theme(); themeData = Ox.Theme.getThemeData(theme); + image = image || Ox.UI.IMAGES['symbolHelp'] if (type == 'symbol') { if (Ox.isString(color)) { colorName = color; From 03c2f9f3a1d3c66a35518b3f37b76d89c1fe2f8c Mon Sep 17 00:00:00 2001 From: j Date: Fri, 25 Jun 2021 19:58:37 +0100 Subject: [PATCH 02/51] Fix select file via MenuItem in Firefox instead of an inline FileButton, just use an unattached input element to trigger the select file dialog. --- source/UI/js/Menu/Menu.js | 8 ------ source/UI/js/Menu/MenuItem.js | 50 ++++++++++++++++++++++------------- 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/source/UI/js/Menu/Menu.js b/source/UI/js/Menu/Menu.js index d3f5f439..cb60f2d1 100644 --- a/source/UI/js/Menu/Menu.js +++ b/source/UI/js/Menu/Menu.js @@ -463,10 +463,6 @@ Ox.Menu = function(options, self) { item = that.items[self.options.selected]; if (item) { item.removeClass('OxSelected'); - if (item.options('file')) { - item.$button.blurButton(); - that.bindEvent({key_enter: clickSelectedItem}) - } } /* disabled that.triggerEvent('deselect', { @@ -485,10 +481,6 @@ Ox.Menu = function(options, self) { }); item.options('items').length && that.submenus[item.options('id')].showMenu(); item.addClass('OxSelected'); - if (item.options('file')) { - item.$button.focusButton(); - that.unbindEvent('key_enter'); - } that.triggerEvent('select', { id: item.options('id'), title: Ox.isString(item.options('title')[0]) diff --git a/source/UI/js/Menu/MenuItem.js b/source/UI/js/Menu/MenuItem.js index 43db8d45..8d8479e1 100644 --- a/source/UI/js/Menu/MenuItem.js +++ b/source/UI/js/Menu/MenuItem.js @@ -51,9 +51,6 @@ Ox.MenuItem = function(options, self) { that[ self.options.disabled ? 'addClass' : 'removeClass' ]('OxDisabled'); - self.options.file && that.$button.options({ - disabled: self.options.disabled - }); }, keyboard: function() { self.options.keyboard = parseKeyboard(self.options.keyboard); @@ -77,6 +74,27 @@ Ox.MenuItem = function(options, self) { self.options.checked = false; } + if (self.options.file) { + self.$input = $('') + .attr( + Ox.extend({ + type: 'file' + }, self.options.file.multiple ? { + multiple: true + } : {}) + ) + .on({ + change: function(event) { + var filelist = this.files + var files = []; + Ox.loop(filelist.length, function(i) { + files.push(filelist.item(i)); + }); + self.options.menu.clickItem(self.options.position, files); + } + }) + } + that.append( that.$status = Ox.$('') .addClass('OxCell OxStatus') @@ -104,21 +122,17 @@ Ox.MenuItem = function(options, self) { : {} ) .html( - self.options.file - ? that.$button = Ox.FileButton(Ox.extend({ - disabled: self.options.disabled, - title: self.options.title[0] - }, self.options.file)).bindEvent({ - click: function(data) { - self.options.menu.clickItem(self.options.position, data.files); - } - }) - : ( - Ox.isString(self.options.title[0]) - ? self.options.title[0] - : Ox.$('
').html(self.options.title[0]).html() - ) - ) + Ox.isString(self.options.title[0]) + ? self.options.title[0] + : Ox.$('
').html(self.options.title[0]).html() + ).on({ + click: self.options.file ? function(event) { + !self.options.disabled && self.$input.click() + event.preventDefault() + event.stopPropagation() + } : null + + }) ) .append( that.$modifiers = Ox.$('') From 1e0537c95feb6487ec51c1a7f8046c34cb438408 Mon Sep 17 00:00:00 2001 From: j Date: Wed, 4 Aug 2021 14:10:01 +0200 Subject: [PATCH 03/51] hide volume column for smart edits --- source/UI/js/Video/ClipPanel.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/source/UI/js/Video/ClipPanel.js b/source/UI/js/Video/ClipPanel.js index 275da1d9..ea9eb562 100644 --- a/source/UI/js/Video/ClipPanel.js +++ b/source/UI/js/Video/ClipPanel.js @@ -89,7 +89,7 @@ Ox.ClipPanel = function(options, self) { } }); - self.columns = [ + self.columns = [].concat([ { align: 'right', id: 'index', @@ -183,7 +183,9 @@ Ox.ClipPanel = function(options, self) { visible: true, width: 90 }, - { + ], + hasVolume() ? + [{ align: 'right', editable: self.options.editable, format: function(value, data) { @@ -198,6 +200,8 @@ Ox.ClipPanel = function(options, self) { visible: false, width: 45 }, + ] : [], + [ { addable: false, id: 'sort', @@ -205,7 +209,8 @@ Ox.ClipPanel = function(options, self) { // title: Ox._('Sort'), visible: false } - ]; + ] + ); self.$menubar = Ox.Bar({ size: 24 @@ -587,6 +592,12 @@ Ox.ClipPanel = function(options, self) { && self.options.sort[0].operator == '+'; } + function hasVolume() { + return self.options.editable + && self.options.sort && self.options.sort.length + && self.options.sort[0].key == 'index' + } + function joinClips() { var clips = getEditable(self.options.selected).map(function(id) { return Ox.clone(Ox.getObjectById(self.options.clips, id)); From fa936868457cf584e46af5bd2778a36cc967eb7b Mon Sep 17 00:00:00 2001 From: j Date: Wed, 4 Aug 2021 14:17:27 +0200 Subject: [PATCH 04/51] set inital volume --- source/UI/js/Video/VideoElement.js | 5 +++-- source/UI/js/Video/VideoPlayer.js | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/source/UI/js/Video/VideoElement.js b/source/UI/js/Video/VideoElement.js index 0e4e33a9..4df18fd9 100644 --- a/source/UI/js/Video/VideoElement.js +++ b/source/UI/js/Video/VideoElement.js @@ -32,7 +32,8 @@ Ox.VideoElement = function(options, self) { autoplay: false, loop: false, playbackRate: 1, - items: [] + items: [], + volume: 1 }) .options(options || {}) .update({ @@ -101,7 +102,7 @@ Ox.VideoElement = function(options, self) { self.$videos = [getVideo(), getVideo()]; self.$video = self.$videos[self.currentVideo]; self.video = self.$video[0]; - self.volume = 1; + self.volume = self.options.volume; self.$brightness = $('
').css({ width: '100%', height: '100%', diff --git a/source/UI/js/Video/VideoPlayer.js b/source/UI/js/Video/VideoPlayer.js index 36c2822b..005e831c 100644 --- a/source/UI/js/Video/VideoPlayer.js +++ b/source/UI/js/Video/VideoPlayer.js @@ -444,7 +444,8 @@ Ox.VideoPlayer = function(options, self) { self.$video = Ox.VideoElement({ items: self.video, loop: self.options.loop, - playbackRate: self.options.playbackRate + playbackRate: self.options.playbackRate, + volume: self.options.volume }) .bindEvent(Ox.extend({ durationchange: durationchange, From f4cafdfd7e77ea6333724e594f77fe8497a55329 Mon Sep 17 00:00:00 2001 From: j Date: Wed, 4 Aug 2021 14:42:10 +0200 Subject: [PATCH 05/51] fix muted state on load --- source/UI/js/Video/VideoElement.js | 12 ++++++++---- source/UI/js/Video/VideoPlayer.js | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/source/UI/js/Video/VideoElement.js b/source/UI/js/Video/VideoElement.js index 4df18fd9..64c5eaf6 100644 --- a/source/UI/js/Video/VideoElement.js +++ b/source/UI/js/Video/VideoElement.js @@ -31,6 +31,7 @@ Ox.VideoElement = function(options, self) { .defaults({ autoplay: false, loop: false, + muted: false, playbackRate: 1, items: [], volume: 1 @@ -103,6 +104,7 @@ Ox.VideoElement = function(options, self) { self.$video = self.$videos[self.currentVideo]; self.video = self.$video[0]; self.volume = self.options.volume; + self.muted = self.options.muted; self.$brightness = $('
').css({ width: '100%', height: '100%', @@ -332,7 +334,7 @@ Ox.VideoElement = function(options, self) { function setCurrentVideo(callback) { var css = {}, - muted = false, + muted = self.muted, item = self.items[self.currentItem], next; Ox.Log('Video', 'sCV', item); @@ -344,7 +346,6 @@ Ox.VideoElement = function(options, self) { if (self.video) { self.$videos[self.currentVideo].hide(); self.video.pause(); - muted = self.video.muted; } self.currentVideo = Ox.mod(self.currentVideo + 1, self.$videos.length); self.$video = self.$videos[self.currentVideo]; @@ -531,8 +532,11 @@ Ox.VideoElement = function(options, self) { /*@ muted get/set muted @*/ - that.muted = function() { - return getset('muted', arguments[0]); + that.muted = function(value) { + if (!Ox.isUndefined(value)) { + self.muted = value; + } + return getset('muted', value); }; /*@ diff --git a/source/UI/js/Video/VideoPlayer.js b/source/UI/js/Video/VideoPlayer.js index 005e831c..8df95916 100644 --- a/source/UI/js/Video/VideoPlayer.js +++ b/source/UI/js/Video/VideoPlayer.js @@ -444,6 +444,7 @@ Ox.VideoPlayer = function(options, self) { self.$video = Ox.VideoElement({ items: self.video, loop: self.options.loop, + muted: self.options.muted, playbackRate: self.options.playbackRate, volume: self.options.volume }) From 0a9685ee6d4a04943cba5f91e0ee12df93fb36ea Mon Sep 17 00:00:00 2001 From: j Date: Fri, 29 Oct 2021 22:17:28 +0100 Subject: [PATCH 06/51] add that.playInToOut to editor view --- source/UI/js/Video/VideoAnnotationPanel.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/UI/js/Video/VideoAnnotationPanel.js b/source/UI/js/Video/VideoAnnotationPanel.js index 639fa1fa..320d68d3 100644 --- a/source/UI/js/Video/VideoAnnotationPanel.js +++ b/source/UI/js/Video/VideoAnnotationPanel.js @@ -1744,6 +1744,9 @@ Ox.VideoAnnotationPanel = function(options, self) { self.$annotationPanel[i].removeItem(id); }; */ + that.playInToOut() { + self.$player[0].playInToOut(); + } return that; From 3fa1c5651027f163627a3addbaca923c38e14085 Mon Sep 17 00:00:00 2001 From: j Date: Fri, 29 Oct 2021 22:22:01 +0100 Subject: [PATCH 07/51] fix that.playInToOut --- source/UI/js/Video/VideoAnnotationPanel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/UI/js/Video/VideoAnnotationPanel.js b/source/UI/js/Video/VideoAnnotationPanel.js index 320d68d3..1e69262c 100644 --- a/source/UI/js/Video/VideoAnnotationPanel.js +++ b/source/UI/js/Video/VideoAnnotationPanel.js @@ -1744,7 +1744,7 @@ Ox.VideoAnnotationPanel = function(options, self) { self.$annotationPanel[i].removeItem(id); }; */ - that.playInToOut() { + that.playInToOut = function() { self.$player[0].playInToOut(); } From c76468004276b6e73b00614019a197819f6d7bf6 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 21 Nov 2021 11:57:20 +0100 Subject: [PATCH 08/51] tag video elements for inline play --- source/UI/js/Video/VideoElement.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/UI/js/Video/VideoElement.js b/source/UI/js/Video/VideoElement.js index 64c5eaf6..928580c1 100644 --- a/source/UI/js/Video/VideoElement.js +++ b/source/UI/js/Video/VideoElement.js @@ -205,6 +205,10 @@ Ox.VideoElement = function(options, self) { } else { video = document.createElement('video'); } + video.playsinline = true + video.setAttribute('playsinline', 'playsinline') + video.setAttribute('webkit-playsinline', 'webkit-playsinline') + video.WebKitPlaysInline = true return $(video); }; From a29d33e4b1de3f76f0dbba7846c6d5f1db96a714 Mon Sep 17 00:00:00 2001 From: j Date: Thu, 3 Mar 2022 12:45:40 +0000 Subject: [PATCH 09/51] add that.playInToOut to VideoPlayerPanel --- source/UI/js/Video/VideoPlayerPanel.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/UI/js/Video/VideoPlayerPanel.js b/source/UI/js/Video/VideoPlayerPanel.js index 1b376d81..a1908bcb 100644 --- a/source/UI/js/Video/VideoPlayerPanel.js +++ b/source/UI/js/Video/VideoPlayerPanel.js @@ -722,6 +722,10 @@ Ox.VideoPlayerPanel = function(options, self) { self.$videoPanel.toggleElement(1); }; + that.playInToOut = function() { + self.$video.playInToOut(); + }; + return that; } From 472bdc64ded2a76affa00c940546d06b57c69c10 Mon Sep 17 00:00:00 2001 From: j Date: Thu, 3 Mar 2022 12:47:22 +0000 Subject: [PATCH 10/51] pass enableSubtitles to players --- source/UI/js/Video/VideoAnnotationPanel.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/UI/js/Video/VideoAnnotationPanel.js b/source/UI/js/Video/VideoAnnotationPanel.js index 1e69262c..04d7ce03 100644 --- a/source/UI/js/Video/VideoAnnotationPanel.js +++ b/source/UI/js/Video/VideoAnnotationPanel.js @@ -109,6 +109,11 @@ Ox.VideoAnnotationPanel = function(options, self) { }) .options(options || {}) .update({ + enableSubtitles: function() { + self.$player.forEach(function($player) { + $player.options('enableSubtitles', self.options.enableSubtitles); + }); + }, height: setSizes, 'in': function() { setPoint('in', self.options['in']); From 48b2c1f2bac6c487a06d7ebff1dd116a688de061 Mon Sep 17 00:00:00 2001 From: j Date: Tue, 15 Nov 2022 14:36:06 +0100 Subject: [PATCH 11/51] don't fail if value is not yet a string --- source/Ox/js/Encoding.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Ox/js/Encoding.js b/source/Ox/js/Encoding.js index 697f45e3..974108ac 100644 --- a/source/Ox/js/Encoding.js +++ b/source/Ox/js/Encoding.js @@ -244,7 +244,7 @@ Ox.decodeDeflate = function(string, callback) { (function() { function replace(string) { - return string.replace(/%(?![0-9A-Fa-f]{2})/g, '%25') + return string.toString().replace(/%(?![0-9A-Fa-f]{2})/g, '%25') .replace(/(%[0-9A-Fa-f]{2})+/g, function(match) { var hex = match.split('%').slice(1), ret; Ox.forEach(Ox.range(1, hex.length + 1), function(length) { From 0396aa0679b54c0e5a5361a2656b0e44aee8bd6f Mon Sep 17 00:00:00 2001 From: j Date: Thu, 27 Apr 2023 10:54:12 +0200 Subject: [PATCH 12/51] google triggers map changed but does not return bounds if map was never visible --- source/UI/js/Map/Map.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/UI/js/Map/Map.js b/source/UI/js/Map/Map.js index 70a54676..9f5c4392 100644 --- a/source/UI/js/Map/Map.js +++ b/source/UI/js/Map/Map.js @@ -922,8 +922,12 @@ Ox.Map = function(options, self) { // This is the handler that actually adds the places to the map. // Gets called after panning or zooming, and when the map is idle. if (self.boundsChanged) { - var bounds = self.map.getBounds(), - southWest = bounds.getSouthWest(), + var bounds = self.map.getBounds() + if (!bounds) { + self.boundsChanged = false; + return + } + var southWest = bounds.getSouthWest(), northEast = bounds.getNorthEast(), south = southWest.lat(), west = southWest.lng(), From 09bc78ec0233fb6a39f70ad3a8e292e3c5262be9 Mon Sep 17 00:00:00 2001 From: j Date: Thu, 11 May 2023 11:01:45 +0100 Subject: [PATCH 13/51] make sure items is defined --- source/UI/js/Menu/Menu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/UI/js/Menu/Menu.js b/source/UI/js/Menu/Menu.js index cb60f2d1..dafa3aab 100644 --- a/source/UI/js/Menu/Menu.js +++ b/source/UI/js/Menu/Menu.js @@ -306,7 +306,7 @@ Ox.Menu = function(options, self) { self.optionGroup = {}; self.optionGroupOffset = {}; items.forEach(function(item, i) { - if (item.group) { + if (item.group && item.items) { items[i] = item.items.map(function(v) { return Ox.extend(v, { group: item.group From 6c72d16244dbc86ea6b95626b6498474d6422ee7 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 11 Jun 2023 22:54:34 +0100 Subject: [PATCH 14/51] IRC->Matrix --- readme/index/development.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme/index/development.html b/readme/index/development.html index b5decde4..e08b40ef 100644 --- a/readme/index/development.html +++ b/readme/index/development.html @@ -10,7 +10,7 @@

E-mail:  oxjs@oxjs.org

-

IRC:  irc.freenode.net#oxjs

+

Matrix:  #oxjs:matrix.org

Twitter:  @OxJS

From 7601eeb28a1704d750d2398e018d08ab561009f7 Mon Sep 17 00:00:00 2001 From: j Date: Sat, 24 Jun 2023 16:09:32 +0530 Subject: [PATCH 15/51] fall back to mapPlaceFeatureColor if type does not have a color --- source/UI/js/Map/MapMarker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/UI/js/Map/MapMarker.js b/source/UI/js/Map/MapMarker.js index b126a30a..10eb69eb 100644 --- a/source/UI/js/Map/MapMarker.js +++ b/source/UI/js/Map/MapMarker.js @@ -212,7 +212,7 @@ Ox.MapMarker = function(options) { size = that.map.options('markerSize'); //Ox.Log('Map', 'setOptions, that.map: ', that.map) if (color == 'auto') { - that.color = typeColor[that.place.type]; + that.color = typeColor[that.place.type] || typeColor['mapPlaceFeatureColor']; } else if (Ox.isArray(color)) { that.color = color; } else { From 9b5bb2cd06115d431c6cd459eb6034108db0d98b Mon Sep 17 00:00:00 2001 From: j Date: Fri, 30 Jun 2023 15:45:03 +0530 Subject: [PATCH 16/51] fix setting place to null --- source/UI/js/Map/MapEditor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/UI/js/Map/MapEditor.js b/source/UI/js/Map/MapEditor.js index 1b358d7f..64b36988 100644 --- a/source/UI/js/Map/MapEditor.js +++ b/source/UI/js/Map/MapEditor.js @@ -1041,7 +1041,7 @@ Ox.MapEditor = function(options, self) { var isResult = place && place.id[0] == '_', isUndefined = !!self.options.selected && !self.$list.value(self.options.selected, 'type'); - self.selectedPlace = place.id || ''; + self.selectedPlace = place && place.id ? place.id : ''; if (isResult && isUndefined) { Ox.print('place.id', place.id, 'self.options.selected', self.options.selected, 'type', self.$list.value(self.options.selected)); // define undefined place From 0dfed9de74008e7cfc5d2e40f75f2af753e44d7a Mon Sep 17 00:00:00 2001 From: j Date: Fri, 30 Jun 2023 15:56:41 +0530 Subject: [PATCH 17/51] no annotations --- source/UI/js/Video/VideoPlayerPanel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/UI/js/Video/VideoPlayerPanel.js b/source/UI/js/Video/VideoPlayerPanel.js index a1908bcb..336277e4 100644 --- a/source/UI/js/Video/VideoPlayerPanel.js +++ b/source/UI/js/Video/VideoPlayerPanel.js @@ -478,7 +478,7 @@ Ox.VideoPlayerPanel = function(options, self) { } function getAnnotations() { - return Ox.flatten(self.options.layers.map(function(layer) { + return !self.options.layers ? [] : Ox.flatten(self.options.layers.map(function(layer) { return layer.items.map(function(item) { return {id: item.id, 'in': item['in'], out: item.out, text: item.value}; }); From 543045ae6c7dffe7b0ad567a385a5d235b9aa9e5 Mon Sep 17 00:00:00 2001 From: j Date: Fri, 30 Jun 2023 15:56:59 +0530 Subject: [PATCH 18/51] no chapters --- source/UI/js/Video/VideoPlayer.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/source/UI/js/Video/VideoPlayer.js b/source/UI/js/Video/VideoPlayer.js index 8df95916..9a15bcf4 100644 --- a/source/UI/js/Video/VideoPlayer.js +++ b/source/UI/js/Video/VideoPlayer.js @@ -1794,20 +1794,22 @@ Ox.VideoPlayer = function(options, self) { function goToNext(type, direction) { // type can be 'chapter' or 'result' var position, positions; - if (type == 'chapter') { + if (type == 'chapter' && self.options.chapters) { positions = self.options.chapters.map(function(chapter) { return chapter.position; }); - } else if (type == 'result') { + } else if (type == 'result' && self.results) { positions = Ox.unique(self.results.map(function(result) { return result['in']; })); } - position = Ox.nextValue(positions, self.options.position, direction); - setPosition(position); - that.triggerEvent('position', { - position: self.options.position - }); + if (positions) { + position = Ox.nextValue(positions, self.options.position, direction); + setPosition(position); + that.triggerEvent('position', { + position: self.options.position + }); + } } function goToPoint() { From 54aac5071f6ae52a2afc5cb99499055bcc2b5f4c Mon Sep 17 00:00:00 2001 From: j Date: Sun, 2 Jul 2023 18:06:41 +0530 Subject: [PATCH 19/51] update ticket links, closes #358 --- readme/index/development.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme/index/development.html b/readme/index/development.html index e08b40ef..58d32665 100644 --- a/readme/index/development.html +++ b/readme/index/development.html @@ -1,10 +1,10 @@

Development

-

Source code:  trac.oxjs.org/browser

+

Source code:  code.0x2620.org/browser

-

Open issues:  trac.oxjs.org/report

+

Open issues:  https://code.0x2620.org/0x2620/oxjs/issues

-

Bug reports and feature requests:  trac.oxjs.org/newticket

+

Bug reports and feature requests:  https://code.0x2620.org/0x2620/oxjs/issues/new

Mailing list:  mailb.org/cgi-bin/mailman/listinfo/oxjs-dev

From 18d619138f98a72a4913aa87520e6ccbaeb806dc Mon Sep 17 00:00:00 2001 From: j Date: Sun, 2 Jul 2023 18:09:57 +0530 Subject: [PATCH 20/51] don't list https:// --- readme/index/development.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme/index/development.html b/readme/index/development.html index 58d32665..042fe6e9 100644 --- a/readme/index/development.html +++ b/readme/index/development.html @@ -2,9 +2,9 @@

Source code:  code.0x2620.org/browser

-

Open issues:  https://code.0x2620.org/0x2620/oxjs/issues

+

Open issues:  code.0x2620.org/0x2620/oxjs/issues

-

Bug reports and feature requests:  https://code.0x2620.org/0x2620/oxjs/issues/new

+

Bug reports and feature requests:  code.0x2620.org/0x2620/oxjs/issues/new

Mailing list:  mailb.org/cgi-bin/mailman/listinfo/oxjs-dev

From b0c0bd36be3b858ec5826dd3b0e27013d2f08b48 Mon Sep 17 00:00:00 2001 From: j Date: Mon, 3 Jul 2023 19:01:15 +0530 Subject: [PATCH 21/51] include viewbox in svg files. remove temp fix --- source/UI/svg/markerChapter.svg | 2 +- source/UI/svg/markerCut.svg | 2 +- source/UI/svg/markerIn.svg | 2 +- source/UI/svg/markerInBottom.svg | 2 +- source/UI/svg/markerInTop.svg | 2 +- source/UI/svg/markerOut.svg | 2 +- source/UI/svg/markerOutBottom.svg | 2 +- source/UI/svg/markerOutTop.svg | 2 +- source/UI/svg/markerPosition.svg | 2 +- source/UI/svg/symbolAdd.svg | 2 +- source/UI/svg/symbolArrowDown.svg | 2 +- source/UI/svg/symbolArrowLeft.svg | 2 +- source/UI/svg/symbolArrowRight.svg | 2 +- source/UI/svg/symbolArrowUp.svg | 2 +- source/UI/svg/symbolAudio.svg | 2 +- source/UI/svg/symbolBook.svg | 2 +- source/UI/svg/symbolBookmark.svg | 2 +- source/UI/svg/symbolBracket.svg | 2 +- source/UI/svg/symbolCenter.svg | 2 +- source/UI/svg/symbolChat.svg | 2 +- source/UI/svg/symbolCheck.svg | 2 +- source/UI/svg/symbolCircle.svg | 2 +- source/UI/svg/symbolClick.svg | 2 +- source/UI/svg/symbolClock.svg | 2 +- source/UI/svg/symbolClose.svg | 2 +- source/UI/svg/symbolColumns.svg | 2 +- source/UI/svg/symbolCopyright.svg | 2 +- source/UI/svg/symbolData.svg | 2 +- source/UI/svg/symbolDelete.svg | 2 +- source/UI/svg/symbolDirectory.svg | 2 +- source/UI/svg/symbolDown.svg | 2 +- source/UI/svg/symbolDownload.svg | 2 +- source/UI/svg/symbolEdit.svg | 2 +- source/UI/svg/symbolEmbed.svg | 2 +- source/UI/svg/symbolEqual.svg | 2 +- source/UI/svg/symbolFile.svg | 2 +- source/UI/svg/symbolFiles.svg | 2 +- source/UI/svg/symbolFill.svg | 2 +- source/UI/svg/symbolFind.svg | 2 +- source/UI/svg/symbolFit.svg | 2 +- source/UI/svg/symbolFlag.svg | 2 +- source/UI/svg/symbolFocus.svg | 2 +- source/UI/svg/symbolGoToIn.svg | 2 +- source/UI/svg/symbolGoToOut.svg | 2 +- source/UI/svg/symbolGoToPoster.svg | 2 +- source/UI/svg/symbolGrid.svg | 2 +- source/UI/svg/symbolGridLandscape.svg | 2 +- source/UI/svg/symbolGridLandscapePortrait.svg | 2 +- source/UI/svg/symbolGridPortrait.svg | 2 +- source/UI/svg/symbolGridPortraitLandscape.svg | 2 +- source/UI/svg/symbolGrow.svg | 2 +- source/UI/svg/symbolHelp.svg | 2 +- source/UI/svg/symbolHome.svg | 2 +- source/UI/svg/symbolIcon.svg | 2 +- source/UI/svg/symbolIconlist.svg | 2 +- source/UI/svg/symbolIconlistLandscape.svg | 2 +- source/UI/svg/symbolIconlistPortrait.svg | 2 +- source/UI/svg/symbolInfo.svg | 2 +- source/UI/svg/symbolLeft.svg | 2 +- source/UI/svg/symbolLike.svg | 2 +- source/UI/svg/symbolList.svg | 2 +- source/UI/svg/symbolLoading.svg | 2 +- source/UI/svg/symbolLoadingAnimated.svg | 2 +- source/UI/svg/symbolLocate.svg | 2 +- source/UI/svg/symbolLock.svg | 2 +- source/UI/svg/symbolMail.svg | 2 +- source/UI/svg/symbolMap.svg | 2 +- source/UI/svg/symbolMount.svg | 2 +- source/UI/svg/symbolMute.svg | 2 +- source/UI/svg/symbolNoCopyright.svg | 2 +- source/UI/svg/symbolNone.svg | 2 +- source/UI/svg/symbolOpen.svg | 2 +- source/UI/svg/symbolPause.svg | 2 +- source/UI/svg/symbolPlay.svg | 2 +- source/UI/svg/symbolPlayInToOut.svg | 2 +- source/UI/svg/symbolPlayNext.svg | 2 +- source/UI/svg/symbolPlayPrevious.svg | 2 +- source/UI/svg/symbolPlaylist.svg | 2 +- source/UI/svg/symbolPublish.svg | 2 +- source/UI/svg/symbolRecord.svg | 2 +- source/UI/svg/symbolRedo.svg | 2 +- source/UI/svg/symbolRemove.svg | 2 +- source/UI/svg/symbolRepeatAll.svg | 2 +- source/UI/svg/symbolRepeatNone.svg | 2 +- source/UI/svg/symbolRepeatOne.svg | 2 +- source/UI/svg/symbolRight.svg | 2 +- source/UI/svg/symbolSelect.svg | 2 +- source/UI/svg/symbolSet.svg | 2 +- source/UI/svg/symbolSetIn.svg | 2 +- source/UI/svg/symbolSetOut.svg | 2 +- source/UI/svg/symbolSetPoster.svg | 2 +- source/UI/svg/symbolShrink.svg | 2 +- source/UI/svg/symbolShuffleAll.svg | 2 +- source/UI/svg/symbolShuffleNone.svg | 2 +- source/UI/svg/symbolSquare.svg | 2 +- source/UI/svg/symbolStar.svg | 2 +- source/UI/svg/symbolSwitch.svg | 2 +- source/UI/svg/symbolSync.svg | 2 +- source/UI/svg/symbolTag.svg | 2 +- source/UI/svg/symbolUndo.svg | 2 +- source/UI/svg/symbolUnlock.svg | 2 +- source/UI/svg/symbolUnmount.svg | 2 +- source/UI/svg/symbolUnmute.svg | 2 +- source/UI/svg/symbolUp.svg | 2 +- source/UI/svg/symbolUpload.svg | 2 +- source/UI/svg/symbolUser.svg | 2 +- source/UI/svg/symbolVideo.svg | 2 +- source/UI/svg/symbolView.svg | 2 +- source/UI/svg/symbolVolume.svg | 2 +- source/UI/svg/symbolVolumeDown.svg | 2 +- source/UI/svg/symbolVolumeUp.svg | 2 +- source/UI/svg/symbolWarning.svg | 2 +- tools/build/build.py | 2 -- 113 files changed, 112 insertions(+), 114 deletions(-) diff --git a/source/UI/svg/markerChapter.svg b/source/UI/svg/markerChapter.svg index a967b034..77c27515 100644 --- a/source/UI/svg/markerChapter.svg +++ b/source/UI/svg/markerChapter.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/markerCut.svg b/source/UI/svg/markerCut.svg index 76c0f8a2..0c6ac903 100644 --- a/source/UI/svg/markerCut.svg +++ b/source/UI/svg/markerCut.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/markerIn.svg b/source/UI/svg/markerIn.svg index 96874286..31e0a2f6 100644 --- a/source/UI/svg/markerIn.svg +++ b/source/UI/svg/markerIn.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/markerInBottom.svg b/source/UI/svg/markerInBottom.svg index 89eab297..9480df8f 100644 --- a/source/UI/svg/markerInBottom.svg +++ b/source/UI/svg/markerInBottom.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/markerInTop.svg b/source/UI/svg/markerInTop.svg index 65a50933..97ee7702 100644 --- a/source/UI/svg/markerInTop.svg +++ b/source/UI/svg/markerInTop.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/markerOut.svg b/source/UI/svg/markerOut.svg index c0b4a027..693abd25 100644 --- a/source/UI/svg/markerOut.svg +++ b/source/UI/svg/markerOut.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/markerOutBottom.svg b/source/UI/svg/markerOutBottom.svg index 6dd8cbb4..e2148e0f 100644 --- a/source/UI/svg/markerOutBottom.svg +++ b/source/UI/svg/markerOutBottom.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/markerOutTop.svg b/source/UI/svg/markerOutTop.svg index bae71347..5553753a 100644 --- a/source/UI/svg/markerOutTop.svg +++ b/source/UI/svg/markerOutTop.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/markerPosition.svg b/source/UI/svg/markerPosition.svg index 603ab190..cc06236b 100644 --- a/source/UI/svg/markerPosition.svg +++ b/source/UI/svg/markerPosition.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolAdd.svg b/source/UI/svg/symbolAdd.svg index 8cd3cbed..4cc62414 100644 --- a/source/UI/svg/symbolAdd.svg +++ b/source/UI/svg/symbolAdd.svg @@ -1,4 +1,4 @@ - + diff --git a/source/UI/svg/symbolArrowDown.svg b/source/UI/svg/symbolArrowDown.svg index e674cbbf..6ff4944d 100644 --- a/source/UI/svg/symbolArrowDown.svg +++ b/source/UI/svg/symbolArrowDown.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolArrowLeft.svg b/source/UI/svg/symbolArrowLeft.svg index 7364c468..2c753ba5 100644 --- a/source/UI/svg/symbolArrowLeft.svg +++ b/source/UI/svg/symbolArrowLeft.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolArrowRight.svg b/source/UI/svg/symbolArrowRight.svg index addc47a5..c92da4e9 100644 --- a/source/UI/svg/symbolArrowRight.svg +++ b/source/UI/svg/symbolArrowRight.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolArrowUp.svg b/source/UI/svg/symbolArrowUp.svg index c84376c5..6d43f62d 100644 --- a/source/UI/svg/symbolArrowUp.svg +++ b/source/UI/svg/symbolArrowUp.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolAudio.svg b/source/UI/svg/symbolAudio.svg index 637bbb69..576f8ecb 100644 --- a/source/UI/svg/symbolAudio.svg +++ b/source/UI/svg/symbolAudio.svg @@ -1,4 +1,4 @@ - + diff --git a/source/UI/svg/symbolBook.svg b/source/UI/svg/symbolBook.svg index 6dfa6a68..573a23d4 100644 --- a/source/UI/svg/symbolBook.svg +++ b/source/UI/svg/symbolBook.svg @@ -1,4 +1,4 @@ - + diff --git a/source/UI/svg/symbolBookmark.svg b/source/UI/svg/symbolBookmark.svg index 19051857..28963fca 100644 --- a/source/UI/svg/symbolBookmark.svg +++ b/source/UI/svg/symbolBookmark.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolBracket.svg b/source/UI/svg/symbolBracket.svg index 8e069e36..10878007 100644 --- a/source/UI/svg/symbolBracket.svg +++ b/source/UI/svg/symbolBracket.svg @@ -1,4 +1,4 @@ - + diff --git a/source/UI/svg/symbolShuffleNone.svg b/source/UI/svg/symbolShuffleNone.svg index 83a2a741..592ab44b 100644 --- a/source/UI/svg/symbolShuffleNone.svg +++ b/source/UI/svg/symbolShuffleNone.svg @@ -1,4 +1,4 @@ - + diff --git a/source/UI/svg/symbolSquare.svg b/source/UI/svg/symbolSquare.svg index 3416a361..3e7a6e50 100644 --- a/source/UI/svg/symbolSquare.svg +++ b/source/UI/svg/symbolSquare.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolStar.svg b/source/UI/svg/symbolStar.svg index a592364c..f5138dbd 100644 --- a/source/UI/svg/symbolStar.svg +++ b/source/UI/svg/symbolStar.svg @@ -1,3 +1,3 @@ - + diff --git a/source/UI/svg/symbolSwitch.svg b/source/UI/svg/symbolSwitch.svg index c8e1ec57..798b6da9 100644 --- a/source/UI/svg/symbolSwitch.svg +++ b/source/UI/svg/symbolSwitch.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolSync.svg b/source/UI/svg/symbolSync.svg index b36dcd4f..a7cf0833 100644 --- a/source/UI/svg/symbolSync.svg +++ b/source/UI/svg/symbolSync.svg @@ -1,4 +1,4 @@ - + diff --git a/source/UI/svg/symbolTag.svg b/source/UI/svg/symbolTag.svg index 706096a8..42203f1e 100644 --- a/source/UI/svg/symbolTag.svg +++ b/source/UI/svg/symbolTag.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolUndo.svg b/source/UI/svg/symbolUndo.svg index bb513c58..8e8bc87c 100644 --- a/source/UI/svg/symbolUndo.svg +++ b/source/UI/svg/symbolUndo.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolUnlock.svg b/source/UI/svg/symbolUnlock.svg index 6084b703..1f2007e8 100644 --- a/source/UI/svg/symbolUnlock.svg +++ b/source/UI/svg/symbolUnlock.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolUnmount.svg b/source/UI/svg/symbolUnmount.svg index ed6cfd09..10f263d2 100644 --- a/source/UI/svg/symbolUnmount.svg +++ b/source/UI/svg/symbolUnmount.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolUnmute.svg b/source/UI/svg/symbolUnmute.svg index ea571ace..658e7e3f 100644 --- a/source/UI/svg/symbolUnmute.svg +++ b/source/UI/svg/symbolUnmute.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolUp.svg b/source/UI/svg/symbolUp.svg index 98f2dec7..c117d311 100644 --- a/source/UI/svg/symbolUp.svg +++ b/source/UI/svg/symbolUp.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolUpload.svg b/source/UI/svg/symbolUpload.svg index 1022502d..e67196ac 100644 --- a/source/UI/svg/symbolUpload.svg +++ b/source/UI/svg/symbolUpload.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolUser.svg b/source/UI/svg/symbolUser.svg index b58c0d39..59ca035c 100644 --- a/source/UI/svg/symbolUser.svg +++ b/source/UI/svg/symbolUser.svg @@ -1,4 +1,4 @@ - + diff --git a/source/UI/svg/symbolVideo.svg b/source/UI/svg/symbolVideo.svg index 3dd2c89e..ee4d575f 100644 --- a/source/UI/svg/symbolVideo.svg +++ b/source/UI/svg/symbolVideo.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolView.svg b/source/UI/svg/symbolView.svg index cc915fd2..4ba47325 100644 --- a/source/UI/svg/symbolView.svg +++ b/source/UI/svg/symbolView.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/source/UI/svg/symbolVolume.svg b/source/UI/svg/symbolVolume.svg index 1b62112c..9c6e9695 100644 --- a/source/UI/svg/symbolVolume.svg +++ b/source/UI/svg/symbolVolume.svg @@ -1,4 +1,4 @@ - + diff --git a/source/UI/svg/symbolVolumeDown.svg b/source/UI/svg/symbolVolumeDown.svg index f5e502e8..5a3cdd1e 100644 --- a/source/UI/svg/symbolVolumeDown.svg +++ b/source/UI/svg/symbolVolumeDown.svg @@ -1,4 +1,4 @@ - + diff --git a/source/UI/svg/symbolVolumeUp.svg b/source/UI/svg/symbolVolumeUp.svg index 5f30b377..522a2604 100644 --- a/source/UI/svg/symbolVolumeUp.svg +++ b/source/UI/svg/symbolVolumeUp.svg @@ -1,4 +1,4 @@ - + diff --git a/source/UI/svg/symbolWarning.svg b/source/UI/svg/symbolWarning.svg index 4226321e..3a982ab9 100644 --- a/source/UI/svg/symbolWarning.svg +++ b/source/UI/svg/symbolWarning.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/tools/build/build.py b/tools/build/build.py index 0b05a9f9..8accbd3d 100755 --- a/tools/build/build.py +++ b/tools/build/build.py @@ -82,8 +82,6 @@ def build_oxjs(downloads=False, geo=False): svg = read_text(path + filename) svg = re.sub('\n\s*', '', svg) svg = re.sub('', '', svg) - # temporary fix for Chrome SVG bug, remove later! - svg = re.sub('width="256" height="256"', 'width="10" height="10" viewBox="0 0 255 255"', svg) # end fix ui_images[filename[:-4]] = svg if filename.startswith('symbolLoading'): From b7c201a74f7ed959fb57c1740156ac8d400a1a5d Mon Sep 17 00:00:00 2001 From: j Date: Thu, 6 Jul 2023 11:52:36 +0530 Subject: [PATCH 22/51] handle type ["integer"] in url and fix inbetween vs ["integer"] filter --- source/UI/js/Core/URL.js | 12 +++++++++--- source/UI/js/Form/Filter.js | 39 ++++++++++++++++++++++--------------- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/source/UI/js/Core/URL.js b/source/UI/js/Core/URL.js index f411d692..14890354 100644 --- a/source/UI/js/Core/URL.js +++ b/source/UI/js/Core/URL.js @@ -683,15 +683,21 @@ Ox.URL = function(options) { condition.operator = condition.operator.replace('=', '^') } } + var key = Ox.getObjectById(self.options.findKeys[state.type], condition.key) if ( - ['date', 'enum', 'float', 'integer', 'time', 'year'].indexOf( - Ox.getObjectById(self.options.findKeys[state.type], condition.key).type - ) > -1 + ['date', 'enum', 'float', 'integer', 'time', 'year'].indexOf(key.type) > -1 && condition.value.indexOf(',') > -1 ) { condition.value = condition.value.split(',').map(function(value) { return parseValue(decodeValue(value), condition.key, state); }); + } else if (Ox.isArray(key.type) && key.type[0] == "integer" && condition.value.indexOf(',') > -1) { + condition.value = condition.value.split(',').map(function(value) { + return parseValue(decodeValue(value), condition.key, state); + }); + if (condition.value.length == 4) { + condition.value = [condition.value.slice(0,2), condition.value.slice(2)] + } } else { condition.value = parseValue(decodeValue(condition.value), condition.key, state); } diff --git a/source/UI/js/Form/Filter.js b/source/UI/js/Form/Filter.js index 1ad8fa25..3a0f6814 100644 --- a/source/UI/js/Form/Filter.js +++ b/source/UI/js/Form/Filter.js @@ -355,6 +355,13 @@ Ox.Filter = function(options, self) { } } + function isBetweenCondition(condition) { + if (condition.key == "resolution") { + return Ox.isArray(condition.value) && Ox.isArray(condition.value[0]) + } + return Ox.isArray(condition.value) + } + function changeConditionOperator(pos, subpos, operator) { subpos = Ox.isUndefined(subpos) ? -1 : subpos; Ox.Log('FILTER', 'chCoOp', 'query', self.options.value) @@ -362,7 +369,7 @@ Ox.Filter = function(options, self) { ? self.options.value.conditions[pos] : self.options.value.conditions[pos].conditions[subpos], isBetween = operator.indexOf(',') > -1, - wasBetween = Ox.isArray(condition.value), + wasBetween = isBetweenCondition(condition), wasUselessCondition = isUselessCondition(pos, subpos); Ox.Log('FILTER', 'chCoOp', 'iB/wB', isBetween, wasBetween) condition.operator = operator; @@ -577,7 +584,7 @@ Ox.Filter = function(options, self) { Ox.getObjectById(self.options.findKeys, condition.key).type )], overlap: 'right', - value: condition.operator + (Ox.isArray(condition.value) ? ',' : ''), + value: condition.operator + (isBetweenCondition(condition) ? ',' : ''), width: 128 }) .bindEvent({ @@ -593,7 +600,7 @@ Ox.Filter = function(options, self) { } function renderConditionValue(condition) { - return (!Ox.isArray(condition.value) + return (!isBetweenCondition(condition) ? renderInput(condition) : Ox.InputGroup({ inputs: [ @@ -699,11 +706,11 @@ Ox.Filter = function(options, self) { Ox.Log('Form', 'renderInput', condition) var $input, findKey = Ox.getObjectById(self.options.findKeys, condition.key), - isArray = Ox.isArray(condition.value), + isBetween = isBetweenCondition(condition), isHue, // FIXME: always use 'int' type = findKey.type == 'integer' ? 'int' : findKey.type, - value = !isArray ? condition.value : condition.value[index], + value = !isBetween ? condition.value : condition.value[index], formatArgs, formatType, title; if (type == 'boolean') { $input = Ox.Select({ @@ -720,7 +727,7 @@ Ox.Filter = function(options, self) { return {id: i, title: v} }), value: value, - width: !isArray ? 288 : 128 + width: !isBetween ? 288 : 128 }); } else if (type == 'item') { $input = Ox.Select({ @@ -747,8 +754,8 @@ Ox.Filter = function(options, self) { $input = Ox.Range({ max: isHue ? 360 : 1, min: 0, - size: !isArray ? 288 : 128, // fixme: should be width! - width: !isArray ? 288 : 128, // have to set this too, for formatting when tuple + size: !isBetween ? 288 : 128, // fixme: should be width! + width: !isBetween ? 288 : 128, // have to set this too, for formatting when tuple step: isHue ? 1 : 0.01, thumbSize: 48, thumbValue: true, @@ -761,7 +768,7 @@ Ox.Filter = function(options, self) { value: value }); } else if (formatType == 'date') { - $input = Ox.DateInput(!isArray ? { + $input = Ox.DateInput(!isBetween ? { value: value, width: {day: 66, month: 66, year: 140} } : { @@ -769,7 +776,7 @@ Ox.Filter = function(options, self) { width: {day: 32, month: 32, year: 48} }); } else if (formatType == 'duration') { - $input = Ox.TimeInput(!isArray ? { + $input = Ox.TimeInput(!isBetween ? { seconds: true, value: value, width: {hours: 91, minutes: 91, seconds: 90} @@ -796,16 +803,16 @@ Ox.Filter = function(options, self) { Ox.Input({ id: 'width', type: 'int', - value: value + value: value[0] }), Ox.Input({ id: 'height', type: 'int', - value: value + value: value[1] }) ], separators: [{title: 'x', width: 16}], - width: !isArray ? 288 : 128 + width: !isBetween ? 288 : 128 }) } else if ([ 'currency', 'percent', 'unit', 'value' @@ -816,7 +823,7 @@ Ox.Filter = function(options, self) { Ox.Input({ type: type, value: value, - width: !isArray ? 242 : 80 + width: !isBetween ? 242 : 80 }), formatType == 'value' ? Ox.Select({ overlap: 'left', @@ -840,7 +847,7 @@ Ox.Filter = function(options, self) { split: function(value) { }, - width: !isArray ? 288 : 128 + width: !isBetween ? 288 : 128 }) } } else { @@ -850,7 +857,7 @@ Ox.Filter = function(options, self) { autocomplete: findKey.autocomplete, autocompleteSelect: true, autocompleteSelectSubmit: true, - width: !isArray ? 288 : 128 + width: !isBetween ? 288 : 128 }); } return $input; From eeb0b68037384bb54394c3cd2e79c1a8c764d1be Mon Sep 17 00:00:00 2001 From: j Date: Thu, 6 Jul 2023 14:13:55 +0530 Subject: [PATCH 23/51] advanced interface can contain places, fallback to string type --- source/UI/js/Form/Filter.js | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/source/UI/js/Form/Filter.js b/source/UI/js/Form/Filter.js index 3a0f6814..f3215ffe 100644 --- a/source/UI/js/Form/Filter.js +++ b/source/UI/js/Form/Filter.js @@ -87,6 +87,16 @@ Ox.Filter = function(options, self) { {id: '=,', title: Ox._('is between')}, {id: '!=,', title: Ox._('is not between')} ], + place: [ + {id: '==', title: Ox._('is')}, + {id: '!==', title: Ox._('is not')}, + {id: '=', title: Ox._('contains')}, + {id: '!=', title: Ox._('does not contain')}, + {id: '^', title: Ox._('starts with')}, + {id: '!^', title: Ox._('does not start with')}, + {id: '$', title: Ox._('ends with')}, + {id: '!$', title: Ox._('does not end with')} + ], string: [ {id: '==', title: Ox._('is')}, {id: '!==', title: Ox._('is not')}, @@ -121,6 +131,7 @@ Ox.Filter = function(options, self) { integer: 0, item: void 0, list: '', + place: '', string: '', text: '', time: '00:00:00', @@ -300,7 +311,7 @@ Ox.Filter = function(options, self) { condition = { key: key.id, operator: condition.operator, - value: self.defaultValue[key.type] + value: self.defaultValue[key.type] || '' }; if (isGroup) { Ox.Log('Form', 'isGroup', self.options.value.operator) @@ -346,7 +357,7 @@ Ox.Filter = function(options, self) { ) { condition.value = newFindKey.type == 'item' ? newFindKey.values[0].id - : self.defaultValue[newFindKey.type]; + : (self.defaultValue[newFindKey.type] || ''); } renderConditions(); } @@ -576,13 +587,12 @@ Ox.Filter = function(options, self) { } function renderConditionOperator(condition) { - Ox.Log('FILTER', 'rCO', condition, self.conditionOperators[getConditionType( - Ox.getObjectById(self.options.findKeys, condition.key).type - )]) + var key = Ox.getObjectById(self.options.findKeys, condition.key), + conditionType = getConditionType(key.type), + conditionOperators = self.conditionOperators[conditionType] || self.conditionOperators["string"]; + Ox.Log('FILTER', 'rCO', condition, conditionType, conditionOperators) return Ox.Select({ - items: self.conditionOperators[getConditionType( - Ox.getObjectById(self.options.findKeys, condition.key).type - )], + items: conditionOperators, overlap: 'right', value: condition.operator + (isBetweenCondition(condition) ? ',' : ''), width: 128 From 8a374360fafd97af2da743c79a9a41743b97baeb Mon Sep 17 00:00:00 2001 From: j Date: Sat, 8 Jul 2023 18:52:05 +0530 Subject: [PATCH 24/51] trigger change on automplete input event --- source/UI/js/Form/Input.js | 1 + 1 file changed, 1 insertion(+) diff --git a/source/UI/js/Form/Input.js b/source/UI/js/Form/Input.js index bce4e153..5c9e1992 100644 --- a/source/UI/js/Form/Input.js +++ b/source/UI/js/Form/Input.js @@ -309,6 +309,7 @@ Ox.Input = function(options, self) { click: function() { self.options.disabled && that.gainFocus(); }, + input: change, blur: blur, change: change, focus: focus From 95faa3e40ac327cfea7625ac466fa57f989baaea Mon Sep 17 00:00:00 2001 From: j Date: Sun, 9 Jul 2023 15:01:37 +0530 Subject: [PATCH 25/51] fix copy of annotations in editor view if focus is on annotation --- source/UI/js/Video/AnnotationFolder.js | 6 ++++-- source/UI/js/Video/AnnotationPanel.js | 3 ++- source/UI/js/Video/VideoAnnotationPanel.js | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/source/UI/js/Video/AnnotationFolder.js b/source/UI/js/Video/AnnotationFolder.js index f6fb3127..4b04dcd4 100644 --- a/source/UI/js/Video/AnnotationFolder.js +++ b/source/UI/js/Video/AnnotationFolder.js @@ -371,7 +371,8 @@ Ox.AnnotationFolder = function(options, self) { 'equal', 'e', 'f', 'g', 'h', 'i', 'minus', 'n', 'o', 'openbracket', 'p', 'shift_0', 'shift_equal', 'shift_g', 'shift_i', 'shift_minus', 'shift_o', - 'slash', 'space' + 'slash', 'space', + 'control_c', 'control_v', ].forEach(function(key) { key = 'key.' + key; self.$annotations.bindEvent(key, function() { @@ -401,7 +402,8 @@ Ox.AnnotationFolder = function(options, self) { 'equal', 'f', 'g', 'h', 'i', 'minus', 'n', 'o', 'openbracket', 'p', 'shift_0', 'shift_equal', 'shift_g', 'shift_i', 'shift_minus', 'shift_o', - 'slash', 'space' + 'slash', 'space', + 'control_c', 'control_v', ].forEach(function(key) { key = 'key_' + key; self.$annotations.bindEvent(key, function() { diff --git a/source/UI/js/Video/AnnotationPanel.js b/source/UI/js/Video/AnnotationPanel.js index 83036b77..e93ea671 100644 --- a/source/UI/js/Video/AnnotationPanel.js +++ b/source/UI/js/Video/AnnotationPanel.js @@ -457,7 +457,8 @@ Ox.AnnotationPanel = function(options, self) { 'equal', 'f', 'g', 'h', 'i', 'minus', 'n', 'o', 'openbracket', 'p', 'shift_0', 'shift_equal', 'shift_g', 'shift_i', 'shift_minus', 'shift_o', - 'slash', 'space' + 'slash', 'space', + 'control_c', 'control_v', ].forEach(function(key) { key = 'key.' + key; self.$folder[index].bindEvent(key, function() { diff --git a/source/UI/js/Video/VideoAnnotationPanel.js b/source/UI/js/Video/VideoAnnotationPanel.js index 04d7ce03..5ce19326 100644 --- a/source/UI/js/Video/VideoAnnotationPanel.js +++ b/source/UI/js/Video/VideoAnnotationPanel.js @@ -972,7 +972,8 @@ Ox.VideoAnnotationPanel = function(options, self) { 'equal', 'f', 'g', 'h', 'i', 'minus', 'n', 'o', 'openbracket', 'p', 'shift_0', 'shift_equal', 'shift_g', 'shift_i', 'shift_minus', 'shift_o', - 'slash', 'space' + 'slash', 'space', + 'control_c', 'control_v', ].forEach(function(key) { key = 'key.' + key; self.$annotationPanel.bindEvent(key, function() { From 62a94ee644d731c8e1d1e5d5b255ec2b8335307c Mon Sep 17 00:00:00 2001 From: j Date: Sun, 9 Jul 2023 16:01:58 +0530 Subject: [PATCH 26/51] update timeline one once --- source/UI/js/Video/VideoEditPanel.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/UI/js/Video/VideoEditPanel.js b/source/UI/js/Video/VideoEditPanel.js index 0a4f8627..cc40507e 100644 --- a/source/UI/js/Video/VideoEditPanel.js +++ b/source/UI/js/Video/VideoEditPanel.js @@ -266,9 +266,6 @@ Ox.VideoEditPanel = function(options, self) { .bindEvent({ durationchange: function(data) { self.options.duration = data.duration; - self.$timeline && self.$timeline.replaceWith( - self.$timeline = getTimeline() - ); setPosition(self.$video.options('position'), true); self.$clipPanel.options({duration: self.options.duration}); }, From 4f00f0e06ced6c9c79e342a614b2f26bf8ee341e Mon Sep 17 00:00:00 2001 From: j Date: Sun, 9 Jul 2023 16:04:20 +0530 Subject: [PATCH 27/51] revert 8a374360fafd97af2da743c79a9a41743b97baeb breaks shift enter in annotations --- source/UI/js/Form/Input.js | 1 - 1 file changed, 1 deletion(-) diff --git a/source/UI/js/Form/Input.js b/source/UI/js/Form/Input.js index 5c9e1992..bce4e153 100644 --- a/source/UI/js/Form/Input.js +++ b/source/UI/js/Form/Input.js @@ -309,7 +309,6 @@ Ox.Input = function(options, self) { click: function() { self.options.disabled && that.gainFocus(); }, - input: change, blur: blur, change: change, focus: focus From bb7fe206d13341b8d6f42d82bc0a75d5a1befa16 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 9 Jul 2023 16:40:05 +0530 Subject: [PATCH 28/51] trigger change for text/password, fixes login and does not break annotations --- source/UI/js/Form/Input.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/UI/js/Form/Input.js b/source/UI/js/Form/Input.js index bce4e153..502675b4 100644 --- a/source/UI/js/Form/Input.js +++ b/source/UI/js/Form/Input.js @@ -309,6 +309,11 @@ Ox.Input = function(options, self) { click: function() { self.options.disabled && that.gainFocus(); }, + input: event => { + if (Ox.contains(['text', 'password'], self.options.type)) { + change(event) + } + }, blur: blur, change: change, focus: focus From b3a73dedbf777603fa26841d376f6fdea832cd3e Mon Sep 17 00:00:00 2001 From: j Date: Sun, 9 Jul 2023 20:14:05 +0530 Subject: [PATCH 29/51] no autocomplete fields --- source/UI/js/Form/Input.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/UI/js/Form/Input.js b/source/UI/js/Form/Input.js index 502675b4..09ad1887 100644 --- a/source/UI/js/Form/Input.js +++ b/source/UI/js/Form/Input.js @@ -310,7 +310,7 @@ Ox.Input = function(options, self) { self.options.disabled && that.gainFocus(); }, input: event => { - if (Ox.contains(['text', 'password'], self.options.type)) { + if (!self.options.autocomplete && Ox.contains(['text', 'password'], self.options.type)) { change(event) } }, From cf3f3c4103a5be98570ac7f55a27e82ab58d08a7 Mon Sep 17 00:00:00 2001 From: j Date: Wed, 12 Jul 2023 00:22:46 +0530 Subject: [PATCH 30/51] better buffering --- source/UI/js/Video/VideoElement.js | 32 +++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/source/UI/js/Video/VideoElement.js b/source/UI/js/Video/VideoElement.js index 928580c1..72bdfac6 100644 --- a/source/UI/js/Video/VideoElement.js +++ b/source/UI/js/Video/VideoElement.js @@ -165,15 +165,33 @@ Ox.VideoElement = function(options, self) { }, progress: function() { // stop buffering if buffered to end point - if (self.video == this && self.buffering) { - var item = self.items[self.currentItem]; - Ox.range(self.video.buffered.length).forEach(function(i) { - if (self.video.buffered.start(i) <= item['in'] + var video = this, + item = self.items[self.currentItem], + nextItem = Ox.mod(self.currentItem + 1, self.numberOfItems), + next = self.items[nextItem], + nextVideo = self.$videos[Ox.mod(self.currentVideo + 1, self.$videos.length)][0]; + if (self.video == video && (video.preload != 'none' || self.buffering)) { + if (clipCached(video, item)) { + self.video.preload = 'none'; + self.buffering = false; + if (nextVideo != self.video) { + nextVideo.preload = 'auto'; + } + } + } else if (!self.buffering && nextVideo == video && video.preload != 'none') { + if (clipCached(video, next)) { + video.preload = 'none'; + } + } + function clipCached(video, item) { + var cached = false + Ox.range(video.buffered.length).forEach(function(i) { + if (video.buffered.start(i) <= item['in'] && self.video.buffered.end(i) >= item.out) { - self.video.preload = 'none'; - self.buffering = false; + cached = true } }); + return cached } }, seeking: function() { @@ -358,8 +376,8 @@ Ox.VideoElement = function(options, self) { if (self.$video.attr('src') != item.src) { self.loadedMetadata && Ox.Log('Video', 'caching next item failed, reset src'); self.video.src = item.src; - self.video.preload = 'auto'; } + self.video.preload = 'auto'; self.video.volume = getVolume(); self.video.playbackRate = self.options.playbackRate; self.$video.css(css); From 4189c740b5a974481e2228ee5b4eaefc2f22481f Mon Sep 17 00:00:00 2001 From: j Date: Wed, 12 Jul 2023 13:31:11 +0530 Subject: [PATCH 31/51] input event breaks input change event for input fields with onchange handlers --- source/UI/js/Form/Input.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/UI/js/Form/Input.js b/source/UI/js/Form/Input.js index 09ad1887..488f042b 100644 --- a/source/UI/js/Form/Input.js +++ b/source/UI/js/Form/Input.js @@ -310,9 +310,11 @@ Ox.Input = function(options, self) { self.options.disabled && that.gainFocus(); }, input: event => { + /* if (!self.options.autocomplete && Ox.contains(['text', 'password'], self.options.type)) { change(event) } + */ }, blur: blur, change: change, From f8b218ec5910ea26cce3f9f5edecf26e36181fe4 Mon Sep 17 00:00:00 2001 From: j Date: Fri, 21 Jul 2023 11:21:30 +0100 Subject: [PATCH 32/51] only post if target exists --- source/UI/js/Core/Event.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/UI/js/Core/Event.js b/source/UI/js/Core/Event.js index 8df1650a..31c1fee8 100644 --- a/source/UI/js/Core/Event.js +++ b/source/UI/js/Core/Event.js @@ -438,7 +438,7 @@ Ox.forEach( Ox.makeObject(Ox.slice(arguments)), function(data, event) { - target.postMessage(JSON.stringify({ + target && target.postMessage(JSON.stringify({ data: data, event: event, target: isParent ? Ox.oxid : null From 99ae1509cdb3604dd556898de0ecb31707ab51a4 Mon Sep 17 00:00:00 2001 From: j Date: Thu, 27 Jul 2023 16:54:38 +0200 Subject: [PATCH 33/51] some turkish translations --- source/Ox/js/Constants.js | 3 +- source/Ox/json/locale.tr.json | 89 +++++++++++ source/UI/json/locale.tr.json | 281 ++++++++++++++++++++++++++++++++++ 3 files changed, 372 insertions(+), 1 deletion(-) create mode 100644 source/Ox/json/locale.tr.json create mode 100644 source/UI/json/locale.tr.json diff --git a/source/Ox/js/Constants.js b/source/Ox/js/Constants.js index 8f88ca13..1fe2d45b 100644 --- a/source/Ox/js/Constants.js +++ b/source/Ox/js/Constants.js @@ -63,7 +63,8 @@ Ox.LOCALE_NAMES = { 'el': 'Ελληνικά', 'en': 'English', 'fr': 'Français', - 'hi': 'हिन्दी' + 'hi': 'हिन्दी', + 'tr': 'Türkçe' }; //@ Ox.LOCALES Locales per module Ox.LOCALES = {}; diff --git a/source/Ox/json/locale.tr.json b/source/Ox/json/locale.tr.json new file mode 100644 index 00000000..db589319 --- /dev/null +++ b/source/Ox/json/locale.tr.json @@ -0,0 +1,89 @@ +{ + "%": "%", + ",": ",", + ".": ".", + "%A, %B %e, %Y": "%A, %B %e, %Y", + "%a, %b %e, %Y": "%a, %b %e, %Y", + "AD": "", + "AM": "", + "Apr": "", + "April": "Nisan", + "Aug": "", + "August": "Ağustos", + "BC": "", + "%B %e, %Y": "", + "%b %e, %Y": "", + "d": "", + "day": "gün", + "days": "gün", + "days{2}": "gün", + "Dec": "", + "December": "Aralık", + "Fall": "Düşmek", + "Feb": "", + "February": "Şubat", + "Fri": "", + "Friday": "Cuma", + "h": "", + "hour": "saat", + "hours": "saat", + "hours{2}": "saat", + "%I:%M %p": "", + "%I:%M:%S %p": "", + "Jan": "", + "January": "Ocak", + "Jul": "", + "July": "Temmuz", + "Jun": "", + "June": "Haziran", + "m": "", + "Mar": "", + "March": "Mart", + "May": "Mayıs", + "%m/%d/%Y": "", + "%m/%d/%y": "", + "minute": "dakika", + "minutes": "dakika", + "minutes{2}": "dakika", + "Mon": "", + "Monday": "Pazartesi", + "nd": "", + "nd{22}": "", + "no": "", + "Nov": "", + "November": "Kasım", + "Oct": "", + "October": "Ekim", + "PM": "", + "rd": "", + "rd{23}": "", + "s": "", + "Sat": "", + "Saturday": "Cumartesi", + "second": "saniye", + "seconds": "saniye", + "seconds{2}": "saniye", + "Sep": "", + "September": "Eylül", + "Spring": "Bahar", + "st": "", + "st{21}": "", + "Summer": Yaz"", + "Sun": "", + "Sunday": "Pazar", + "th": "", + "th{11}": "", + "th{12}": "", + "th{13}": "", + "Thu": "", + "Thursday": "Perşembe", + "Tue": "", + "Tuesday": "", + "Wed": "", + "Wednesday": "Çarşamba", + "Winter": "kış", + "y": "", + "year": "yıl", + "years": "yıl", + "years{2}": "yıl" +} diff --git a/source/UI/json/locale.tr.json b/source/UI/json/locale.tr.json new file mode 100644 index 00000000..f5f82983 --- /dev/null +++ b/source/UI/json/locale.tr.json @@ -0,0 +1,281 @@ +{ + ", doubleclick to edit": ", düzenlemek için çift tıkla", + "Add": "Ekle", + "Add Files": "Dosya Ekle", + "Add Place": "Yer Ekle", + "Add a condition": "koşul ekle", + "Add a group of conditions": "", + "Add column after": "Sonrasına sütun ekle", + "Add column before": "", + "Add row above": "", + "Add row below": "", + "Add {0}": "", + "Adding...": "", + "All": "Tüm", + "Alternative Names": "", + "Area": "", + "At Current Position": "", + "Blockquote": "", + "Bold": "", + "Borough": "", + "Building": "", + "Bullets": "", + "By Duration": "", + "By Position": "", + "By Text": "", + "Cancel": "", + "Cancel/Deselect": "", + "Cancelled": "", + "City": "", + "Clear": "", + "Clear Event": "", + "Clear Place": "", + "Clearing...": "", + "Click to hide": "", + "Click to pan, doubleclick to zoom": "", + "Click to select": "", + "Click to select, doubleclick to edit": "", + "Click to show": "", + "Close": "", + "Complete": "", + "Country": "", + "Date": "", + "Date Created": "", + "Date Modified": "", + "Define": "", + "Define Event": "", + "Define Place": "", + "Delete Annotation": "", + "Deselect": "", + "Deselect Annotation": "", + "Don't Shuffle": "", + "Done": "", + "Download": "", + "Download Selection...": "", + "Download Video...": "", + "Drag to resize": "", + "Drag to resize or click to hide": "", + "Drag to resize or click to toggle map": "", + "Duration": "", + "East": "", + "Edit": "Düzenlemek", + "Edit Annotation": "", + "Edit/Submit": "", + "Editing Options": "", + "Embed Selection...": "", + "End": "", + "Enter Fullscreen": "", + "Event": "", + "Events": "", + "Examples...": "", + "Exit Fullscreen": "", + "Feature": "", + "Find": "", + "Find in All {0}": "", + "Find in List": "", + "Find in This {0}": "", + "Find on Map": "", + "Find...": "", + "Find: All": "", + "Find: Alternative Names": "", + "Find: Geoname": "", + "Find: Name": "", + "Flag": "", + "Font Size": "", + "Generating Documentation...": "", + "Geoname": "", + "Go One Frame Back": "", + "Go One Frame Forward": "", + "Go One Line Down": "", + "Go One Line Up": "", + "Go One Second Back": "", + "Go One Second Forward": "", + "Go to First Frame": "", + "Go to In Point": "", + "Go to Last Frame": "", + "Go to Next Annotation": "", + "Go to Next Cut": "", + "Go to Next Result": "", + "Go to Out Point": "", + "Go to Poster Frame": "", + "Go to Previous Annotation": "", + "Go to Previous Cut": "", + "Go to Previous Result": "", + "Headline": "", + "Hide": "", + "Hide Controls": "", + "Hide Labels": "", + "Home": "", + "Home Channel": "", + "Image": "", + "Import Annotations...": "", + "In Current Selection": "", + "Insert": "", + "Insert HTML": "", + "Insert...": "", + "Italic": "", + "Join Clip(s) at Cuts": "", + "Keyboard Shortcuts": "", + "Keyboard Shortcuts...": "", + "Large": "", + "Large Player": "", + "Larger": "", + "Latitude": "", + "Limit to": "", + "Linebreak": "", + "Link": "", + "List": "", + "Longitude": "", + "Make Clip(s) Static": "", + "Map Options": "", + "Match": "", + "Matches": "", + "Medium": "", + "Monospace": "", + "Mute": "", + "Mute/Unmute": "", + "Name": "", + "New Event": "", + "New Place": "", + "Next": "", + "Next Channel": "", + "Next Result": "", + "No file selected": "", + "No files selected": "", + "North": "", + "Numbers": "", + "Open in New Tab": "", + "Options": "", + "Other": "", + "Paragraph": "", + "Pause": "", + "Paused": "", + "Person": "", + "Place": "", + "Place or Event": "", + "Play": "", + "Play Current Track": "", + "Play In to Out": "", + "Play Next Track": "", + "Play/Pause": "", + "Previous": "", + "Previous Channel": "", + "Previous Result": "", + "Region": "", + "Reload": "", + "Remove": "", + "Remove Event": "", + "Remove File": "", + "Remove Place": "", + "Remove this column": "", + "Remove this condition": "", + "Remove this group of conditions": "", + "Remove this row": "", + "Removing...": "", + "Repeat All": "", + "Repeat None": "", + "Repeat One": "", + "Reset this condition": "", + "Resolution": "", + "Restart": "", + "Restore Defaults": "", + "Results": "", + "Resume": "", + "Right-to-Left": "", + "Run Tests": "", + "Save Changes": "", + "Save as Smart List": "", + "Scale to Fill": "", + "Scale to Fit": "", + "Scroll to Player": "", + "Select Current Annotation": "", + "Select Current Cut": "", + "Select File": "", + "Select Next Annotation": "", + "Select Previous Annotation": "", + "Set ": "", + "Set In Point": "", + "Set Out Point": "", + "Set Poster Frame": "", + "Settings": "", + "Show Annotations": "", + "Show Controls": "", + "Show Dates": "", + "Show Labels": "", + "Show Other": "", + "Show People": "", + "Show Places": "", + "Show Remaining Time": "", + "Show Subtitles": "", + "Show Users": "", + "Shuffle": "", + "Small": "", + "Small Player": "", + "Smaller": "", + "Sort Annotations": "", + "South": "", + "Split Clip(s) at Cuts": "", + "Start": "", + "Street": "", + "Strike": "", + "Subscript": "", + "Subtitles": "", + "Superscript": "", + "Switch Theme": "", + "Timeline": "", + "Title": "", + "Turn Volume Down": "", + "Turn Volume Up": "", + "Type": "", + "Underline": "", + "Undo Changes": "", + "Unmute": "", + "Untitled": "", + "User": "", + "Valid": "", + "View": "", + "View Live": "", + "View Source": "", + "View as Grid": "", + "View as List": "", + "Volume": "", + "West": "", + "add": "", + "all": "", + "and": "", + "annotations": "", + "any": "", + "ascending": "", + "bracket": "", + "contains": "", + "descending": "", + "does not contain": "", + "does not end with": "", + "does not start with": "", + "ends with": "", + "file": "", + "files": "", + "in": "", + "is": "", + "is after": "", + "is before": "", + "is between": "", + "is greater than": "", + "is less than": "", + "is not": "", + "is not after": "", + "is not before": "", + "is not between": "", + "is not greater than": "", + "is not less than": "", + "items": "", + "of the following conditions": "", + "order": "", + "sorted by": "", + "starts with": "", + "unknown": "", + "{0} Century": "", + "{0} Century BC": "", + "{0} Millennium": "", + "{0} Millennium BC": "" +} From 7ffb5b6b9e24b2fd479bb30fb0a1960613fe7b76 Mon Sep 17 00:00:00 2001 From: j Date: Fri, 4 Aug 2023 14:58:37 +0200 Subject: [PATCH 34/51] typo --- source/Ox/json/locale.tr.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/Ox/json/locale.tr.json b/source/Ox/json/locale.tr.json index db589319..2a9b1f0b 100644 --- a/source/Ox/json/locale.tr.json +++ b/source/Ox/json/locale.tr.json @@ -68,7 +68,7 @@ "Spring": "Bahar", "st": "", "st{21}": "", - "Summer": Yaz"", + "Summer": "Yaz", "Sun": "", "Sunday": "Pazar", "th": "", @@ -78,7 +78,7 @@ "Thu": "", "Thursday": "Perşembe", "Tue": "", - "Tuesday": "", + "Tuesday": "Salı", "Wed": "", "Wednesday": "Çarşamba", "Winter": "kış", From 7b3ae571033fcac867a53c693d0c54268021d247 Mon Sep 17 00:00:00 2001 From: j Date: Fri, 4 Aug 2023 17:46:25 +0200 Subject: [PATCH 35/51] update turkish translations --- source/Ox/json/locale.tr.json | 36 +-- source/UI/json/locale.tr.json | 542 +++++++++++++++++----------------- 2 files changed, 289 insertions(+), 289 deletions(-) diff --git a/source/Ox/json/locale.tr.json b/source/Ox/json/locale.tr.json index 2a9b1f0b..81c526bc 100644 --- a/source/Ox/json/locale.tr.json +++ b/source/Ox/json/locale.tr.json @@ -4,16 +4,16 @@ ".": ".", "%A, %B %e, %Y": "%A, %B %e, %Y", "%a, %b %e, %Y": "%a, %b %e, %Y", - "AD": "", + "AD": "MS", "AM": "", "Apr": "", "April": "Nisan", "Aug": "", "August": "Ağustos", - "BC": "", + "BC": "MÖ", "%B %e, %Y": "", "%b %e, %Y": "", - "d": "", + "d": "g", "day": "gün", "days": "gün", "days{2}": "gün", @@ -24,7 +24,7 @@ "February": "Şubat", "Fri": "", "Friday": "Cuma", - "h": "", + "h": "s", "hour": "saat", "hours": "saat", "hours{2}": "saat", @@ -36,7 +36,7 @@ "July": "Temmuz", "Jun": "", "June": "Haziran", - "m": "", + "m": "d", "Mar": "", "March": "Mart", "May": "Mayıs", @@ -47,17 +47,17 @@ "minutes{2}": "dakika", "Mon": "", "Monday": "Pazartesi", - "nd": "", - "nd{22}": "", - "no": "", + "nd": ".", + "nd{22}": ".", + "no": "hayır", "Nov": "", "November": "Kasım", "Oct": "", "October": "Ekim", "PM": "", - "rd": "", - "rd{23}": "", - "s": "", + "rd": ".", + "rd{23}": ".", + "s": "s", "Sat": "", "Saturday": "Cumartesi", "second": "saniye", @@ -66,15 +66,15 @@ "Sep": "", "September": "Eylül", "Spring": "Bahar", - "st": "", - "st{21}": "", + "st": ".", + "st{21}": ".", "Summer": "Yaz", "Sun": "", "Sunday": "Pazar", - "th": "", - "th{11}": "", - "th{12}": "", - "th{13}": "", + "th": ".", + "th{11}": ".", + "th{12}": ".", + "th{13}": ".", "Thu": "", "Thursday": "Perşembe", "Tue": "", @@ -82,7 +82,7 @@ "Wed": "", "Wednesday": "Çarşamba", "Winter": "kış", - "y": "", + "y": "yy", "year": "yıl", "years": "yıl", "years{2}": "yıl" diff --git a/source/UI/json/locale.tr.json b/source/UI/json/locale.tr.json index f5f82983..0aa7149b 100644 --- a/source/UI/json/locale.tr.json +++ b/source/UI/json/locale.tr.json @@ -4,278 +4,278 @@ "Add Files": "Dosya Ekle", "Add Place": "Yer Ekle", "Add a condition": "koşul ekle", - "Add a group of conditions": "", + "Add a group of conditions": "Bir grup koşul ekle", "Add column after": "Sonrasına sütun ekle", - "Add column before": "", - "Add row above": "", - "Add row below": "", - "Add {0}": "", - "Adding...": "", + "Add column before": "Önce sütun ekle", + "Add row above": "Üste satır ekle", + "Add row below": "Altına satır ekle", + "Add {0}": "{0} ekle", + "Adding...": "Ekleniyor..", "All": "Tüm", - "Alternative Names": "", - "Area": "", - "At Current Position": "", - "Blockquote": "", - "Bold": "", - "Borough": "", - "Building": "", - "Bullets": "", - "By Duration": "", - "By Position": "", - "By Text": "", - "Cancel": "", - "Cancel/Deselect": "", - "Cancelled": "", - "City": "", - "Clear": "", - "Clear Event": "", - "Clear Place": "", - "Clearing...": "", - "Click to hide": "", - "Click to pan, doubleclick to zoom": "", - "Click to select": "", - "Click to select, doubleclick to edit": "", - "Click to show": "", - "Close": "", - "Complete": "", - "Country": "", - "Date": "", - "Date Created": "", - "Date Modified": "", - "Define": "", - "Define Event": "", - "Define Place": "", - "Delete Annotation": "", - "Deselect": "", - "Deselect Annotation": "", - "Don't Shuffle": "", - "Done": "", - "Download": "", - "Download Selection...": "", - "Download Video...": "", - "Drag to resize": "", - "Drag to resize or click to hide": "", - "Drag to resize or click to toggle map": "", - "Duration": "", - "East": "", - "Edit": "Düzenlemek", - "Edit Annotation": "", - "Edit/Submit": "", - "Editing Options": "", - "Embed Selection...": "", - "End": "", - "Enter Fullscreen": "", - "Event": "", - "Events": "", - "Examples...": "", - "Exit Fullscreen": "", - "Feature": "", - "Find": "", - "Find in All {0}": "", - "Find in List": "", - "Find in This {0}": "", - "Find on Map": "", - "Find...": "", - "Find: All": "", - "Find: Alternative Names": "", - "Find: Geoname": "", - "Find: Name": "", - "Flag": "", - "Font Size": "", - "Generating Documentation...": "", - "Geoname": "", - "Go One Frame Back": "", - "Go One Frame Forward": "", - "Go One Line Down": "", - "Go One Line Up": "", - "Go One Second Back": "", - "Go One Second Forward": "", - "Go to First Frame": "", - "Go to In Point": "", - "Go to Last Frame": "", - "Go to Next Annotation": "", - "Go to Next Cut": "", - "Go to Next Result": "", - "Go to Out Point": "", - "Go to Poster Frame": "", - "Go to Previous Annotation": "", - "Go to Previous Cut": "", - "Go to Previous Result": "", - "Headline": "", - "Hide": "", - "Hide Controls": "", - "Hide Labels": "", - "Home": "", - "Home Channel": "", - "Image": "", - "Import Annotations...": "", - "In Current Selection": "", - "Insert": "", - "Insert HTML": "", - "Insert...": "", - "Italic": "", - "Join Clip(s) at Cuts": "", - "Keyboard Shortcuts": "", - "Keyboard Shortcuts...": "", - "Large": "", - "Large Player": "", - "Larger": "", - "Latitude": "", - "Limit to": "", - "Linebreak": "", - "Link": "", - "List": "", - "Longitude": "", - "Make Clip(s) Static": "", - "Map Options": "", - "Match": "", - "Matches": "", - "Medium": "", - "Monospace": "", - "Mute": "", - "Mute/Unmute": "", - "Name": "", - "New Event": "", - "New Place": "", - "Next": "", - "Next Channel": "", - "Next Result": "", - "No file selected": "", - "No files selected": "", - "North": "", - "Numbers": "", - "Open in New Tab": "", - "Options": "", - "Other": "", - "Paragraph": "", - "Pause": "", - "Paused": "", - "Person": "", - "Place": "", - "Place or Event": "", - "Play": "", - "Play Current Track": "", - "Play In to Out": "", - "Play Next Track": "", - "Play/Pause": "", - "Previous": "", - "Previous Channel": "", - "Previous Result": "", - "Region": "", - "Reload": "", - "Remove": "", - "Remove Event": "", - "Remove File": "", - "Remove Place": "", - "Remove this column": "", - "Remove this condition": "", - "Remove this group of conditions": "", - "Remove this row": "", - "Removing...": "", - "Repeat All": "", - "Repeat None": "", - "Repeat One": "", - "Reset this condition": "", - "Resolution": "", - "Restart": "", - "Restore Defaults": "", - "Results": "", - "Resume": "", - "Right-to-Left": "", - "Run Tests": "", - "Save Changes": "", - "Save as Smart List": "", - "Scale to Fill": "", - "Scale to Fit": "", - "Scroll to Player": "", - "Select Current Annotation": "", - "Select Current Cut": "", - "Select File": "", - "Select Next Annotation": "", - "Select Previous Annotation": "", - "Set ": "", - "Set In Point": "", - "Set Out Point": "", - "Set Poster Frame": "", - "Settings": "", - "Show Annotations": "", - "Show Controls": "", - "Show Dates": "", - "Show Labels": "", - "Show Other": "", - "Show People": "", - "Show Places": "", - "Show Remaining Time": "", - "Show Subtitles": "", - "Show Users": "", - "Shuffle": "", - "Small": "", - "Small Player": "", - "Smaller": "", - "Sort Annotations": "", - "South": "", - "Split Clip(s) at Cuts": "", - "Start": "", - "Street": "", - "Strike": "", - "Subscript": "", - "Subtitles": "", - "Superscript": "", - "Switch Theme": "", - "Timeline": "", - "Title": "", - "Turn Volume Down": "", - "Turn Volume Up": "", - "Type": "", - "Underline": "", - "Undo Changes": "", - "Unmute": "", - "Untitled": "", - "User": "", - "Valid": "", - "View": "", - "View Live": "", - "View Source": "", - "View as Grid": "", - "View as List": "", - "Volume": "", - "West": "", - "add": "", - "all": "", - "and": "", - "annotations": "", - "any": "", - "ascending": "", - "bracket": "", - "contains": "", - "descending": "", - "does not contain": "", - "does not end with": "", - "does not start with": "", - "ends with": "", - "file": "", - "files": "", - "in": "", + "Alternative Names": "Alternatif İsimler", + "Area": "Alan", + "At Current Position": "Mevcut Konumda", + "Blockquote": "Blok halinde alıntıla", + "Bold": "Kalın", + "Borough": "Mahalle", + "Building": "Bina", + "Bullets": "Madde İşaretleri", + "By Duration": "Süreye göre", + "By Position": "Pozisyona Göre", + "By Text": "Metne gore", + "Cancel": "İptal et", + "Cancel/Deselect": "İptal et/Seçimi kaldır", + "Cancelled": "İptal edildi", + "City": "Şehir", + "Clear": "Temizle", + "Clear Event": "Etkinliği temizle", + "Clear Place": "Yeri Temizle", + "Clearing...": "Temizleniyor", + "Click to hide": "gizlemek için tıklayın", + "Click to pan, doubleclick to zoom": "Kaydırmak için tıklayın, yakınlaştırmak için çift tıklayın", + "Click to select": "Seçmek için tıklayın", + "Click to select, doubleclick to edit": "Seçmek için tıklayın, düzenlemek için çift tıklayın", + "Click to show": "Göstermek için tıklayın", + "Close": "Kapat", + "Complete": "Tamamlandı", + "Country": "Ülke", + "Date": "Tarih", + "Date Created": "Oluşturulma Tarihi", + "Date Modified": "Değiştirilme Tarihi", + "Define": "Tanımla", + "Define Event": "Etkinlik Tanımla", + "Define Place": "Yer Tanımla", + "Delete Annotation": "Ek Açıklamayı Sil", + "Deselect": "Seçimi Kaldır", + "Deselect Annotation": "Ek Açıklamanın Seçimini Kaldır", + "Don't Shuffle": "Karıştırma", + "Done": "Bitti", + "Download": "İndir", + "Download Selection...": "Seçimi İndir...", + "Download Video...": "Video İndir", + "Drag to resize": "Yeniden boyutlandırmak için sürükleyin", + "Drag to resize or click to hide": "Yeniden boyutlandırmak için sürükleyin veya gizlemek için tıklayın", + "Drag to resize or click to toggle map": "eniden boyutlandırmak için sürükleyin veya haritayı değiştirmek için tıklayın", + "Duration": "Süre", + "East": "Doğu", + "Edit": "Kurgula", + "Edit Annotation": "Ek Açıklamayı Kurgula", + "Edit/Submit": "Kurgula/Gönder", + "Editing Options": "Kurgulama Seçenekleri", + "Embed Selection...": "Seçimi Yerleştir", + "End": "Son", + "Enter Fullscreen": "Tam Ekran Gir", + "Event": "Etkinlik", + "Events": "Etkinlikler", + "Examples...": "Örnekler...", + "Exit Fullscreen": "Tam Ekrandan Çık", + "Feature": "Özellik", + "Find": "Bul", + "Find in All {0}": "Tüm {0} İçinde Bul", + "Find in List": "Listede Bul", + "Find in This {0}": "Bu {0}'da Bul", + "Find on Map": "Haritada Bul", + "Find...": "Bul...", + "Find: All": "Bul: Tümü", + "Find: Alternative Names": "Bul: Alternatif İsimler", + "Find: Geoname": "Bul: Geoisim", + "Find: Name": "Bul: İsim", + "Flag": "Bayrak", + "Font Size": "Yazı Tipi Boyutu", + "Generating Documentation...": "Dokümantasyon Oluşturuyor...", + "Geoname": "Geo isim", + "Go One Frame Back": "Bir Kare Geri Git", + "Go One Frame Forward": "Bir Kare İleri Git", + "Go One Line Down": "Bir Satır Aşağı Git", + "Go One Line Up": "Bir Satır Yukarı Git", + "Go One Second Back": "Bir Saniye Geri Git", + "Go One Second Forward": "Bir Saniye İleriye Git", + "Go to First Frame": "İlk Kareye Git", + "Go to In Point": "Giriş Noktasına Git", + "Go to Last Frame": "Son Kareye Git", + "Go to Next Annotation": "Sonraki Açıklamaya Git", + "Go to Next Cut": "Sonraki Kesime Git", + "Go to Next Result": "Sonraki Sonuca Git", + "Go to Out Point": "Çıkış Noktasına Git", + "Go to Poster Frame": "Poster Çerçevesine Git", + "Go to Previous Annotation": "Önceki Ek Açıklamaya Git", + "Go to Previous Cut": "Önceki Kesmeye Git", + "Go to Previous Result": "Önceki Sonuca Git", + "Headline": "Başlık", + "Hide": "Sakla", + "Hide Controls": "Kontrolleri Gizle", + "Hide Labels": "Etiketleri Gizle", + "Home": "Ana Sayfa", + "Home Channel": "Ana Kanal", + "Image": "İmge", + "Import Annotations...": "Ek Açıklamaları İçe Aktar...", + "In Current Selection": "Mevcut Seçimde", + "Insert": "Ekle", + "Insert HTML": "HTML Ekle", + "Insert...": "Ekle...", + "Italic": "İtalik", + "Join Clip(s) at Cuts": "Klip(ler)i Kesimlerde Birleştir", + "Keyboard Shortcuts": "Klavye Kısayolları", + "Keyboard Shortcuts...": "Klavye Kısayolları...", + "Large": "Büyük", + "Large Player": "Büyük Oynatıcı", + "Larger": "Daha Büyük", + "Latitude": "Enlem", + "Limit to": "Sınırla", + "Linebreak": "Satır Sonu", + "Link": "Link", + "List": "Liste", + "Longitude": "Boylam", + "Make Clip(s) Static": "Klip(ler)i Statik Yap", + "Map Options": "Harita Seçenekleri", + "Match": "Eşleme", + "Matches": "Eşlemeler", + "Medium": "Orta", + "Monospace": "Monospace", + "Mute": "Sessiz", + "Mute/Unmute": "Sesi Kapat/Sesi Aç", + "Name": "İsim", + "New Event": "Yeni Etkinlik", + "New Place": "Yeni Yer", + "Next": "Sıradaki", + "Next Channel": "Yeni Kanal", + "Next Result": "Bir Sonraki Sonuç", + "No file selected": "Seçili dosya yok", + "No files selected": "Seçili dosya yok", + "North": "Kuzey", + "Numbers": "Sayılar", + "Open in New Tab": "Yeni Sekmede Aç", + "Options": "Seçenekler", + "Other": "Diğer", + "Paragraph": "Paragraf", + "Pause": "Durdur", + "Paused": "Durduruldu", + "Person": "Kişi", + "Place": "Yer", + "Place or Event": "Yer ya da Etkinlik", + "Play": "Oynat", + "Play Current Track": "Seçili Parçayı Çal", + "Play In to Out": "Giriş-Çıkış Arasında Oynat", + "Play Next Track": "Bir Sonraki Parçayı Çal", + "Play/Pause": "Başlat/Durdur", + "Previous": "Önceki", + "Previous Channel": "Önceki Kanal", + "Previous Result": "Önceki Sonuç", + "Region": "Bölge", + "Reload": "Yeniden Yükle", + "Remove": "Kaldır", + "Remove Event": "Etkinliği Kaldır", + "Remove File": "Dosyayı Kaldır", + "Remove Place": "Yeri Kaldır", + "Remove this column": "Bu sütunu kaldır", + "Remove this condition": "Bu koşulu kaldır", + "Remove this group of conditions": "Bu koşul grubunu kaldır ", + "Remove this row": "Bu satırı kaldır", + "Removing...": "Kaldırıyor...", + "Repeat All": "Hepsini Tekrarla", + "Repeat None": "Hiçbirini Tekrarlama", + "Repeat One": "Birini Tekrarla", + "Reset this condition": "Bu koşulu sıfırla", + "Resolution": "Çözünürlük", + "Restart": "Yeniden Başlat", + "Restore Defaults": "Varsayılanları Geri Yükle", + "Results": "Sonuçlar", + "Resume": "Devam Et", + "Right-to-Left": "Sağdan Sola", + "Run Tests": "Testleri Çalıştır", + "Save Changes": "Değişiklikleri Kaydet", + "Save as Smart List": "Akıllı Liste olarak Kaydet", + "Scale to Fill": "Doldurmak için Ölç", + "Scale to Fit": "Sığacak Şekilde Ölç", + "Scroll to Player": "Oyuncuya Kaydır", + "Select Current Annotation": "Geçerli Ek Açılamayı Seç", + "Select Current Cut": "Geçerli Kesimi Seç", + "Select File": "Dosya Seç", + "Select Next Annotation": "Sonraki Açıklamayı Seç", + "Select Previous Annotation": "Önceki Açıklamayı Seç", + "Set ": "Berlie", + "Set In Point": "Giriş Noktası Belirle", + "Set Out Point": "Çıkış Noktası Belirle", + "Set Poster Frame": "Poster Karesi Belirle", + "Settings": "Ayarlar", + "Show Annotations": "Ek Açıklamayı Göster", + "Show Controls": "Kontrol Çubuğunu Göster", + "Show Dates": "Tarihleri Göster", + "Show Labels": "Etiketleri Göster", + "Show Other": "Diğerini Göster", + "Show People": "İnsanları Göster", + "Show Places": "Yerleri Göster", + "Show Remaining Time": "Kalan Zamanı Göster", + "Show Subtitles": "Altyazıları Göster", + "Show Users": "Kullanıcıları Göster", + "Shuffle": "Karıştır", + "Small": "Küçük", + "Small Player": "Küçük Oynatıcı", + "Smaller": "Daha Küçük", + "Sort Annotations": "Ek Açıklamayı Düzenle", + "South": "Güney", + "Split Clip(s) at Cuts": "Klip(ler)i Kesimlerde Böl", + "Start": "Başlat", + "Street": "Sokak", + "Strike": "Üstünü Çiz", + "Subscript": "Alt Simge", + "Subtitles": "Altyazılar", + "Superscript": "Üst Simge", + "Switch Theme": "Temayı Değiştir", + "Timeline": "Zaman Çizelgesi", + "Title": "Başlık", + "Turn Volume Down": "Sesi Kıs", + "Turn Volume Up": "Sesi Aç", + "Type": "Tür", + "Underline": "Altını Çiz", + "Undo Changes": "Değişiklikleri Geri Al", + "Unmute": "Sesi Aç", + "Untitled": "İsimsiz", + "User": "Kullanıcı", + "Valid": "Geçerli", + "View": "Görüntüle", + "View Live": "Canlı Görüntüle", + "View Source": "Kaynağı Görüntüle", + "View as Grid": "Izgara Olarak Görüntüle" + "View as List": "Liste Olarak Görüntüle", + "Volume": "Ses Seviyesi", + "West": "Batı", + "add": "ekle", + "all": "hepsi", + "and": "ve", + "annotations": "ek açıklamalar", + "any": "herhangi", + "ascending": "artan", + "bracket": "parantez", + "contains": "içerir", + "descending": "azalan", + "does not contain": "içermez", + "does not end with": "ile bitmiyor", + "does not start with": "ile başlamaz", + "ends with": "ile biter", + "file": "dosya", + "files": "dosyalar", + "in": "içinde", "is": "", - "is after": "", - "is before": "", - "is between": "", - "is greater than": "", - "is less than": "", - "is not": "", - "is not after": "", - "is not before": "", - "is not between": "", - "is not greater than": "", - "is not less than": "", - "items": "", - "of the following conditions": "", - "order": "", - "sorted by": "", - "starts with": "", - "unknown": "", - "{0} Century": "", - "{0} Century BC": "", - "{0} Millennium": "", - "{0} Millennium BC": "" + "is after": "sonra", + "is before": "önce", + "is between": "arasında", + "is greater than": "'den büyüktür", + "is less than": "daha azdır", + "is not": "değil", + "is not after": "sonra değil", + "is not before": "önce değil", + "is not between": "arasında değil", + "is not greater than": "daha büyük değil", + "is not less than": "daha az değil", + "items": "öğeler", + "of the following conditions": "aşağıdaki koşullardan", + "order": "sırala", + "sorted by": "göre sırala", + "starts with": "ile başla", + "unknown": "bilinmiyor", + "{0} Century": "Yüzyıl", + "{0} Century BC": "Yüzyıl MÖ", + "{0} Millennium": "{0} Milenyum", + "{0} Millennium BC": "MÖ {0} Milenyum" } From b11dd36c7a7eee85f8fd245faef04202aa5240af Mon Sep 17 00:00:00 2001 From: j Date: Fri, 4 Aug 2023 17:48:11 +0200 Subject: [PATCH 36/51] typo --- source/UI/json/locale.tr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/UI/json/locale.tr.json b/source/UI/json/locale.tr.json index 0aa7149b..7f671f86 100644 --- a/source/UI/json/locale.tr.json +++ b/source/UI/json/locale.tr.json @@ -236,7 +236,7 @@ "View": "Görüntüle", "View Live": "Canlı Görüntüle", "View Source": "Kaynağı Görüntüle", - "View as Grid": "Izgara Olarak Görüntüle" + "View as Grid": "Izgara Olarak Görüntüle", "View as List": "Liste Olarak Görüntüle", "Volume": "Ses Seviyesi", "West": "Batı", From ac1a4ef961e6e2d4a6c383579fbd7d30c6345b8c Mon Sep 17 00:00:00 2001 From: j Date: Sun, 6 Aug 2023 11:49:55 +0200 Subject: [PATCH 37/51] avoid memory leak in jQuery.cache --- source/UI/js/Core/Element.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/UI/js/Core/Element.js b/source/UI/js/Core/Element.js index 5e1ca456..df17ea0b 100644 --- a/source/UI/js/Core/Element.js +++ b/source/UI/js/Core/Element.js @@ -710,6 +710,7 @@ Ox.Focus.removeElement(this.oxid); this.self(_).unbindKeyboard(); this.$tooltip && this.$tooltip.remove(); + jQuery.cleanData(this.$element); delete Ox.$elements[this.oxid]; // If setElement($element) was used, delete $element too delete Ox.$elements[this.$element.oxid]; @@ -738,6 +739,7 @@ this.findElements().forEach(function($element) { $element.removeElement(false); }); + jQuery.cleanData(this.$element); this.$element.replaceWith($element); if ($element.$element) { // $element is Ox.Element this.$element = $element.$element; From 49742b8b1ace90dd042de3a2e9e0532d32c51a8d Mon Sep 17 00:00:00 2001 From: j Date: Sun, 3 Sep 2023 11:24:01 +0100 Subject: [PATCH 38/51] Ox.FormPanel.values now accepts values too --- source/UI/js/Form/FormPanel.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/source/UI/js/Form/FormPanel.js b/source/UI/js/Form/FormPanel.js index b6b3409c..63755307 100644 --- a/source/UI/js/Form/FormPanel.js +++ b/source/UI/js/Form/FormPanel.js @@ -191,13 +191,24 @@ Ox.FormPanel = function(options, self) { values values @*/ that.values = function() { - var values = {}; - self.options.form.forEach(function(section, i) { - values[section.id] = self.$forms[i].values(); - }); - return values; + if (arguments.length === 0) { + var values = {}; + self.options.form.forEach(function(section, i) { + values[section.id] = self.$forms[i].values(); + }); + return values; + } else { + var sections = arguments[0]; + + self.options.form.forEach(function(form, i) { + if ((form.id in sections) { + self.$forms[i].values(sections[form.id]); + } + }); + } }; + return that; }; From 6252e27f6c2f75bdc55f3585b60f2d75220d6df7 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 3 Sep 2023 11:44:49 +0100 Subject: [PATCH 39/51] Ox.FormPanel: support setting inital and updating selected panel --- source/UI/js/Form/FormPanel.js | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/source/UI/js/Form/FormPanel.js b/source/UI/js/Form/FormPanel.js index 63755307..ca9f22f2 100644 --- a/source/UI/js/Form/FormPanel.js +++ b/source/UI/js/Form/FormPanel.js @@ -15,11 +15,18 @@ Ox.FormPanel = function(options, self) { var that = Ox.Element({}, self) .defaults({ form: [], - listSize: 256 + listSize: 256, + section: null }) - .options(options || {}); + .options(options || {}) + .update({ + section: setSection + }); - self.section = 0; + if (self.options.section === null) { + self.options.section = self.options.form[0].id; + } + self.section = Ox.getIndexById(self.options.form, self.optoins.section); self.sectionTitle = self.options.form[self.section].title; self.$list = Ox.TableList({ columns: [ @@ -62,7 +69,7 @@ Ox.FormPanel = function(options, self) { }), max: 1, min: 1, - selected: [self.options.form[0].id], + selected: [self.options.selected], sort: [{key: 'id', operator: '+'}], unique: 'id', width: self.options.listSize @@ -130,7 +137,18 @@ Ox.FormPanel = function(options, self) { }); }); - self.$sections[0].show(); + self.$sections[self.section].show(); + + function setSection() { + var id = self.options.section, + section = Ox.getIndexById(self.options.form, id); + if (self.section != section) { + self.$sections[self.section].hide(); + self.section = section; + self.$list.options('selected', [id]); + self.$sections[self.section].show(); + } + }; that.setElement(Ox.SplitPanel({ elements: [ From fb6c862b88193d8b3b3a1ef364a225919f972b4c Mon Sep 17 00:00:00 2001 From: j Date: Sun, 3 Sep 2023 11:50:05 +0100 Subject: [PATCH 40/51] typo --- source/UI/js/Form/FormPanel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/UI/js/Form/FormPanel.js b/source/UI/js/Form/FormPanel.js index ca9f22f2..5b3da686 100644 --- a/source/UI/js/Form/FormPanel.js +++ b/source/UI/js/Form/FormPanel.js @@ -26,7 +26,7 @@ Ox.FormPanel = function(options, self) { if (self.options.section === null) { self.options.section = self.options.form[0].id; } - self.section = Ox.getIndexById(self.options.form, self.optoins.section); + self.section = Ox.getIndexById(self.options.form, self.options.section); self.sectionTitle = self.options.form[self.section].title; self.$list = Ox.TableList({ columns: [ From 9a7c3144f591118e5495b991651b9129d646a745 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 3 Sep 2023 12:11:12 +0100 Subject: [PATCH 41/51] fix FormPanel selections --- source/UI/js/Form/FormPanel.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/source/UI/js/Form/FormPanel.js b/source/UI/js/Form/FormPanel.js index 5b3da686..2770599d 100644 --- a/source/UI/js/Form/FormPanel.js +++ b/source/UI/js/Form/FormPanel.js @@ -69,7 +69,7 @@ Ox.FormPanel = function(options, self) { }), max: 1, min: 1, - selected: [self.options.selected], + selected: [self.options.section], sort: [{key: 'id', operator: '+'}], unique: 'id', width: self.options.listSize @@ -77,6 +77,9 @@ Ox.FormPanel = function(options, self) { select: function(data) { self.$sections[self.section].hide(); self.section = Ox.getIndexById(self.options.form, data.ids[0]); + if (self.section == -1) { + self.section = 0 + } self.$sections[self.section].show(); that.triggerEvent('select', {section: data.ids[0]}); } @@ -142,7 +145,7 @@ Ox.FormPanel = function(options, self) { function setSection() { var id = self.options.section, section = Ox.getIndexById(self.options.form, id); - if (self.section != section) { + if (section > -1 && self.section != section) { self.$sections[self.section].hide(); self.section = section; self.$list.options('selected', [id]); @@ -219,7 +222,7 @@ Ox.FormPanel = function(options, self) { var sections = arguments[0]; self.options.form.forEach(function(form, i) { - if ((form.id in sections) { + if (form.id in sections) { self.$forms[i].values(sections[form.id]); } }); From 2a147446c26df12e8d157c4b7bedf6966753b7b1 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 3 Sep 2023 12:15:05 +0100 Subject: [PATCH 42/51] Ox.formPanel: update options.section on interactive change --- source/UI/js/Form/FormPanel.js | 1 + 1 file changed, 1 insertion(+) diff --git a/source/UI/js/Form/FormPanel.js b/source/UI/js/Form/FormPanel.js index 2770599d..9eb7efe9 100644 --- a/source/UI/js/Form/FormPanel.js +++ b/source/UI/js/Form/FormPanel.js @@ -81,6 +81,7 @@ Ox.FormPanel = function(options, self) { self.section = 0 } self.$sections[self.section].show(); + self.options.section = self.options.form[self.section].id; that.triggerEvent('select', {section: data.ids[0]}); } }); From 2c4e0b8f7b53cadbdba3187ea62efc632247d4ec Mon Sep 17 00:00:00 2001 From: qsniyg Date: Mon, 4 Sep 2023 22:29:38 +0000 Subject: [PATCH 43/51] Use self.pageLength instead of self.options.pageLength in List::getPageByPosition self.options.pageLength is a hint, the actual pageLength can differ. For example when orientation == both, self.options.pageLength is disregarded entirely. --- source/UI/js/List/List.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/UI/js/List/List.js b/source/UI/js/List/List.js index b5421c02..0c0f9bb1 100644 --- a/source/UI/js/List/List.js +++ b/source/UI/js/List/List.js @@ -624,7 +624,7 @@ Ox.List = function(options, self) { } function getPageByPosition(pos) { - return Math.floor(pos / self.options.pageLength); + return Math.floor(pos / self.pageLength); } function getPageByScrollPosition(pos) { From d71ad7cad6b584c1798ed26a75e19122d78c2975 Mon Sep 17 00:00:00 2001 From: qsniyg Date: Mon, 4 Sep 2023 22:36:32 +0000 Subject: [PATCH 44/51] Allow setting multiple values for ButtonGroup --- source/UI/js/Form/ButtonGroup.js | 33 +++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/source/UI/js/Form/ButtonGroup.js b/source/UI/js/Form/ButtonGroup.js index c1c5ff5e..b4ff9ef1 100644 --- a/source/UI/js/Form/ButtonGroup.js +++ b/source/UI/js/Form/ButtonGroup.js @@ -31,18 +31,29 @@ Ox.ButtonGroup = function(options, self) { .options(options || {}) .update({ value: function() { - // fixme: this doesn't work in cases where - // multiple buttons can be selected - var position = Ox.getIndexById( - self.options.buttons, self.options.value - ); - if (position > -1) { - self.$buttons[position].trigger('click'); - } else if (self.options.min == 0) { - self.$buttons.forEach(function($button, i) { - $button.options('value') && $button.trigger('click'); - }); + var values = Ox.makeArray(self.options.value); + + var positions = []; + Ox.forEach(values, function(value) { + var position = Ox.getIndexById( + self.options.buttons, value + ); + + if (position > -1) { + positions.push(position); + } + }); + + if (positions.length < self.options.min) { + return; } + + Ox.forEach(self.$buttons, function(button, pos) { + var enabled = positions.indexOf(pos) > -1; + if (enabled !== button.value()) { + button.trigger('click'); + } + }); } }) .addClass( From d25fe788ee3d08ac1ef56c9dec8cca902dd17df5 Mon Sep 17 00:00:00 2001 From: j Date: Sat, 7 Oct 2023 10:22:56 +0100 Subject: [PATCH 45/51] group vars into block (coding style) --- source/UI/js/Form/ButtonGroup.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/UI/js/Form/ButtonGroup.js b/source/UI/js/Form/ButtonGroup.js index b4ff9ef1..d8eb06ab 100644 --- a/source/UI/js/Form/ButtonGroup.js +++ b/source/UI/js/Form/ButtonGroup.js @@ -31,9 +31,9 @@ Ox.ButtonGroup = function(options, self) { .options(options || {}) .update({ value: function() { - var values = Ox.makeArray(self.options.value); + var positions = [], + values = Ox.makeArray(self.options.value); - var positions = []; Ox.forEach(values, function(value) { var position = Ox.getIndexById( self.options.buttons, value From fc001a2f442bd94cbf76ae58d7275e195b1e8328 Mon Sep 17 00:00:00 2001 From: j Date: Sat, 17 Feb 2024 14:15:34 +0000 Subject: [PATCH 46/51] version can contain dots --- source/Ox.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Ox.js b/source/Ox.js index 16d1ce97..675fbed3 100644 --- a/source/Ox.js +++ b/source/Ox.js @@ -37,7 +37,7 @@ } function getPath() { - var index, regexp = /Ox\.js(\?\d+|)$/, + var index, regexp = /Ox\.js(\?[\d\.]+|)$/, scripts = document.getElementsByTagName('script'), src; for (index = scripts.length - 1; index >= 0; index--) { src = scripts[index].src; From 038ff06766cabd0db8fe23677915012e9d5d48bd Mon Sep 17 00:00:00 2001 From: j Date: Fri, 17 May 2024 16:38:44 +0200 Subject: [PATCH 47/51] balance subtitles --- source/UI/css/UI.css | 1 + 1 file changed, 1 insertion(+) diff --git a/source/UI/css/UI.css b/source/UI/css/UI.css index e6ea4dca..c13be065 100644 --- a/source/UI/css/UI.css +++ b/source/UI/css/UI.css @@ -2458,6 +2458,7 @@ Video font-size: 8px; line-height: 10px; text-align: center; + text-wrap: balance; text-overflow: ellipsis; text-shadow: rgba(0, 0, 0, 1) 1px 1px 1px; color: rgb(255, 255, 255); From a67b633bcf26180f6666e2f414fe34d0a1e0c2ab Mon Sep 17 00:00:00 2001 From: j Date: Sat, 1 Jun 2024 10:12:33 +0100 Subject: [PATCH 48/51] scrollbar-color breaks scrollbars on chrome --- source/UI/css/theme.css | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source/UI/css/theme.css b/source/UI/css/theme.css index 5c62887e..91427838 100644 --- a/source/UI/css/theme.css +++ b/source/UI/css/theme.css @@ -1188,10 +1188,6 @@ Scrollbars background: -webkit-linear-gradient(left, $buttonActiveGradient); } -body.$themeClass { - scrollbar-color: $bodyBorder $bodyBackground; -} - /* ================================================================================ SourceViewer From f46a70d793794c0fad1ad1d85b460bb1ab801b66 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 2 Jun 2024 16:29:11 +0100 Subject: [PATCH 49/51] re-enable scrollbar-color for non chrome browsers --- source/UI/css/theme.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/UI/css/theme.css b/source/UI/css/theme.css index 91427838..9f359b5e 100644 --- a/source/UI/css/theme.css +++ b/source/UI/css/theme.css @@ -1188,6 +1188,12 @@ Scrollbars background: -webkit-linear-gradient(left, $buttonActiveGradient); } +@supports not selector(::-webkit-scrollbar) { + -body.$themeClass { + scrollbar-color: $bodyBorder $bodyBackground; + } +} + /* ================================================================================ SourceViewer From 1a9fe95530467eb5add495607b6bf62cb225643f Mon Sep 17 00:00:00 2001 From: j Date: Sun, 2 Jun 2024 16:32:12 +0100 Subject: [PATCH 50/51] fix typo --- source/UI/css/theme.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/UI/css/theme.css b/source/UI/css/theme.css index 9f359b5e..83ac746d 100644 --- a/source/UI/css/theme.css +++ b/source/UI/css/theme.css @@ -1189,9 +1189,9 @@ Scrollbars } @supports not selector(::-webkit-scrollbar) { - -body.$themeClass { - scrollbar-color: $bodyBorder $bodyBackground; - } + body.$themeClass { + scrollbar-color: $bodyBorder $bodyBackground; + } } /* From 570fa30d4180a2070f6d03c8c1e2356da750832c Mon Sep 17 00:00:00 2001 From: j Date: Wed, 19 Jun 2024 13:52:52 +0200 Subject: [PATCH 51/51] fix "Find in" for annotations with quotes --- source/UI/js/Video/AnnotationPanel.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/UI/js/Video/AnnotationPanel.js b/source/UI/js/Video/AnnotationPanel.js index e93ea671..7e03f779 100644 --- a/source/UI/js/Video/AnnotationPanel.js +++ b/source/UI/js/Video/AnnotationPanel.js @@ -325,9 +325,9 @@ Ox.AnnotationPanel = function(options, self) { } else if (data.id == 'export') { that.triggerEvent('exportannotations'); } else if (data.id == 'find') { - that.triggerEvent('find', {value: value}); + that.triggerEvent('find', {value: Ox.decodeHTMLEntities(value)}); } else if (data.id == 'findannotations') { - that.triggerEvent('findannotations', {key: key, value: value}); + that.triggerEvent('findannotations', {key: key, value: Ox.decodeHTMLEntities(value)}); } else if (data.id == 'import') { that.triggerEvent('importannotations'); } else if (data.id == 'insert') {