2012-12-19 14:21:46 -08:00
|
|
|
NEWSBLUR.Views.FeedSearchView = Backbone.View.extend({
|
|
|
|
|
|
|
|
className: "NB-story-title-search",
|
|
|
|
|
|
|
|
events: {
|
|
|
|
"focus .NB-story-title-search-input": "focus_search",
|
|
|
|
"blur .NB-story-title-search-input" : "blur_search",
|
|
|
|
"keyup input[name=feed_search]" : "keyup",
|
|
|
|
"keydown input[name=feed_search]" : "keydown",
|
|
|
|
"click .NB-search-close" : "close_search"
|
|
|
|
},
|
|
|
|
|
|
|
|
initialize: function(options) {
|
|
|
|
this.feedbar_view = options.feedbar_view;
|
2013-07-25 15:39:12 -07:00
|
|
|
this.search_debounced = _.debounce(_.bind(this.perform_search, this), 350);
|
2012-12-19 14:21:46 -08:00
|
|
|
},
|
|
|
|
|
|
|
|
render: function() {
|
2013-07-25 17:05:32 -07:00
|
|
|
// if (!NEWSBLUR.Globals.is_staff) return this;
|
2012-12-19 14:21:46 -08:00
|
|
|
|
|
|
|
var $view = $(_.template('\
|
|
|
|
<input type="text" name="feed_search" class="NB-story-title-search-input NB-search-input" value="<%= search %>" />\
|
2014-04-16 15:31:44 -07:00
|
|
|
<div class="NB-search-icon"></div>\
|
2012-12-19 14:21:46 -08:00
|
|
|
<div class="NB-search-close"></div>\
|
|
|
|
', {
|
|
|
|
search: NEWSBLUR.reader.flags['search']
|
|
|
|
}));
|
|
|
|
|
|
|
|
this.$el.html($view);
|
|
|
|
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
2014-04-16 15:31:44 -07:00
|
|
|
// ============
|
|
|
|
// = Indexing =
|
|
|
|
// ============
|
|
|
|
|
|
|
|
update_indexing_progress: function(message) {
|
|
|
|
var $input = this.$('input');
|
|
|
|
var $icon = this.$('.NB-search-icon');
|
|
|
|
console.log(["update_indexing_progress", message]);
|
|
|
|
|
|
|
|
if (message == "start") {
|
|
|
|
$icon.tipsy({
|
|
|
|
title: function() { return "Hang tight, indexing..."; },
|
|
|
|
gravity: 'nw',
|
|
|
|
fade: true,
|
|
|
|
trigger: 'manual',
|
|
|
|
offset: 4
|
|
|
|
});
|
|
|
|
var tipsy = $icon.data('tipsy');
|
|
|
|
_.defer(function() {
|
|
|
|
tipsy.enable();
|
|
|
|
tipsy.show();
|
|
|
|
});
|
|
|
|
_.delay(function() {
|
|
|
|
tipsy.disable();
|
|
|
|
tipsy.hide();
|
|
|
|
}, 3000);
|
|
|
|
} else if (message == "done") {
|
|
|
|
$input.attr('style', null);
|
|
|
|
var tipsy = $icon.data('tipsy');
|
|
|
|
_.defer(function() {
|
|
|
|
if (!tipsy) return;
|
|
|
|
tipsy.disable();
|
|
|
|
tipsy.hide();
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
progress = Math.floor(parseFloat(message) * 100);
|
|
|
|
NEWSBLUR.utils.attach_loading_gradient($input, progress);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2012-12-19 14:21:46 -08:00
|
|
|
// ==========
|
|
|
|
// = Events =
|
|
|
|
// ==========
|
|
|
|
|
2013-07-26 16:07:39 -07:00
|
|
|
focus: function() {
|
|
|
|
this.$("input").focus();
|
|
|
|
},
|
2013-07-26 16:39:52 -07:00
|
|
|
|
|
|
|
blur: function() {
|
|
|
|
this.$("input").blur();
|
|
|
|
},
|
2013-07-26 16:07:39 -07:00
|
|
|
|
2012-12-19 14:21:46 -08:00
|
|
|
focus_search: function() {
|
2013-07-26 16:39:52 -07:00
|
|
|
if (!NEWSBLUR.reader.flags.searching || !NEWSBLUR.reader.flags.search) {
|
|
|
|
NEWSBLUR.reader.flags.searching = true;
|
|
|
|
NEWSBLUR.reader.flags.search = "";
|
|
|
|
}
|
2012-12-19 14:21:46 -08:00
|
|
|
this.feedbar_view.$el.addClass("NB-searching");
|
|
|
|
},
|
|
|
|
|
|
|
|
blur_search: function() {
|
|
|
|
var $search = this.$("input[name=feed_search]");
|
|
|
|
var query = $search.val();
|
|
|
|
|
|
|
|
if (query.length == 0) {
|
2013-07-25 17:05:32 -07:00
|
|
|
NEWSBLUR.reader.flags.searching = false;
|
2012-12-19 14:21:46 -08:00
|
|
|
this.feedbar_view.$el.removeClass("NB-searching");
|
|
|
|
if (NEWSBLUR.reader.flags.search) {
|
2013-07-25 17:05:32 -07:00
|
|
|
this.close_search();
|
2012-12-19 14:21:46 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
keyup: function(e) {
|
2013-07-26 16:39:52 -07:00
|
|
|
var arrow = {left: 37, up: 38, right: 39, down: 40, enter: 13, esc: 27};
|
|
|
|
|
|
|
|
if (e.which == arrow.up || e.which == arrow.down) {
|
|
|
|
this.blur();
|
|
|
|
|
|
|
|
var event = $.Event('keydown');
|
|
|
|
event.which = e.which;
|
|
|
|
$(document).trigger(event);
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2012-12-19 14:21:46 -08:00
|
|
|
this.search();
|
|
|
|
},
|
|
|
|
|
|
|
|
keydown: function(e) {
|
|
|
|
var arrow = {left: 37, up: 38, right: 39, down: 40, enter: 13, esc: 27};
|
|
|
|
|
|
|
|
if (e.which == arrow.esc) {
|
|
|
|
this.close_search();
|
|
|
|
e.preventDefault();
|
|
|
|
e.stopPropagation();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
search: function() {
|
|
|
|
var $search = this.$("input[name=feed_search]");
|
|
|
|
var query = $search.val();
|
|
|
|
|
|
|
|
if (query != NEWSBLUR.reader.flags.search) {
|
2013-07-25 17:05:32 -07:00
|
|
|
NEWSBLUR.reader.flags.searching = true;
|
2012-12-19 14:21:46 -08:00
|
|
|
NEWSBLUR.reader.flags.search = query;
|
|
|
|
this.search_debounced(query);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2013-07-25 15:39:12 -07:00
|
|
|
perform_search: function(query) {
|
|
|
|
NEWSBLUR.reader.reload_feed({
|
|
|
|
search: query
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
2012-12-19 14:21:46 -08:00
|
|
|
close_search: function() {
|
|
|
|
var $search = this.$("input[name=feed_search]");
|
|
|
|
$search.val('');
|
2013-07-25 17:05:32 -07:00
|
|
|
NEWSBLUR.reader.flags.searching = false;
|
|
|
|
|
|
|
|
NEWSBLUR.reader.reload_feed();
|
2012-12-19 14:21:46 -08:00
|
|
|
}
|
2013-07-25 17:05:32 -07:00
|
|
|
|
2012-12-19 14:21:46 -08:00
|
|
|
});
|