You've already forked joomla_test
first commit
This commit is contained in:
26
media/com_finder/css/dates.css
Normal file
26
media/com_finder/css/dates.css
Normal 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;
|
||||
}
|
90
media/com_finder/css/finder.css
Normal file
90
media/com_finder/css/finder.css
Normal 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;
|
||||
}
|
1
media/com_finder/css/index.html
Normal file
1
media/com_finder/css/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
17
media/com_finder/css/indexer.css
Normal file
17
media/com_finder/css/indexer.css
Normal 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;
|
||||
}
|
29
media/com_finder/css/selectfilter.css
Normal file
29
media/com_finder/css/selectfilter.css
Normal 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;
|
||||
}
|
56
media/com_finder/css/sliderfilter.css
Normal file
56
media/com_finder/css/sliderfilter.css
Normal 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;
|
||||
}
|
1
media/com_finder/index.html
Normal file
1
media/com_finder/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
505
media/com_finder/js/autocompleter.js
Normal file
505
media/com_finder/js/autocompleter.js
Normal 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
|
||||
};
|
44
media/com_finder/js/finder.js
Normal file
44
media/com_finder/js/finder.js
Normal 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));
|
||||
});
|
||||
});
|
100
media/com_finder/js/highlighter.js
Normal file
100
media/com_finder/js/highlighter.js
Normal 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();
|
||||
});
|
1
media/com_finder/js/index.html
Normal file
1
media/com_finder/js/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
90
media/com_finder/js/indexer.js
Normal file
90
media/com_finder/js/indexer.js
Normal 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);
|
||||
});
|
||||
}
|
||||
});
|
149
media/com_finder/js/sliderfilter.js
Normal file
149
media/com_finder/js/sliderfilter.js
Normal 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');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user