From d6dbeca766a80f1422355f3432d863fa76a70300 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 15:57:44 -0500 Subject: [PATCH 01/16] Remove closure from file.js --- web_frontend/file.js | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/web_frontend/file.js b/web_frontend/file.js index 584de6a..4b8fd84 100644 --- a/web_frontend/file.js +++ b/web_frontend/file.js @@ -10,8 +10,6 @@ goog.provide('armadillo.File'); goog.require('armadillo.Actor'); -goog.require('goog.Disposable'); -goog.require('goog.dom'); /** * A file in a directory listing. @@ -20,14 +18,12 @@ goog.require('goog.dom'); * @constructor */ armadillo.File = function(name, path) { - goog.Disposable.call(this); this.name_ = name; this.path_ = path; this.highlight_ = ''; this.isDirectory_ = app.isDirectory(name); this.actor_ = new armadillo.Actor(this); }; -goog.inherits(armadillo.File, goog.Disposable); armadillo.File.Highlight = { NONE : '', @@ -40,11 +36,8 @@ armadillo.File.Highlight = { * @protected */ armadillo.File.prototype.disposeInternal = function() { - armadillo.File.superClass_.disposeInternal.call(this); this.element_ = null; this.link_ = null; - goog.events.unlistenByKey(this.linkListener_); - goog.events.unlistenByKey(this.actorListener_); this.actor_.dispose(); }; @@ -114,25 +107,24 @@ armadillo.File.prototype.setHighlight = function(h) { armadillo.File.prototype.draw = function() { // Create the element if it does not exist. If it does, remove all children. if (!this.element_) { - this.element_ = goog.dom.createElement('li'); + this.element_ = document.createElement('li'); this.element_.representedObject = this; var handler = (this.isSpecial_() ? this.clickHandler_ : this.actorHandler_); } - goog.dom.removeChildren(this.element_); + $(this.element_).empty(); // Set the name of the entry. - this.title_ = goog.dom.createDom('div', null); + this.title_ = document.createElement('div'); if (this.isDirectory()) { - this.link_ = goog.dom.createDom('a', null, this.name_); - this.linkListener_ = goog.events.listen(this.link_, - goog.events.EventType.CLICK, this.clickHandler_, false, this); - goog.dom.appendChild(this.title_, this.link_); + this.link_ = $(document.createElement('a')); + this.link_.text(this.name_); + this.link_.click(this.clickHandler_.bind(this)); + $(this.title_).append(this.link_); } else { - goog.dom.setTextContent(this.title_, this.name_); + $(this.title_).text(this.name_); } - goog.dom.appendChild(this.element_, this.title_); - this.actorListener_ = goog.events.listen(this.title_, - goog.events.EventType.CLICK, handler, false, this); + $(this.element_).append(this.title_); + $(this.title_).click(handler.bind(this)); return this.element_; }; -- 2.22.5 From a6a4aa7022b1ecd2fb016a1141923b92cb27eaba Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 16:33:28 -0500 Subject: [PATCH 02/16] Convert a large portion of actor.js to jQuery --- web_frontend/actor.js | 124 ++++++++++-------------------------------- web_frontend/file.js | 9 ++- web_frontend/utils.js | 8 +++ 3 files changed, 42 insertions(+), 99 deletions(-) diff --git a/web_frontend/actor.js b/web_frontend/actor.js index 1e34632..801ab96 100644 --- a/web_frontend/actor.js +++ b/web_frontend/actor.js @@ -8,17 +8,9 @@ // goog.provide('armadillo.Actor'); -goog.provide('armadillo.Actor.TileControlRenderer_'); goog.require('armadillo.PathControl'); goog.require('armadillo.TVRenamer'); -goog.require('goog.array'); -goog.require('goog.dom'); -goog.require('goog.events'); -goog.require('goog.events.EventHandler'); -goog.require('goog.style'); -goog.require('goog.ui.Button'); -goog.require('goog.ui.Container'); /** * The Actor is a popup that displays the various actions that can be performed @@ -28,23 +20,12 @@ goog.require('goog.ui.Container'); * @constructor */ armadillo.Actor = function(file, opt_domHelper) { - goog.ui.Container.call(this, null, null, opt_domHelper); - - this.setFocusable(false); - this.setFocusableChildrenAllowed(true); - /** * The file object on which this acts. * @type {armadillo.File} */ this.file_ = file; - /** - * Registrar for all the Actor's events. - * @type {goog.events.EventHandler} - */ - this.eh_ = new goog.events.EventHandler(); - /** * The UI element used for a specific action. * @type {goog.Disposable} @@ -57,7 +38,6 @@ armadillo.Actor = function(file, opt_domHelper) { */ this.controlContainer_ = null; } -goog.inherits(armadillo.Actor, goog.ui.Container); /** * The different options that the Actor can perform. @@ -81,34 +61,9 @@ armadillo.Actor.optionStrings_ = { 'download' : 'Download' }; -/** - * Disposer - * @protected - */ -armadillo.Actor.prototype.disposeInternal = function() { - armadillo.Actor.superClass_.disposeInternal.call(this); - - this.eh_.dispose(); - - if (this.controlContainer_) - this.controlContainer_.dispose(); - this.controlContainer_ = null; - - // Remove the actor display element. - goog.dom.removeNode(this.element_); - this.element_ = null; - - if (this.actionObject_) { - this.actionObject_.dispose(); - this.actionObject_ = null; - } - - this.file_ = null; -}; - armadillo.Actor.prototype.createDom = function() { - this.setElementInternal(this.dom_.createDom('div')); - this.decorate(this.getElement()); + this.decorateInternal($.createDom('div')); + return this.element_; }; /** @@ -117,17 +72,16 @@ armadillo.Actor.prototype.createDom = function() { */ armadillo.Actor.prototype.decorateInternal = function(element) { this.element_ = element; - goog.dom.classes.add(this.element_, 'actor'); - this.dom_.removeChildren(this.element_); + this.element_.addClass('actor'); + this.element_.empty(); for (var option in armadillo.Actor.options_) { var tile = this.createTile_(option); if (tile) { - this.addChild(tile, true); + this.element_.append(tile); } } - this.controlContainer_ = new goog.ui.Control(); - this.controlContainer_.setSupportedState(goog.ui.Component.State.FOCUSED, false); - this.addChild(this.controlContainer_, true); + this.controlContainer_ = $.createDom('div'); + this.element_.append(this.controlContainer_); }; /** @@ -139,19 +93,19 @@ armadillo.Actor.prototype.createTile_ = function(option) { var value = armadillo.Actor.options_[option]; // Create the title element. - var title = this.dom_.createDom('span', 'title', - armadillo.Actor.optionStrings_[value]); + var title = $.createDom('span').addClass('title'); + title.text(armadillo.Actor.optionStrings_[value]); - var tile = new goog.ui.Control(title, new armadillo.Actor.TileControlRenderer_()); + var tile = $.createDom('div').addClass('tile'); tile.actorOption = value; + tile.append(title); // Cannot open non-directory files. if (value == armadillo.Actor.options_.OPEN && !this.file_.isDirectory()) { return null; } - this.eh_.listen(tile, goog.ui.Component.EventType.ACTION, - this.tileClickHandler_, false, this); + tile.click(this.tileClickHandler_.bind(this)); return tile; }; @@ -161,8 +115,8 @@ armadillo.Actor.prototype.createTile_ = function(option) { */ armadillo.Actor.prototype.tileClickHandler_ = function(e) { var option = e.target.actorOption; - this.controlContainer_.removeChildren(true); - this.controlContainer_.setVisible(true); + this.controlContainer_.empty(); + this.controlContainer_.show(); if (option == armadillo.Actor.options_.OPEN) { // TODO: assert that this.file_.isDirectory(). app.navigate(this.file_.getName()); @@ -183,13 +137,13 @@ armadillo.Actor.prototype.tileClickHandler_ = function(e) { */ armadillo.Actor.prototype.performMove_ = function() { var editor = new armadillo.PathControl(this.file_.getFullPath(), true); - this.controlContainer_.addChild(editor, true); + this.controlContainer_.append(editor); var okCallback = function(e) { var newPath = editor.getPath(); this.file_.move(newPath); }; - this.createOkCancel_(goog.bind(okCallback, this), null); + this.createOkCancel_(okCallback.bind(this), null); }; /** @@ -197,16 +151,14 @@ armadillo.Actor.prototype.performMove_ = function() { * @private */ armadillo.Actor.prototype.performDelete_ = function() { - var content = goog.dom.createDom('span', null, - 'Are you sure you want to delete:', - goog.dom.createElement('br'), - goog.dom.createDom('strong', null, this.file_.getName())); - this.controlContainer_.addChild(new goog.ui.Control(content), true); + var content = $('Are you sure you want to delete:
' + + this.file_.getName() + '
'); + this.controlContainer_.append(content); var okCallback = function(e) { this.file_.remove(); }; - this.createOkCancel_(goog.bind(okCallback, this), null); + this.createOkCancel_(okCallback.bind(this), null); }; /** @@ -233,15 +185,15 @@ armadillo.Actor.prototype.performDownload_ = function() { * @param {function(Event)?} cancelCallback */ armadillo.Actor.prototype.createOkCancel_ = function(okCallback, cancelCallback) { - var ok = new goog.ui.Button('OK'); + var ok = $.createDom('button').text('OK'); if (okCallback) - this.eh_.listen(ok, goog.ui.Component.EventType.ACTION, okCallback); - var cancel = new goog.ui.Button('Cancel'); + ok.click(okCallback); + var cancel = $.createDom('button').text('Cancel'); if (!cancelCallback) - cancelCallback = goog.bind(this.defaultCancelCallback_, this); - this.eh_.listen(cancel, goog.ui.Component.EventType.ACTION, cancelCallback); - this.controlContainer_.addChild(ok, true); - this.controlContainer_.addChild(cancel, true); + cancelCallback = this.defaultCancelCallback_.bind(this); + cancel.click(cancelCallback); + this.controlContainer_.append(ok); + this.controlContainer_.append(cancel); }; /** @@ -250,25 +202,5 @@ armadillo.Actor.prototype.createOkCancel_ = function(okCallback, cancelCallback) * @private */ armadillo.Actor.prototype.defaultCancelCallback_ = function(e) { - this.controlContainer_.removeChildren(true); -}; - -/** - * Tile Control Renderer - * @constructor - */ -armadillo.Actor.TileControlRenderer_ = function() { - goog.ui.ControlRenderer.call(this); -}; -goog.inherits(armadillo.Actor.TileControlRenderer_, goog.ui.ControlRenderer); - -/** - * Returns the control's contents wrapped in a DIV, with the renderer's own - * CSS class and additional state-specific classes applied to it. - * @param {goog.ui.Control} control Control to render. - * @return {Element} Root element for the control. - */ -armadillo.Actor.TileControlRenderer_.prototype.createDom = function(control) { - // Create and return DIV wrapping contents. - return control.getDomHelper().createDom('div', 'tile', control.getContent()); + this.controlContainer_.empty(); }; diff --git a/web_frontend/file.js b/web_frontend/file.js index 4b8fd84..94b0f4a 100644 --- a/web_frontend/file.js +++ b/web_frontend/file.js @@ -182,9 +182,12 @@ armadillo.File.prototype.clickHandler_ = function(e) { */ armadillo.File.prototype.actorHandler_ = function(e) { e.stopPropagation(); - if (!this.actor_.isInDocument()) - this.actor_.render(this.element_); - $(this.actor_.getElement()).slideToggle('fast'); + if (!this.actor_.element) { + var elm = this.actor_.createDom(); + elm.hide(); + $(this.element_).append(elm); + } + this.actor_.element_.slideToggle('fast'); }; /** diff --git a/web_frontend/utils.js b/web_frontend/utils.js index 07372da..aacd070 100644 --- a/web_frontend/utils.js +++ b/web_frontend/utils.js @@ -18,3 +18,11 @@ jQuery.namespace = function(ns) { parent = parent[space]; }); } + +/** + * Shortcut for creating a DOM element. + * @param {string} elm + */ +jQuery.createDom = function(elm) { + return this(document.createElement(elm)); +} -- 2.22.5 From 2e3bf2752b911d869b03368bd1e413b3775c6eff Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 16:47:42 -0500 Subject: [PATCH 03/16] Fix the tile click handler by binding the option to the event handler --- web_frontend/actor.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/web_frontend/actor.js b/web_frontend/actor.js index 801ab96..222174f 100644 --- a/web_frontend/actor.js +++ b/web_frontend/actor.js @@ -97,7 +97,6 @@ armadillo.Actor.prototype.createTile_ = function(option) { title.text(armadillo.Actor.optionStrings_[value]); var tile = $.createDom('div').addClass('tile'); - tile.actorOption = value; tile.append(title); // Cannot open non-directory files. @@ -105,16 +104,16 @@ armadillo.Actor.prototype.createTile_ = function(option) { return null; } - tile.click(this.tileClickHandler_.bind(this)); + tile.click(this.tileClickHandler_.bind(this, value)); return tile; }; /** * Click handler for individual tiles. + * @param {int} option The Actor.option used * @param {Event} e */ -armadillo.Actor.prototype.tileClickHandler_ = function(e) { - var option = e.target.actorOption; +armadillo.Actor.prototype.tileClickHandler_ = function(option, e) { this.controlContainer_.empty(); this.controlContainer_.show(); if (option == armadillo.Actor.options_.OPEN) { @@ -137,7 +136,7 @@ armadillo.Actor.prototype.tileClickHandler_ = function(e) { */ armadillo.Actor.prototype.performMove_ = function() { var editor = new armadillo.PathControl(this.file_.getFullPath(), true); - this.controlContainer_.append(editor); + this.controlContainer_.append(editor.element_); var okCallback = function(e) { var newPath = editor.getPath(); -- 2.22.5 From 325af02867a9796f22bbaa73878d0f55d21841d3 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 17:01:51 -0500 Subject: [PATCH 04/16] Initial stab at rewriting path_control.js --- web_frontend/actor.js | 2 +- web_frontend/path_control.js | 62 ++++++++---------------------------- 2 files changed, 15 insertions(+), 49 deletions(-) diff --git a/web_frontend/actor.js b/web_frontend/actor.js index 222174f..86a9ea6 100644 --- a/web_frontend/actor.js +++ b/web_frontend/actor.js @@ -136,7 +136,7 @@ armadillo.Actor.prototype.tileClickHandler_ = function(option, e) { */ armadillo.Actor.prototype.performMove_ = function() { var editor = new armadillo.PathControl(this.file_.getFullPath(), true); - this.controlContainer_.append(editor.element_); + this.controlContainer_.append(editor.createDom()); var okCallback = function(e) { var newPath = editor.getPath(); diff --git a/web_frontend/path_control.js b/web_frontend/path_control.js index 8d705b2..7e4f792 100644 --- a/web_frontend/path_control.js +++ b/web_frontend/path_control.js @@ -8,7 +8,6 @@ // goog.provide('armadillo.PathControl'); -goog.provide('armadillo.PathControl.NameControlRenderer_'); goog.require('goog.array'); goog.require('goog.ui.Control'); @@ -27,9 +26,6 @@ goog.require('goog.ui.MenuItem'); armadillo.PathControl = function(path, editLastComponent, opt_domHelper) { goog.ui.Control.call(this, opt_domHelper); - this.setHandleMouseEvents(false); - this.setSupportedState(goog.ui.Component.State.FOCUSED, false); - /** * Full path of the control. * @type {string} @@ -104,14 +100,8 @@ armadillo.PathControl.prototype.getNameControl = function() { * Creates a new path control object. */ armadillo.PathControl.prototype.createDom = function() { - this.decorateInternal(this.dom_.createElement('div')); -}; - -/** - * @inheritDoc - */ -armadillo.PathControl.prototype.canDecorate = function() { - return true; + this.decorateInternal($.createDom('div')); + return this.element_; }; /** @@ -133,32 +123,25 @@ armadillo.PathControl.prototype.decorateInternal = function(element) { } var path = ''; - goog.array.forEach(components, function (part, i) { - this.addChild(this.createComponentNode_(path, part), true); + $.each(components, function (i, part) { + this.element_.append(this.createComponentNode_(path, part), true); path = app.joinPath(path, part); - }, this); + }.bind(this)); if (this.editableLastComponent_) { - var attrs = { + this.nameControl_ = $.createDom('input'); + this.nameControl_.attr({ 'type' : 'text', 'name' : 'pathName', 'value' : this.name_ - }; - this.nameControl_ = new goog.ui.Control(this.dom_.createDom('input', attrs), - new armadillo.PathControl.NameControlRenderer_()); - this.nameControl_.setAllowTextSelection(true); - this.nameControl_.setHandleMouseEvents(false); - this.addChild(this.nameControl_, true); + }); - this.eh_.listen(this.nameControl_.getElement(), goog.events.EventType.CHANGE, - this.nameChanged_, false, this); - this.eh_.listen(this.nameControl_.getElement(), goog.events.EventType.KEYDOWN, - this.nameChanged_, false, this); + this.nameControl_.bind('change keydown', this.nameChanged_.bind(this)); } else { - this.nameControl_ = new goog.ui.Control(this.name_); - this.addChild(this.nameControl_, true); + this.nameControl_ = $.createDom('span').text(this.name_); } - goog.dom.classes.add(this.nameControl_.getElement(), 'goog-inline-block'); + + this.element_.append(this.nameControl_); }; /** @@ -209,7 +192,7 @@ armadillo.PathControl.prototype.fetchMenuContents_ = function(path, name, menu) // moving items. goog.array.insertAt(data, '/', 0); } - goog.array.forEach(data, function (caption) { + $.each(data, function (i, caption) { // It only makes sense to be able to move into directories. if (!app.isDirectory(caption)) { return; @@ -231,7 +214,7 @@ armadillo.PathControl.prototype.fetchMenuContents_ = function(path, name, menu) */ armadillo.PathControl.prototype.componentChanged_ = function(e) { this.path_ = e.target.getValue(); - this.removeChildren(true); + this.element_.clear(); this.decorateInternal(this.element_); }; @@ -246,20 +229,3 @@ armadillo.PathControl.prototype.nameChanged_ = function(e) { e.stopPropagation(); return true; }; - -/** - * Renderer for the Name Control of the Path Control - * @constructor_ - */ -armadillo.PathControl.NameControlRenderer_ = function() { - goog.ui.ControlRenderer.call(this); -}; -goog.inherits(armadillo.PathControl.NameControlRenderer_, goog.ui.ControlRenderer); - -armadillo.PathControl.NameControlRenderer_.prototype.createDom = function(control) { - var content = control.getContent(); - if (content instanceof HTMLElement) { - return content; - } - return armadillo.PathControl.NameControlRenderer_.superClass_.createDom.call(this, control); -}; -- 2.22.5 From 68ddc25a3ce2e66089de711514729d299458f389 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 17:31:33 -0500 Subject: [PATCH 05/16] Rewrite the path menus in jQuery --- web_frontend/actor.js | 2 +- web_frontend/path_control.js | 60 ++++++++++-------------------------- 2 files changed, 17 insertions(+), 45 deletions(-) diff --git a/web_frontend/actor.js b/web_frontend/actor.js index 86a9ea6..8925dbe 100644 --- a/web_frontend/actor.js +++ b/web_frontend/actor.js @@ -1,6 +1,6 @@ // // Armadillo File Manager -// Copyright (c) 2010, Robert Sesek +// Copyright (c) 2010-2011, Robert Sesek // // This program is free software: you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free Software diff --git a/web_frontend/path_control.js b/web_frontend/path_control.js index 7e4f792..a45517c 100644 --- a/web_frontend/path_control.js +++ b/web_frontend/path_control.js @@ -1,6 +1,6 @@ // // Armadillo File Manager -// Copyright (c) 2010, Robert Sesek +// Copyright (c) 2010-2011, Robert Sesek // // This program is free software: you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free Software @@ -10,11 +10,6 @@ goog.provide('armadillo.PathControl'); goog.require('goog.array'); -goog.require('goog.ui.Control'); -goog.require('goog.ui.FilteredMenu'); -goog.require('goog.ui.LabelInput'); -goog.require('goog.ui.MenuButton'); -goog.require('goog.ui.MenuItem'); /** * Creates a new path editing control for a given path. @@ -24,8 +19,6 @@ goog.require('goog.ui.MenuItem'); * @constructor */ armadillo.PathControl = function(path, editLastComponent, opt_domHelper) { - goog.ui.Control.call(this, opt_domHelper); - /** * Full path of the control. * @type {string} @@ -50,25 +43,6 @@ armadillo.PathControl = function(path, editLastComponent, opt_domHelper) { * @type {goog.ui.Control} */ this.nameControl_ = null; - - /** - * Event Handler - * @type {goog.events.EventHandler} - */ - this.eh_ = new goog.events.EventHandler(); -}; -goog.inherits(armadillo.PathControl, goog.ui.Control); - -/** - * Disposer - * @protected - */ -armadillo.PathControl.prototype.disposeInternal = function() { - armadillo.PathControl.superClass_.disposeInternal.call(this); - this.nameControl_ = null; - - this.eh_.dispose(); - this.eh_ = null; }; /** @@ -158,19 +132,16 @@ armadillo.PathControl.prototype.enterDocument = function() { * @param {string} name The current component after |path|. */ armadillo.PathControl.prototype.createComponentNode_ = function(path, name) { - var menu = new goog.ui.FilteredMenu(); - menu.setFilterLabel(name); - menu.setAllowMultiple(false); - menu.setOpenFollowsHighlight(true); - goog.events.listen(menu, goog.ui.Component.EventType.ACTION, - this.componentChanged_, false, this); + var menu = $.createDom('select'); this.fetchMenuContents_(path, name, menu); - var button = new goog.ui.MenuButton(name, menu, null, this.dom_); - button.setFocusablePopupMenu(true); - button.setScrollOnOverflow(true); - button.setVisible(true); - return button; + var option = $.createDom('option'); + option.text(name).attr('selected', 'selected'); + + menu.append(option); + menu.change(this.componentChanged_.bind(this)); + + return menu; }; /** @@ -192,16 +163,17 @@ armadillo.PathControl.prototype.fetchMenuContents_ = function(path, name, menu) // moving items. goog.array.insertAt(data, '/', 0); } + menu.empty(); $.each(data, function (i, caption) { // It only makes sense to be able to move into directories. if (!app.isDirectory(caption)) { return; } - var item = new goog.ui.MenuItem(caption); - item.setValue(app.joinPath(path, name, caption)); - menu.addItem(item); + var item = $.createDom('option'); + item.val(app.joinPath(path, name, caption)).text(caption); + menu.append(item); if (caption == name) { - menu.setHighlighted(item); + item.attr('selected', 'selected'); } }); }; @@ -213,8 +185,8 @@ armadillo.PathControl.prototype.fetchMenuContents_ = function(path, name, menu) * @param {Event} e */ armadillo.PathControl.prototype.componentChanged_ = function(e) { - this.path_ = e.target.getValue(); - this.element_.clear(); + this.path_ = $(e.target).val(); + this.element_.empty(); this.decorateInternal(this.element_); }; -- 2.22.5 From 4ce25aa9de05c41f48348c2ef3dc6518c7af9b2b Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 17:49:24 -0500 Subject: [PATCH 06/16] Switch to using jQuery XHR --- web_frontend/file.js | 4 ++-- web_frontend/main.js | 24 ++++++++++++------------ web_frontend/path_control.js | 3 +-- web_frontend/tv_renamer.js | 4 +--- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/web_frontend/file.js b/web_frontend/file.js index 94b0f4a..66e758f 100644 --- a/web_frontend/file.js +++ b/web_frontend/file.js @@ -135,7 +135,7 @@ armadillo.File.prototype.draw = function() { */ armadillo.File.prototype.remove = function() { var file = this; - var callback = function(data) { + var callback = function(data, status, xhr) { if (data['error']) { app.showError(data['message']); return; @@ -154,7 +154,7 @@ armadillo.File.prototype.remove = function() { */ armadillo.File.prototype.move = function(dest) { var file = this; - var callback = function(data) { + var callback = function(data, status, xhr) { if (data['error']) { app.showError(data['message']); } else { diff --git a/web_frontend/main.js b/web_frontend/main.js index f46ab73..bb0cab1 100644 --- a/web_frontend/main.js +++ b/web_frontend/main.js @@ -16,9 +16,7 @@ goog.require('goog.array'); goog.require('goog.dom'); goog.require('goog.fx.dom.FadeInAndShow'); goog.require('goog.fx.dom.FadeOutAndHide'); -goog.require('goog.net.XhrIo'); goog.require('goog.string.format'); -goog.require('goog.Uri.QueryData'); armadillo.App = function() { var start_path = '/'; @@ -44,14 +42,18 @@ armadillo.App = function() { /** * Starts a new XHR service request from the backend. * @param {string} action Action to perform. - * @param {Object} extra_data Extra data to add. + * @param {Object} data Extra data to add. * @param {Function} callback XHR callback. + * @return {jqXHR} The jQuery XHR object. */ -armadillo.App.prototype.sendRequest = function(action, extra_data, callback) { - var data = new goog.Uri.QueryData(); - data.set('action', action); - data.extend(extra_data); - goog.net.XhrIo.send('service', callback, 'POST', data); +armadillo.App.prototype.sendRequest = function(action, data, callback) { + data.action = action; + return $.ajax({ + url: 'service', + type: 'POST', + data: data, + success: callback + }); }; /** @@ -59,8 +61,7 @@ armadillo.App.prototype.sendRequest = function(action, extra_data, callback) { * @param {string} path Path to list; relative to jail. */ armadillo.App.prototype.list = function(path) { - var callback = function(e) { - var data = e.target.getResponseJson(); + var callback = function(data, status, xhr) { if (data['error']) { app.showError(data['message']); return; // Error. @@ -196,8 +197,7 @@ armadillo.App.prototype.mkdirHandler_ = function() { var name = prompt('Name the new subdirectory', ''); if (name != null && name != '') { var path = this.joinPath(this.getCurrentPath(), name); - this.sendRequest('mkdir', {'path':path}, function(e) { - var data = e.target.getResponseJson(); + this.sendRequest('mkdir', {'path':path}, function(data, status, xhr) { if (data['error']) { app.showError(data['message']); } else { diff --git a/web_frontend/path_control.js b/web_frontend/path_control.js index a45517c..3c6e8a2 100644 --- a/web_frontend/path_control.js +++ b/web_frontend/path_control.js @@ -152,8 +152,7 @@ armadillo.PathControl.prototype.createComponentNode_ = function(path, name) { * @param {goog.ui.Menu} The menu to attach items to */ armadillo.PathControl.prototype.fetchMenuContents_ = function(path, name, menu) { - var callback = function(e) { - var data = e.target.getResponseJson(); + var callback = function(data, status, xhr) { if (data['error']) { app.showError(data['message']); return; diff --git a/web_frontend/tv_renamer.js b/web_frontend/tv_renamer.js index db794a0..a42de8a 100644 --- a/web_frontend/tv_renamer.js +++ b/web_frontend/tv_renamer.js @@ -10,7 +10,6 @@ goog.provide('armadillo.TVRenamer'); goog.require('goog.Disposable'); -goog.require('goog.net.XhrIo'); /** * Creates a helper to rename a file in a pretty format for TV episodes. @@ -42,8 +41,7 @@ armadillo.TVRenamer.prototype.disposeInternal = function() { */ armadillo.TVRenamer.prototype.run = function() { var file = this.file_; - var callback = function(xhr) { - var data = xhr.currentTarget.getResponseJson(); + var callback = function(data, stauts, xhr) { if (data['error']) { app.showError(data['message']); } else { -- 2.22.5 From a443e465872ab8ac3bdbbee3fb09867d5d129bef Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 18:00:40 -0500 Subject: [PATCH 07/16] Remove most uses of jQuery from main.js --- web_frontend/main.js | 44 ++++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/web_frontend/main.js b/web_frontend/main.js index bb0cab1..a6821dd 100644 --- a/web_frontend/main.js +++ b/web_frontend/main.js @@ -13,9 +13,6 @@ goog.provide('armadillo.App'); goog.require('armadillo.File'); goog.require('armadillo.Version'); goog.require('goog.array'); -goog.require('goog.dom'); -goog.require('goog.fx.dom.FadeInAndShow'); -goog.require('goog.fx.dom.FadeOutAndHide'); goog.require('goog.string.format'); armadillo.App = function() { @@ -24,19 +21,17 @@ armadillo.App = function() { start_path = window.location.hash.substr(1); } this.list(start_path); - goog.events.listen(window, goog.events.EventType.HASHCHANGE, - this.hashChanged_, false, this); + + $(window).bind('hashchange', this.hashChanged_.bind(this)); this.clearError(false); - var mkdir = goog.dom.getElement('mkdir'); - goog.events.listen(mkdir, goog.events.EventType.CLICK, - this.mkdirHandler_, false, this); + $('#mkdir').click(this.mkdirHandler_.bind(this)); var version = goog.string.format('Armadillo %d.%d (%f)', armadillo.Version.MAJOR, armadillo.Version.MINOR, armadillo.Version.BUILD); - goog.dom.setTextContent(goog.dom.getElement('footer'), version) + $('#footer').text(version); } /** @@ -70,21 +65,22 @@ armadillo.App.prototype.list = function(path) { } // Update the listing. - goog.dom.setTextContent(goog.dom.getElement('pwd'), path); + $('#pwd').text(path); app.currentPath_ = path; window.location.hash = path; document.title = path + ' - Armadillo'; - var list = goog.dom.getElement('ls'); - goog.dom.removeChildren(list); + + var list = $('#ls'); + list.empty(); // Add a previous directory entry. if (path != '/' && path != '') goog.array.insertAt(data, '../', 0); // Add items for each entry. - goog.array.forEach(data, function(file) { + $.each(data, function(i, file) { var fileObject = new armadillo.File(file, path); - goog.dom.appendChild(list, fileObject.draw()); + list.append(fileObject.draw()); }); } this.sendRequest('list', {'path':path}, callback); @@ -152,7 +148,7 @@ armadillo.App.prototype.joinPath = function() { var path = ''; var sep = '/'; var last = arguments.length - 1; - goog.array.forEach(arguments, function (c, i) { + $.each(arguments, function (i, c) { if (c == sep && i != 0) return; path += c; @@ -167,16 +163,15 @@ armadillo.App.prototype.joinPath = function() { * @param {bool?} animate Whether or not to animate out. */ armadillo.App.prototype.clearError = function(animate) { - var elm = goog.dom.getElement('error'); - var anim = new goog.fx.dom.FadeOutAndHide(elm, 500); - if (!goog.dom.getTextContent(elm) || !animate) { - anim.hide(); + var elm = $('#error'); + if (!elm.text() || !animate) { + elm.hide(); return; } - goog.events.listenOnce(anim, goog.fx.Animation.EventType.END, function() { - goog.dom.setTextContent(elm, ''); + + elm.fadeOut(500, function() { + elm.text(''); }); - anim.play(); }; /** @@ -184,10 +179,7 @@ armadillo.App.prototype.clearError = function(animate) { * @param {string} message */ armadillo.App.prototype.showError = function(message) { - var elm = goog.dom.getElement('error'); - goog.dom.setTextContent(elm, message); - var anim = new goog.fx.dom.FadeInAndShow(elm, 1000); - anim.play(); + $('#error').text(message).fadeIn(1000); }; /** -- 2.22.5 From 5daa8d809b445955102e763f44617f3888b0b191 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 18:06:58 -0500 Subject: [PATCH 08/16] Remove uses of goog.array --- web_frontend/main.js | 3 +-- web_frontend/path_control.js | 4 +--- web_frontend/tv_renamer.js | 13 ------------- 3 files changed, 2 insertions(+), 18 deletions(-) diff --git a/web_frontend/main.js b/web_frontend/main.js index a6821dd..f4da15e 100644 --- a/web_frontend/main.js +++ b/web_frontend/main.js @@ -12,7 +12,6 @@ goog.provide('armadillo.App'); goog.require('armadillo.File'); goog.require('armadillo.Version'); -goog.require('goog.array'); goog.require('goog.string.format'); armadillo.App = function() { @@ -75,7 +74,7 @@ armadillo.App.prototype.list = function(path) { // Add a previous directory entry. if (path != '/' && path != '') - goog.array.insertAt(data, '../', 0); + data.splice(0, 1, '../'); // Add items for each entry. $.each(data, function(i, file) { diff --git a/web_frontend/path_control.js b/web_frontend/path_control.js index 3c6e8a2..e9d64ea 100644 --- a/web_frontend/path_control.js +++ b/web_frontend/path_control.js @@ -9,8 +9,6 @@ goog.provide('armadillo.PathControl'); -goog.require('goog.array'); - /** * Creates a new path editing control for a given path. * @param {string} path The path to create an editor for @@ -93,7 +91,7 @@ armadillo.PathControl.prototype.decorateInternal = function(element) { // If the last component is emtpy, do not use it because it means a directory // is being moved. if (components[components.length - 1] == '') { - goog.array.removeAt(components, components.length - 1); + components.splice(-1); } var path = ''; diff --git a/web_frontend/tv_renamer.js b/web_frontend/tv_renamer.js index a42de8a..296a553 100644 --- a/web_frontend/tv_renamer.js +++ b/web_frontend/tv_renamer.js @@ -9,31 +9,18 @@ goog.provide('armadillo.TVRenamer'); -goog.require('goog.Disposable'); - /** * Creates a helper to rename a file in a pretty format for TV episodes. * @extends {goog.Disposable} * @constructor */ armadillo.TVRenamer = function(file) { - goog.base(this); - /** * The file object * @type {armadillo.File} */ this.file_ = file; } -goog.inherits(armadillo.TVRenamer, goog.Disposable); - -/** - * @inheritDoc - */ -armadillo.TVRenamer.prototype.disposeInternal = function() { - goog.base(this, 'disposeInternal'); - this.file_ = null; -}; /** * Performs the information lookup and renames the file if the lookup is -- 2.22.5 From e607d099b527cce6325d7edf5af2d32fdf98a51a Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 18:09:56 -0500 Subject: [PATCH 09/16] Remove goog.string.format --- web_frontend/main.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/web_frontend/main.js b/web_frontend/main.js index f4da15e..eff6bde 100644 --- a/web_frontend/main.js +++ b/web_frontend/main.js @@ -12,7 +12,6 @@ goog.provide('armadillo.App'); goog.require('armadillo.File'); goog.require('armadillo.Version'); -goog.require('goog.string.format'); armadillo.App = function() { var start_path = '/'; @@ -27,9 +26,8 @@ armadillo.App = function() { $('#mkdir').click(this.mkdirHandler_.bind(this)); - var version = goog.string.format('Armadillo %d.%d (%f)', - armadillo.Version.MAJOR, armadillo.Version.MINOR, - armadillo.Version.BUILD); + var version = 'Armadillo ' + armadillo.Version.MAJOR + '.' + armadillo.Version.MINOR + + ' (' + armadillo.Version.BUILD + ')'; $('#footer').text(version); } -- 2.22.5 From a8faca00d5de64d11717cd3a9cb11392ff36a9e3 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 18:11:37 -0500 Subject: [PATCH 10/16] Remove one more use of goog.array --- web_frontend/path_control.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_frontend/path_control.js b/web_frontend/path_control.js index e9d64ea..e7ea70e 100644 --- a/web_frontend/path_control.js +++ b/web_frontend/path_control.js @@ -158,7 +158,7 @@ armadillo.PathControl.prototype.fetchMenuContents_ = function(path, name, menu) if (path == '') { // If this is the root path element, make sure the root is accessible for // moving items. - goog.array.insertAt(data, '/', 0); + data.splice(0, 1, '/'); } menu.empty(); $.each(data, function (i, caption) { -- 2.22.5 From 787d828baac592ca052c40eb6dbe56f7668aa349 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 18:17:35 -0500 Subject: [PATCH 11/16] Remove dependency on the closure library in the comiple step --- build.py | 3 +-- web_frontend/actor.js | 5 +---- web_frontend/file.js | 6 ++---- web_frontend/main.js | 6 +----- web_frontend/path_control.js | 2 +- web_frontend/tv_renamer.js | 2 +- web_frontend/version.js | 2 +- 7 files changed, 8 insertions(+), 18 deletions(-) diff --git a/build.py b/build.py index f6be025..d350375 100755 --- a/build.py +++ b/build.py @@ -161,8 +161,7 @@ def _CompileFrontEnd(options): output = "script" if options.compile_fe: output = "compiled" - args.extend([ '-p', closure_sources, '-o', output, '-c', CLOSURE_COMPILER, - '--output_file', outfile ]) + args.extend([ '-o', output, '-c', CLOSURE_COMPILER, '--output_file', outfile ]) print ' ' + ' '.join(args) handle = subprocess.Popen(args, stdout = sys.stdout, stderr = sys.stderr) handle.wait() diff --git a/web_frontend/actor.js b/web_frontend/actor.js index 8925dbe..8470b0b 100644 --- a/web_frontend/actor.js +++ b/web_frontend/actor.js @@ -7,10 +7,7 @@ // Foundation, either version 3 of the License, or any later version. // -goog.provide('armadillo.Actor'); - -goog.require('armadillo.PathControl'); -goog.require('armadillo.TVRenamer'); +$.namespace('armadillo.Actor'); /** * The Actor is a popup that displays the various actions that can be performed diff --git a/web_frontend/file.js b/web_frontend/file.js index 66e758f..d95c351 100644 --- a/web_frontend/file.js +++ b/web_frontend/file.js @@ -1,15 +1,13 @@ // // Armadillo File Manager -// Copyright (c) 2010, Robert Sesek +// Copyright (c) 2010-2011, Robert Sesek // // This program is free software: you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free Software // Foundation, either version 3 of the License, or any later version. // -goog.provide('armadillo.File'); - -goog.require('armadillo.Actor'); +$.namespace('armadillo.File'); /** * A file in a directory listing. diff --git a/web_frontend/main.js b/web_frontend/main.js index eff6bde..f769e8a 100644 --- a/web_frontend/main.js +++ b/web_frontend/main.js @@ -7,11 +7,7 @@ // Foundation, either version 3 of the License, or any later version. // -goog.provide('armadillo'); -goog.provide('armadillo.App'); - -goog.require('armadillo.File'); -goog.require('armadillo.Version'); +$.namespace('armadillo.App'); armadillo.App = function() { var start_path = '/'; diff --git a/web_frontend/path_control.js b/web_frontend/path_control.js index e7ea70e..c72689b 100644 --- a/web_frontend/path_control.js +++ b/web_frontend/path_control.js @@ -7,7 +7,7 @@ // Foundation, either version 3 of the License, or any later version. // -goog.provide('armadillo.PathControl'); +$.namespace('armadillo.PathControl'); /** * Creates a new path editing control for a given path. diff --git a/web_frontend/tv_renamer.js b/web_frontend/tv_renamer.js index 296a553..de9caa0 100644 --- a/web_frontend/tv_renamer.js +++ b/web_frontend/tv_renamer.js @@ -7,7 +7,7 @@ // Foundation, either version 3 of the License, or any later version. // -goog.provide('armadillo.TVRenamer'); +$.namespace('armadillo.TVRenamer'); /** * Creates a helper to rename a file in a pretty format for TV episodes. diff --git a/web_frontend/version.js b/web_frontend/version.js index 8e2ea93..19c454f 100644 --- a/web_frontend/version.js +++ b/web_frontend/version.js @@ -7,7 +7,7 @@ // Foundation, either version 3 of the License, or any later version. // -goog.provide('armadillo.Version'); +$.namespace('armadillo.Version'); armadillo.Version.MAJOR = 0; armadillo.Version.MINOR = 7; -- 2.22.5 From 49a56121dd741241a7b2af6e7bc65f00c61aa8b8 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 18:26:20 -0500 Subject: [PATCH 12/16] Remove closure resources step --- build.py | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/build.py b/build.py index d350375..7a98258 100755 --- a/build.py +++ b/build.py @@ -52,13 +52,6 @@ RESOURCES_FE = [ 'screen.css', 'reset.css' ] -RESOURCES_CLOSURE = [ - 'common.css', - 'dialog.css', - 'menu.css', - 'menuitem.css', - 'menubutton.css', -] PRODUCT_NAME = 'armadillo' # The Golang version (hg id). @@ -137,16 +130,6 @@ def _CompileFrontEnd(options): for resource in RESOURCES_FE: print ' COPY ' + resource shutil.copy(os.path.join(FE_PATH, resource), fe_resources) - fd = open(os.path.join(fe_resources, 'closure.css'), 'w+') - fd.write('/*=== Generated Resources for Closure Library ===*/') - for resource in RESOURCES_CLOSURE: - print ' COPY closure/' + resource - respath = os.path.join(CLOSURE_DEST, 'closure', 'goog', 'css', resource) - ofd = open(respath, 'r') - fd.write('\n\n/*=== File: ' + respath.replace(ROOT, '/') + ' ===*/\n') - fd.writelines(ofd.readlines()) - ofd.close() - fd.close() # Version _StampVersion(options) @@ -155,7 +138,6 @@ def _CompileFrontEnd(options): print '=== Compiling Front End ===' outfile = os.path.join(PROD_PATH, 'fe', PRODUCT_NAME + '.js') fe_sources = map(lambda f: '-i' + os.path.join(FE_PATH, f), SOURCES_FE) - closure_sources = os.path.join(CLOSURE_DEST, 'closure', 'goog') args = [ CLOSURE_CALCDEPS ] args.extend(fe_sources) output = "script" -- 2.22.5 From 8f86761736cfe707301c655d9efb5526b503d9cc Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 18:41:03 -0500 Subject: [PATCH 13/16] Remove closure library dependency from build.py --- build.py | 45 ++++++++++++++++----------------------------- 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/build.py b/build.py index 7a98258..38b1bf3 100755 --- a/build.py +++ b/build.py @@ -22,11 +22,7 @@ SRC_PATH = os.path.join(ROOT, 'src') PROD_PATH = os.path.join(ROOT, 'out') FE_PATH = os.path.join(ROOT, 'web_frontend') -CLOSURE_SVN = 'http://closure-library.googlecode.com/svn/trunk/' -CLOSURE_REV = '886' -CLOSURE_DEST = os.path.join(ROOT, 'closure') CLOSURE_COMPILER = os.path.join(ROOT, 'closure-compiler.jar') -CLOSURE_CALCDEPS = os.path.join(CLOSURE_DEST, 'closure', 'bin', 'calcdeps.py') VERSION_FILE = os.path.join(FE_PATH, 'version.js.proto') @@ -61,20 +57,6 @@ COMPILER = '6g' LINKER = '6l' O_EXTENSION = '6' -def _PullDeps(): - print '=== Pulling Dependencies ===' - if os.path.exists(CLOSURE_DEST): - handle = subprocess.Popen([ 'svn', 'info', CLOSURE_DEST ], stdout = subprocess.PIPE) - handle.wait() - for line in handle.stdout: - if line.startswith('Revision'): - if not line.strip().endswith(CLOSURE_REV): - subprocess.Popen([ 'svn', 'update', '-r', CLOSURE_REV, CLOSURE_DEST ]).wait() - else: - print ' Closure @ ' + CLOSURE_REV - else: - subprocess.Popen([ 'svn', 'checkout', '-r', CLOSURE_REV, CLOSURE_SVN, CLOSURE_DEST ]).wait() - def _CompileBackEnd(): for gofile in SOURCES: gofile = os.path.join(SRC_PATH, gofile) @@ -120,8 +102,6 @@ def _StampVersion(options): stderr = sys.stderr).wait() def _CompileFrontEnd(options): - _PullDeps() - # Copy print '=== Copying Resources ===' fe_resources = os.path.join(PROD_PATH, 'fe') @@ -137,16 +117,23 @@ def _CompileFrontEnd(options): # Compile JS. print '=== Compiling Front End ===' outfile = os.path.join(PROD_PATH, 'fe', PRODUCT_NAME + '.js') - fe_sources = map(lambda f: '-i' + os.path.join(FE_PATH, f), SOURCES_FE) - args = [ CLOSURE_CALCDEPS ] - args.extend(fe_sources) - output = "script" if options.compile_fe: - output = "compiled" - args.extend([ '-o', output, '-c', CLOSURE_COMPILER, '--output_file', outfile ]) - print ' ' + ' '.join(args) - handle = subprocess.Popen(args, stdout = sys.stdout, stderr = sys.stderr) - handle.wait() + fe_sources = map(lambda f: '--js ' + os.path.join(FE_PATH, f), SOURCES_FE) + args = [ 'java', '-jar', CLOSURE_COMPILER ] + args.extend(fe_sources) + args.extend(['--js_output_file', outfile]) + print ' ' + ' '.join(args) + handle = subprocess.Popen(args, stdout = sys.stdout, stderr = sys.stderr) + handle.wait() + else: + fd = open(outfile, 'w+') + for fe_source in SOURCES_FE: + fd2 = open(os.path.join(FE_PATH, fe_source), 'r') + fd.write('// === ' + fe_source + '\n') + fd.write(fd2.read()) + fd2.close() + fd.close() + print ' DONE' def Main(): -- 2.22.5 From ab55f4e0fd50df5acf9525f8666ac8784429c9c0 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 18:44:31 -0500 Subject: [PATCH 14/16] Fix full compilation error --- build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.py b/build.py index 38b1bf3..240ae0c 100755 --- a/build.py +++ b/build.py @@ -118,7 +118,7 @@ def _CompileFrontEnd(options): print '=== Compiling Front End ===' outfile = os.path.join(PROD_PATH, 'fe', PRODUCT_NAME + '.js') if options.compile_fe: - fe_sources = map(lambda f: '--js ' + os.path.join(FE_PATH, f), SOURCES_FE) + fe_sources = map(lambda f: '--js=' + os.path.join(FE_PATH, f), SOURCES_FE) args = [ 'java', '-jar', CLOSURE_COMPILER ] args.extend(fe_sources) args.extend(['--js_output_file', outfile]) -- 2.22.5 From 10c65a135da28b70a2fd7549f67f77b197795f15 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 26 Dec 2011 18:46:06 -0500 Subject: [PATCH 15/16] Remove closure traces from index.html --- web_frontend/index.html | 4 ---- 1 file changed, 4 deletions(-) diff --git a/web_frontend/index.html b/web_frontend/index.html index bfefcac..96677a2 100644 --- a/web_frontend/index.html +++ b/web_frontend/index.html @@ -2,13 +2,9 @@ Armadillo File Manager - -
-- 2.22.5 From d35dda13f3bf0ceb6c396eae391abae8028f32bc Mon Sep 17 00:00:00 2001 From: Armadillo Build Script Date: Mon, 26 Dec 2011 18:51:35 -0500 Subject: [PATCH 16/16] Stamp version.js @ 562.72. --- web_frontend/version.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web_frontend/version.js b/web_frontend/version.js index 19c454f..7585e75 100644 --- a/web_frontend/version.js +++ b/web_frontend/version.js @@ -11,5 +11,5 @@ $.namespace('armadillo.Version'); armadillo.Version.MAJOR = 0; armadillo.Version.MINOR = 7; -armadillo.Version.BUILD = 561.0; -armadillo.Version.STAMP = 1316524152; +armadillo.Version.BUILD = 562.72; +armadillo.Version.STAMP = 1324943495; -- 2.22.5