summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/util
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/util')
-rw-r--r--public/assets/javascripts/rectangles/util/constants.js6
-rw-r--r--public/assets/javascripts/rectangles/util/keys.js6
-rw-r--r--public/assets/javascripts/rectangles/util/measurement.js82
-rw-r--r--public/assets/javascripts/rectangles/util/permissions.js17
-rw-r--r--public/assets/javascripts/rectangles/util/undostack.js52
5 files changed, 160 insertions, 3 deletions
diff --git a/public/assets/javascripts/rectangles/util/constants.js b/public/assets/javascripts/rectangles/util/constants.js
index 58cb1a5..b9485ca 100644
--- a/public/assets/javascripts/rectangles/util/constants.js
+++ b/public/assets/javascripts/rectangles/util/constants.js
@@ -8,6 +8,12 @@ var TOP = CEILING, BOTTOM = FLOOR,
BOTTOM_RIGHT = BOTTOM | RIGHT,
TOP_BOTTOM = TOP | BOTTOM
+var FRONT_LEFT = FRONT | LEFT,
+ FRONT_RIGHT = FRONT | RIGHT,
+ BACK_LEFT = BACK | LEFT,
+ BACK_RIGHT = BACK | RIGHT
+
+
var height_min = 200,
height_max = 2000,
side_min = 10,
diff --git a/public/assets/javascripts/rectangles/util/keys.js b/public/assets/javascripts/rectangles/util/keys.js
index 5a5c9d2..62d763f 100644
--- a/public/assets/javascripts/rectangles/util/keys.js
+++ b/public/assets/javascripts/rectangles/util/keys.js
@@ -19,7 +19,7 @@ var keys = (function(){
break;
default:
if (keys.debug) console.log(key)
- base.tube(key)
+ base.tube(key, e)
break;
}
})
@@ -158,8 +158,8 @@ var keys = (function(){
'backslash' : '220',
'closebracket' : '221',
'single_quote' : '222'
- }
- var KEY_NAMES = invert_hash(KEYCODES)
+ },
+ KEY_NAMES = invert_hash(KEYCODES)
return base
})() \ No newline at end of file
diff --git a/public/assets/javascripts/rectangles/util/measurement.js b/public/assets/javascripts/rectangles/util/measurement.js
new file mode 100644
index 0000000..d6a0b35
--- /dev/null
+++ b/public/assets/javascripts/rectangles/util/measurement.js
@@ -0,0 +1,82 @@
+$.fn.resetUnitVal = function(){
+ this.each(function(){
+ var n = $(this).data("px")
+ $(this).unitVal(n)
+ });
+}
+
+$.fn.unitVal = function(n){
+ var s
+ if (typeof n === "undefined") {
+ s = $(this).val()
+ n = stringToMeasurement( s )
+ if (! n || isNaN(n)) {
+ n = $(this).data("px")
+ }
+ }
+ s = measurementToString( n )
+ $(this).val( s ).data("px", n)
+ return n
+}
+
+function measurementToString( n ) {
+ var s, ft, inch
+ switch (app.units) {
+ case 'm':
+ s = round(n/36 * 0.3048 * 100) / 100 + " m"
+ break
+ case 'ft':
+ ft = floor(n / 36)
+ inch = abs(round((n % 36) / 3))
+ s = ft + "'"
+ if (inch > 0) {
+ s += " " + inch + '"'
+ }
+ break
+ case 'px':
+ default:
+ s = round(n) + " px"
+ break
+ }
+ return s
+}
+function stringToMeasurement( s ) {
+ var ft, inch, ft_in, type
+ if (! s.match(/[0-9]/)) {
+ return NaN
+ }
+ if (s.indexOf("'") !== -1 || s.indexOf('"') !== -1 || s.indexOf('ft') !== -1) {
+ ft_in = s.match(/[0-9.]+/g)
+ if (ft_in.length >= 2) {
+ ft = parseFloat( ft_in[0] )
+ inch = parseFloat( ft_in[1] )
+ }
+ else if (ft_in.length == 1) {
+ if (s.indexOf('"') !== -1) {
+ ft = 0
+ inch = parseFloat( ft_in[0] )
+ }
+ else {
+ ft = parseFloat( ft_in[0] )
+ inch = 0
+ }
+ }
+ else {
+ ft = inch = 0
+ }
+ n = ft * 36 + inch * 3
+ }
+ else if (s.indexOf("m") !== -1) {
+ n = parseFloat(s.match(/[0-9.]+/)) * 36 / 0.3048
+ }
+ else if (s.indexOf("px") !== -1) {
+ n = parseFloat(s.match(/[0-9.]+/))
+ }
+ else {
+ n = abs( stringToMeasurement( s + app.units ) )
+ }
+ if (s.indexOf('-') !== -1) {
+ n *= -1
+ }
+ return n
+}
diff --git a/public/assets/javascripts/rectangles/util/permissions.js b/public/assets/javascripts/rectangles/util/permissions.js
index adb2498..1b5a1b5 100644
--- a/public/assets/javascripts/rectangles/util/permissions.js
+++ b/public/assets/javascripts/rectangles/util/permissions.js
@@ -24,9 +24,26 @@ Permissions.prototype.assign = function (key, state) {
return state
}
+Permissions.prototype.add = function (key) {
+ var base = this
+ base[key] = true
+}
+
+Permissions.prototype.remove = function (key) {
+ var base = this
+ base[key] = true
+}
+
Permissions.prototype.clear = function () {
var base = this
base.keys.forEach(function(op){
base[op] = false
})
}
+
+Permissions.prototype.log = function () {
+ var base = this
+ base.keys.forEach(function(op){
+ console.log(op, base[op])
+ })
+} \ No newline at end of file
diff --git a/public/assets/javascripts/rectangles/util/undostack.js b/public/assets/javascripts/rectangles/util/undostack.js
new file mode 100644
index 0000000..b93c79e
--- /dev/null
+++ b/public/assets/javascripts/rectangles/util/undostack.js
@@ -0,0 +1,52 @@
+(function(){
+
+ var UndoStack = function(){
+ this.debug = true
+ this.stack = []
+ this.types = {}
+ this.pointer = -1
+ }
+ UndoStack.prototype.push = function(action){
+ this.pointer++
+ this.stack[this.pointer] = action
+ this.purge()
+ }
+ UndoStack.prototype.purge = function(){
+ if (this.stack.length-1 == this.pointer) return
+ this.stack.length = this.pointer+1
+ }
+ UndoStack.prototype.undo = function(){
+ if (this.pointer == -1) return false
+ var action = this.stack[this.pointer]
+ this.debug && console.log("undo", action.type)
+ this.types[ action.type ].undo(action.undo)
+ this.pointer--
+ return this.pointer > -1
+ }
+ UndoStack.prototype.redo = function(){
+ if (this.pointer == this.stack.length-1) return false
+ this.pointer++
+ var action = this.stack[this.pointer]
+ this.debug && console.log("redo", action.type)
+ this.types[ action.type ].redo(action.redo)
+ return this.pointer < this.stack.length-1
+ }
+ UndoStack.prototype.register = function(actionType){
+ if (actionType.length) {
+ actionType.forEach(this.registerOne.bind(this))
+ }
+ else {
+ this.registerOne(actionType)
+ }
+ }
+ UndoStack.prototype.registerOne = function(actionType){
+ this.types[ actionType.type ] = actionType
+ }
+ if ('window' in this) {
+ window.UndoStack = new UndoStack
+ }
+ else {
+ module.exports = new UndoStack
+ }
+
+})()