| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 | /* Adapted from Clamato by Avi Bryant. http://www.clamato.net */(function() {  var    scripts = document.getElementsByTagName("script"),    src = scripts[ scripts.length - 1 ].src,    home = src.split("/").slice(0, -2).join("/") + "/";  window.Amber = {    debug: false,    deploy: false,    nocache: '?' + (new Date()).getTime(),    home: home,    /*     example:     Amber.load({       files: ['MyCategory1.js', 'MyCategory2.js'],       ready: function() {smalltalk.Browser._open()}     })    */    load: function(spec) {      var self = this;      self.localStorageSource = [];      self.spec = ((typeof spec == 'undefined') ? {} : spec);      // In deployment mode, only the compressed version of Kernel      // and Canvas are loaded      self.deploy = self.spec.deploy || self.deploy;      self.debug = self.spec.debug || self.debug;      // Specify a version string to avoid wrong browser caching      if (self.spec.version)        self.nocache = '?' + self.spec.version;      self.loadDependencies();      self.loadJS('boot.js');      self.populateLocalPackages();      if (self.deploy) {        self.loadPackages([          'Kernel.deploy',          'Canvas.deploy'        ]);      } else {        self.loadIDEDependencies();        self.loadCSS('amber.css');        self.loadPackages([          'Kernel',          'Canvas',          'Compiler',          'parser',          'IDE',          'SUnit',          'Examples',          'Benchfib',          'Kernel-Tests',        ]);      }      var additionalFiles = self.spec.packages || self.spec.files;      if (additionalFiles)        self.loadPackages(additionalFiles, self.spec.prefix);      // Always load all local packages      for (name in self.localPackages) {        self.log('Local package:  ' + name);        self.localStorageSource.push(self.localPackages[name]);      }      // Be sure to setup & initialize smalltalk classes      self.loadJS('init.js');    },    loadPackages: function(names, prefix){      var self = this;      var name, url;      var prefix = prefix || 'js';      for (var i=0; i < names.length; i++) {        name = names[i].split(/\.js$/)[0];        // Only load package from the server if it isn't stored in        // localStorage        if (!(name in self.localPackages)) {          self.log('Server package: ' + name);          self.loadJS(name + '.js', prefix);        }      }    },    loadJS: function(name, prefix) {      var self = this;      var prefix = prefix || 'js';      var name = name;      if (!self.deploy)        name = name + self.nocache;      var url = self.home + prefix + '/' + name;      var scriptString = '<script src="' + url + '" type="text/javascript"></script>';      document.write(scriptString);    },    loadCSS: function (name, prefix) {      var self = this;      var prefix = prefix || 'css';      var name = name;      if (!self.deploy)        name = name + self.nocache;      var url = self.home + prefix + '/' + name;      var link = document.createElement("link");      link.setAttribute("rel", "stylesheet");      link.setAttribute("type", "text/css");      link.setAttribute("href", url);      document.getElementsByTagName("head")[0].appendChild(link);    },    loadDependencies: function() {      var self = this;      self.loadJS('lib/jQuery/jquery-1.6.4.min.js');      self.loadJS('lib/jQuery/jquery-ui-1.8.9.custom.min.js');    },    loadIDEDependencies: function() {      var self = this;      self.loadJS('lib/jQuery/jquery.textarea.js');      self.loadJS('lib/CodeMirror/lib/codemirror.js');      self.loadCSS('lib/CodeMirror/lib/codemirror.css', 'js');      self.loadJS('lib/CodeMirror/mode/smalltalk/smalltalk.js');      self.loadCSS('lib/CodeMirror/theme/amber.css', 'js');    },    // This will be called after JS files have been loaded    initializeSmalltalk: function(){      var self = this;      for (var i=0; i < self.localStorageSource.length; i++)        eval(self.localStorageSource[i]);      smalltalk.init(smalltalk.Object);      smalltalk.classes()._do_(function(each) {each._initialize()});      if (self.spec.ready)        self.spec.ready();      if (self.deploy)        smalltalk.setDeploymentMode();    },    populateLocalPackages: function(){      var self = this;      var localStorageRE = /^smalltalk\.packages\.(.*)$/;      self.localPackages = {};      var match, key;      for(var i=0; i < localStorage.length; i++) {        key = localStorage.key(i);        if (match = key.match(localStorageRE)) {          self.localPackages[match[1]] = localStorage[key];        }      }      return self.localPackages;    },    clearLocalPackages: function(){      var self = this;      for (var name in self.localPackages) {        self.log('Removing ' + name + ' from local storage');        localStorage.removeItem('smalltalk.packages.' + name);      }    },    log: function(string) {      var self = this;      if (self.debug)        console.log(string);    }  };  window.loadAmber = function(spec) {    Amber.load(spec);  }})();
 |