| # Copyright 2012 The Apache Software Foundation |
| # |
| # Licensed 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. |
| |
| # ## t5/core/zone-refresh |
| define ["./events", "./dom", "./console"], |
| (events, dom, console) -> |
| |
| # Initialize a timer for the zone at the specified period (in seconds). The zone will be |
| # refreshed with the provided URL. |
| initialize = (zoneId, period, url) -> |
| zone = dom zoneId |
| |
| unless zone |
| console.err "Zone #{zoneId} not found for periodic refresh." |
| return |
| |
| # Only one periodic refresh per zone. |
| return if zone.meta "periodic-refresh" |
| |
| zone.meta "periodic-refresh", true |
| |
| executing = false |
| |
| # Whenever the zone updates, we can clear the executing flag. |
| |
| zone.on events.zone.didUpdate, -> |
| executing = false |
| return |
| |
| cleanUp = -> |
| window.clearInterval intervalId |
| zone = null |
| return |
| |
| handler = -> |
| # Don't clog things up if the response rate is too slow |
| return if executing |
| |
| # If the zone element is no longer part of the DOM, stop the |
| # timer |
| |
| unless (zone.closest 'body') |
| cleanUp() |
| return |
| |
| # Set the flag now, it will clear when the zone updates. |
| executing = true |
| |
| zone.trigger events.zone.refresh, { url } |
| |
| intervalId = window.setInterval handler, period * 1000 |
| |
| # Not sure if this is needed except for IE: |
| (dom window).on "beforeunload", cleanUp |
| |
| # export the single function: |
| return initialize |