-
Notifications
You must be signed in to change notification settings - Fork 35
/
plugin.extend.html
151 lines (141 loc) · 7.43 KB
/
plugin.extend.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<!DOCTYPE html>
<html dir="ltr" lang="en-US">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Пример плагина с расширенным функционалом</title>
<link rel="profile" href="https://gmpg.org/xfn/11"/>
<link rel="shortcut icon" href="https://anton.shevchuk.name/favicon.ico"/>
<link rel="stylesheet" href="css/styles.css"/>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/code.js"></script>
<script type="text/javascript">
(function ($) {
// значение по умолчанию
let defaults = { color: 'green' }
let plugin = {
init: function (params) {
// актуальные настройки, будут индивидуальными при каждом запуске
let options = $.extend({}, defaults, params)
if (!this.data('mySimplePlugin')) {
this.data('mySimplePlugin', options)
this.on('click.mySimplePlugin', function () {
$(this).css('color', options.color)
})
}
return this
},
color: function (color) {
let options = $(this).data('mySimplePlugin')
options.color = color
$(this).data('mySimplePlugin', options)
},
reset: function () {
$(this).css('color', 'black')
},
destroy: function () {
plugin.reset.apply(this)
$(this).removeData('mySimplePlugin')
$(this).off('.mySimplePlugin')
}
}
$.fn.mySimplePlugin = function (method) {
// немного магии
if (typeof plugin[method] === 'function') {
// если запрашиваемый метод существует, мы его вызываем
// все параметры, кроме имени метода придут в метод
// this так же перекочует в метод
return plugin[method].apply(this, Array.prototype.slice.call(arguments, 1))
} else if (typeof method === 'object' || !method) {
// если первым параметром идет объект, либо совсем пусто
// выполняем метод init
return plugin.init.apply(this, arguments)
} else {
// если ничего не получилось
$.error('Метод "' + method + '" не найден в плагине jQuery.mySimplePlugin')
}
}
})(jQuery)
</script>
</head>
<body>
<header>
<h1>Пример плагина с расширенными функциями</h1>
<h2>Тут есть много чего «на заметку»</h2>
</header>
<main>
<article>
<h3>Article Title</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus rutrum,
lectus eu varius consectetur, libero velit hendrerit augue, ut posuere enim neque
in libero. Donec eget sagittis nibh. Suspendisse sed tincidunt urna. Cras quis
euismod neque. Maecenas auctor ultricies posuere. Pellentesque luctus pulvinar dui
eget semper. Donec sodales odio eu sapien varius luctus. Donec dictum feugiat diam
at malesuada. Sed nec massa in augue condimentum faucibus quis ut diam. Quisque
nisl sem, semper nec vulputate vel, mattis sit amet justo. Aliquam purus felis,
tempor at scelerisque quis, tincidunt in neque. Etiam ut risus diam. Pellentesque
fermentum risus id elit feugiat cursus. Ut fringilla dictum diam, sed iaculis
lorem pulvinar ut. Cras vel elit id velit commodo viverra sit amet vel orci.</p>
</article>
<article>
<h3>Article Title</h3>
<p>Duis in vestibulum sem. Cras euismod tincidunt dui, et scelerisque tellus condimentum vel.
Maecenas et urna sit amet risus fermentum rhoncus nec porttitor ligula. Maecenas sit amet
turpis enim, ut iaculis est. Duis feugiat, lacus id placerat porttitor, lorem augue gravida
nisi, eu porta eros risus et lectus. Maecenas vestibulum nunc vel ipsum tincidunt sit amet
blandit sapien bibendum. Proin vel vulputate nisl. Duis tempor imperdiet placerat. Pellentesque
faucibus consequat magna, et bibendum nisl egestas non. Pellentesque sit amet mattis augue.
Aenean at diam tincidunt purus sollicitudin gravida non in nisi. Fusce bibendum, magna in
adipiscing mattis, sem risus fringilla mi, nec gravida lectus lectus at nibh. Suspendisse
adipiscing elementum laoreet. Suspendisse sem erat, varius quis aliquet vitae, dapibus sed
nibh. Nullam iaculis sem at mauris faucibus in vestibulum libero pretium. Aliquam eu turpis
libero. Fusce et ultrices lectus.</p>
</article>
<article>
<h3>Article Title</h3>
<p>Ut consequat commodo mauris, eu dignissim justo congue vel. Etiam commodo tincidunt diam,
laoreet ullamcorper sapien egestas quis. Etiam auctor rutrum ante, at tincidunt elit lacinia
non. Pellentesque molestie tellus sit amet est sodales nec rutrum leo pharetra. Donec lacinia
ipsum vitae massa accumsan ullamcorper. Maecenas commodo lacus turpis. Proin sit amet mauris
sem, imperdiet faucibus lorem. Fusce ullamcorper consectetur ligula vel pretium. Sed et elit
vitae orci adipiscing condimentum id sed turpis. Morbi ultrices feugiat ullamcorper. Fusce at
magna dolor. Sed sit amet risus massa, quis imperdiet libero. Proin justo purus, sodales nec
cursus et, sollicitudin at nulla. Vivamus eget nibh tellus, sit amet facilisis ante.</p>
</article>
</main>
<footer>
© <a href="https://anton.shevchuk.name/jquery-book/">jQuery for beginners</a>
</footer>
<aside>
<nav>
<a href="plugin.html" title="go prev" rel="prev">Prev</a>
<a href="index.html#90" title="back to Index" rel="index">Index</a>
<a href="#" title="reload" onclick="window.location.reload();return false">Reload</a>
<a href="color.html" title="go next" rel="next">Next</a>
</nav>
<hr/>
<p>Инициализация плагина, параграфы станут кликабельными</p>
<code><em>// инициализация для всех</em>
$(<span>"p"</span>).mySimplePlugin()</code>
<button type="button">Run Code</button>
<code contenteditable="true"><em>// меняем настройки</em>
$(<span>"p"</span>).mySimplePlugin(
<span>"color"</span>,
<span>"red"</span>
)</code>
<button type="button">Run Code</button>
<code><em>// вызов метода</em>
$(<span>"p"</span>).mySimplePlugin(<span>"reset"</span>)</code>
<button type="button">Run Code</button>
<code><em>// вызов несуществующего метода</em>
$(<span>"p"</span>).mySimplePlugin(<span>"wrongMethod"</span>)</code>
<button type="button">Run Code</button>
<code><em>// отключение плагина</em>
$(<span>"p"</span>).mySimplePlugin(<span>"destroy"</span>)</code>
<button type="button">Run Code</button>
<code><em>// чтобы не клацать самому</em>
$(<span>"p"</span>).click()</code>
<button type="button">Run Code</button>
</aside>
</body>
</html>