blob: 855bdcec5f2ab26a8b2788b29fcec801159adeff [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* A parameter store that stores the values of exposed parameters using the YUI
* History Manager to maintain the application's state. Don't forget to add the
* following inside your <tt>head</tt> tag:
*
* <pre>
* <script src="http://yui.yahooapis.com/2.9.0/build/yahoo/yahoo-min.js"></script>
* <script src="http://yui.yahooapis.com/2.9.0/build/event/event-min.js"></script>
* <script src="http://yui.yahooapis.com/2.9.0/build/history/history-min.js"></script>
* </pre>
*
* And the following inside your <tt>body</tt> tag:
*
* <pre>
* <iframe id="yui-history-iframe" src="path-to-existing-asset" style="position:absolute;top:0;left:0;width:1px;height:1px;visibility:hidden"></iframe>
* <input id="yui-history-field" type="hidden">
* </pre>
*
* Configure the manager with:
*
* <pre>
* Manager.setStore(new AjaxSolr.ParameterYUIStore());
* </pre>
*
* @see http://developer.yahoo.com/yui/history/
* @class ParameterYUIStore
* @augments AjaxSolr.ParameterStore
*/
AjaxSolr.ParameterYUIStore = AjaxSolr.ParameterStore.extend(
/** @lends AjaxSolr.ParameterYUIStore.prototype */
{
/**
* @param {Object} [attributes]
* @param {String} [attributes.module] The name of the YUI History Manager
* module to use for the parameter store. Defaults to "q".
*/
constructor: function (attributes) {
AjaxSolr.ParameterYUIStore.__super__.constructor.apply(this, arguments);
AjaxSolr.extend(this, {
module: 'q',
// Whether the YUI History Manager is initialized.
initialized: false,
// Whether the parameter store is curring loading state.
loading: false,
// Whether the parameter store is curring saving state.
saving: false
}, attributes);
},
/**
* Initializes the YUI History Manager.
*/
init: function () {
if (this.exposed.length) {
var self = this;
YAHOO.util.History.register(this.module, YAHOO.util.History.getBookmarkedState(this.module) || this.exposedString(), function () {
if (!self.saving) {
self.loading = true;
self.load();
self.manager.doRequest();
self.loading = false;
}
});
YAHOO.util.History.onReady(function () {
self.initialized = true;
self.load();
self.manager.doRequest();
});
YAHOO.util.History.initialize('yui-history-field', 'yui-history-iframe');
}
},
/**
* Stores the values of the exposed parameters in the YUI History Manager.
*/
save: function () {
if (!self.loading) {
this.saving = true;
YAHOO.util.History.navigate(this.module, this.exposedString());
this.saving = false;
}
},
/**
* @see ParameterStore#storedString()
*/
storedString: function () {
return this.initialized ? YAHOO.util.History.getCurrentState(this.module) : this.exposedString();
}
});