modalist 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1cbf3abd0b4787f3ab6afb23b2846b05a0dd92a4de370e388ce249242e29f0f3
4
+ data.tar.gz: 38dfacf7c7d68db70b7444e7e8e7bd03a775773287ca35adf36b7b94c175fa1b
5
+ SHA512:
6
+ metadata.gz: 47caee6ccf5fb50518790a4ae534448110b4836262651f284b729471c14fa8132bb1dc1c91f0ed3a050479a8bb8a091b591203c6fb793d85bd243dad614f07ca
7
+ data.tar.gz: dc75cd91513f0e666c01914e2bb3b6c6467c22f3077d9d0f8371c110bef7b1c5b2a8f2d35b23f2c167ca1d3cf2a21d2db442e12c50e1c6eb6a173ac44b698a81
data/CHANGELOG.md ADDED
@@ -0,0 +1,9 @@
1
+ # Changelog
2
+
3
+ ### master
4
+
5
+ * nothing yet
6
+
7
+ ### 1.0.0 - 2018-01-06
8
+
9
+ * initial release
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 Jonas Hübotter
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,302 @@
1
+ # Modalist
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/modalist.svg)](https://badge.fury.io/rb/modalist) <img src="https://travis-ci.org/jonhue/modalist.svg?branch=master" />
4
+
5
+ Modalist is a powerful ajaxified modal solution for Rails. Here is how it works:
6
+
7
+ 1) You trigger a modal opening from your frontend code
8
+ 2) Modalist fetches the modal contents from your specific modal-controller-action with AJAX
9
+ 3) The modal opens
10
+
11
+ Modalist does not reinvent the wheel and uses the best modal-engine [iziModal.js](https://github.com/dolce/iziModal) to backup its code.
12
+
13
+ ---
14
+
15
+ ## Table of Contents
16
+
17
+ * [Installation](#installation)
18
+ * [Usage](#usage)
19
+ * [Controllers](#controllers)
20
+ * [Views](#views)
21
+ * [Trigger a modal](#trigger-a-modal)
22
+ * [Modalist functions](#modalist-functions)
23
+ * [Options](#options)
24
+ * [Styles](#styles)
25
+ * [Events](#events)
26
+ * [To Do](#to-do)
27
+ * [Contributing](#contributing)
28
+ * [Contributors](#contributors)
29
+ * [License](#license)
30
+
31
+ ---
32
+
33
+ ## Installation
34
+
35
+ Modalist works with Rails 5 onwards. You can add it to your `Gemfile` with:
36
+
37
+ ```ruby
38
+ gem 'modalist'
39
+ ```
40
+
41
+ And then execute:
42
+
43
+ $ bundle
44
+
45
+ Or install it yourself as:
46
+
47
+ $ gem install modalist
48
+
49
+ If you always want to be up to date fetch the latest from GitHub in your `Gemfile`:
50
+
51
+ ```ruby
52
+ gem 'modalist', github: 'jonhue/modalist'
53
+ ```
54
+
55
+ ## Usage
56
+
57
+ First let's add the necessary assets to your pipeline:
58
+
59
+ ```js
60
+ //= require jquery
61
+ //= require iziModal
62
+ //= require modalist
63
+ ```
64
+
65
+ ```css
66
+ /*
67
+ *= require iziModal
68
+ *= require modalist
69
+ */
70
+ ```
71
+
72
+ **Note:** If you are using a package manager like Yarn, import the latest [iziModal](https://github.com/dolce/iziModal) and [modalist](https://github.com/jonhue/modalist.js) code instead.
73
+
74
+ Specify where modals should be located in your view:
75
+
76
+ ```haml
77
+ !!!
78
+ %html
79
+ %head
80
+ -# ...
81
+ %body
82
+ = modalist
83
+ = yield
84
+ ```
85
+
86
+ ### Controllers
87
+
88
+ Modallist simulates Rails' MVC structure. To add a new modal to your app you have to create a new controller action, route and view:
89
+
90
+ ```ruby
91
+ class SettingsController < ApplicationController
92
+
93
+ def index
94
+ # a regular controller action
95
+ end
96
+
97
+ def modalist
98
+ modalist
99
+ # a modalist controller action
100
+ end
101
+
102
+ end
103
+ ```
104
+
105
+ ```ruby
106
+ Rails.application.routes.draw do
107
+
108
+ get 'settings', to: 'settings#index'
109
+ scope :settings, as: :settings do
110
+ get 'modalist', to: 'settings#modalist'
111
+ end
112
+
113
+ end
114
+ ```
115
+
116
+ In most cases you only want to allow AJAX requests to be able to reach your modal-controller-actions:
117
+
118
+ ```ruby
119
+ get 'modalist', to: 'settings#modalist', constraints: Modalist::Ajax.new
120
+ ```
121
+
122
+ ### Views
123
+
124
+ In your Modalist views are a couple of helper methods available:
125
+
126
+ **`modalist_title(title)`:** This will specify a title for your modal. If you omit this in your view, your modal will not have a header. Takes a string.
127
+
128
+ **`modalist_subtitle(subtitle)`:** Add a subtitle to your modal header. Takes a string.
129
+
130
+ **`modalist_actions(&block)`:** Specify actions (preferably icons wrapped in links) which will be displayed on the right side of your modal header. Takes a block.
131
+
132
+ **`modalist_close`:** Renders a default modal close action. Can be passed to `modalist_actions`.
133
+
134
+ #### Example
135
+
136
+ ```haml
137
+ - modalist_title 'Modal'
138
+ - modalist_subtitle 'Subtitle'
139
+ - modalist_actions do
140
+ = modalist_close
141
+
142
+ Content ...
143
+ ```
144
+
145
+ ### Trigger a modal
146
+
147
+ There are numerous ways to trigger/open a modal with Modalist.
148
+
149
+ One options is to open the modal by calling a JavaScript function - more on that [here](#functions).
150
+
151
+ #### Links
152
+
153
+ The most common scenario is using a link to trigger the opening of a modal:
154
+
155
+ ```haml
156
+ = link_to 'Open modal', settings_modalist_url, class: 'modalist--trigger'
157
+ ```
158
+
159
+ You can use [data attributes](#options) to pass options customizing the modal.
160
+
161
+ #### Forms
162
+
163
+ When you want to open a modal after submitting a form - this is as simple as it gets:
164
+
165
+ ```haml
166
+ = simple_form_for @setting, settings_modalist_url(id: @setting.id), method: :get do |f|
167
+ -# ...
168
+ = f.input :submit, input_html: { class: 'modalist--trigger', data: { modalist_form: true } }
169
+ ```
170
+
171
+ You can use [data attributes](#options) to pass options customizing the modal.
172
+
173
+ #### Elements
174
+
175
+ You can also trigger a modal from any other HTML element in your view:
176
+
177
+ ```haml
178
+ .modalist--trigger{ data: { modalist_url: settings_modalist_url } }
179
+ ```
180
+
181
+ You can use [data attributes](#options) to pass options customizing the modal.
182
+
183
+ ### Modalist functions
184
+
185
+ Modalist's JavaScript component provides a set of functions to handle your modals:
186
+
187
+ #### Open modals
188
+
189
+ ```js
190
+ Modalist.open({ url: 'http://localhost:3000/settings/modal' });
191
+ ```
192
+
193
+ You can pass [options](#options) to customize the modal:
194
+
195
+ ```js
196
+ Modalist.open({
197
+ url: 'http://localhost:3000/settings/modal',
198
+ form: false,
199
+ fullScreen: false
200
+ });
201
+ ```
202
+
203
+ #### Close modals
204
+
205
+ ```js
206
+ Modalist.close();
207
+ ```
208
+
209
+ ### Options
210
+
211
+ There are two sets of options you can pass to Modalist. Those who get passed on initialization and those who get passed on any subsequent calls of a function.
212
+
213
+ #### Initialization
214
+
215
+ **`ìziModal`:** Options hash utilized to initialize [iziModal](https://github.com/dolce/iziModal).
216
+
217
+ #### Subsequent calls
218
+
219
+ **`url`:** URL to fetch content of the modal from. Takes a string.
220
+
221
+ **`form`:** Submit a form and use the response to populate the modal. Takes a string to specify a jQuery selector for the form or `false`.
222
+
223
+ **`fullScreen`:** Show a full screen modal instead of the default windowed modal. Takes a 'true', `'mobile'` (uses a full screen modal on devices smaller than `800px`) or `false`.
224
+
225
+ ### Styles
226
+
227
+ To customize the styles of your modals, require the vendored default styles and then override them with your custom CSS.
228
+
229
+ It is often useful to be able to provide view-specific styles. Modalist therefore adds classes for controller and action to the `.modalist--content` element which wraps your modals content. Here is how you can utilize it:
230
+
231
+ ```css
232
+ /* settings#modalist */
233
+ .modalist--content.settings.modalist {
234
+ /* ... */
235
+ }
236
+ /* nested/settings#modalist */
237
+ .modalist--content.nested.settings.modalist {
238
+ /* ... */
239
+ }
240
+ ```
241
+
242
+ ### Events
243
+
244
+ Modalist emits events that allow you to track the navigation lifecycle and respond to content loading. Modalist fires events on the `$(document)` object.
245
+
246
+ * `modalist:click` fires when you click a Modal enabled link to trigger a modal opening. The clicked element is the event target. Access the requested location with `event.data.url`.
247
+
248
+ * `modalist:request-start` fires before Modal issues a network request to fetch the modal content.
249
+
250
+ * `modalist:request-end` fires after the network request completes.
251
+
252
+ * `modalist:before-render` fires before rendering the content.
253
+
254
+ * `modalist:render` fires after Modal renders the content in the modal.
255
+
256
+ * `modalist:load` fires after Modal completed preparing and opened the modal.
257
+
258
+ ---
259
+
260
+ ## To Do
261
+
262
+ [Here](https://github.com/jonhue/modalist/projects/1) is the full list of current projects.
263
+
264
+ To propose your ideas, initiate the discussion by adding a [new issue](https://github.com/jonhue/modalist/issues/new).
265
+
266
+ ---
267
+
268
+ ## Contributing
269
+
270
+ We hope that you will consider contributing to Modalist. Please read this short overview for some information about how to get started:
271
+
272
+ [Learn more about contributing to this repository](CONTRIBUTING.md), [Code of Conduct](CODE_OF_CONDUCT.md)
273
+
274
+ ### Contributors
275
+
276
+ Give the people some :heart: who are working on this project. See them all at:
277
+
278
+ https://github.com/jonhue/modalist/graphs/contributors
279
+
280
+ ## License
281
+
282
+ MIT License
283
+
284
+ Copyright (c) 2017 Jonas Hübotter
285
+
286
+ Permission is hereby granted, free of charge, to any person obtaining a copy
287
+ of this software and associated documentation files (the "Software"), to deal
288
+ in the Software without restriction, including without limitation the rights
289
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
290
+ copies of the Software, and to permit persons to whom the Software is
291
+ furnished to do so, subject to the following conditions:
292
+
293
+ The above copyright notice and this permission notice shall be included in all
294
+ copies or substantial portions of the Software.
295
+
296
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
297
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
298
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
299
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
300
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
301
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
302
+ SOFTWARE.
@@ -0,0 +1,29 @@
1
+ module Modalist
2
+ module ModalHelper
3
+
4
+ def modalist
5
+ render 'modalist/modal'
6
+ end
7
+
8
+ def modalist_close
9
+ render 'modalist/close'
10
+ end
11
+
12
+ def modalist_title title
13
+ area :modalist_title, title
14
+ end
15
+
16
+ def modalist_subtitle subtitle
17
+ area :modalist_subtitle, subtitle
18
+ end
19
+
20
+ def modalist_actions &block
21
+ area :modalist_actions, capture(&block)
22
+ end
23
+
24
+ def modalist_class_hierarchy options = [], delimiter = ' '
25
+ options.map(&:inspect).join(delimiter).gsub('"', '').gsub(',', '').gsub('[', '').gsub(']', '')
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,9 @@
1
+ module Modalist
2
+ module RenderHelper
3
+
4
+ def modalist
5
+ render layout: 'modalist'
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ <% if area(:modalist_title).length > 0 %>
2
+ <div class="modalist--header">
3
+ <div class="wrapper">
4
+ <h4><%= area :modalist_title %></h4>
5
+ <% if area(:modalist_subtitle).length > 0 %>
6
+ <p>
7
+ <%= area :modalist_subtitle %>
8
+ </p>
9
+ <% end %>
10
+ </div>
11
+ <div class="wrapper">
12
+ <%= area :modalist_actions %>
13
+ </div>
14
+ </div>
15
+ <% end %>
16
+
17
+ <div class="modalist--content <%= modalist_class_hierarchy( [params[:controller].split('/').each { |n| n }, action_name] %>">
18
+ <%= yield %>
19
+ </div>
@@ -0,0 +1,4 @@
1
+ <%= link_to 'javascript:void(0)', class: 'modalist--close', data: { izimodal_close: true } do %>
2
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24"><g stroke-width="2" transform="translate(0, 0)"><line fill="none" stroke="#657786" stroke-width="2" stroke-linecap="square" stroke-miterlimit="10" x1="16" y1="8" x2="8" y2="16" stroke-linejoin="miter"></line>
3
+ <line fill="none" stroke="#657786" stroke-width="2" stroke-linecap="square" stroke-miterlimit="10" x1="16" y1="16" x2="8" y2="8" stroke-linejoin="miter"></line></g></svg>
4
+ <% end %>
@@ -0,0 +1,2 @@
1
+ <div id="modalist">
2
+ </div>
@@ -0,0 +1,9 @@
1
+ module Modalist
2
+ class Ajax
3
+
4
+ def matches? request
5
+ request.xhr?
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ require 'rails/railtie'
2
+
3
+ module Modalist
4
+ class Engine < ::Rails::Engine
5
+ end
6
+ end
@@ -0,0 +1,13 @@
1
+ require 'rails/railtie'
2
+
3
+ module Modalist
4
+ class Railtie < Rails::Railtie
5
+
6
+ initializer 'modalist.action_controller' do
7
+ ActiveSupport.on_load :action_controller do
8
+ include Modalist::RenderHelper
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ module Modalist
2
+
3
+ VERSION = '1.0.0'
4
+
5
+ end
data/lib/modalist.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'modalist/version'
2
+
3
+ module Modalist
4
+
5
+ autoload :Ajax, 'modalist/ajax'
6
+
7
+ require 'modalist/engine'
8
+ require 'modalist/railtie'
9
+
10
+ end