new Files
This commit is contained in:
165
front/public/vender/signature/jSignature.UndoButton.js
Normal file
165
front/public/vender/signature/jSignature.UndoButton.js
Normal file
@ -0,0 +1,165 @@
|
||||
/** @license
|
||||
jSignature v2 jSignature's Undo Button and undo functionality plugin
|
||||
|
||||
*/
|
||||
/**
|
||||
Copyright (c) 2011 Willow Systems Corp http://willow-systems.com
|
||||
MIT License <http://www.opensource.org/licenses/mit-license.php>
|
||||
*/
|
||||
|
||||
;(function(){
|
||||
|
||||
var apinamespace = 'jSignature'
|
||||
|
||||
function attachHandlers(buttonRenderer, apinamespace, extensionName) {
|
||||
var $undoButton = buttonRenderer.call(this)
|
||||
|
||||
;(function(jSignatureInstance, $undoButton, apinamespace) {
|
||||
jSignatureInstance.events.subscribe(
|
||||
apinamespace + '.change'
|
||||
, function(){
|
||||
if (jSignatureInstance.dataEngine.data.length) {
|
||||
$undoButton.show()
|
||||
} else {
|
||||
$undoButton.hide()
|
||||
}
|
||||
}
|
||||
)
|
||||
})( this, $undoButton, apinamespace )
|
||||
|
||||
;(function(jSignatureInstance, $undoButton, apinamespace) {
|
||||
|
||||
var eventName = apinamespace + '.undo'
|
||||
|
||||
$undoButton.bind('click', function(){
|
||||
jSignatureInstance.events.publish(eventName)
|
||||
})
|
||||
|
||||
// This one creates new "undo" event listener to jSignature instance
|
||||
// It handles the actual undo-ing.
|
||||
jSignatureInstance.events.subscribe(
|
||||
eventName
|
||||
, function(){
|
||||
var data = jSignatureInstance.dataEngine.data
|
||||
if (data.length) {
|
||||
data.pop()
|
||||
jSignatureInstance.resetCanvas(data)
|
||||
}
|
||||
}
|
||||
)
|
||||
})(
|
||||
this
|
||||
, $undoButton
|
||||
, this.events.topics.hasOwnProperty( apinamespace + '.undo' ) ?
|
||||
// oops, seems some other plugin or code has already claimed "jSignature.undo" event
|
||||
// we will use this extension's name for event name prefix
|
||||
extensionName :
|
||||
// Great! we will use 'jSignature' for event name prefix.
|
||||
apinamespace
|
||||
)
|
||||
}
|
||||
|
||||
function ExtensionInitializer(extensionName){
|
||||
// we are called very early in instance's life.
|
||||
// right after the settings are resolved and
|
||||
// jSignatureInstance.events is created
|
||||
// and right before first ("jSignature.initializing") event is called.
|
||||
// You don't really need to manupilate
|
||||
// jSignatureInstance directly, just attach
|
||||
// a bunch of events to jSignatureInstance.events
|
||||
// (look at the source of jSignatureClass to see when these fire)
|
||||
// and your special pieces of code will attach by themselves.
|
||||
|
||||
// this function runs every time a new instance is set up.
|
||||
// this means every var you create will live only for one instance
|
||||
// unless you attach it to something outside, like "window."
|
||||
// and pick it up later from there.
|
||||
|
||||
// when globalEvents' events fire, 'this' is globalEvents object
|
||||
// when jSignatureInstance's events fire, 'this' is jSignatureInstance
|
||||
|
||||
// Here,
|
||||
// this = is new jSignatureClass's instance.
|
||||
|
||||
// The way you COULD approch setting this up is:
|
||||
// if you have multistep set up, attach event to "jSignature.initializing"
|
||||
// that attaches other events to be fired further lower the init stream.
|
||||
// Or, if you know for sure you rely on only one jSignatureInstance's event,
|
||||
// just attach to it directly
|
||||
|
||||
var apinamespace = 'jSignature'
|
||||
|
||||
this.events.subscribe(
|
||||
// name of the event
|
||||
apinamespace + '.attachingEventHandlers'
|
||||
// event handlers, can pass args too, but in majority of cases,
|
||||
// 'this' which is jSignatureClass object instance pointer is enough to get by.
|
||||
, function(){
|
||||
|
||||
// hooking up "undo" button to lower edge of Canvas.
|
||||
// but only when options passed to jSignature('init', options)
|
||||
// contain "undoButton":renderingFunction pair.
|
||||
// or "undoButton":true (in which case default, internal rendering fn is used)
|
||||
if (this.settings[extensionName]) {
|
||||
var oursettings = this.settings[extensionName]
|
||||
if (typeof oursettings !== 'function') {
|
||||
// we make it a function.
|
||||
|
||||
// we allow people to override the button rendering code,
|
||||
// but when developler is OK with default look (and just passes "truthy" value)
|
||||
// this defines default look for the button:
|
||||
// centered against canvas, hanging on its lower side.
|
||||
oursettings = function(){
|
||||
// this === jSignatureInstance
|
||||
var undoButtonSytle = 'position:absolute;display:none;margin:0 !important;top:auto'
|
||||
, $undoButton = $('<input type="button" value="撤销" style="'+undoButtonSytle+'" />')
|
||||
.appendTo(this.$controlbarLower)
|
||||
|
||||
// this centers the button against the canvas.
|
||||
var buttonWidth = $undoButton.width()
|
||||
$undoButton.css(
|
||||
'left'
|
||||
, Math.round(( this.canvas.width - buttonWidth ) / 2)
|
||||
)
|
||||
// IE 7 grows the button. Correcting for that.
|
||||
if ( buttonWidth !== $undoButton.width() ) {
|
||||
$undoButton.width(buttonWidth)
|
||||
}
|
||||
|
||||
return $undoButton
|
||||
}
|
||||
}
|
||||
|
||||
attachHandlers.call(
|
||||
this
|
||||
, oursettings
|
||||
, apinamespace
|
||||
, extensionName
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
var ExtensionAttacher = function(){
|
||||
$.fn[apinamespace](
|
||||
'addPlugin'
|
||||
,'instance' // type of plugin
|
||||
,'UndoButton' // extension name
|
||||
,ExtensionInitializer
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
// //Because plugins are minified together with jSignature, multiple defines per (minified) file blow up and dont make sense
|
||||
// //Need to revisit this later.
|
||||
|
||||
// if ( typeof define === "function" && define.amd != null) {
|
||||
// // AMD-loader compatible resource declaration
|
||||
// // you need to call this one with jQuery as argument.
|
||||
// define(function(){return Initializer} )
|
||||
// } else {
|
||||
ExtensionAttacher()
|
||||
// }
|
||||
|
||||
})();
|
Reference in New Issue
Block a user