rails_medium_editor_insert_plugin 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +5 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +6 -0
  7. data/Gemfile.lock +86 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +139 -0
  10. data/Rakefile +6 -0
  11. data/app/assets/javascripts/medium-editor-js.js +1 -0
  12. data/app/assets/stylesheets/medium-editor-style.scss +3 -0
  13. data/bin/console +14 -0
  14. data/bin/setup +8 -0
  15. data/lib/rails_medium_editor_insert_plugin.rb +7 -0
  16. data/lib/rails_medium_editor_insert_plugin/version.rb +3 -0
  17. data/rails_medium_editor_insert_plugin.gemspec +31 -0
  18. data/vendor/assets/javascripts/medium_editor_js/handlebars.js +29 -0
  19. data/vendor/assets/javascripts/medium_editor_js/jquery-fileupload.js +1477 -0
  20. data/vendor/assets/javascripts/medium_editor_js/jquery-iframe-transport.js +217 -0
  21. data/vendor/assets/javascripts/medium_editor_js/jquery-sortable.js +693 -0
  22. data/vendor/assets/javascripts/medium_editor_js/jquery-ui-widget.js +572 -0
  23. data/vendor/assets/javascripts/medium_editor_js/medium-editor-insert-plugin.js +2091 -0
  24. data/vendor/assets/javascripts/medium_editor_js/medium-editor.js +7054 -0
  25. data/vendor/assets/javascripts/rails-medium-editor-insert-plugin.js +7 -0
  26. data/vendor/assets/stylesheets/medium-editor.scss +3 -0
  27. data/vendor/assets/stylesheets/medium_editor_style/_flat.scss +62 -0
  28. data/vendor/assets/stylesheets/medium_editor_style/_medium-editor.scss +182 -0
  29. data/vendor/assets/stylesheets/medium_editor_style/medium-editor-insert-plugin-frontend.scss +72 -0
  30. data/vendor/assets/stylesheets/medium_editor_style/medium-editor-insert-plugin.scss +209 -0
  31. data/vendor/assets/stylesheets/medium_editor_style/medium-editor-style.scss +4 -0
  32. metadata +130 -0
@@ -0,0 +1,572 @@
1
+ /*! jQuery UI - v1.11.4+CommonJS - 2015-08-28
2
+ * http://jqueryui.com
3
+ * Includes: widget.js
4
+ * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
5
+
6
+ (function( factory ) {
7
+ if ( typeof define === "function" && define.amd ) {
8
+
9
+ // AMD. Register as an anonymous module.
10
+ define([ "jquery" ], factory );
11
+
12
+ } else if ( typeof exports === "object" ) {
13
+
14
+ // Node/CommonJS
15
+ factory( require( "jquery" ) );
16
+
17
+ } else {
18
+
19
+ // Browser globals
20
+ factory( jQuery );
21
+ }
22
+ }(function( $ ) {
23
+ /*!
24
+ * jQuery UI Widget 1.11.4
25
+ * http://jqueryui.com
26
+ *
27
+ * Copyright jQuery Foundation and other contributors
28
+ * Released under the MIT license.
29
+ * http://jquery.org/license
30
+ *
31
+ * http://api.jqueryui.com/jQuery.widget/
32
+ */
33
+
34
+
35
+ var widget_uuid = 0,
36
+ widget_slice = Array.prototype.slice;
37
+
38
+ $.cleanData = (function( orig ) {
39
+ return function( elems ) {
40
+ var events, elem, i;
41
+ for ( i = 0; (elem = elems[i]) != null; i++ ) {
42
+ try {
43
+
44
+ // Only trigger remove when necessary to save time
45
+ events = $._data( elem, "events" );
46
+ if ( events && events.remove ) {
47
+ $( elem ).triggerHandler( "remove" );
48
+ }
49
+
50
+ // http://bugs.jquery.com/ticket/8235
51
+ } catch ( e ) {}
52
+ }
53
+ orig( elems );
54
+ };
55
+ })( $.cleanData );
56
+
57
+ $.widget = function( name, base, prototype ) {
58
+ var fullName, existingConstructor, constructor, basePrototype,
59
+ // proxiedPrototype allows the provided prototype to remain unmodified
60
+ // so that it can be used as a mixin for multiple widgets (#8876)
61
+ proxiedPrototype = {},
62
+ namespace = name.split( "." )[ 0 ];
63
+
64
+ name = name.split( "." )[ 1 ];
65
+ fullName = namespace + "-" + name;
66
+
67
+ if ( !prototype ) {
68
+ prototype = base;
69
+ base = $.Widget;
70
+ }
71
+
72
+ // create selector for plugin
73
+ $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
74
+ return !!$.data( elem, fullName );
75
+ };
76
+
77
+ $[ namespace ] = $[ namespace ] || {};
78
+ existingConstructor = $[ namespace ][ name ];
79
+ constructor = $[ namespace ][ name ] = function( options, element ) {
80
+ // allow instantiation without "new" keyword
81
+ if ( !this._createWidget ) {
82
+ return new constructor( options, element );
83
+ }
84
+
85
+ // allow instantiation without initializing for simple inheritance
86
+ // must use "new" keyword (the code above always passes args)
87
+ if ( arguments.length ) {
88
+ this._createWidget( options, element );
89
+ }
90
+ };
91
+ // extend with the existing constructor to carry over any static properties
92
+ $.extend( constructor, existingConstructor, {
93
+ version: prototype.version,
94
+ // copy the object used to create the prototype in case we need to
95
+ // redefine the widget later
96
+ _proto: $.extend( {}, prototype ),
97
+ // track widgets that inherit from this widget in case this widget is
98
+ // redefined after a widget inherits from it
99
+ _childConstructors: []
100
+ });
101
+
102
+ basePrototype = new base();
103
+ // we need to make the options hash a property directly on the new instance
104
+ // otherwise we'll modify the options hash on the prototype that we're
105
+ // inheriting from
106
+ basePrototype.options = $.widget.extend( {}, basePrototype.options );
107
+ $.each( prototype, function( prop, value ) {
108
+ if ( !$.isFunction( value ) ) {
109
+ proxiedPrototype[ prop ] = value;
110
+ return;
111
+ }
112
+ proxiedPrototype[ prop ] = (function() {
113
+ var _super = function() {
114
+ return base.prototype[ prop ].apply( this, arguments );
115
+ },
116
+ _superApply = function( args ) {
117
+ return base.prototype[ prop ].apply( this, args );
118
+ };
119
+ return function() {
120
+ var __super = this._super,
121
+ __superApply = this._superApply,
122
+ returnValue;
123
+
124
+ this._super = _super;
125
+ this._superApply = _superApply;
126
+
127
+ returnValue = value.apply( this, arguments );
128
+
129
+ this._super = __super;
130
+ this._superApply = __superApply;
131
+
132
+ return returnValue;
133
+ };
134
+ })();
135
+ });
136
+ constructor.prototype = $.widget.extend( basePrototype, {
137
+ // TODO: remove support for widgetEventPrefix
138
+ // always use the name + a colon as the prefix, e.g., draggable:start
139
+ // don't prefix for widgets that aren't DOM-based
140
+ widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
141
+ }, proxiedPrototype, {
142
+ constructor: constructor,
143
+ namespace: namespace,
144
+ widgetName: name,
145
+ widgetFullName: fullName
146
+ });
147
+
148
+ // If this widget is being redefined then we need to find all widgets that
149
+ // are inheriting from it and redefine all of them so that they inherit from
150
+ // the new version of this widget. We're essentially trying to replace one
151
+ // level in the prototype chain.
152
+ if ( existingConstructor ) {
153
+ $.each( existingConstructor._childConstructors, function( i, child ) {
154
+ var childPrototype = child.prototype;
155
+
156
+ // redefine the child widget using the same prototype that was
157
+ // originally used, but inherit from the new version of the base
158
+ $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
159
+ });
160
+ // remove the list of existing child constructors from the old constructor
161
+ // so the old child constructors can be garbage collected
162
+ delete existingConstructor._childConstructors;
163
+ } else {
164
+ base._childConstructors.push( constructor );
165
+ }
166
+
167
+ $.widget.bridge( name, constructor );
168
+
169
+ return constructor;
170
+ };
171
+
172
+ $.widget.extend = function( target ) {
173
+ var input = widget_slice.call( arguments, 1 ),
174
+ inputIndex = 0,
175
+ inputLength = input.length,
176
+ key,
177
+ value;
178
+ for ( ; inputIndex < inputLength; inputIndex++ ) {
179
+ for ( key in input[ inputIndex ] ) {
180
+ value = input[ inputIndex ][ key ];
181
+ if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
182
+ // Clone objects
183
+ if ( $.isPlainObject( value ) ) {
184
+ target[ key ] = $.isPlainObject( target[ key ] ) ?
185
+ $.widget.extend( {}, target[ key ], value ) :
186
+ // Don't extend strings, arrays, etc. with objects
187
+ $.widget.extend( {}, value );
188
+ // Copy everything else by reference
189
+ } else {
190
+ target[ key ] = value;
191
+ }
192
+ }
193
+ }
194
+ }
195
+ return target;
196
+ };
197
+
198
+ $.widget.bridge = function( name, object ) {
199
+ var fullName = object.prototype.widgetFullName || name;
200
+ $.fn[ name ] = function( options ) {
201
+ var isMethodCall = typeof options === "string",
202
+ args = widget_slice.call( arguments, 1 ),
203
+ returnValue = this;
204
+
205
+ if ( isMethodCall ) {
206
+ this.each(function() {
207
+ var methodValue,
208
+ instance = $.data( this, fullName );
209
+ if ( options === "instance" ) {
210
+ returnValue = instance;
211
+ return false;
212
+ }
213
+ if ( !instance ) {
214
+ return $.error( "cannot call methods on " + name + " prior to initialization; " +
215
+ "attempted to call method '" + options + "'" );
216
+ }
217
+ if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
218
+ return $.error( "no such method '" + options + "' for " + name + " widget instance" );
219
+ }
220
+ methodValue = instance[ options ].apply( instance, args );
221
+ if ( methodValue !== instance && methodValue !== undefined ) {
222
+ returnValue = methodValue && methodValue.jquery ?
223
+ returnValue.pushStack( methodValue.get() ) :
224
+ methodValue;
225
+ return false;
226
+ }
227
+ });
228
+ } else {
229
+
230
+ // Allow multiple hashes to be passed on init
231
+ if ( args.length ) {
232
+ options = $.widget.extend.apply( null, [ options ].concat(args) );
233
+ }
234
+
235
+ this.each(function() {
236
+ var instance = $.data( this, fullName );
237
+ if ( instance ) {
238
+ instance.option( options || {} );
239
+ if ( instance._init ) {
240
+ instance._init();
241
+ }
242
+ } else {
243
+ $.data( this, fullName, new object( options, this ) );
244
+ }
245
+ });
246
+ }
247
+
248
+ return returnValue;
249
+ };
250
+ };
251
+
252
+ $.Widget = function( /* options, element */ ) {};
253
+ $.Widget._childConstructors = [];
254
+
255
+ $.Widget.prototype = {
256
+ widgetName: "widget",
257
+ widgetEventPrefix: "",
258
+ defaultElement: "<div>",
259
+ options: {
260
+ disabled: false,
261
+
262
+ // callbacks
263
+ create: null
264
+ },
265
+ _createWidget: function( options, element ) {
266
+ element = $( element || this.defaultElement || this )[ 0 ];
267
+ this.element = $( element );
268
+ this.uuid = widget_uuid++;
269
+ this.eventNamespace = "." + this.widgetName + this.uuid;
270
+
271
+ this.bindings = $();
272
+ this.hoverable = $();
273
+ this.focusable = $();
274
+
275
+ if ( element !== this ) {
276
+ $.data( element, this.widgetFullName, this );
277
+ this._on( true, this.element, {
278
+ remove: function( event ) {
279
+ if ( event.target === element ) {
280
+ this.destroy();
281
+ }
282
+ }
283
+ });
284
+ this.document = $( element.style ?
285
+ // element within the document
286
+ element.ownerDocument :
287
+ // element is window or document
288
+ element.document || element );
289
+ this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
290
+ }
291
+
292
+ this.options = $.widget.extend( {},
293
+ this.options,
294
+ this._getCreateOptions(),
295
+ options );
296
+
297
+ this._create();
298
+ this._trigger( "create", null, this._getCreateEventData() );
299
+ this._init();
300
+ },
301
+ _getCreateOptions: $.noop,
302
+ _getCreateEventData: $.noop,
303
+ _create: $.noop,
304
+ _init: $.noop,
305
+
306
+ destroy: function() {
307
+ this._destroy();
308
+ // we can probably remove the unbind calls in 2.0
309
+ // all event bindings should go through this._on()
310
+ this.element
311
+ .unbind( this.eventNamespace )
312
+ .removeData( this.widgetFullName )
313
+ // support: jquery <1.6.3
314
+ // http://bugs.jquery.com/ticket/9413
315
+ .removeData( $.camelCase( this.widgetFullName ) );
316
+ this.widget()
317
+ .unbind( this.eventNamespace )
318
+ .removeAttr( "aria-disabled" )
319
+ .removeClass(
320
+ this.widgetFullName + "-disabled " +
321
+ "ui-state-disabled" );
322
+
323
+ // clean up events and states
324
+ this.bindings.unbind( this.eventNamespace );
325
+ this.hoverable.removeClass( "ui-state-hover" );
326
+ this.focusable.removeClass( "ui-state-focus" );
327
+ },
328
+ _destroy: $.noop,
329
+
330
+ widget: function() {
331
+ return this.element;
332
+ },
333
+
334
+ option: function( key, value ) {
335
+ var options = key,
336
+ parts,
337
+ curOption,
338
+ i;
339
+
340
+ if ( arguments.length === 0 ) {
341
+ // don't return a reference to the internal hash
342
+ return $.widget.extend( {}, this.options );
343
+ }
344
+
345
+ if ( typeof key === "string" ) {
346
+ // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
347
+ options = {};
348
+ parts = key.split( "." );
349
+ key = parts.shift();
350
+ if ( parts.length ) {
351
+ curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
352
+ for ( i = 0; i < parts.length - 1; i++ ) {
353
+ curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
354
+ curOption = curOption[ parts[ i ] ];
355
+ }
356
+ key = parts.pop();
357
+ if ( arguments.length === 1 ) {
358
+ return curOption[ key ] === undefined ? null : curOption[ key ];
359
+ }
360
+ curOption[ key ] = value;
361
+ } else {
362
+ if ( arguments.length === 1 ) {
363
+ return this.options[ key ] === undefined ? null : this.options[ key ];
364
+ }
365
+ options[ key ] = value;
366
+ }
367
+ }
368
+
369
+ this._setOptions( options );
370
+
371
+ return this;
372
+ },
373
+ _setOptions: function( options ) {
374
+ var key;
375
+
376
+ for ( key in options ) {
377
+ this._setOption( key, options[ key ] );
378
+ }
379
+
380
+ return this;
381
+ },
382
+ _setOption: function( key, value ) {
383
+ this.options[ key ] = value;
384
+
385
+ if ( key === "disabled" ) {
386
+ this.widget()
387
+ .toggleClass( this.widgetFullName + "-disabled", !!value );
388
+
389
+ // If the widget is becoming disabled, then nothing is interactive
390
+ if ( value ) {
391
+ this.hoverable.removeClass( "ui-state-hover" );
392
+ this.focusable.removeClass( "ui-state-focus" );
393
+ }
394
+ }
395
+
396
+ return this;
397
+ },
398
+
399
+ enable: function() {
400
+ return this._setOptions({ disabled: false });
401
+ },
402
+ disable: function() {
403
+ return this._setOptions({ disabled: true });
404
+ },
405
+
406
+ _on: function( suppressDisabledCheck, element, handlers ) {
407
+ var delegateElement,
408
+ instance = this;
409
+
410
+ // no suppressDisabledCheck flag, shuffle arguments
411
+ if ( typeof suppressDisabledCheck !== "boolean" ) {
412
+ handlers = element;
413
+ element = suppressDisabledCheck;
414
+ suppressDisabledCheck = false;
415
+ }
416
+
417
+ // no element argument, shuffle and use this.element
418
+ if ( !handlers ) {
419
+ handlers = element;
420
+ element = this.element;
421
+ delegateElement = this.widget();
422
+ } else {
423
+ element = delegateElement = $( element );
424
+ this.bindings = this.bindings.add( element );
425
+ }
426
+
427
+ $.each( handlers, function( event, handler ) {
428
+ function handlerProxy() {
429
+ // allow widgets to customize the disabled handling
430
+ // - disabled as an array instead of boolean
431
+ // - disabled class as method for disabling individual parts
432
+ if ( !suppressDisabledCheck &&
433
+ ( instance.options.disabled === true ||
434
+ $( this ).hasClass( "ui-state-disabled" ) ) ) {
435
+ return;
436
+ }
437
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
438
+ .apply( instance, arguments );
439
+ }
440
+
441
+ // copy the guid so direct unbinding works
442
+ if ( typeof handler !== "string" ) {
443
+ handlerProxy.guid = handler.guid =
444
+ handler.guid || handlerProxy.guid || $.guid++;
445
+ }
446
+
447
+ var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
448
+ eventName = match[1] + instance.eventNamespace,
449
+ selector = match[2];
450
+ if ( selector ) {
451
+ delegateElement.delegate( selector, eventName, handlerProxy );
452
+ } else {
453
+ element.bind( eventName, handlerProxy );
454
+ }
455
+ });
456
+ },
457
+
458
+ _off: function( element, eventName ) {
459
+ eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
460
+ this.eventNamespace;
461
+ element.unbind( eventName ).undelegate( eventName );
462
+
463
+ // Clear the stack to avoid memory leaks (#10056)
464
+ this.bindings = $( this.bindings.not( element ).get() );
465
+ this.focusable = $( this.focusable.not( element ).get() );
466
+ this.hoverable = $( this.hoverable.not( element ).get() );
467
+ },
468
+
469
+ _delay: function( handler, delay ) {
470
+ function handlerProxy() {
471
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
472
+ .apply( instance, arguments );
473
+ }
474
+ var instance = this;
475
+ return setTimeout( handlerProxy, delay || 0 );
476
+ },
477
+
478
+ _hoverable: function( element ) {
479
+ this.hoverable = this.hoverable.add( element );
480
+ this._on( element, {
481
+ mouseenter: function( event ) {
482
+ $( event.currentTarget ).addClass( "ui-state-hover" );
483
+ },
484
+ mouseleave: function( event ) {
485
+ $( event.currentTarget ).removeClass( "ui-state-hover" );
486
+ }
487
+ });
488
+ },
489
+
490
+ _focusable: function( element ) {
491
+ this.focusable = this.focusable.add( element );
492
+ this._on( element, {
493
+ focusin: function( event ) {
494
+ $( event.currentTarget ).addClass( "ui-state-focus" );
495
+ },
496
+ focusout: function( event ) {
497
+ $( event.currentTarget ).removeClass( "ui-state-focus" );
498
+ }
499
+ });
500
+ },
501
+
502
+ _trigger: function( type, event, data ) {
503
+ var prop, orig,
504
+ callback = this.options[ type ];
505
+
506
+ data = data || {};
507
+ event = $.Event( event );
508
+ event.type = ( type === this.widgetEventPrefix ?
509
+ type :
510
+ this.widgetEventPrefix + type ).toLowerCase();
511
+ // the original event may come from any element
512
+ // so we need to reset the target on the new event
513
+ event.target = this.element[ 0 ];
514
+
515
+ // copy original event properties over to the new event
516
+ orig = event.originalEvent;
517
+ if ( orig ) {
518
+ for ( prop in orig ) {
519
+ if ( !( prop in event ) ) {
520
+ event[ prop ] = orig[ prop ];
521
+ }
522
+ }
523
+ }
524
+
525
+ this.element.trigger( event, data );
526
+ return !( $.isFunction( callback ) &&
527
+ callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
528
+ event.isDefaultPrevented() );
529
+ }
530
+ };
531
+
532
+ $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
533
+ $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
534
+ if ( typeof options === "string" ) {
535
+ options = { effect: options };
536
+ }
537
+ var hasOptions,
538
+ effectName = !options ?
539
+ method :
540
+ options === true || typeof options === "number" ?
541
+ defaultEffect :
542
+ options.effect || defaultEffect;
543
+ options = options || {};
544
+ if ( typeof options === "number" ) {
545
+ options = { duration: options };
546
+ }
547
+ hasOptions = !$.isEmptyObject( options );
548
+ options.complete = callback;
549
+ if ( options.delay ) {
550
+ element.delay( options.delay );
551
+ }
552
+ if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
553
+ element[ method ]( options );
554
+ } else if ( effectName !== method && element[ effectName ] ) {
555
+ element[ effectName ]( options.duration, options.easing, callback );
556
+ } else {
557
+ element.queue(function( next ) {
558
+ $( this )[ method ]();
559
+ if ( callback ) {
560
+ callback.call( element[ 0 ] );
561
+ }
562
+ next();
563
+ });
564
+ }
565
+ };
566
+ });
567
+
568
+ var widget = $.widget;
569
+
570
+
571
+
572
+ }));