first commit

This commit is contained in:
alazhar
2020-01-02 22:20:31 +07:00
commit 10eb3340ad
5753 changed files with 631345 additions and 0 deletions

View File

@ -0,0 +1,26 @@
#finder-filter-window {
margin: 10px 0 10px;
overflow: auto;
padding: 0;
width: 100%;
}
ul#finder-filter-select-dates {
list-style: none;
margin: 0;
padding: 0;
}
ul#finder-filter-select-dates li.filter-date {
background: none;
float: left;
list-style: none;
margin: 0;
padding: 5px 0;
text-align: left;
width: 49%;
}
ul#finder-filter-select-dates li.filter-date select.filter-date-operator {
margin-right: 10px;
}

View File

@ -0,0 +1,90 @@
#advanced-search {
text-align:left;
width:100%;
padding:5px 0 15px;
}
#advanced-search-toggle {
cursor:pointer;
}
#search-query-explained {
padding:10px 0;
}
#search-query-explained span.term,
#search-query-explained span.date,
#search-query-explained span.when,
#search-query-explained span.branch,
#search-query-explained span.node,
#search-query-explained span.op {
font-weight:bold;
}
#search-query-explained span.op {
text-transform:uppercase;
}
#search-results li.search-result .mime-pdf {
padding-left:20px;
background:url(../../system/images/pdf_button.png) no-repeat;
}
#search-results .search-pagination,
#search-results .pagination,
#search-results .search-pages-counter {
clear:both;
margin:0 auto;
}
#highlighter-start, #highlighter-end {
display:none;
height:0;
opacity:0;
}
span.highlight {
background-color:#FFFFCC;
font-weight:bold;
padding:1px 4px;
}
ul.autocompleter-choices {
position:absolute;
margin:0;
padding:0;
list-style:none;
border:1px solid #EEEEEE;
background-color:white;
border-right-color:#DDDDDD;
border-bottom-color:#DDDDDD;
text-align:left;
font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;
z-index:50;
}
ul.autocompleter-choices li {
background:none;
position:relative;
padding:0.1em 1.5em 0.1em 1em;
cursor:pointer;
font-weight:normal;
font-size:1em;
}
ul.autocompleter-choices li.autocompleter-selected {
background-color:#444;
color:#fff;
}
ul.autocompleter-choices span.autocompleter-queried {
font-weight:bold;
}
ul.autocompleter-choices li.autocompleter-selected span.autocompleter-queried {
color:#9FCFFF;
}
ul#finder-filter-select-list {
top: 4em !important;
}

View File

@ -0,0 +1 @@
<!DOCTYPE html><title></title>

View File

@ -0,0 +1,17 @@
#finder-indexer-container {
text-align: center;
}
#finder-progress-container {
width: 350px;
margin: 0 auto;
}
h1.finder-error {
color: #FF0000;
}
p.finder-error {
color: #FF0000;
font-weight:bold;
}

View File

@ -0,0 +1,29 @@
#finder-filter-window {
width:100%;
padding:0;
margin:10px 0 10px;
overflow:auto;
}
#finder-filter-select-list {
clear: left;
list-style: none;
padding:0;
margin:0;
overflow:auto;
}
#finder-filter-select-list li, #finder-filter-select-list li.filter-branch {
list-style: none;
padding:5px 10px 5px 0;
margin:0;
float: left;
width:49%;
background: none;
text-align: left;
}
#finder-filter-select-list li label {
display:block;
clear:right;
}

View File

@ -0,0 +1,56 @@
#finder-filter-window {
width: 100%;
padding: 0;
margin: 10px 0 10px;
overflow: auto;
}
.checklist,
#branch-selectors {
border: 1px solid #ccc;
height: 220px;
overflow: auto;
width: 220px;
float: left;
margin: 0;
}
#finder-filter-window dl {
padding: 0;
margin: 0;
width: 220px;
}
.checklist {
border-left-width: 0;
}
#filter_lists div {
float: left;
}
.checklist dt,
#branch-selectors dt {
background-color: #F6F6F6;
border-bottom: 1px solid #ccc;
padding: 0 0 2px 2px;
width: 100%;
text-align: left;
}
.checklist,
.checklist dd,
#branch-selectors dd,
.checklist div.control-group,
#branch-selectors div.control-group {
margin: 0;
padding: 0 0 0 2px;
width: 100%;
text-align: left;
}
.checklist label:hover,
#branch-selectors label:hover {
background: #F6F6F6;
color: #000;
}

View File

@ -0,0 +1 @@
<!DOCTYPE html><title></title>

View File

@ -0,0 +1,505 @@
var Observer = new Class({
Implements: [Options, Events],
options: {
periodical: false,
delay: 1000
},
initialize: function (el, onFired, options) {
this.element = document.id(el) || $document.id(el);
this.addEvent('onFired', onFired);
this.setOptions(options);
this.bound = this.changed.bind(this);
this.resume();
},
changed: function () {
var value = this.element.get('value');
if ($equals(this.value, value)) return;
this.clear();
this.value = value;
this.timeout = this.onFired.delay(this.options.delay, this);
},
setValue: function (value) {
this.value = value;
this.element.set('value', value);
return this.clear();
},
onFired: function () {
this.fireEvent('onFired', [this.value, this.element]);
},
clear: function () {
clearTimeout(this.timeout || null);
return this;
},
pause: function () {
if (this.timer) clearTimeout(this.timer);
else this.element.removeEvent('keyup', this.bound);
return this.clear();
},
resume: function () {
this.value = this.element.get('value');
if (this.options.periodical) this.timer = this.changed.periodical(this.options.periodical, this);
else this.element.addEvent('keyup', this.bound);
return this;
}
});
var $equals = function (obj1, obj2) {
return (obj1 == obj2 || JSON.encode(obj1) == JSON.encode(obj2));
};
var Autocompleter = new Class({
Implements: [Options, Events],
options: {
minLength: 1,
markQuery: true,
width: 'inherit',
maxChoices: 10,
injectChoice: null,
customChoices: null,
emptyChoices: null,
visibleChoices: true,
className: 'autocompleter-choices',
zIndex: 1000,
delay: 400,
observerOptions: {},
fxOptions: {},
autoSubmit: false,
overflow: false,
overflowMargin: 25,
selectFirst: false,
filter: null,
filterCase: false,
filterSubset: false,
forceSelect: false,
selectMode: true,
choicesMatch: null,
multiple: false,
separator: ', ',
separatorSplit: /\s*[,;]\s*/,
autoTrim: false,
allowDupes: false,
cache: true,
relative: false
},
initialize: function (element, options) {
this.element = document.id(element);
this.setOptions(options);
this.build();
this.observer = new Observer(this.element, this.prefetch.bind(this), Object.merge({}, {
'delay': this.options.delay
}, this.options.observerOptions));
this.queryValue = null;
if (this.options.filter) this.filter = this.options.filter.bind(this);
var mode = this.options.selectMode;
this.typeAhead = (mode == 'type-ahead');
this.selectMode = (mode === true) ? 'selection' : mode;
this.cached = [];
},
build: function () {
if (document.id(this.options.customChoices)) {
this.choices = this.options.customChoices;
} else {
this.choices = new Element('ul', {
'class': this.options.className,
'styles': {
'zIndex': this.options.zIndex
}
}).inject(document.body);
this.relative = false;
if (this.options.relative) {
this.choices.inject(this.element, 'after');
this.relative = this.element.getOffsetParent();
}
this.fix = new OverlayFix(this.choices);
}
if (!this.options.separator.test(this.options.separatorSplit)) {
this.options.separatorSplit = this.options.separator;
}
this.fx = (!this.options.fxOptions) ? null : new Fx.Tween(this.choices, Object.merge({}, {
'property': 'opacity',
'link': 'cancel',
'duration': 200
}, this.options.fxOptions)).addEvent('onStart', Chain.prototype.clearChain).set(0);
this.element.setProperty('autocomplete', 'off').addEvent((Browser.ie || Browser.safari || Browser.chrome) ? 'keydown' : 'keypress', this.onCommand.bind(this)).addEvent('click', this.onCommand.bind(this, [false])).addEvent('focus', this.toggleFocus.pass({
bind: this,
arguments: true,
delay: 100
})).addEvent('blur', this.toggleFocus.pass({
bind: this,
arguments: false,
delay: 100
}));
},
destroy: function () {
if (this.fix) this.fix.destroy();
this.choices = this.selected = this.choices.destroy();
},
toggleFocus: function (state) {
this.focussed = state;
if (!state) this.hideChoices(true);
this.fireEvent((state) ? 'onFocus' : 'onBlur', [this.element]);
},
onCommand: function (e) {
if (!e && this.focussed) return this.prefetch();
if (e && e.key && !e.shift) {
switch (e.key) {
case 'enter':
if (this.element.value != this.opted) return true;
if (this.selected && this.visible) {
this.choiceSelect(this.selected);
return !!(this.options.autoSubmit);
}
break;
case 'up':
case 'down':
if (!this.prefetch() && this.queryValue !== null) {
var up = (e.key == 'up');
this.choiceOver((this.selected || this.choices)[(this.selected) ? ((up) ? 'getPrevious' : 'getNext') : ((up) ? 'getLast' : 'getFirst')](this.options.choicesMatch), true);
}
return false;
case 'esc':
case 'tab':
this.hideChoices(true);
break;
}
}
return true;
},
setSelection: function (finish) {
var input = this.selected.inputValue,
value = input;
var start = this.queryValue.length,
end = input.length;
if (input.substr(0, start).toLowerCase() != this.queryValue.toLowerCase()) start = 0;
if (this.options.multiple) {
var split = this.options.separatorSplit;
value = this.element.value;
start += this.queryIndex;
end += this.queryIndex;
var old = value.substr(this.queryIndex).split(split, 1)[0];
value = value.substr(0, this.queryIndex) + input + value.substr(this.queryIndex + old.length);
if (finish) {
var tokens = value.split(this.options.separatorSplit).filter(function (entry) {
return this.test(entry);
}, /[^\s,]+/);
if (!this.options.allowDupes) tokens = [].combine(tokens);
var sep = this.options.separator;
value = tokens.join(sep) + sep;
end = value.length;
}
}
this.observer.setValue(value);
this.opted = value;
if (finish || this.selectMode == 'pick') start = end;
this.element.selectRange(start, end);
this.fireEvent('onSelection', [this.element, this.selected, value, input]);
},
showChoices: function () {
var match = this.options.choicesMatch,
first = this.choices.getFirst(match);
this.selected = this.selectedValue = null;
if (this.fix) {
var pos = this.element.getCoordinates(this.relative),
width = this.options.width || 'auto';
this.choices.setStyles({
'left': pos.left,
'top': pos.bottom,
'width': (width === true || width == 'inherit') ? pos.width : width
});
}
if (!first) return;
if (!this.visible) {
this.visible = true;
this.choices.setStyle('display', '');
if (this.fx) this.fx.start(1);
this.fireEvent('onShow', [this.element, this.choices]);
}
if (this.options.selectFirst || this.typeAhead || first.inputValue == this.queryValue) this.choiceOver(first, this.typeAhead);
var items = this.choices.getChildren(match),
max = this.options.maxChoices;
var styles = {
'overflowY': 'hidden',
'height': ''
};
this.overflown = false;
if (items.length > max) {
var item = items[max - 1];
styles.overflowY = 'scroll';
styles.height = item.getCoordinates(this.choices).bottom;
this.overflown = true;
};
this.choices.setStyles(styles);
this.fix.show();
if (this.options.visibleChoices) {
var scroll = document.getScroll(),
size = document.getSize(),
coords = this.choices.getCoordinates();
if (coords.right > scroll.x + size.x) scroll.x = coords.right - size.x;
if (coords.bottom > scroll.y + size.y) scroll.y = coords.bottom - size.y;
window.scrollTo(Math.min(scroll.x, coords.left), Math.min(scroll.y, coords.top));
}
},
// TODO: No $arguments in MT 1.3
hideChoices: function (clear) {
if (clear) {
var value = this.element.value;
if (this.options.forceSelect) value = this.opted;
if (this.options.autoTrim) {
value = value.split(this.options.separatorSplit).filter($arguments(0)).join(this.options.separator);
}
this.observer.setValue(value);
}
if (!this.visible) return;
this.visible = false;
if (this.selected) this.selected.removeClass('autocompleter-selected');
this.observer.clear();
var hide = function () {
this.choices.setStyle('display', 'none');
this.fix.hide();
}.bind(this);
if (this.fx) this.fx.start(0).chain(hide);
else hide();
this.fireEvent('onHide', [this.element, this.choices]);
},
prefetch: function () {
var value = this.element.value,
query = value;
if (this.options.multiple) {
var split = this.options.separatorSplit;
var values = value.split(split);
var index = this.element.getSelectedRange().start;
var toIndex = value.substr(0, index).split(split);
var last = toIndex.length - 1;
index -= toIndex[last].length;
query = values[last];
}
if (query.length < this.options.minLength) {
this.hideChoices();
} else {
if (query === this.queryValue || (this.visible && query == this.selectedValue)) {
if (this.visible) return false;
this.showChoices();
} else {
this.queryValue = query;
this.queryIndex = index;
if (!this.fetchCached()) this.query();
}
}
return true;
},
fetchCached: function () {
return false;
if (!this.options.cache || !this.cached || !this.cached.length || this.cached.length >= this.options.maxChoices || this.queryValue) return false;
this.update(this.filter(this.cached));
return true;
},
update: function (tokens) {
this.choices.empty();
this.cached = tokens;
var type = tokens && typeOf(tokens);
if (!type || (type == 'array' && !tokens.length) || (type == 'hash' && !tokens.getLength())) {
(this.options.emptyChoices || this.hideChoices).call(this);
} else {
if (this.options.maxChoices < tokens.length && !this.options.overflow) tokens.length = this.options.maxChoices;
tokens.each(this.options.injectChoice ||
function (token) {
var choice = new Element('li', {
'html': this.markQueryValue(token)
});
choice.inputValue = token;
this.addChoiceEvents(choice).inject(this.choices);
}, this);
this.showChoices();
}
},
choiceOver: function (choice, selection) {
if (!choice || choice == this.selected) return;
if (this.selected) this.selected.removeClass('autocompleter-selected');
this.selected = choice.addClass('autocompleter-selected');
this.fireEvent('onSelect', [this.element, this.selected, selection]);
if (!this.selectMode) this.opted = this.element.value;
if (!selection) return;
this.selectedValue = this.selected.inputValue;
if (this.overflown) {
var coords = this.selected.getCoordinates(this.choices),
margin = this.options.overflowMargin,
top = this.choices.scrollTop,
height = this.choices.offsetHeight,
bottom = top + height;
if (coords.top - margin < top && top) this.choices.scrollTop = Math.max(coords.top - margin, 0);
else if (coords.bottom + margin > bottom) this.choices.scrollTop = Math.min(coords.bottom - height + margin, bottom);
}
if (this.selectMode) this.setSelection();
},
choiceSelect: function (choice) {
if (choice) this.choiceOver(choice);
this.setSelection(true);
this.queryValue = false;
this.hideChoices();
},
filter: function (tokens) {
return (tokens || this.tokens).filter(function (token) {
return this.test(token);
}, new RegExp(((this.options.filterSubset) ? '' : '^') + this.queryValue.escapeRegExp(), (this.options.filterCase) ? '' : 'i'));
},
markQueryValue: function (str) {
return (!this.options.markQuery || !this.queryValue) ? str : str.replace(new RegExp('(' + ((this.options.filterSubset) ? '' : '^') + this.queryValue.escapeRegExp() + ')', (this.options.filterCase) ? '' : 'i'), '<span class="autocompleter-queried">$1</span>');
},
addChoiceEvents: function (el) {
return el.addEvents({
'mouseover': this.choiceOver.bind(this, el),
'click': this.choiceSelect.bind(this, el)
});
}
});
var OverlayFix = new Class({
initialize: function (el) {
if (Browser.ie) {
this.element = document.id(el);
this.relative = this.element.getOffsetParent();
this.fix = new Element('iframe', {
'frameborder': '0',
'scrolling': 'no',
'src': 'javascript:false;',
'styles': {
'position': 'absolute',
'border': 'none',
'display': 'none',
'filter': 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'
}
}).inject(this.element, 'after');
}
},
show: function () {
if (this.fix) {
var coords = this.element.getCoordinates(this.relative);
delete coords.right;
delete coords.bottom;
this.fix.setStyles(Object.append(coords, {
'display': '',
'zIndex': (this.element.getStyle('zIndex') || 1) - 1
}));
}
return this;
},
hide: function () {
if (this.fix) this.fix.setStyle('display', 'none');
return this;
},
destroy: function () {
if (this.fix) this.fix = this.fix.destroy();
}
});
Element.implement({
getSelectedRange: function () {
if (!Browser.ie) return {
start: this.selectionStart,
end: this.selectionEnd
};
var pos = {
start: 0,
end: 0
};
var range = this.getDocument().selection.createRange();
if (!range || range.parentElement() != this) return pos;
var dup = range.duplicate();
if (this.type == 'text') {
pos.start = 0 - dup.moveStart('character', -100000);
pos.end = pos.start + range.text.length;
} else {
var value = this.value;
var offset = value.length - value.match(/[\n\r]*$/)[0].length;
dup.moveToElementText(this);
dup.setEndPoint('StartToEnd', range);
pos.end = offset - dup.text.length;
dup.setEndPoint('StartToStart', range);
pos.start = offset - dup.text.length;
}
return pos;
},
selectRange: function (start, end) {
if (Browser.ie) {
var diff = this.value.substr(start, end - start).replace(/\r/g, '').length;
start = this.value.substr(0, start).replace(/\r/g, '').length;
var range = this.createTextRange();
range.collapse(true);
range.moveEnd('character', start + diff);
range.moveStart('character', start);
range.select();
} else {
this.focus();
this.setSelectionRange(start, end);
}
return this;
}
});
Autocompleter.Base = Autocompleter;
Autocompleter.Request = new Class({
Extends: Autocompleter,
options: {
postData: {},
ajaxOptions: {},
postVar: 'value'
},
query: function () {
var data = this.options.postData.unlink || {};
data[this.options.postVar] = this.queryValue;
var indicator = document.id(this.options.indicator);
if (indicator) indicator.setStyle('display', '');
var cls = this.options.indicatorClass;
if (cls) this.element.addClass(cls);
this.fireEvent('onRequest', [this.element, this.request, data, this.queryValue]);
this.request.send({
'data': data
});
},
queryResponse: function () {
var indicator = document.id(this.options.indicator);
if (indicator) indicator.setStyle('display', 'none');
var cls = this.options.indicatorClass;
if (cls) this.element.removeClass(cls);
return this.fireEvent('onComplete', [this.element, this.request]);
}
});
Autocompleter.Request.JSON = new Class({
Extends: Autocompleter.Request,
initialize: function (el, url, options) {
this.parent(el, options);
this.request = new Request.JSON(Object.merge({}, {
'url': url,
'link': 'cancel'
}, this.options.ajaxOptions)).addEvent('onComplete', this.queryResponse.bind(this));
},
queryResponse: function (response) {
this.parent();
this.update(response);
}
});
Autocompleter.Request.HTML = new Class({
Extends: Autocompleter.Request,
initialize: function (el, url, options) {
this.parent(el, options);
this.request = new Request.HTML(Object.merge({}, {
'url': url,
'link': 'cancel',
'update': this.choices
}, this.options.ajaxOptions)).addEvent('onComplete', this.queryResponse.bind(this));
},
queryResponse: function (tree, elements) {
this.parent();
if (!elements || !elements.length) {
this.hideChoices();
} else {
this.choices.getChildren(this.options.choicesMatch).each(this.options.injectChoice ||
function (choice) {
var value = choice.innerHTML;
choice.inputValue = value;
this.addChoiceEvents(choice.set('html', this.markQueryValue(value)));
}, this);
this.showChoices();
}
}
});
Autocompleter.Ajax = {
Base: Autocompleter.Request,
Json: Autocompleter.Request.JSON,
Xhtml: Autocompleter.Request.HTML
};

View File

@ -0,0 +1,44 @@
window.addEvent('domready', function () {
sm = document.id('system-message');
if (sm) {
sm.addEvent('check', function () {
open = 0;
messages = this.getElements('li');
for (i = 0, n = messages.length; i < n; i++) {
if (messages[i].getProperty('hidden') != 'hidden') {
open++;
}
}
if (open < 1) {
this.remove();
}
});
}
function hideWarning(e) {
new Json.Remote(this.getProperty('link') + '&format=json', {
linkId: this.getProperty('id'),
onComplete: function (response) {
if (response.error == false) {
document.id(this.options.linkId).fireEvent('hide');
document.id('system-message').fireEvent('check');
} else {
alert(response.message);
}
}
}).send();
}
document.id('a.hide-warning').each(function (a) {
a.setProperty('link', a.getProperty('href'));
a.setProperty('href', 'javascript: void(0);');
a.addEvent('hide', function () {
this.getParent().setProperty('hidden', 'hidden');
var mySlider = new Fx.Slide(this.getParent(), {
duration: 300
});
mySlider.slideOut();
});
// TODO: bindWithEvent deprecated in MT 1.3
a.addEvent('click', hideWarning.bindWithEvent(a));
});
});

View File

@ -0,0 +1,100 @@
var Highlighter = new Class({
options: {
autoUnhighlight: true,
caseSensitive: false,
startElement: false,
endElement: false,
elements: new Array(),
className: 'highlight',
onlyWords: true,
tag: 'span'
},
initialize: function (options) {
this.setOptions(options);
this.getElements(this.options.startElement, this.options.endElement);
this.words = [];
},
highlight: function (words) {
if (words.constructor === String) {
words = [words];
}
if (this.options.autoUnhighlight) {
this.unhighlight(words);
}
var pattern = this.options.onlyWords ? '\b' + pattern + '\b' : '(' + words.join('\\b|\\b') + ')';
var regex = new RegExp(pattern, this.options.caseSensitive ? '' : 'i');
this.options.elements.each(function (el) {
this.recurse(el, regex, this.options.className);
}, this);
return this;
},
unhighlight: function (words) {
if (words.constructor === String) {
words = [words];
}
words.each(function (word) {
word = (this.options.caseSensitive ? word : word.toUpperCase());
if (this.words[word]) {
var elements = $$(this.words[word]);
elements.setProperty('class', '');
elements.each(function (el) {
var tn = document.createTextNode(el.getText());
el.getParent().replaceChild(tn, el);
});
}
}, this);
return this;
},
recurse: function (node, regex, klass) {
if (node.nodeType === 3) {
var match = node.data.match(regex);
if (match) {
var highlight = new Element(this.options.tag);
highlight.addClass(klass);
var wordNode = node.splitText(match.index);
wordNode.splitText(match[0].length);
var wordClone = wordNode.cloneNode(true);
highlight.appendChild(wordClone);
wordNode.parentNode.replaceChild(highlight, wordNode);
highlight.setProperty('rel', highlight.get('text'));
var comparer = highlight.get('text');
if (!this.options.caseSensitive) {
comparer = highlight.get('text').toUpperCase();
}
if (!this.words[comparer]) {
this.words[comparer] = [];
}
this.words[comparer].push(highlight);
return 1;
}
} else if ((node.nodeType === 1 && node.childNodes) && !/(script|style|textarea|iframe)/i.test(node.tagName) && !(node.tagName === this.options.tag.toUpperCase() && node.className === klass)) {
for (var i = 0; i < node.childNodes.length; i++) {
i += this.recurse(node.childNodes[i], regex, klass);
}
}
return 0;
},
getElements: function (start, end) {
var next = start.getNext();
if (next.id != end.id) {
this.options.elements.include(next);
this.getElements(next, end);
}
}
});
Highlighter.implement(new Options);
window.addEvent('domready', function () {
var start = document.id('highlighter-start');
var end = document.id('highlighter-end');
if (!start || !end || !window.highlight) {
return true;
}
highlighter = new Highlighter({
startElement: start,
endElement: end,
autoUnhighlight: true,
onlyWords: false
}).highlight(window.highlight);
start.dispose();
end.dispose();
});

View File

@ -0,0 +1 @@
<!DOCTYPE html><title></title>

View File

@ -0,0 +1,90 @@
var FinderIndexer = new Class({
totalItems: null,
batchSize: null,
offset: null,
progress: null,
optimized: false,
path: 'index.php?option=com_finder&tmpl=component&format=json',
initialize: function () {
this.offset = 0;
this.progress = 0;
this.pb = new Fx.ProgressBar(document.id('finder-progress-container'));
this.path = this.path + '&' + document.id('finder-indexer-token').get('name') + '=1';
this.getRequest('indexer.start').send()
},
getRequest: function (task) {
return new Request.JSON({
url: this.path,
method: 'get',
data: 'task=' + task,
onSuccess: this.handleResponse.bind(this),
onFailure: this.handleFailure.bind(this)
});
},
handleResponse: function (json, resp) {
try {
if (json === null) {
throw resp;
}
if (json.error) {
throw json;
}
if (json.start) this.totalItems = json.totalItems;
this.offset += json.batchOffset;
this.updateProgress(json.header, json.message);
if (this.offset < this.totalItems) {
this.getRequest('indexer.batch').send();
} else if (!this.optimized) {
this.optimized = true;
this.getRequest('indexer.optimize').send();
}
} catch (error) {
if (this.pb) document.id(this.pb.element).dispose();
try {
if (json.error) {
document.id('finder-progress-header').set('text', json.header).addClass('finder-error');
document.id('finder-progress-message').set('html', json.message).addClass('finder-error');
}
} catch (ignore) {
if (error == '') {
error = Joomla.JText._('COM_FINDER_NO_ERROR_RETURNED');
}
document.id('finder-progress-header').set('text', Joomla.JText._('COM_FINDER_AN_ERROR_HAS_OCCURRED')).addClass('finder-error');
document.id('finder-progress-message').set('html', error).addClass('finder-error');
}
}
return true;
},
handleFailure: function (xhr) {
json = (typeof xhr == 'object' && xhr.responseText) ? xhr.responseText : null;
json = json ? JSON.decode(json, true) : null;
if (this.pb) document.id(this.pb.element).dispose();
if (json) {
json = json.responseText != null ? Json.evaluate(json.responseText, true) : json;
}
var header = json ? json.header : Joomla.JText._('COM_FINDER_AN_ERROR_HAS_OCCURRED');
var message = json ? json.message : Joomla.JText._('COM_FINDER_MESSAGE_RETURNED') + ' <br />' + json
document.id('finder-progress-header').set('text', header).addClass('finder-error');
document.id('finder-progress-message').set('html', message).addClass('finder-error');
},
updateProgress: function (header, message) {
this.progress = (this.offset / this.totalItems) * 100;
document.id('finder-progress-header').set('text', header);
document.id('finder-progress-message').set('html', message);
if (this.pb && this.progress < 100) {
this.pb.set(this.progress);
} else if (this.pb) {
document.id(this.pb.element).dispose();
this.pb = false;
}
}
});
window.addEvent('domready', function () {
Indexer = new FinderIndexer();
if (typeof window.parent.SqueezeBox == 'object') {
window.parent.SqueezeBox.addEvent('onClose', function () {
window.parent.location.reload(true);
});
}
});

View File

@ -0,0 +1,149 @@
FinderFilter = new Class({
Extends: Fx.Elements,
options: {
onActive: Class.empty,
onBackground: Class.empty,
height: false,
width: true,
opacity: true,
fixedHeight: false,
fixedWidth: 220,
wait: true
},
initialize: function (togglers, elements, container, frame) {
this.togglers = togglers || [];
this.elements = elements || [];
this.container = document.id(container);
this.frame = document.id(frame);
this.effects = {};
if (this.options.opacity) this.effects.opacity = 'fullOpacity';
if (this.options.width) this.effects.width = this.options.fixedWidth ? 'fullWidth' : 'offsetWidth';
this.container.setStyle('width', '230px');
this.addEvent('onActive', function (toggler, element) {
element.set('styles', {
'border-top': '1px solid #ccc',
'border-right': '1px solid #ccc',
'border-bottom': '1px solid #ccc',
'overflow': 'auto'
});
this.container.set('styles', {
width: this.container.getStyle('width').toInt() + element.fullWidth
});
coord = element.getCoordinates([this.frame]);
scroller = new Fx.Scroll(frame);
scroller.start(coord.top, coord.left);
});
this.addEvent('onBackground', function () {
el = this.elements[this.active];
el.getElements('input').each(function (n) {
n.removeProperty('checked');
});
});
this.addEvent('onComplete', function () {
el = this.elements[this.active];
if (!el.getStyle('width').toInt()) {
this.container.set('styles', {
'width': this.container.getStyle('width').toInt() - el.fullWidth
});
}
this.active = null;
});
for (var i = 0, l = this.togglers.length; i < l; i++) this.addSection(this.togglers[i], this.elements[i]);
this.elements.each(function (el, i) {
var cbs = el.getElements('input.selector').length;
var cba = 0;
el.getElements('input.selector').each(function (n) {
if (n.getProperty('checked')) {
this.togglers[i].setProperty('checked', 'checked');
cba += 1;
}
}, this);
if (cbs > 0 && cbs === cba && el.getElement('input.branch-selector') != null) {
el.getElement('input.branch-selector').setProperty('checked', 'checked');
}
if (cba) {
this.fireEvent('onActive', [this.togglers[i], el]);
} else {
for (var fx in this.effects) el.setStyle(fx, 0);
}
el.getElement('dt').getElement('input').addEvent('change', function (e) {
if (e.target.getProperty('checked')) {
el.getElements('div').each(function (div) {
div.getElements('input').setProperty('checked', 'checked');
});
} else {
el.getElements('div').each(function (div) {
div.getElements('input').removeProperty('checked');
});
}
});
}, this);
},
addSection: function (toggler, element, pos) {
toggler = document.id(toggler);
element = document.id(element);
var test = this.togglers.contains(toggler);
var len = this.togglers.length;
this.togglers.include(toggler);
this.elements.include(element);
if (len && (!test || pos)) {
pos = Array.pick(pos, len - 1);
toggler.inject(this.togglers[pos], 'before');
element.inject(toggler, 'after');
} else if (this.container && !test) {
toggler.inject(this.container);
element.inject(this.container);
}
var idx = this.togglers.indexOf(toggler);
toggler.addEvent('click', this.toggle.bind(this, idx));
if (this.options.width) element.set('styles', {
'padding-left': 0,
'border-left': 'none',
'padding-right': 0,
'border-right': 'none'
});
element.fullOpacity = 1;
if (this.options.fixedWidth) element.fullWidth = this.options.fixedWidth;
if (this.options.fixedHeight) element.fullHeight = this.options.fixedHeight;
element.set('styles', {'overflow': 'hidden'});
return this;
},
toggle: function (index) {
index = (typeOf(index) == 'element') ? this.elements.indexOf(index) : index;
if (this.timer && this.options.wait) return this;
this.active = index;
var obj = {};
obj[index] = {};
var el = this.elements[index];
if (this.togglers[index].getProperty('checked')) {
for (var fx in this.effects) obj[index][fx] = el[this.effects[fx]];
this.start(obj);
this.fireEvent('onActive', [this.togglers[index], el]);
} else {
for (var fx in this.effects) obj[index][fx] = 0;
this.start(obj);
this.fireEvent('onBackground', [this.togglers[index], el]);
}
return this;
}
});
window.addEvent('domready', function () {
Filter = new FinderFilter(document.getElements('input.toggler'), document.getElements('dl.checklist'), document.id('finder-filter-container'), document.id('finder-filter-window'));
document.id('tax-select-all').addEvent('change', function () {
if (document.id('tax-select-all').getProperty('checked')) {
document.id('finder-filter-window').getElements('input').each(function (input) {
if (input.getProperty('id') != 'tax-select-all') {
input.removeProperty('checked');
}
});
}
});
});