12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /**
- * @file
- * Contains JS required for less watch functionality.
- */
- ;(function ($) {
- "use strict";
-
- Drupal.behaviors.less_watch = {
- attach: function (context, settings) {
-
- var watched_files = [],
- $watched_links;
-
- $watched_links = $('head link[src$=".less"]', context).each(function () {
-
- // Only grab the portion of the url up to, but not including, the '?'.
- watched_files.push($(this).attr('href'));
- });
-
- if (watched_files.length > 0) {
-
- // Modeled after example @ http://www.erichynds.com/javascript/a-recursive-settimeout-pattern/
- var poller = {
-
- failed_requests: 0,
-
- // starting interval in milliseconds
- interval: 500,
-
- // kicks off the setTimeout
- init: function(){
- setTimeout(
- $.proxy(this.getData, this), // ensures 'this' is the poller obj inside getData, not the window object
- this.interval
- );
- },
-
- // get AJAX data + respond to it
- getData: function() {
- var self = this;
-
- $.ajax({
- type: 'POST',
- url: settings.basePath + 'ajax/less/watch',
- data: {
- less_files: watched_files
- },
- // On success, reset failed request counter and update style links.
- success: function ( response ) {
-
- self.failed_requests = 0;
-
- $.each(response, function (index, value) {
- var old_file = value.old_file,
- new_file = value.new_file;
-
- // Math.random() at the end forces a reload of the file.
- $('head link[href^="' + old_file + '"]', context).replaceWith($('<link type="text/css" rel="stylesheet" media="all" />').attr('href', new_file + '?' + Math.random()));
-
- watched_files[$.inArray(old_file, watched_files)] = new_file;
- });
- },
-
- // On failure, count failed request and increase interval.
- error: function () {
-
- ++self.failed_requests;
-
- self.interval += 500;
- },
-
- // On success or failure, restart
- complete: function () {
-
- if( ++self.failed_requests < 10 ){
- self.init();
- }
- }
- });
- }
- };
-
- poller.init();
-
- }
-
- }
- };
- })(jQuery);
|