nifty-dialog 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ module Nifty
2
+ module Dialog
3
+ VERSION = '1.0.1'
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ require 'nifty/dialog/version'
2
+
3
+ module Nifty
4
+ module Dialog
5
+ module Rails
6
+ class Engine < ::Rails::Engine
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,141 @@
1
+ window.Nifty ||= {}
2
+ window.Nifty.Dialog =
3
+
4
+ # The numerical ID to start showing dialogs from
5
+ startingID: 1
6
+
7
+ # A callback reference which is run on content set if set.
8
+ onSetContent: null
9
+
10
+ # Stores all behaviors
11
+ behaviors: {}
12
+
13
+ # Open a new dialog which will accept a number of possible options.
14
+ #
15
+ # id => the ID to assign to this dialog (prefixed with 'niftyDialog-' )
16
+ #
17
+ # url => open a dialog containing the HTML at the given URL. When
18
+ # displaying using a URL, the dialog will open immediately
19
+ # and containing a spinner until the data is loaded.
20
+ #
21
+ # html => a string of HTML which contains the HTML which should be
22
+ # displayed in the dialog.
23
+ #
24
+ # afterLoad => a callback to execute after the dialog has been loaded.
25
+ #
26
+ # width => the width of the dialog (in px, defaults to CSS-provided)
27
+ #
28
+ # offset => specifies a vertical offset (in px)
29
+ #
30
+ # class => the CSS class to assign to this dialog
31
+ #
32
+ # behavior => the name of a behavior set to be invoked on dialog open/close.
33
+ # Behaviors can be setup using the Nifty.Dialog.addBehavior method.
34
+ #
35
+ open: (options={})->
36
+ # set a dialog ID for this dialog
37
+ dialogsOpen = $('div.niftyDialog').length
38
+ dialogID = if dialogsOpen == 0 then this.startingID else (dialogsOpen * 10) + this.startingID
39
+
40
+ # create a template and assign the ID
41
+ dialogTemplate = $("<div class='niftyDialog #{options.class}' id='niftyDialog-#{options.id}'></div>")
42
+ dialogTemplate.data('dialogID', dialogID)
43
+
44
+ # insert the dialog into the page
45
+ insertedDialog = dialogTemplate.appendTo($('body'))
46
+ insertedDialog.css('z-index', 2000 + dialogID)
47
+
48
+ # set the content on the dialog
49
+ insertedDialog.data('options', options)
50
+
51
+ overlayClass = ''
52
+ overlayClass = 'invisible' if dialogID > 1
53
+ theOverlay = $("<div class='niftyOverlay #{overlayClass}'></div>").insertBefore(insertedDialog).css('z-index', 2000 + dialogID - 1)
54
+ theOverlay.fadeIn('fast')
55
+
56
+ # if we have a width, set the width for the dialog
57
+ if options.width?
58
+ insertedDialog.css('width', "#{options.width}px")
59
+ insertedDialog.css('margin-left', "-#{options.width / 2}px")
60
+
61
+ if options.offset?
62
+ insertedDialog.css('margin-top', "#{options.offset}px")
63
+
64
+ # Set the closing action for the inserted dialog to close dialog
65
+ # and fade out the appropriate overlay
66
+ insertedDialog.data 'closeAction', =>
67
+ options.onClose.call(null, insertedDialog, options) if options.onClose?
68
+ if options.behavior? && behavior = this.behaviors[options.behavior]
69
+ behavior.onClose.call(null, insertedDialog, options) if behavior.onClose?
70
+ insertedDialog.fadeOut 'fast', -> insertedDialog.remove()
71
+ theOverlay.fadeOut 'fast', -> theOverlay.remove()
72
+
73
+ # Set that clicking on the dialog's overlay will close the dialog
74
+ theOverlay.on 'click', -> insertedDialog.data('closeAction').call()
75
+
76
+ # load in the content
77
+ if options.url?
78
+ # if loading from a URL, do this
79
+ insertedDialog.addClass 'ajax'
80
+ insertedDialog.addClass 'loading'
81
+ $.ajax
82
+ url: options.url
83
+ success: (data)=> this.displayDialog(insertedDialog, data)
84
+
85
+ else if options.html?
86
+ this.displayDialog(insertedDialog, options.html)
87
+
88
+ else
89
+ # anything else won't work
90
+ console.log "Dialog could not be displayed. Invalid options passed."
91
+ console.log options
92
+ return false
93
+
94
+ # Add a behaviour callback which will be executed
95
+ addBehavior: (options)->
96
+ if options.name?
97
+ this.behaviors[options.name] = options
98
+ true
99
+ else
100
+ console.log "Must pass a 'name' option to the addBehavior method."
101
+ false
102
+
103
+ # Complete the opening of a dialog with the given HTML
104
+ displayDialog: (dialog, content)->
105
+ dialog.html(content)
106
+ dialog.fadeIn('fast')
107
+ dialog.removeClass 'loading'
108
+ options = dialog.data('options')
109
+ if options.behavior? && behavior = this.behaviors[options.behavior]
110
+ behavior.onLoad.call(null, dialog, options) if behavior.onLoad?
111
+ options.afterLoad.call(null, dialog) if options.afterLoad?
112
+ this.onSetContent(null, dialog) if this.onSetContent?
113
+
114
+ # This method will replace the contents of the nearest dialog (or the one with the
115
+ # given ID if one is given).
116
+ setContent: (content, id = null)->
117
+ dialog = if id == null then $('div.niftyDialog:last') else $("div.niftyDialog#dialog-#{id}")
118
+ if dialog.length
119
+ dialog.html(content)
120
+ options = dialog.data('options')
121
+ if options.behavior? && behavior = this.behaviors[options.behavior]
122
+ behavior.onSetContent.call(null, dialog, options) if behavior.onSetContent?
123
+ this.onSetContent(null, dialog) if this.onSetContent?
124
+
125
+ # Create a new overlay
126
+ createOverlay: (options)->
127
+ overlay = $("<div class='niftyOverlay invisible'></div>")
128
+ overlay.insertBefore(options.behind)
129
+ overlay.css("z-index", options.behind.css('z-index') - 1)
130
+ overlay.on 'click', ->
131
+ options.close.call(overlay)
132
+ overlay.fadeOut 'fast', ->
133
+ overlay.remove()
134
+ overlay.fadeIn('fast')
135
+
136
+ # Closes the top dialgo in the dialog stack
137
+ closeTopDialog: ->
138
+ if $('div.niftyDialog').length
139
+ $('div.niftyDialog:last').data('closeAction').call()
140
+
141
+
@@ -0,0 +1,45 @@
1
+ //
2
+ // Overlay
3
+ //
4
+ div.niftyOverlay {
5
+ position:fixed;
6
+ background:rgba(0,0,0,0.5);
7
+ top:0;
8
+ left:0;
9
+ width:100%;
10
+ height:4000px;
11
+ display:none;
12
+ z-index:50;
13
+ }
14
+
15
+ //
16
+ // An invisible verison of the overlay
17
+ //
18
+ div.niftyOverlay.invisible {
19
+ background:transparent;
20
+ }
21
+
22
+ //
23
+ // Dialog
24
+ //
25
+ div.niftyDialog {
26
+ display:none;
27
+ position:fixed;
28
+ top:50%;
29
+ top:100px;
30
+ left:50%;
31
+ margin-left:-250px;
32
+ width:500px;
33
+ background:#fff;
34
+ box-shadow:0 0 70px rgb(0,0,0);
35
+ h2 {
36
+ background:#333333;
37
+ color:#fff;
38
+ padding:10px 15px;
39
+ font-weight:600;
40
+ background-repeat:no-repeat;
41
+ background-position:95% 17px;
42
+ background-size:16px;
43
+ font-size:0.9em;
44
+ }
45
+ }
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nifty-dialog
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Adam Cooke
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-10-22 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: A javascript library for working with dialogs
15
+ email:
16
+ - adam@niftyware.io
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/nifty/dialog/version.rb
22
+ - lib/nifty/dialog.rb
23
+ - vendor/assets/javascripts/nifty/dialog.coffee
24
+ - vendor/assets/stylesheets/nifty/dialog.scss
25
+ homepage: https://github.com/niftyware/dialog
26
+ licenses: []
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ none: false
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 1.8.23
46
+ signing_key:
47
+ specification_version: 3
48
+ summary: A javascript library for working with dialogs
49
+ test_files: []