Compare commits

..

No commits in common. "cb42e1d7fa0625b89131950cc7c88bcd4e73c568" and "ffeee38d7d263727e95c151e317778399a1f6922" have entirely different histories.

7 changed files with 30 additions and 52 deletions

View file

@ -55,10 +55,8 @@
{
'name': 'a',
'required': ['href'],
'optional': ['target'],
'validate': {
'href': /^((https?:\/\/|\/|mailto:).*?)/,
'target': /^_blank$/
'href': /^((https?:\/\/|\/|mailto:).*?)/
}
},
{'name': 'br'},
@ -509,8 +507,6 @@
'<a href="http://www.foo.com/">http://www.foo.com/</a>'
> Ox.sanitizeHTML('<a href="http://foo.com" onclick="alert()">foo</a>')
'<a href="http://foo.com">foo</a>'
> Ox.sanitizeHTML('<a href="http://foo.com" target="_blank">foo</a>')
'<a href="http://foo.com" target="_blank">foo</a>'
> Ox.sanitizeHTML('<a href="javascript:alert()">foo</a>')
'&lt;a href="javascript:alert()"&gt;foo&lt;/a&gt;'
> Ox.sanitizeHTML('<a href="foo">foo</a>')

View file

@ -31,6 +31,7 @@
Ox.LOCALE = locale;
if (locale == 'en') {
translations = {};
callback(true);
} else {
translations = {};
Ox.forEach(Ox.LOCALES, function(locales, module) {
@ -44,19 +45,15 @@
]);
}
});
}
url && Ox.makeArray(url).forEach(function(value) {
urls.push(Ox.makeArray(value));
});
if (urls.length) {
url && Ox.makeArray(url).forEach(function(value) {
urls.push(Ox.makeArray(value));
});
Ox.getJSON(urls, function(data) {
Ox.forEach(data, function(values, url) {
Ox.extend(translations, values);
});
callback(true);
})
} else {
callback(true);
});
}
} else {
callback(false);

View file

@ -810,8 +810,7 @@ Ox.URL = function(options) {
function parseURL(str, callback) {
// remove facebook spam
//str = str.replace(/\?fbclid=[A-Za-z0-9_]+/, '')
str = str.replace(/\?fbclid=.*/, '')
str = str.replace(/\?fbclid=[A-Za-z0-9_]+/, '')
// fixme: removing trailing slash makes it impossible to search for '/'
var split = str.split('#'),

View file

@ -220,11 +220,10 @@ Ox.ArrayEditable = function(options, self) {
}, 250);
},
cancel: function(data) {
var id = $(this).data('id');
self.editing = false;
that.gainFocus();
data.value === ''
? submitItem(id, '')
? submitItem(i, '')
: that.triggerEvent('blur', data);
},
change: function(data) {
@ -248,10 +247,9 @@ Ox.ArrayEditable = function(options, self) {
that.triggerEvent('open');
},
submit: function(data) {
var id = $(this).data('id');
self.editing = false;
that.gainFocus();
submitItem(id, data.value);
submitItem(i, data.value);
}
})
.appendTo(that);
@ -366,9 +364,8 @@ Ox.ArrayEditable = function(options, self) {
}
}
function submitItem(id, value) {
var item = Ox.getObjectById(self.options.items, id);
Ox.Log('AE', 'submitItem', id, item)
function submitItem(position, value) {
var item = self.options.items[position];
if (value === '') {
deleteItem(item.id);
} else {

View file

@ -71,10 +71,8 @@ Ox.AnnotationFolder = function(options, self) {
}
if (['in', 'out'].indexOf(key) > -1 && self.editing) {
var item = Ox.getObjectById(self.options.items, self.options.selected);
if (item) {
item[key] = value;
item.duration = self.options.out - self.options['in'];
}
item[key] = value;
item.duration = self.options.out - self.options['in'];
self.points = getPoints();
}
if (key == 'in') {
@ -327,7 +325,7 @@ Ox.AnnotationFolder = function(options, self) {
that.triggerEvent('add', {value: data.value || ''});
},
blur: function(data) {
if (data && data.id && data.id[0] == '_') {
if (data && data.id[0] == '_') {
changeAnnotation(data);
that.triggerEvent('blur');
} else {
@ -622,12 +620,10 @@ Ox.AnnotationFolder = function(options, self) {
function submitAnnotation(data) {
var item = Ox.getObjectById(self.options.items, data.id);
if (item) {
item.value = data.value;
self.editing = false;
self.options.sort == 'text' && self.$annotations.reloadItems();
that.triggerEvent('submit', item);
}
item.value = data.value;
self.editing = false;
self.options.sort == 'text' && self.$annotations.reloadItems();
that.triggerEvent('submit', item);
}
function toggleLayer() {
@ -753,7 +749,6 @@ Ox.AnnotationFolder = function(options, self) {
(id, data) -> <o> update item
@*/
that.updateItem = function(id, data) {
Ox.Log('AF', 'updateItem', id, data)
var item = Ox.getObjectById(self.options.items, id);
Ox.forEach(data, function(value, key) {
item[key] = value;
@ -765,7 +760,7 @@ Ox.AnnotationFolder = function(options, self) {
if (id != item.id) {
self.$annotations.find('.OxEditableElement').each(function() {
var $element = $(this);
if ($element.data('id') == id) {
if ($element.data('id') == self.options.selected) {
$element.data({id: item.id});
}
});

View file

@ -737,10 +737,7 @@ Ox.AnnotationPanel = function(options, self) {
@*/
that.blurItem = function() {
self.editing = false;
var $folder = getFolder(self.options.selected)
if ($folder) {
$folder.blurItem();
}
getFolder(self.options.selected).blurItem();
renderEditMenu();
return that;
};
@ -808,10 +805,7 @@ Ox.AnnotationPanel = function(options, self) {
// called from editannotation callback
// on the first update of a new annotation, the id will change
self.options.selected = item.id;
var $folder = getFolder(id);
if ($folder) {
$folder.updateItem(id, item);
}
getFolder(id).updateItem(id, item);
updateLanguages();
renderOptionsMenu();
renderEditMenu();

View file

@ -938,7 +938,7 @@ Ox.VideoAnnotationPanel = function(options, self) {
that.triggerEvent('resizemap', data);
},
select: function(data) {
selectAnnotation(data, !self.updating);
selectAnnotation(data, true);
},
showentityinfo: function(data) {
that.triggerEvent('showentityinfo', data);
@ -1340,7 +1340,7 @@ Ox.VideoAnnotationPanel = function(options, self) {
that.triggerEvent('annotationssize', {size: data.size});
}
function selectAnnotation(data, moveToPosition) {
function selectAnnotation(data, stayAtPosition) {
if (Ox.isUndefined(data)) {
// doubleclick on small timeline
data = getAnnotation();
@ -1351,11 +1351,13 @@ Ox.VideoAnnotationPanel = function(options, self) {
// FIXME
// self.editing = false;
if (data.id) {
var outOfRange = self.options.annotationsRange != 'position' && (
self.options.position < data['in']
|| self.options.position > data.out
)
if (moveToPosition && outOfRange) {
if (!stayAtPosition || (
self.options.annotationsRange != 'position' && (
self.options.position < data['in']
|| self.options.position > data.out
)
)
) {
setPosition(data['in']);
// if annotationsRange is 'position',
// this may cause a deselect
@ -1715,7 +1717,6 @@ Ox.VideoAnnotationPanel = function(options, self) {
(id, annotation) -> <o> update annotation with id
@*/
that.updateAnnotation = function(id, annotation) {
self.updating = true
// called from editannotation callback
// id might have changed if new annotation was created
if (annotation.id) {
@ -1729,7 +1730,6 @@ Ox.VideoAnnotationPanel = function(options, self) {
self.annotations = getAnnotations();
setTimelineState();
}
self.updating = false
};
/*@