wp/wp-includes/js/tinymce/plugins/wpgallery/editor_plugin_src.js
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
	tinymce.create('tinymce.plugins.wpGallery', {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
		init : function(ed, url) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
			var t = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
			t.url = url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
			t.editor = ed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
			t._createButtons();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
			// Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('...');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
			ed.addCommand('WP_Gallery', function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
				if ( tinymce.isIE )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
					ed.selection.moveToBookmark( ed.wpGalleryBookmark );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
				var el = ed.selection.getNode(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
					gallery = wp.media.gallery,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
					frame;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
				// Check if the `wp.media.gallery` API exists.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
				if ( typeof wp === 'undefined' || ! wp.media || ! wp.media.gallery )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
				// Make sure we've selected a gallery node.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
				if ( el.nodeName != 'IMG' || ed.dom.getAttrib(el, 'class').indexOf('wp-gallery') == -1 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
				frame = gallery.edit( '[' + ed.dom.getAttrib( el, 'title' ) + ']' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
				frame.state('gallery-edit').on( 'update', function( selection ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
					var shortcode = gallery.shortcode( selection ).string().slice( 1, -1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
					ed.dom.setAttrib( el, 'title', shortcode );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
			ed.onInit.add(function(ed) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
				// iOS6 doesn't show the buttons properly on click, show them on 'touchstart'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
				if ( 'ontouchstart' in window ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
					ed.dom.events.add(ed.getBody(), 'touchstart', function(e){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
						var target = e.target;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
						if ( target.nodeName == 'IMG' && ed.dom.hasClass(target, 'wp-gallery') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
							ed.selection.select(target);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
							ed.dom.events.cancel(e);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
							ed.plugins.wordpress._hideButtons();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
							ed.plugins.wordpress._showButtons(target, 'wp_gallerybtns');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
			ed.onMouseDown.add(function(ed, e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
				if ( e.target.nodeName == 'IMG' && ed.dom.hasClass(e.target, 'wp-gallery') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
					ed.plugins.wordpress._hideButtons();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
					ed.plugins.wordpress._showButtons(e.target, 'wp_gallerybtns');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
			ed.onBeforeSetContent.add(function(ed, o) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
				o.content = t._do_gallery(o.content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
			ed.onPostProcess.add(function(ed, o) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
				if (o.get)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
					o.content = t._get_gallery(o.content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
		_do_gallery : function(co) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
			return co.replace(/\[gallery([^\]]*)\]/g, function(a,b){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
				return '<img src="'+tinymce.baseURL+'/plugins/wpgallery/img/t.gif" class="wp-gallery mceItem" title="gallery'+tinymce.DOM.encode(b)+'" />';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
		_get_gallery : function(co) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
			function getAttr(s, n) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
				n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
				return n ? tinymce.DOM.decode(n[1]) : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
			return co.replace(/(?:<p[^>]*>)*(<img[^>]+>)(?:<\/p>)*/g, function(a,im) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
				var cls = getAttr(im, 'class');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
				if ( cls.indexOf('wp-gallery') != -1 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
					return '<p>['+tinymce.trim(getAttr(im, 'title'))+']</p>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
				return a;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
		_createButtons : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
			var t = this, ed = tinymce.activeEditor, DOM = tinymce.DOM, editButton, dellButton, isRetina;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
			if ( DOM.get('wp_gallerybtns') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
			isRetina = ( window.devicePixelRatio && window.devicePixelRatio > 1 ) || // WebKit, Opera
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
				( window.matchMedia && window.matchMedia('(min-resolution:130dpi)').matches ); // Firefox, IE10, Opera
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
			DOM.add(document.body, 'div', {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
				id : 'wp_gallerybtns',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
				style : 'display:none;'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
			editButton = DOM.add('wp_gallerybtns', 'img', {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
				src : isRetina ? t.url+'/img/edit-2x.png' : t.url+'/img/edit.png',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
				id : 'wp_editgallery',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
				width : '24',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
				height : '24',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
				title : ed.getLang('wordpress.editgallery')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
			tinymce.dom.Event.add(editButton, 'mousedown', function(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
				var ed = tinymce.activeEditor;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
				ed.wpGalleryBookmark = ed.selection.getBookmark('simple');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
				ed.execCommand("WP_Gallery");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
				ed.plugins.wordpress._hideButtons();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			dellButton = DOM.add('wp_gallerybtns', 'img', {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
				src : isRetina ? t.url+'/img/delete-2x.png' : t.url+'/img/delete.png',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
				id : 'wp_delgallery',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
				width : '24',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
				height : '24',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
				title : ed.getLang('wordpress.delgallery')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
			tinymce.dom.Event.add(dellButton, 'mousedown', function(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
				var ed = tinymce.activeEditor, el = ed.selection.getNode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
				if ( el.nodeName == 'IMG' && ed.dom.hasClass(el, 'wp-gallery') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
					ed.dom.remove(el);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
					ed.execCommand('mceRepaint');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
					ed.dom.events.cancel(e);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
				ed.plugins.wordpress._hideButtons();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
		getInfo : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
			return {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
				longname : 'Gallery Settings',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
				author : 'WordPress',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
				authorurl : 'http://wordpress.org',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
				infourl : '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
				version : "1.0"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
	tinymce.PluginManager.add('wpgallery', tinymce.plugins.wpGallery);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
})();