diff --git a/readme/index/development.html b/readme/index/development.html index 042fe6e9..b5decde4 100644 --- a/readme/index/development.html +++ b/readme/index/development.html @@ -1,16 +1,16 @@

Development

-

Source code:  code.0x2620.org/browser

+

Source code:  trac.oxjs.org/browser

-

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

+

Open issues:  trac.oxjs.org/report

-

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

+

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

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

E-mail:  oxjs@oxjs.org

-

Matrix:  #oxjs:matrix.org

+

IRC:  irc.freenode.net#oxjs

Twitter:  @OxJS

diff --git a/source/Ox.js b/source/Ox.js index 675fbed3..16d1ce97 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; diff --git a/source/Ox/js/Constants.js b/source/Ox/js/Constants.js index 1fe2d45b..8f88ca13 100644 --- a/source/Ox/js/Constants.js +++ b/source/Ox/js/Constants.js @@ -63,8 +63,7 @@ Ox.LOCALE_NAMES = { 'el': 'Ελληνικά', 'en': 'English', 'fr': 'Français', - 'hi': 'हिन्दी', - 'tr': 'Türkçe' + 'hi': 'हिन्दी' }; //@ Ox.LOCALES Locales per module Ox.LOCALES = {}; diff --git a/source/Ox/js/Encoding.js b/source/Ox/js/Encoding.js index 974108ac..697f45e3 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.toString().replace(/%(?![0-9A-Fa-f]{2})/g, '%25') + return string.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) { diff --git a/source/Ox/json/locale.tr.json b/source/Ox/json/locale.tr.json deleted file mode 100644 index 81c526bc..00000000 --- a/source/Ox/json/locale.tr.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "%": "%", - ",": ",", - ".": ".", - "%A, %B %e, %Y": "%A, %B %e, %Y", - "%a, %b %e, %Y": "%a, %b %e, %Y", - "AD": "MS", - "AM": "", - "Apr": "", - "April": "Nisan", - "Aug": "", - "August": "Ağustos", - "BC": "MÖ", - "%B %e, %Y": "", - "%b %e, %Y": "", - "d": "g", - "day": "gün", - "days": "gün", - "days{2}": "gün", - "Dec": "", - "December": "Aralık", - "Fall": "Düşmek", - "Feb": "", - "February": "Şubat", - "Fri": "", - "Friday": "Cuma", - "h": "s", - "hour": "saat", - "hours": "saat", - "hours{2}": "saat", - "%I:%M %p": "", - "%I:%M:%S %p": "", - "Jan": "", - "January": "Ocak", - "Jul": "", - "July": "Temmuz", - "Jun": "", - "June": "Haziran", - "m": "d", - "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": "hayır", - "Nov": "", - "November": "Kasım", - "Oct": "", - "October": "Ekim", - "PM": "", - "rd": ".", - "rd{23}": ".", - "s": "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": "Salı", - "Wed": "", - "Wednesday": "Çarşamba", - "Winter": "kış", - "y": "yy", - "year": "yıl", - "years": "yıl", - "years{2}": "yıl" -} diff --git a/source/UI/css/UI.css b/source/UI/css/UI.css index c13be065..e6ea4dca 100644 --- a/source/UI/css/UI.css +++ b/source/UI/css/UI.css @@ -2458,7 +2458,6 @@ 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); diff --git a/source/UI/css/theme.css b/source/UI/css/theme.css index 83ac746d..5c62887e 100644 --- a/source/UI/css/theme.css +++ b/source/UI/css/theme.css @@ -1188,10 +1188,8 @@ Scrollbars background: -webkit-linear-gradient(left, $buttonActiveGradient); } -@supports not selector(::-webkit-scrollbar) { - body.$themeClass { - scrollbar-color: $bodyBorder $bodyBackground; - } +body.$themeClass { + scrollbar-color: $bodyBorder $bodyBackground; } /* diff --git a/source/UI/js/Core/Element.js b/source/UI/js/Core/Element.js index df17ea0b..5e1ca456 100644 --- a/source/UI/js/Core/Element.js +++ b/source/UI/js/Core/Element.js @@ -710,7 +710,6 @@ 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]; @@ -739,7 +738,6 @@ 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; diff --git a/source/UI/js/Core/Event.js b/source/UI/js/Core/Event.js index 31c1fee8..8df1650a 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 && target.postMessage(JSON.stringify({ + target.postMessage(JSON.stringify({ data: data, event: event, target: isParent ? Ox.oxid : null diff --git a/source/UI/js/Core/UI.js b/source/UI/js/Core/UI.js index 00155a51..5875480f 100644 --- a/source/UI/js/Core/UI.js +++ b/source/UI/js/Core/UI.js @@ -88,7 +88,6 @@ 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; diff --git a/source/UI/js/Core/URL.js b/source/UI/js/Core/URL.js index 14890354..f411d692 100644 --- a/source/UI/js/Core/URL.js +++ b/source/UI/js/Core/URL.js @@ -683,21 +683,15 @@ 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(key.type) > -1 + ['date', 'enum', 'float', 'integer', 'time', 'year'].indexOf( + Ox.getObjectById(self.options.findKeys[state.type], condition.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/ButtonGroup.js b/source/UI/js/Form/ButtonGroup.js index d8eb06ab..c1c5ff5e 100644 --- a/source/UI/js/Form/ButtonGroup.js +++ b/source/UI/js/Form/ButtonGroup.js @@ -31,29 +31,18 @@ Ox.ButtonGroup = function(options, self) { .options(options || {}) .update({ value: function() { - var positions = [], - values = Ox.makeArray(self.options.value); - - 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; + // 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'); + }); } - - Ox.forEach(self.$buttons, function(button, pos) { - var enabled = positions.indexOf(pos) > -1; - if (enabled !== button.value()) { - button.trigger('click'); - } - }); } }) .addClass( diff --git a/source/UI/js/Form/Filter.js b/source/UI/js/Form/Filter.js index f3215ffe..1ad8fa25 100644 --- a/source/UI/js/Form/Filter.js +++ b/source/UI/js/Form/Filter.js @@ -87,16 +87,6 @@ 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')}, @@ -131,7 +121,6 @@ Ox.Filter = function(options, self) { integer: 0, item: void 0, list: '', - place: '', string: '', text: '', time: '00:00:00', @@ -311,7 +300,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) @@ -357,7 +346,7 @@ Ox.Filter = function(options, self) { ) { condition.value = newFindKey.type == 'item' ? newFindKey.values[0].id - : (self.defaultValue[newFindKey.type] || ''); + : self.defaultValue[newFindKey.type]; } renderConditions(); } @@ -366,13 +355,6 @@ 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) @@ -380,7 +362,7 @@ Ox.Filter = function(options, self) { ? self.options.value.conditions[pos] : self.options.value.conditions[pos].conditions[subpos], isBetween = operator.indexOf(',') > -1, - wasBetween = isBetweenCondition(condition), + wasBetween = Ox.isArray(condition.value), wasUselessCondition = isUselessCondition(pos, subpos); Ox.Log('FILTER', 'chCoOp', 'iB/wB', isBetween, wasBetween) condition.operator = operator; @@ -587,14 +569,15 @@ Ox.Filter = function(options, self) { } function renderConditionOperator(condition) { - 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) + Ox.Log('FILTER', 'rCO', condition, self.conditionOperators[getConditionType( + Ox.getObjectById(self.options.findKeys, condition.key).type + )]) return Ox.Select({ - items: conditionOperators, + items: self.conditionOperators[getConditionType( + Ox.getObjectById(self.options.findKeys, condition.key).type + )], overlap: 'right', - value: condition.operator + (isBetweenCondition(condition) ? ',' : ''), + value: condition.operator + (Ox.isArray(condition.value) ? ',' : ''), width: 128 }) .bindEvent({ @@ -610,7 +593,7 @@ Ox.Filter = function(options, self) { } function renderConditionValue(condition) { - return (!isBetweenCondition(condition) + return (!Ox.isArray(condition.value) ? renderInput(condition) : Ox.InputGroup({ inputs: [ @@ -716,11 +699,11 @@ Ox.Filter = function(options, self) { Ox.Log('Form', 'renderInput', condition) var $input, findKey = Ox.getObjectById(self.options.findKeys, condition.key), - isBetween = isBetweenCondition(condition), + isArray = Ox.isArray(condition.value), isHue, // FIXME: always use 'int' type = findKey.type == 'integer' ? 'int' : findKey.type, - value = !isBetween ? condition.value : condition.value[index], + value = !isArray ? condition.value : condition.value[index], formatArgs, formatType, title; if (type == 'boolean') { $input = Ox.Select({ @@ -737,7 +720,7 @@ Ox.Filter = function(options, self) { return {id: i, title: v} }), value: value, - width: !isBetween ? 288 : 128 + width: !isArray ? 288 : 128 }); } else if (type == 'item') { $input = Ox.Select({ @@ -764,8 +747,8 @@ Ox.Filter = function(options, self) { $input = Ox.Range({ max: isHue ? 360 : 1, min: 0, - size: !isBetween ? 288 : 128, // fixme: should be width! - width: !isBetween ? 288 : 128, // have to set this too, for formatting when tuple + size: !isArray ? 288 : 128, // fixme: should be width! + width: !isArray ? 288 : 128, // have to set this too, for formatting when tuple step: isHue ? 1 : 0.01, thumbSize: 48, thumbValue: true, @@ -778,7 +761,7 @@ Ox.Filter = function(options, self) { value: value }); } else if (formatType == 'date') { - $input = Ox.DateInput(!isBetween ? { + $input = Ox.DateInput(!isArray ? { value: value, width: {day: 66, month: 66, year: 140} } : { @@ -786,7 +769,7 @@ Ox.Filter = function(options, self) { width: {day: 32, month: 32, year: 48} }); } else if (formatType == 'duration') { - $input = Ox.TimeInput(!isBetween ? { + $input = Ox.TimeInput(!isArray ? { seconds: true, value: value, width: {hours: 91, minutes: 91, seconds: 90} @@ -813,16 +796,16 @@ Ox.Filter = function(options, self) { Ox.Input({ id: 'width', type: 'int', - value: value[0] + value: value }), Ox.Input({ id: 'height', type: 'int', - value: value[1] + value: value }) ], separators: [{title: 'x', width: 16}], - width: !isBetween ? 288 : 128 + width: !isArray ? 288 : 128 }) } else if ([ 'currency', 'percent', 'unit', 'value' @@ -833,7 +816,7 @@ Ox.Filter = function(options, self) { Ox.Input({ type: type, value: value, - width: !isBetween ? 242 : 80 + width: !isArray ? 242 : 80 }), formatType == 'value' ? Ox.Select({ overlap: 'left', @@ -857,7 +840,7 @@ Ox.Filter = function(options, self) { split: function(value) { }, - width: !isBetween ? 288 : 128 + width: !isArray ? 288 : 128 }) } } else { @@ -867,7 +850,7 @@ Ox.Filter = function(options, self) { autocomplete: findKey.autocomplete, autocompleteSelect: true, autocompleteSelectSubmit: true, - width: !isBetween ? 288 : 128 + width: !isArray ? 288 : 128 }); } return $input; diff --git a/source/UI/js/Form/FormPanel.js b/source/UI/js/Form/FormPanel.js index 9eb7efe9..b6b3409c 100644 --- a/source/UI/js/Form/FormPanel.js +++ b/source/UI/js/Form/FormPanel.js @@ -15,18 +15,11 @@ Ox.FormPanel = function(options, self) { var that = Ox.Element({}, self) .defaults({ form: [], - listSize: 256, - section: null + listSize: 256 }) - .options(options || {}) - .update({ - section: setSection - }); + .options(options || {}); - if (self.options.section === null) { - self.options.section = self.options.form[0].id; - } - self.section = Ox.getIndexById(self.options.form, self.options.section); + self.section = 0; self.sectionTitle = self.options.form[self.section].title; self.$list = Ox.TableList({ columns: [ @@ -69,7 +62,7 @@ Ox.FormPanel = function(options, self) { }), max: 1, min: 1, - selected: [self.options.section], + selected: [self.options.form[0].id], sort: [{key: 'id', operator: '+'}], unique: 'id', width: self.options.listSize @@ -77,11 +70,7 @@ 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(); - self.options.section = self.options.form[self.section].id; that.triggerEvent('select', {section: data.ids[0]}); } }); @@ -141,18 +130,7 @@ Ox.FormPanel = function(options, self) { }); }); - self.$sections[self.section].show(); - - function setSection() { - var id = self.options.section, - section = Ox.getIndexById(self.options.form, id); - if (section > -1 && self.section != section) { - self.$sections[self.section].hide(); - self.section = section; - self.$list.options('selected', [id]); - self.$sections[self.section].show(); - } - }; + self.$sections[0].show(); that.setElement(Ox.SplitPanel({ elements: [ @@ -213,24 +191,13 @@ Ox.FormPanel = function(options, self) { values values @*/ that.values = function() { - 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]); - } - }); - } + var values = {}; + self.options.form.forEach(function(section, i) { + values[section.id] = self.$forms[i].values(); + }); + return values; }; - return that; }; diff --git a/source/UI/js/Form/Input.js b/source/UI/js/Form/Input.js index 488f042b..bce4e153 100644 --- a/source/UI/js/Form/Input.js +++ b/source/UI/js/Form/Input.js @@ -309,13 +309,6 @@ Ox.Input = function(options, self) { click: function() { self.options.disabled && that.gainFocus(); }, - input: event => { - /* - if (!self.options.autocomplete && Ox.contains(['text', 'password'], self.options.type)) { - change(event) - } - */ - }, blur: blur, change: change, focus: focus diff --git a/source/UI/js/List/List.js b/source/UI/js/List/List.js index 0c0f9bb1..b5421c02 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.pageLength); + return Math.floor(pos / self.options.pageLength); } function getPageByScrollPosition(pos) { diff --git a/source/UI/js/Map/Map.js b/source/UI/js/Map/Map.js index 9f5c4392..70a54676 100644 --- a/source/UI/js/Map/Map.js +++ b/source/UI/js/Map/Map.js @@ -922,12 +922,8 @@ 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() - if (!bounds) { - self.boundsChanged = false; - return - } - var southWest = bounds.getSouthWest(), + var bounds = self.map.getBounds(), + southWest = bounds.getSouthWest(), northEast = bounds.getNorthEast(), south = southWest.lat(), west = southWest.lng(), diff --git a/source/UI/js/Map/MapEditor.js b/source/UI/js/Map/MapEditor.js index 64b36988..1b358d7f 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 && place.id ? place.id : ''; + self.selectedPlace = 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 diff --git a/source/UI/js/Map/MapMarker.js b/source/UI/js/Map/MapMarker.js index 10eb69eb..b126a30a 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] || typeColor['mapPlaceFeatureColor']; + that.color = typeColor[that.place.type]; } else if (Ox.isArray(color)) { that.color = color; } else { diff --git a/source/UI/js/Menu/Menu.js b/source/UI/js/Menu/Menu.js index dafa3aab..d3f5f439 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 && item.items) { + if (item.group) { items[i] = item.items.map(function(v) { return Ox.extend(v, { group: item.group @@ -463,6 +463,10 @@ 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', { @@ -481,6 +485,10 @@ 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 8d8479e1..43db8d45 100644 --- a/source/UI/js/Menu/MenuItem.js +++ b/source/UI/js/Menu/MenuItem.js @@ -51,6 +51,9 @@ 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); @@ -74,27 +77,6 @@ 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') @@ -122,17 +104,21 @@ Ox.MenuItem = function(options, self) { : {} ) .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 - - }) + 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() + ) + ) ) .append( that.$modifiers = Ox.$('') diff --git a/source/UI/js/Video/AnnotationFolder.js b/source/UI/js/Video/AnnotationFolder.js index 4b04dcd4..f6fb3127 100644 --- a/source/UI/js/Video/AnnotationFolder.js +++ b/source/UI/js/Video/AnnotationFolder.js @@ -371,8 +371,7 @@ 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', - 'control_c', 'control_v', + 'slash', 'space' ].forEach(function(key) { key = 'key.' + key; self.$annotations.bindEvent(key, function() { @@ -402,8 +401,7 @@ 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', - 'control_c', 'control_v', + 'slash', 'space' ].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 7e03f779..83036b77 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: Ox.decodeHTMLEntities(value)}); + that.triggerEvent('find', {value: value}); } else if (data.id == 'findannotations') { - that.triggerEvent('findannotations', {key: key, value: Ox.decodeHTMLEntities(value)}); + that.triggerEvent('findannotations', {key: key, value: value}); } else if (data.id == 'import') { that.triggerEvent('importannotations'); } else if (data.id == 'insert') { @@ -457,8 +457,7 @@ 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', - 'control_c', 'control_v', + 'slash', 'space' ].forEach(function(key) { key = 'key.' + key; self.$folder[index].bindEvent(key, function() { diff --git a/source/UI/js/Video/ClipPanel.js b/source/UI/js/Video/ClipPanel.js index ea9eb562..275da1d9 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 = [].concat([ + self.columns = [ { align: 'right', id: 'index', @@ -183,9 +183,7 @@ Ox.ClipPanel = function(options, self) { visible: true, width: 90 }, - ], - hasVolume() ? - [{ + { align: 'right', editable: self.options.editable, format: function(value, data) { @@ -200,8 +198,6 @@ Ox.ClipPanel = function(options, self) { visible: false, width: 45 }, - ] : [], - [ { addable: false, id: 'sort', @@ -209,8 +205,7 @@ Ox.ClipPanel = function(options, self) { // title: Ox._('Sort'), visible: false } - ] - ); + ]; self.$menubar = Ox.Bar({ size: 24 @@ -592,12 +587,6 @@ 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)); diff --git a/source/UI/js/Video/VideoAnnotationPanel.js b/source/UI/js/Video/VideoAnnotationPanel.js index 5ce19326..639fa1fa 100644 --- a/source/UI/js/Video/VideoAnnotationPanel.js +++ b/source/UI/js/Video/VideoAnnotationPanel.js @@ -109,11 +109,6 @@ 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']); @@ -972,8 +967,7 @@ 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', - 'control_c', 'control_v', + 'slash', 'space' ].forEach(function(key) { key = 'key.' + key; self.$annotationPanel.bindEvent(key, function() { @@ -1750,9 +1744,6 @@ Ox.VideoAnnotationPanel = function(options, self) { self.$annotationPanel[i].removeItem(id); }; */ - that.playInToOut = function() { - self.$player[0].playInToOut(); - } return that; diff --git a/source/UI/js/Video/VideoEditPanel.js b/source/UI/js/Video/VideoEditPanel.js index cc40507e..0a4f8627 100644 --- a/source/UI/js/Video/VideoEditPanel.js +++ b/source/UI/js/Video/VideoEditPanel.js @@ -266,6 +266,9 @@ 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}); }, diff --git a/source/UI/js/Video/VideoElement.js b/source/UI/js/Video/VideoElement.js index 72bdfac6..0e4e33a9 100644 --- a/source/UI/js/Video/VideoElement.js +++ b/source/UI/js/Video/VideoElement.js @@ -31,10 +31,8 @@ Ox.VideoElement = function(options, self) { .defaults({ autoplay: false, loop: false, - muted: false, playbackRate: 1, - items: [], - volume: 1 + items: [] }) .options(options || {}) .update({ @@ -103,8 +101,7 @@ Ox.VideoElement = function(options, self) { self.$videos = [getVideo(), getVideo()]; self.$video = self.$videos[self.currentVideo]; self.video = self.$video[0]; - self.volume = self.options.volume; - self.muted = self.options.muted; + self.volume = 1; self.$brightness = $('
').css({ width: '100%', height: '100%', @@ -165,33 +162,15 @@ Ox.VideoElement = function(options, self) { }, progress: function() { // stop buffering if buffered to end point - 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'] + 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'] && self.video.buffered.end(i) >= item.out) { - cached = true + self.video.preload = 'none'; + self.buffering = false; } }); - return cached } }, seeking: function() { @@ -223,10 +202,6 @@ 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); }; @@ -356,7 +331,7 @@ Ox.VideoElement = function(options, self) { function setCurrentVideo(callback) { var css = {}, - muted = self.muted, + muted = false, item = self.items[self.currentItem], next; Ox.Log('Video', 'sCV', item); @@ -368,6 +343,7 @@ 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]; @@ -376,8 +352,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); @@ -554,11 +530,8 @@ Ox.VideoElement = function(options, self) { /*@ muted get/set muted @*/ - that.muted = function(value) { - if (!Ox.isUndefined(value)) { - self.muted = value; - } - return getset('muted', value); + that.muted = function() { + return getset('muted', arguments[0]); }; /*@ diff --git a/source/UI/js/Video/VideoPlayer.js b/source/UI/js/Video/VideoPlayer.js index 9a15bcf4..36c2822b 100644 --- a/source/UI/js/Video/VideoPlayer.js +++ b/source/UI/js/Video/VideoPlayer.js @@ -444,9 +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 + playbackRate: self.options.playbackRate }) .bindEvent(Ox.extend({ durationchange: durationchange, @@ -1794,22 +1792,20 @@ Ox.VideoPlayer = function(options, self) { function goToNext(type, direction) { // type can be 'chapter' or 'result' var position, positions; - if (type == 'chapter' && self.options.chapters) { + if (type == 'chapter') { positions = self.options.chapters.map(function(chapter) { return chapter.position; }); - } else if (type == 'result' && self.results) { + } else if (type == 'result') { positions = Ox.unique(self.results.map(function(result) { return result['in']; })); } - if (positions) { - position = Ox.nextValue(positions, self.options.position, direction); - setPosition(position); - that.triggerEvent('position', { - position: self.options.position - }); - } + position = Ox.nextValue(positions, self.options.position, direction); + setPosition(position); + that.triggerEvent('position', { + position: self.options.position + }); } function goToPoint() { diff --git a/source/UI/js/Video/VideoPlayerPanel.js b/source/UI/js/Video/VideoPlayerPanel.js index 336277e4..1b376d81 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 !self.options.layers ? [] : Ox.flatten(self.options.layers.map(function(layer) { + return 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}; }); @@ -722,10 +722,6 @@ Ox.VideoPlayerPanel = function(options, self) { self.$videoPanel.toggleElement(1); }; - that.playInToOut = function() { - self.$video.playInToOut(); - }; - return that; } diff --git a/source/UI/json/locale.tr.json b/source/UI/json/locale.tr.json deleted file mode 100644 index 7f671f86..00000000 --- a/source/UI/json/locale.tr.json +++ /dev/null @@ -1,281 +0,0 @@ -{ - ", 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": "Bir grup koşul ekle", - "Add column after": "Sonrasına sütun ekle", - "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": "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": "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" -} diff --git a/source/UI/svg/markerChapter.svg b/source/UI/svg/markerChapter.svg index 77c27515..a967b034 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 0c6ac903..76c0f8a2 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 31e0a2f6..96874286 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 9480df8f..89eab297 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 97ee7702..65a50933 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 693abd25..c0b4a027 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 e2148e0f..6dd8cbb4 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 5553753a..bae71347 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 cc06236b..603ab190 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 4cc62414..8cd3cbed 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 6ff4944d..e674cbbf 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 2c753ba5..7364c468 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 c92da4e9..addc47a5 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 6d43f62d..c84376c5 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 576f8ecb..637bbb69 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 573a23d4..6dfa6a68 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 28963fca..19051857 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 10878007..8e069e36 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 592ab44b..83a2a741 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 3e7a6e50..3416a361 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 f5138dbd..a592364c 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 798b6da9..c8e1ec57 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 a7cf0833..b36dcd4f 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 42203f1e..706096a8 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 8e8bc87c..bb513c58 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 1f2007e8..6084b703 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 10f263d2..ed6cfd09 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 658e7e3f..ea571ace 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 c117d311..98f2dec7 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 e67196ac..1022502d 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 59ca035c..b58c0d39 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 ee4d575f..3dd2c89e 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 4ba47325..cc915fd2 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 9c6e9695..1b62112c 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 5a3cdd1e..f5e502e8 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 522a2604..5f30b377 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 3a982ab9..4226321e 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 8accbd3d..0b05a9f9 100755 --- a/tools/build/build.py +++ b/tools/build/build.py @@ -82,6 +82,8 @@ 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'):