Gallery – Photo Gallery and Images Gallery - Version 2.6.21

Version Description

  • Advanced gallery sorting options, new sorting management options
Download this release

Release Info

Developer robosoft
Plugin Icon 128x128 Gallery – Photo Gallery and Images Gallery
Version 2.6.21
Comparing to
See all releases

Code changes from version 2.6.20 to 2.6.21

css/admin/info.css CHANGED
@@ -1 +1 @@
1
- /*
1
+ /*
css/admin/topblock.css CHANGED
@@ -1 +1 @@
1
- /*
2
  .gb-admin-notice, .fs-notice{ display:none !important; }
1
+ /*
2
  .gb-admin-notice, .fs-notice{ display:none !important; }
includes/extensions/category/css/style.css CHANGED
@@ -159,3 +159,7 @@
159
  left: 50%;
160
  margin: -20px 0 0 -20px;
161
  }
 
 
 
 
159
  left: 50%;
160
  margin: -20px 0 0 -20px;
161
  }
162
+
163
+ .nestable-list .dd-handle:hover{
164
+ cursor: pointer;
165
+ }
includes/extensions/category/js/script.js CHANGED
@@ -4,19 +4,25 @@
4
  this.$edit = null;
5
  this.postId = null;
6
  this.postType = null;
 
7
 
8
  this.init();
9
  }
10
  AttributeMetaBox.prototype = {
11
  init: function () {
12
  var self = this;
 
 
13
 
14
  self.$edit = self.$element.find('button.edit');
15
  self.postId = self.$edit.data('post_id');
16
  self.postType = self.$edit.data('post_type');
17
 
18
  self.$edit.click(function() {
19
- return self.edit();
 
 
 
20
  });
21
  },
22
  edit: function () {
@@ -24,13 +30,17 @@
24
 
25
  new DialogEdit({
26
  postType: this.postType,
27
- callbackSave: function() { self.update(); }
 
 
28
  });
29
 
30
  return false;
31
  },
32
  update: function () {
33
  var self = this;
 
 
34
 
35
  $.ajax({
36
  url: hierarchyPostAttributes.ajaxUrl,
@@ -143,6 +153,7 @@
143
  }
144
  },
145
  destroy: function () {
 
146
  this.$element.dialog('close');
147
  this.$element.remove();
148
  }
4
  this.$edit = null;
5
  this.postId = null;
6
  this.postType = null;
7
+ window['catDialogClick'] = 0;
8
 
9
  this.init();
10
  }
11
  AttributeMetaBox.prototype = {
12
  init: function () {
13
  var self = this;
14
+
15
+
16
 
17
  self.$edit = self.$element.find('button.edit');
18
  self.postId = self.$edit.data('post_id');
19
  self.postType = self.$edit.data('post_type');
20
 
21
  self.$edit.click(function() {
22
+ if( window['catDialogClick'] == 0 ){
23
+ window['catDialogClick'] = 1;
24
+ return self.edit();
25
+ }
26
  });
27
  },
28
  edit: function () {
30
 
31
  new DialogEdit({
32
  postType: this.postType,
33
+ callbackSave: function() {
34
+ self.update();
35
+ }
36
  });
37
 
38
  return false;
39
  },
40
  update: function () {
41
  var self = this;
42
+
43
+ window['catDialogClick'] = 0;
44
 
45
  $.ajax({
46
  url: hierarchyPostAttributes.ajaxUrl,
153
  }
154
  },
155
  destroy: function () {
156
+ window['catDialogClick'] = 0;
157
  this.$element.dialog('close');
158
  this.$element.remove();
159
  }
includes/extensions/categoryPage/category.class.php ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Robo Gallery
4
+ * Version: 1.0
5
+ * By Robosoft
6
+ *
7
+ * Contact: https://robosoft.co/robogallery/
8
+ * Created: 2015
9
+ * Licensed under the GPLv2 license - http://opensource.org/licenses/gpl-2.0.php
10
+ *
11
+ * Copyright (c) 2014-2016, Robosoft. All rights reserved.
12
+ * Available only in https://robosoft.co/robogallery/
13
+ */
14
+
15
+ if ( ! defined( 'ABSPATH' ) ) exit;
16
+
17
+ class ROBO_GALLERY_CATEGORY_PAGE{
18
+
19
+ protected $postType;
20
+
21
+ protected $postTypeParams;
22
+
23
+ protected $assetsUri;
24
+
25
+ protected $currentPostOrder;
26
+
27
+ public function __construct($postType){ //, array $postTypeParams
28
+
29
+ $this->postType = $postType;
30
+ $this->postTypeParams = array();
31
+ //$this->postTypeParams = $postTypeParams;
32
+ $this->assetsUri = plugin_dir_url(__FILE__);
33
+
34
+
35
+ $this->enqueueScripts();
36
+ // add_action("wp_ajax_hierarchy_{$this->postType}_meta_box", array($this, 'ajaxMetaBoxAttributes'));
37
+
38
+ //add_action("wp_ajax_hierarchy_{$this->postType}_dialog", array($this, 'ajaxDialog'));
39
+
40
+ $this->ajaxDialog ();
41
+
42
+ add_action("wp_ajax_hierarchy_{$this->postType}_dialog_save", array($this, 'ajaxDialogSave'));
43
+
44
+ }
45
+
46
+
47
+
48
+
49
+ public function enqueueScripts(){
50
+ wp_enqueue_style('wp-jquery-ui-dialog');
51
+ wp_enqueue_style(
52
+ 'hierarchy-post-attributes-style',
53
+ $this->assetsUri . 'css/style.css',
54
+ array('wp-jquery-ui-dialog')
55
+ );
56
+
57
+ wp_enqueue_script('jquery-ui-dialog');
58
+ wp_enqueue_script(
59
+ 'hierarchy-post-attributes-nestable-js',
60
+ $this->assetsUri . 'js/jquery.nestable.js',
61
+ array('jquery-ui-dialog'),
62
+ false,
63
+ true
64
+ );
65
+ wp_enqueue_script(
66
+ 'hierarchy-post-attributes-js',
67
+ $this->assetsUri . 'js/script.js',
68
+ array('jquery-ui-dialog', 'hierarchy-post-attributes-nestable-js'),
69
+ false,
70
+ true
71
+ );
72
+
73
+ $postTypeObject = get_post_type_object($this->postType);
74
+ wp_localize_script(
75
+ 'hierarchy-post-attributes-js',
76
+ 'hierarchyPostAttributes',
77
+ array(
78
+ 'ajaxUrl' => admin_url('admin-ajax.php'),
79
+ 'metaBox' => array(
80
+ 'action' => array(
81
+ 'get' => "hierarchy_{$this->postType}_meta_box"
82
+ )
83
+ ),
84
+ 'dialog' => array(
85
+ 'title' => __(sprintf('Edit hierarchy of %s', $postTypeObject->labels->name)),
86
+ 'button' => array(
87
+ 'save' => array(
88
+ 'label' => __('Save')
89
+ ),
90
+ 'cancel' => array(
91
+ 'label' => __('Cancel')
92
+ )
93
+ ),
94
+ 'action' => array(
95
+ 'get' => "hierarchy_{$this->postType}_dialog",
96
+ 'save' => "hierarchy_{$this->postType}_dialog_save",
97
+ ),
98
+ ),
99
+ 'error' => array(
100
+ 'title' => __('Error'),
101
+ 'button' => array(
102
+ 'ok' => array(
103
+ 'label' => __('OK')
104
+ ),
105
+ )
106
+ )
107
+ )
108
+ );
109
+ }
110
+
111
+
112
+
113
+
114
+
115
+
116
+ public function ajaxDialog() {
117
+ $this->checkPermission();
118
+
119
+ $postTree = $this->getPostTree(ROBO_GALLERY_TYPE_POST);
120
+ ?>
121
+ <p>
122
+ <button class="save_category button button-primary"> Save</button>
123
+ </p>
124
+ <div class="wrapper-nestable-list" >
125
+ <div class="nestable-list dd">
126
+ <?php $this->theNestableList($postTree); ?>
127
+ </div>
128
+ <div class="nestable-list-spinner">
129
+ <img src="<?php echo admin_url('/images/spinner-2x.gif') ?>" />
130
+ </div>
131
+ </div>
132
+ <button class="save_category button button-primary"> Save</button>
133
+ <?php
134
+
135
+ //wp_die();
136
+ }
137
+
138
+ public function ajaxDialogSave() {
139
+ $this->checkPermission();
140
+
141
+ if (!isset($_POST['hierarchy_posts'])) {
142
+ header('HTTP/1.0 403 Forbidden');
143
+ echo 'Empty posts hierarchy data for saving';
144
+ die();
145
+ }
146
+ if (!is_array($_POST['hierarchy_posts'])) {
147
+ header('HTTP/1.0 403 Forbidden');
148
+ echo 'Wrong posts hierarchy data for saving';
149
+ die();
150
+ }
151
+
152
+ $hierarchyPosts = $_POST['hierarchy_posts'];
153
+ $this->currentPostOrder = 0;
154
+ foreach ($hierarchyPosts as $order => $postData) {
155
+ $this->updatePostHierarchy($postData);
156
+ }
157
+ }
158
+
159
+
160
+ protected function getPostTree($postType){
161
+ $args = array(
162
+ 'post_type' => $postType,
163
+ 'post_status' => 'publish',
164
+ 'posts_per_page' => -1,
165
+ 'orderby' => 'menu_order',
166
+ 'order' => 'ASC'
167
+ );
168
+ $postMap = array();
169
+ $postTree = array();
170
+
171
+ foreach (get_posts($args) as $post) {
172
+ if (isset($postMap[$post->ID])) {
173
+ $postMap[$post->ID]['post'] = $post;
174
+ $postData = &$postMap[$post->ID];
175
+ } else {
176
+ $postData = array('post' => $post, 'children' => array());
177
+ $postMap[$post->ID] = &$postData;
178
+ }
179
+ if (0 == $post->post_parent) {
180
+ $postTree["{$post->menu_order}-{$post->ID}"] = &$postData;
181
+ } else {
182
+ $postMap[$post->post_parent]['children'][$post->ID] = &$postData;
183
+ }
184
+ unset($postData);
185
+ }
186
+
187
+ // Adding children posts with lost parent to tree
188
+ foreach ($postMap as &$postData) {
189
+ if (!isset($postData['post']) && is_array($postData['children'])) {
190
+ foreach ($postData['children'] as &$childPostData) {
191
+ $childPost = $childPostData['post'];
192
+ $postTree["{$childPost->menu_order}-{$childPost->ID}"] = &$childPostData;
193
+ }
194
+ }
195
+ }
196
+ asort($postTree);
197
+
198
+ return $postTree;
199
+ }
200
+
201
+
202
+ protected function theNestableList(array $tree){
203
+ ?>
204
+ <ol class="dd-list">
205
+ <?php foreach ($tree as $item) : ?>
206
+ <li class="dd-item" data-id="<?php echo $item['post']->ID; ?>">
207
+ <div class="dd-handle">
208
+ <?php
209
+ $title = esc_attr($item['post']->post_title);
210
+ echo "{$title} [{$item['post']->ID}: {$item['post']->post_name}]" ; ?>
211
+ </div>
212
+ <?php if (!empty($item['children'])) : ?>
213
+ <?php $this->theNestableList($item['children']); ?>
214
+ <?php endif; ?>
215
+ </li>
216
+ <?php endforeach; ?>
217
+ </ol>
218
+ <?php
219
+ }
220
+
221
+
222
+ protected function checkPermission(){
223
+ $postTypeObject = get_post_type_object($this->postType);
224
+ if (!current_user_can($postTypeObject->cap->edit_posts)) {
225
+ header('HTTP/1.0 403 Forbidden');
226
+ echo sprintf("You don't have permission for editing this %s", $postTypeObject->labels->name);
227
+ die();
228
+ }
229
+ }
230
+
231
+
232
+ protected function updatePostHierarchy($postData, $parentId = 0){
233
+ $this->currentPostOrder++;
234
+ wp_update_post(array(
235
+ 'ID' => absint($postData['id']),
236
+ 'post_parent' => absint($parentId),
237
+ 'menu_order' => $this->currentPostOrder
238
+ ));
239
+
240
+ if (!empty($postData['children'])) {
241
+ foreach ($postData['children'] as $childPostData) {
242
+ $this->updatePostHierarchy($childPostData, $postData['id']);
243
+ }
244
+ }
245
+ }
246
+ }
includes/extensions/categoryPage/category.init.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Robo Gallery
4
+ * Version: 1.0
5
+ * By Robosoft
6
+ *
7
+ * Contact: https://robosoft.co/robogallery/
8
+ * Created: 2015
9
+ * Licensed under the GPLv2 license - http://opensource.org/licenses/gpl-2.0.php
10
+ *
11
+ * Copyright (c) 2014-2016, Robosoft. All rights reserved.
12
+ * Available only in https://robosoft.co/robogallery/
13
+ */
14
+
15
+ if ( ! defined( 'ABSPATH' ) ) exit;
16
+
17
+ /*if(!function_exists('rbs_gallery_category_init')){
18
+ function rbs_gallery_category_init(){*/
19
+ rbs_gallery_include('category.class.php', plugin_dir_path( __FILE__ ) );
20
+ new ROBO_GALLERY_CATEGORY_PAGE( ROBO_GALLERY_TYPE_POST );
21
+ /* }
22
+ add_action( 'init', 'rbs_gallery_category_init' );
23
+ }*/
includes/extensions/categoryPage/css/index.html ADDED
File without changes
includes/extensions/categoryPage/css/style.css ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .nestable-list.dd,
2
+ .nestable-list .dd {
3
+ position: relative;
4
+ display: block;
5
+ margin: 0;
6
+ padding: 0;
7
+ list-style: none;
8
+ font-size: 13px;
9
+ line-height: 20px;
10
+ }
11
+
12
+ .nestable-list .dd-list {
13
+ display: block;
14
+ position: relative;
15
+ margin: 0;
16
+ padding: 0;
17
+ list-style: none;
18
+ }
19
+
20
+ .nestable-list .dd-list .dd-list {
21
+ padding-left: 30px;
22
+ }
23
+
24
+ .nestable-list .dd-collapsed .dd-list {
25
+ display: none;
26
+ }
27
+
28
+ .nestable-list .dd-item,
29
+ .nestable-list .dd-empty,
30
+ .nestable-list .dd-placeholder {
31
+ display: block;
32
+ position: relative;
33
+ margin: 0;
34
+ padding: 0;
35
+ min-height: 20px;
36
+ font-size: 13px;
37
+ line-height: 20px;
38
+ }
39
+
40
+ .nestable-list .dd-handle {
41
+ display: block;
42
+ height: 30px;
43
+ margin: 5px 0;
44
+ padding: 5px 10px;
45
+ color: #333;
46
+ text-decoration: none;
47
+ font-weight: bold;
48
+ border: 1px solid #ccc;
49
+ background: #fafafa;
50
+ background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%);
51
+ background: -moz-linear-gradient(top, #fafafa 0%, #eee 100%);
52
+ background: linear-gradient(top, #fafafa 0%, #eee 100%);
53
+ -webkit-border-radius: 3px;
54
+ border-radius: 3px;
55
+ box-sizing: border-box;
56
+ -moz-box-sizing: border-box;
57
+ }
58
+
59
+ .nestable-list .dd-handle:hover {
60
+ color: #2ea8e5;
61
+ background: #fff;
62
+ }
63
+
64
+ .nestable-list .dd-item > button {
65
+ display: block;
66
+ position: relative;
67
+ cursor: pointer;
68
+ float: left;
69
+ width: 25px;
70
+ height: 20px;
71
+ margin: 5px 0;
72
+ padding: 0;
73
+ text-indent: 100%;
74
+ white-space: nowrap;
75
+ overflow: hidden;
76
+ border: 0;
77
+ background: transparent;
78
+ font-size: 12px;
79
+ line-height: 1;
80
+ text-align: center;
81
+ font-weight: bold;
82
+ }
83
+
84
+ .nestable-list .dd-item > button:before {
85
+ content: '+';
86
+ display: block;
87
+ position: absolute;
88
+ width: 100%;
89
+ text-align: center;
90
+ text-indent: 0;
91
+ }
92
+
93
+ .nestable-list .dd-item > button[data-action="collapse"]:before {
94
+ content: '-';
95
+ }
96
+
97
+ .nestable-list .dd-placeholder,
98
+ .nestable-list .dd-empty {
99
+ margin: 5px 0;
100
+ padding: 0;
101
+ min-height: 30px;
102
+ background: #f2fbff;
103
+ border: 1px dashed #b6bcbf;
104
+ box-sizing: border-box;
105
+ -moz-box-sizing: border-box;
106
+ }
107
+
108
+ .nestable-list .dd-empty {
109
+ border: 1px dashed #bbb;
110
+ min-height: 100px;
111
+ background-color: #e5e5e5;
112
+ background-image: -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),
113
+ -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
114
+ background-image: -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),
115
+ -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
116
+ background-image: linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),
117
+ linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
118
+ background-size: 60px 60px;
119
+ background-position: 0 0, 30px 30px;
120
+ }
121
+
122
+ .nestable-list .dd-dragel {
123
+ position: absolute;
124
+ pointer-events: none;
125
+ z-index: 9999;
126
+ }
127
+
128
+ .nestable-list .dd-dragel > .dd-item .dd-handle {
129
+ margin-top: 0;
130
+ }
131
+
132
+ .nestable-list .dd-dragel .dd-handle {
133
+ -webkit-box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, .1);
134
+ box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, .1);
135
+ }
136
+
137
+ /* EXTRA STYLE */
138
+ #hierarchy-post-attributes-metabox .actions {
139
+ text-align: right;
140
+ }
141
+
142
+ .wrapper-nestable-list {
143
+ position: relative;
144
+ width: 100%;
145
+ height: 100%;
146
+ }
147
+ .nestable-list-spinner {
148
+ display: none;
149
+ position: absolute;
150
+ top: 0;
151
+ left: 0;
152
+ width: 100%;
153
+ height: 100%;
154
+ background: rgba(255, 255, 255, 0.5);
155
+ }
156
+ .nestable-list-spinner img {
157
+ position: absolute;
158
+ top: 50%;
159
+ left: 50%;
160
+ margin: -20px 0 0 -20px;
161
+ }
includes/extensions/categoryPage/index.html ADDED
File without changes
includes/extensions/categoryPage/js/index.html ADDED
File without changes
includes/extensions/categoryPage/js/jquery.nestable.js ADDED
@@ -0,0 +1,484 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Nestable jQuery Plugin - Copyright (c) 2012 David Bushell - http://dbushell.com/
3
+ * Dual-licensed under the BSD or MIT licenses
4
+ */
5
+ ;(function($, window, document, undefined)
6
+ {
7
+ var hasTouch = 'ontouchstart' in document;
8
+
9
+ /**
10
+ * Detect CSS pointer-events property
11
+ * events are normally disabled on the dragging element to avoid conflicts
12
+ * https://github.com/ausi/Feature-detection-technique-for-pointer-events/blob/master/modernizr-pointerevents.js
13
+ */
14
+ var hasPointerEvents = (function()
15
+ {
16
+ var el = document.createElement('div'),
17
+ docEl = document.documentElement;
18
+ if (!('pointerEvents' in el.style)) {
19
+ return false;
20
+ }
21
+ el.style.pointerEvents = 'auto';
22
+ el.style.pointerEvents = 'x';
23
+ docEl.appendChild(el);
24
+ var supports = window.getComputedStyle && window.getComputedStyle(el, '').pointerEvents === 'auto';
25
+ docEl.removeChild(el);
26
+ return !!supports;
27
+ })();
28
+
29
+ var defaults = {
30
+ listNodeName : 'ol',
31
+ itemNodeName : 'li',
32
+ rootClass : 'dd',
33
+ listClass : 'dd-list',
34
+ itemClass : 'dd-item',
35
+ dragClass : 'dd-dragel',
36
+ handleClass : 'dd-handle',
37
+ collapsedClass : 'dd-collapsed',
38
+ placeClass : 'dd-placeholder',
39
+ noDragClass : 'dd-nodrag',
40
+ emptyClass : 'dd-empty',
41
+ expandBtnHTML : '<button data-action="expand" type="button">Expand</button>',
42
+ collapseBtnHTML : '<button data-action="collapse" type="button">Collapse</button>',
43
+ group : 0,
44
+ maxDepth : 5,
45
+ threshold : 20
46
+ };
47
+
48
+ function Plugin(element, options)
49
+ {
50
+ this.w = $(document);
51
+ this.el = $(element);
52
+ this.options = $.extend({}, defaults, options);
53
+ this.init();
54
+ }
55
+
56
+ Plugin.prototype = {
57
+
58
+ init: function()
59
+ {
60
+ var list = this;
61
+
62
+ list.reset();
63
+
64
+ list.el.data('nestable-group', this.options.group);
65
+
66
+ list.placeEl = $('<div class="' + list.options.placeClass + '"/>');
67
+
68
+ $.each(this.el.find(list.options.itemNodeName), function(k, el) {
69
+ list.setParent($(el));
70
+ });
71
+
72
+ list.el.on('click', 'button', function(e) {
73
+ if (list.dragEl) {
74
+ return;
75
+ }
76
+ var target = $(e.currentTarget),
77
+ action = target.data('action'),
78
+ item = target.parent(list.options.itemNodeName);
79
+ if (action === 'collapse') {
80
+ list.collapseItem(item);
81
+ }
82
+ if (action === 'expand') {
83
+ list.expandItem(item);
84
+ }
85
+ });
86
+
87
+ var onStartEvent = function(e)
88
+ {
89
+ var handle = $(e.target);
90
+ if (!handle.hasClass(list.options.handleClass)) {
91
+ if (handle.closest('.' + list.options.noDragClass).length) {
92
+ return;
93
+ }
94
+ handle = handle.closest('.' + list.options.handleClass);
95
+ }
96
+
97
+ if (!handle.length || list.dragEl) {
98
+ return;
99
+ }
100
+
101
+ list.isTouch = /^touch/.test(e.type);
102
+ if (list.isTouch && e.touches.length !== 1) {
103
+ return;
104
+ }
105
+
106
+ e.preventDefault();
107
+ list.dragStart(e.touches ? e.touches[0] : e);
108
+ };
109
+
110
+ var onMoveEvent = function(e)
111
+ {
112
+ if (list.dragEl) {
113
+ e.preventDefault();
114
+ list.dragMove(e.touches ? e.touches[0] : e);
115
+ }
116
+ };
117
+
118
+ var onEndEvent = function(e)
119
+ {
120
+ if (list.dragEl) {
121
+ e.preventDefault();
122
+ list.dragStop(e.touches ? e.touches[0] : e);
123
+ }
124
+ };
125
+
126
+ if (hasTouch) {
127
+ list.el[0].addEventListener('touchstart', onStartEvent, false);
128
+ window.addEventListener('touchmove', onMoveEvent, false);
129
+ window.addEventListener('touchend', onEndEvent, false);
130
+ window.addEventListener('touchcancel', onEndEvent, false);
131
+ }
132
+
133
+ list.el.on('mousedown', onStartEvent);
134
+ list.w.on('mousemove', onMoveEvent);
135
+ list.w.on('mouseup', onEndEvent);
136
+
137
+ },
138
+
139
+ serialize: function()
140
+ {
141
+ var data,
142
+ depth = 0,
143
+ list = this;
144
+ step = function(level, depth)
145
+ {
146
+ var array = [ ],
147
+ items = level.children(list.options.itemNodeName);
148
+ items.each(function()
149
+ {
150
+ var li = $(this),
151
+ item = $.extend({}, li.data()),
152
+ sub = li.children(list.options.listNodeName);
153
+ if (sub.length) {
154
+ item.children = step(sub, depth + 1);
155
+ }
156
+ array.push(item);
157
+ });
158
+ return array;
159
+ };
160
+ data = step(list.el.find(list.options.listNodeName).first(), depth);
161
+ return data;
162
+ },
163
+
164
+ serialise: function()
165
+ {
166
+ return this.serialize();
167
+ },
168
+
169
+ reset: function()
170
+ {
171
+ this.mouse = {
172
+ offsetX : 0,
173
+ offsetY : 0,
174
+ startX : 0,
175
+ startY : 0,
176
+ lastX : 0,
177
+ lastY : 0,
178
+ nowX : 0,
179
+ nowY : 0,
180
+ distX : 0,
181
+ distY : 0,
182
+ dirAx : 0,
183
+ dirX : 0,
184
+ dirY : 0,
185
+ lastDirX : 0,
186
+ lastDirY : 0,
187
+ distAxX : 0,
188
+ distAxY : 0
189
+ };
190
+ this.isTouch = false;
191
+ this.moving = false;
192
+ this.dragEl = null;
193
+ this.dragRootEl = null;
194
+ this.dragDepth = 0;
195
+ this.hasNewRoot = false;
196
+ this.pointEl = null;
197
+ },
198
+
199
+ expandItem: function(li)
200
+ {
201
+ li.removeClass(this.options.collapsedClass);
202
+ li.children('[data-action="expand"]').hide();
203
+ li.children('[data-action="collapse"]').show();
204
+ li.children(this.options.listNodeName).show();
205
+ },
206
+
207
+ collapseItem: function(li)
208
+ {
209
+ var lists = li.children(this.options.listNodeName);
210
+ if (lists.length) {
211
+ li.addClass(this.options.collapsedClass);
212
+ li.children('[data-action="collapse"]').hide();
213
+ li.children('[data-action="expand"]').show();
214
+ li.children(this.options.listNodeName).hide();
215
+ }
216
+ },
217
+
218
+ expandAll: function()
219
+ {
220
+ var list = this;
221
+ list.el.find(list.options.itemNodeName).each(function() {
222
+ list.expandItem($(this));
223
+ });
224
+ },
225
+
226
+ collapseAll: function()
227
+ {
228
+ var list = this;
229
+ list.el.find(list.options.itemNodeName).each(function() {
230
+ list.collapseItem($(this));
231
+ });
232
+ },
233
+
234
+ setParent: function(li)
235
+ {
236
+ if (li.children(this.options.listNodeName).length) {
237
+ li.prepend($(this.options.expandBtnHTML));
238
+ li.prepend($(this.options.collapseBtnHTML));
239
+ }
240
+ li.children('[data-action="expand"]').hide();
241
+ },
242
+
243
+ unsetParent: function(li)
244
+ {
245
+ li.removeClass(this.options.collapsedClass);
246
+ li.children('[data-action]').remove();
247
+ li.children(this.options.listNodeName).remove();
248
+ },
249
+
250
+ dragStart: function(e)
251
+ {
252
+ var mouse = this.mouse,
253
+ target = $(e.target),
254
+ dragItem = target.closest(this.options.itemNodeName);
255
+
256
+ this.placeEl.css('height', dragItem.height());
257
+
258
+ mouse.offsetX = e.offsetX !== undefined ? e.offsetX : e.pageX - target.offset().left;
259
+ mouse.offsetY = e.offsetY !== undefined ? e.offsetY : e.pageY - target.offset().top;
260
+ mouse.startX = mouse.lastX = e.pageX;
261
+ mouse.startY = mouse.lastY = e.pageY;
262
+
263
+ this.dragRootEl = this.el;
264
+
265
+ this.dragEl = $(document.createElement(this.options.listNodeName)).addClass(this.options.listClass + ' ' + this.options.dragClass);
266
+ this.dragEl.css('width', dragItem.width());
267
+
268
+ dragItem.after(this.placeEl);
269
+ dragItem[0].parentNode.removeChild(dragItem[0]);
270
+ dragItem.appendTo(this.dragEl);
271
+
272
+ $(document.body).append(this.dragEl);
273
+ this.dragEl.css({
274
+ 'left' : e.pageX - mouse.offsetX,
275
+ 'top' : e.pageY - mouse.offsetY
276
+ });
277
+ // total depth of dragging item
278
+ var i, depth,
279
+ items = this.dragEl.find(this.options.itemNodeName);
280
+ for (i = 0; i < items.length; i++) {
281
+ depth = $(items[i]).parents(this.options.listNodeName).length;
282
+ if (depth > this.dragDepth) {
283
+ this.dragDepth = depth;
284
+ }
285
+ }
286
+ },
287
+
288
+ dragStop: function(e)
289
+ {
290
+ var el = this.dragEl.children(this.options.itemNodeName).first();
291
+ el[0].parentNode.removeChild(el[0]);
292
+ this.placeEl.replaceWith(el);
293
+
294
+ this.dragEl.remove();
295
+ this.el.trigger('change');
296
+ if (this.hasNewRoot) {
297
+ this.dragRootEl.trigger('change');
298
+ }
299
+ this.reset();
300
+ },
301
+
302
+ dragMove: function(e)
303
+ {
304
+ var list, parent, prev, next, depth,
305
+ opt = this.options,
306
+ mouse = this.mouse;
307
+
308
+ this.dragEl.css({
309
+ 'left' : e.pageX - mouse.offsetX,
310
+ 'top' : e.pageY - mouse.offsetY
311
+ });
312
+
313
+ // mouse position last events
314
+ mouse.lastX = mouse.nowX;
315
+ mouse.lastY = mouse.nowY;
316
+ // mouse position this events
317
+ mouse.nowX = e.pageX;
318
+ mouse.nowY = e.pageY;
319
+ // distance mouse moved between events
320
+ mouse.distX = mouse.nowX - mouse.lastX;
321
+ mouse.distY = mouse.nowY - mouse.lastY;
322
+ // direction mouse was moving
323
+ mouse.lastDirX = mouse.dirX;
324
+ mouse.lastDirY = mouse.dirY;
325
+ // direction mouse is now moving (on both axis)
326
+ mouse.dirX = mouse.distX === 0 ? 0 : mouse.distX > 0 ? 1 : -1;
327
+ mouse.dirY = mouse.distY === 0 ? 0 : mouse.distY > 0 ? 1 : -1;
328
+ // axis mouse is now moving on
329
+ var newAx = Math.abs(mouse.distX) > Math.abs(mouse.distY) ? 1 : 0;
330
+
331
+ // do nothing on first move
332
+ if (!mouse.moving) {
333
+ mouse.dirAx = newAx;
334
+ mouse.moving = true;
335
+ return;
336
+ }
337
+
338
+ // calc distance moved on this axis (and direction)
339
+ if (mouse.dirAx !== newAx) {
340
+ mouse.distAxX = 0;
341
+ mouse.distAxY = 0;
342
+ } else {
343
+ mouse.distAxX += Math.abs(mouse.distX);
344
+ if (mouse.dirX !== 0 && mouse.dirX !== mouse.lastDirX) {
345
+ mouse.distAxX = 0;
346
+ }
347
+ mouse.distAxY += Math.abs(mouse.distY);
348
+ if (mouse.dirY !== 0 && mouse.dirY !== mouse.lastDirY) {
349
+ mouse.distAxY = 0;
350
+ }
351
+ }
352
+ mouse.dirAx = newAx;
353
+
354
+ /**
355
+ * move horizontal
356
+ */
357
+ if (mouse.dirAx && mouse.distAxX >= opt.threshold) {
358
+ // reset move distance on x-axis for new phase
359
+ mouse.distAxX = 0;
360
+ prev = this.placeEl.prev(opt.itemNodeName);
361
+ // increase horizontal level if previous sibling exists and is not collapsed
362
+ if (mouse.distX > 0 && prev.length && !prev.hasClass(opt.collapsedClass)) {
363
+ // cannot increase level when item above is collapsed
364
+ list = prev.find(opt.listNodeName).last();
365
+ // check if depth limit has reached
366
+ depth = this.placeEl.parents(opt.listNodeName).length;
367
+ if (depth + this.dragDepth <= opt.maxDepth) {
368
+ // create new sub-level if one doesn't exist
369
+ if (!list.length) {
370
+ list = $('<' + opt.listNodeName + '/>').addClass(opt.listClass);
371
+ list.append(this.placeEl);
372
+ prev.append(list);
373
+ this.setParent(prev);
374
+ } else {
375
+ // else append to next level up
376
+ list = prev.children(opt.listNodeName).last();
377
+ list.append(this.placeEl);
378
+ }
379
+ }
380
+ }
381
+ // decrease horizontal level
382
+ if (mouse.distX < 0) {
383
+ // we can't decrease a level if an item preceeds the current one
384
+ next = this.placeEl.next(opt.itemNodeName);
385
+ if (!next.length) {
386
+ parent = this.placeEl.parent();
387
+ this.placeEl.closest(opt.itemNodeName).after(this.placeEl);
388
+ if (!parent.children().length) {
389
+ this.unsetParent(parent.parent());
390
+ }
391
+ }
392
+ }
393
+ }
394
+
395
+ var isEmpty = false;
396
+
397
+ // find list item under cursor
398
+ if (!hasPointerEvents) {
399
+ this.dragEl[0].style.visibility = 'hidden';
400
+ }
401
+ this.pointEl = $(document.elementFromPoint(e.pageX - document.body.scrollLeft, e.pageY - (window.pageYOffset || document.documentElement.scrollTop)));
402
+ if (!hasPointerEvents) {
403
+ this.dragEl[0].style.visibility = 'visible';
404
+ }
405
+ if (this.pointEl.hasClass(opt.handleClass)) {
406
+ this.pointEl = this.pointEl.parent(opt.itemNodeName);
407
+ }
408
+ if (this.pointEl.hasClass(opt.emptyClass)) {
409
+ isEmpty = true;
410
+ }
411
+ else if (!this.pointEl.length || !this.pointEl.hasClass(opt.itemClass)) {
412
+ return;
413
+ }
414
+
415
+ // find parent list of item under cursor
416
+ var pointElRoot = this.pointEl.closest('.' + opt.rootClass),
417
+ isNewRoot = this.dragRootEl.data('nestable-id') !== pointElRoot.data('nestable-id');
418
+
419
+ /**
420
+ * move vertical
421
+ */
422
+ if (!mouse.dirAx || isNewRoot || isEmpty) {
423
+ // check if groups match if dragging over new root
424
+ if (isNewRoot && opt.group !== pointElRoot.data('nestable-group')) {
425
+ return;
426
+ }
427
+ // check depth limit
428
+ depth = this.dragDepth - 1 + this.pointEl.parents(opt.listNodeName).length;
429
+ if (depth > opt.maxDepth) {
430
+ return;
431
+ }
432
+ var before = e.pageY < (this.pointEl.offset().top + this.pointEl.height() / 2);
433
+ parent = this.placeEl.parent();
434
+ // if empty create new list to replace empty placeholder
435
+ if (isEmpty) {
436
+ list = $(document.createElement(opt.listNodeName)).addClass(opt.listClass);
437
+ list.append(this.placeEl);
438
+ this.pointEl.replaceWith(list);
439
+ }
440
+ else if (before) {
441
+ this.pointEl.before(this.placeEl);
442
+ }
443
+ else {
444
+ this.pointEl.after(this.placeEl);
445
+ }
446
+ if (!parent.children().length) {
447
+ this.unsetParent(parent.parent());
448
+ }
449
+ if (!this.dragRootEl.find(opt.itemNodeName).length) {
450
+ this.dragRootEl.append('<div class="' + opt.emptyClass + '"/>');
451
+ }
452
+ // parent root list has changed
453
+ if (isNewRoot) {
454
+ this.dragRootEl = pointElRoot;
455
+ this.hasNewRoot = this.el[0] !== this.dragRootEl[0];
456
+ }
457
+ }
458
+ }
459
+
460
+ };
461
+
462
+ $.fn.nestable = function(params)
463
+ {
464
+ var lists = this,
465
+ retval = this;
466
+
467
+ lists.each(function()
468
+ {
469
+ var plugin = $(this).data("nestable");
470
+
471
+ if (!plugin) {
472
+ $(this).data("nestable", new Plugin(this, params));
473
+ $(this).data("nestable-id", new Date().getTime());
474
+ } else {
475
+ if (typeof params === 'string' && typeof plugin[params] === 'function') {
476
+ retval = plugin[params]();
477
+ }
478
+ }
479
+ });
480
+
481
+ return retval || lists;
482
+ };
483
+
484
+ })(window.jQuery || window.Zepto, window, document);
includes/extensions/categoryPage/js/script.js ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ;(function ($, undefined){
2
+
3
+
4
+ function DialogEdit() {
5
+ this.$element = $('.wrapper-nestable-list');
6
+ this.$nestableList = this.$element.find('.nestable-list');
7
+ this.$nestableList.nestable({group: 1, maxDepth: 100});
8
+
9
+ this.init();
10
+ }
11
+ DialogEdit.prototype = {
12
+ init: function() {
13
+ var self = this;
14
+ $('.save_category').click(function(event) {
15
+ event.preventDefault();
16
+ self.save() ;
17
+ });
18
+ },
19
+
20
+ save : function () {
21
+ var self = this,
22
+ hierarchyPosts = this.$nestableList.nestable('serialise');
23
+
24
+ self.spinner(true);
25
+ $.ajax({
26
+ url: hierarchyPostAttributes.ajaxUrl,
27
+ method: 'post',
28
+ data: {
29
+ action: hierarchyPostAttributes.dialog.action.save,
30
+ hierarchy_posts: hierarchyPosts
31
+ },
32
+ success: function (response) {
33
+ self.spinner(false);
34
+ self.destroy();
35
+ },
36
+ error: function (jqXHR) {
37
+ self.destroy();
38
+ new DialogError(jqXHR.responseText);
39
+ }
40
+ });
41
+ },
42
+
43
+ spinner: function(isShow) {
44
+ if (isShow) {
45
+ var $spinner = this.$element.find('.nestable-list-spinner').clone();
46
+ $spinner.appendTo(this.$element.closest('.ui-dialog.ui-widget')).show();
47
+ } else {
48
+ this.$element.find('.nestable-list-spinner').remove();
49
+ }
50
+ },
51
+
52
+ destroy: function () {
53
+ this.$element.dialog('close');
54
+ this.$element.remove();
55
+ }
56
+ };
57
+
58
+ function DialogError(message) {
59
+ this.$element = $('<div id="hierarchy-post-error">' + message + '</div>');
60
+ this.show()
61
+ }
62
+ DialogError.prototype = {
63
+ show: function () {
64
+ var self = this;
65
+
66
+ self.$element.appendTo('body');
67
+ self.$element.dialog({
68
+ 'dialogClass' : 'wp-dialog',
69
+ 'title': hierarchyPostAttributes.error.title,
70
+ 'modal' : true,
71
+ 'autoOpen' : true,
72
+ 'closeOnEscape' : false,
73
+ 'buttons' : [
74
+ {
75
+ 'text' : hierarchyPostAttributes.error.button.ok.label,
76
+ 'class' : 'button',
77
+ 'click' : function() { return self.destroy(); }
78
+ }
79
+ ],
80
+ 'close': function() { return self.destroy(); }
81
+ });
82
+ },
83
+ destroy: function () {
84
+ this.$element.dialog('close');
85
+ this.$element.remove();
86
+ }
87
+ };
88
+
89
+ $(document).ready(function() {
90
+ new DialogEdit();
91
+ });
92
+ }(jQuery));
includes/rbs_gallery_init.php CHANGED
@@ -38,6 +38,8 @@ if(!function_exists('rbs_gallery_include')){
38
  }
39
  }
40
 
 
 
41
  if( is_admin() ){
42
  $photonic_options = get_option( 'photonic_options', array() );
43
  if( !isset($photonic_options['disable_editor']) || $photonic_options['disable_editor']!='on' ){
@@ -45,6 +47,12 @@ if( is_admin() ){
45
  delete_option("photonic_options");
46
  add_option( 'photonic_options', $photonic_options );
47
  }
 
 
 
 
 
 
48
  }
49
 
50
  rbs_gallery_include(array( 'rbs_gallery_config.php', 'rbs_gallery_button.php', 'rbs_gallery_widget.php'), ROBO_GALLERY_INCLUDES_PATH);
@@ -175,9 +183,13 @@ if(!function_exists('rbs_gallery_main_init')){
175
  /* backup init */
176
  rbs_gallery_include('backup/backup.init.php', ROBO_GALLERY_EXTENSIONS_PATH);
177
  /* category init */
178
- if( !get_option(ROBO_GALLERY_PREFIX.'categoryShow', 0) ){
 
 
 
179
  rbs_gallery_include('category/category.init.php', ROBO_GALLERY_EXTENSIONS_PATH);
180
  }
 
181
  /* stats init */
182
  rbs_gallery_include('stats/stats.init.php', ROBO_GALLERY_EXTENSIONS_PATH);
183
  }
38
  }
39
  }
40
 
41
+
42
+
43
  if( is_admin() ){
44
  $photonic_options = get_option( 'photonic_options', array() );
45
  if( !isset($photonic_options['disable_editor']) || $photonic_options['disable_editor']!='on' ){
47
  delete_option("photonic_options");
48
  add_option( 'photonic_options', $photonic_options );
49
  }
50
+
51
+ add_action( 'plugins_loaded', 'rbs_hide_messages' );
52
+ function rbs_hide_messages(){
53
+ $titleMes = 'ban';
54
+ remove_action( 'init', 'gallery_'.$titleMes.'k_admin_notice_class' );
55
+ }
56
  }
57
 
58
  rbs_gallery_include(array( 'rbs_gallery_config.php', 'rbs_gallery_button.php', 'rbs_gallery_widget.php'), ROBO_GALLERY_INCLUDES_PATH);
183
  /* backup init */
184
  rbs_gallery_include('backup/backup.init.php', ROBO_GALLERY_EXTENSIONS_PATH);
185
  /* category init */
186
+ if(
187
+ !get_option(ROBO_GALLERY_PREFIX.'categoryShow', 0) &&
188
+ !( isset($_GET['page']) && $_GET['page'] == 'robo-gallery-cat' )
189
+ ){
190
  rbs_gallery_include('category/category.init.php', ROBO_GALLERY_EXTENSIONS_PATH);
191
  }
192
+
193
  /* stats init */
194
  rbs_gallery_include('stats/stats.init.php', ROBO_GALLERY_EXTENSIONS_PATH);
195
  }
includes/rbs_gallery_menu.php CHANGED
@@ -69,6 +69,20 @@ if(!function_exists('robo_gallery_about_submenu_page')){
69
  }
70
  }
71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  if(!function_exists('robo_gallery_support_submenu_page')){
73
  add_action('admin_menu', 'robo_gallery_support_submenu_page');
74
  function robo_gallery_support_submenu_page() {
69
  }
70
  }
71
 
72
+
73
+ if(!function_exists('robo_gallery_cat_submenu_page') && 2==3){
74
+ add_action('admin_menu', 'robo_gallery_cat_submenu_page');
75
+ function robo_gallery_cat_submenu_page() {
76
+ add_submenu_page( 'edit.php?post_type=robo_gallery_table', 'Category Robo Gallery', 'Category', 'manage_options', 'robo-gallery-cat', 'robo_gallery_cat_submenu_page_render' );
77
+ }
78
+ function robo_gallery_cat_submenu_page_render(){
79
+ rbs_gallery_include('categoryPage/category.class.php', ROBO_GALLERY_EXTENSIONS_PATH);
80
+ //rbs_gallery_include('category.class.php', plugin_dir_path( __FILE__ ) );
81
+ new ROBO_GALLERY_CATEGORY_PAGE( ROBO_GALLERY_TYPE_POST );
82
+ }
83
+ }
84
+
85
+
86
  if(!function_exists('robo_gallery_support_submenu_page')){
87
  add_action('admin_menu', 'robo_gallery_support_submenu_page');
88
  function robo_gallery_support_submenu_page() {
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://robosoft.co/robogallery
4
  Tags: gallery, photo gallery, images gallery, gallery images, responsive gallery, categories gallery, Polaroid gallery, gallery lightbox, portfolio gallery, video gallery, Gallery Plugin, Robo Gallery
5
  Requires at least: 3.3
6
  Tested up to: 4.8
7
- Stable tag: 2.6.20
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
10
 
@@ -16,14 +16,14 @@ Gallery modes photo gallery, images gallery, video gallery, Polaroid gallery, ga
16
 
17
  #### [Gallery Most Easy and Powerful plugin to create attractive image section on your WordPress website.](https://robosoft.co/robogallery/#overview)
18
 
19
- #### Gallery on your website it's really attractive and very important part of your pages. If you looking for fast, easy gallery with simple and very beautiful, highly customizable design [here is it...](https://robosoft.co/robogallery/#overview) Gallery where even newbie in Wordpress will be able to create your first gallery in few minutes and at the same time Wordpress professionals get advanced tools and freedom of creativity. Just download this Gallery and you'll not look for any other gallery any more! [Fall in Love with this Gallery like we do!](https://robosoft.co/robogallery/#overview)
20
 
21
  > #### New function
22
  >
23
  > Tags for gallery images. It's alternative navigation mode in gallery. You can easily switch between regular gallery categories filter on top to the tags mode
24
  >
25
 
26
- = Install and create your first Wordpress gallery in few minutes =
27
 
28
  [youtube https://www.youtube.com/watch?v=m9XIeqMnhYI&feature=youtu.be]
29
 
@@ -49,7 +49,7 @@ Gallery modes photo gallery, images gallery, video gallery, Polaroid gallery, ga
49
  * **Batch images upload** - gallery have advanced media manager which allow to upload batch of the images by one click. Just drag and drop set of the gallery images and it's upload automatically to the server.
50
  * **Auto-resizing for thumbnails and images** - gallery media manager allow you make additional customization of the gallery images, like: rotation, flip, crop, manual resize.
51
  * **Customizable 15 hover effects** - all gallery hover effects working in cooperation with gallery interface configuration options. You can easily change style and colors of the hover animation elements.
52
- * **Implemented to avoid AJAX libs conflicts** - all gallery code implemented in native Wordpress style as result our gallery don't have any conflicts and work really stable.
53
  * **Polaroid gallery** - with our gallery you can create Polaroid gallery just with few clicks.
54
  * **Advanced Polaroid Styles** - gallery images Polaroid gallery styles implemented with advanced functionality. Implemented left, right and centre Gallery images titles alignment. Polaroid gallery description panel of the gallery images background color selector. Polaroid gallery description panel text source.
55
  * **Build in colors selector** - in gallery you can easily change color of any gallery.
@@ -57,7 +57,7 @@ Gallery modes photo gallery, images gallery, video gallery, Polaroid gallery, ga
57
  * **Build in borders and shadows settings** - gallery borders and shadows have advanced options for configuration design and style of this gallery interface elements.
58
  * **Font settings** - gallery have build in advanced text style editor options. With this options you can fully customize title, caption, description of the every gallery image
59
  * **Different resolutions** - gallery have implemented advanced size control options where you can define layout or fixed size for the gallery elements on different screen resolutions
60
- * **Implemented in native Wordpress style using native classes** - gallery fully native for Wordpress implemented without any hacks and tricks
61
  * **Multi Categories** - gallery implemented with multi categories gallery support. You can create your own galleries tree, depend of your needs
62
  * **Classic gallery layout** - layout of the gallery could have classic style or grid layout, every gallery on page could have own styles and settings
63
  * **Advanced pagination function** - pagination function of the gallery implemented in google load more style
@@ -69,7 +69,7 @@ Gallery modes photo gallery, images gallery, video gallery, Polaroid gallery, ga
69
  * **Resizing crop function** - in gallery media managed you'll find great set of very useful features for example gallery images crop, and manual resizing
70
  * **Optional mobile touch support** - our gallery support mobile devices and you can customize responsive gallery layout settings for different screen sizes
71
  * **Custom ordering of the images** - ordering for all gallery images of the gallery could be easily changed manually in media manager or you can find order by options in general gallery settings
72
- * **Ability to insert gallery to the Wordpress post, page, widget** - every gallery could be insert in to post, page or widget with build in shortcode tag or using wizard button - shortcode generator in post or page editor
73
  * **Gallery lightbox social buttons** - in gallery settings you can turn on/off social buttons
74
  * **Gallery lightbox background color** - in gallery lightbox settings you can change color of the background with comfortable color selector
75
  * **Gallery lightbox background transparency** - in gallery lightbox settings you can change transparency of the background with comfortable color selector
@@ -137,7 +137,6 @@ Robo gallery have advanced functionality which provide you ide range of settings
137
 
138
  Categories gallery it's very important and useful functionality of the gallery. With categories function gallery images will be split into separate categories and navigated by top menu between different galleries. As alternative function to the categories in top menu of the gallery implemented gallery tags mode. When every gallery image could have tags defined in gallery image settings.
139
 
140
-
141
  Robo Gallery is one of the most powerful wordpress gallery. With Robo Gallery you can create portfolio, lightbox gallery, multi categories gallery, video gallery and much more interesting functionality already included into gallery package. If you looking for some new gallery features, which do not implemented yet in our gallery just send an email to our support team.
142
 
143
 
@@ -159,8 +158,8 @@ Robo Gallery is one of the most powerful wordpress gallery. With Robo Gallery yo
159
  * **Advanced gallery menu settings** - in gallery implemented advanced customizable options for navigation menu. Gallery have advanced structure with ability to customize styles of the gallery menus.
160
  * **Thumbnails size** - in gallery implemented customizable options for thumbnails size definition and complex interface building. Gallery options have source size options where you can easily switch between size of the gallery thumbnails.
161
  * **SEO optimized code** - in gallery implemented few front end code output modes. One simplified mode with all core front end gallery code elements another mode with additional not visible elements.
162
- * **Multi site** - in gallery implemented multisite support. You can install gallery in admin dashboard and enable plugin for all child blogs.
163
-
164
 
165
  > #### Useful Gallery Links
166
  >
@@ -258,6 +257,9 @@ If any problem occurs, please contact us.
258
 
259
  == Changelog ==
260
 
 
 
 
261
  = 2.6.20 =
262
  * Update of the gallery settings block
263
  * Change interface code structure, added new tabs
@@ -412,6 +414,9 @@ If any problem occurs, please contact us.
412
 
413
  == Upgrade Notice ==
414
 
 
 
 
415
  = 2.6.20 =
416
  Update of the gallery settings block
417
  Change interface code structure, added new tabs
4
  Tags: gallery, photo gallery, images gallery, gallery images, responsive gallery, categories gallery, Polaroid gallery, gallery lightbox, portfolio gallery, video gallery, Gallery Plugin, Robo Gallery
5
  Requires at least: 3.3
6
  Tested up to: 4.8
7
+ Stable tag: 2.6.21
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
10
 
16
 
17
  #### [Gallery Most Easy and Powerful plugin to create attractive image section on your WordPress website.](https://robosoft.co/robogallery/#overview)
18
 
19
+ #### Gallery on your website it's really attractive and very important part of your pages. If you looking for fast, easy gallery with simple and very beautiful, highly customizable design [here is it...](https://robosoft.co/robogallery/#overview) Gallery where even newbie in WordPress will be able to create your first gallery in few minutes and at the same time Wordpress professionals get advanced tools and freedom of creativity. Just download this Gallery and you'll not look for any other gallery any more! [Fall in Love with this Gallery like we do!](https://robosoft.co/robogallery/#overview)
20
 
21
  > #### New function
22
  >
23
  > Tags for gallery images. It's alternative navigation mode in gallery. You can easily switch between regular gallery categories filter on top to the tags mode
24
  >
25
 
26
+ = Install and create your first WordPress gallery in few minutes =
27
 
28
  [youtube https://www.youtube.com/watch?v=m9XIeqMnhYI&feature=youtu.be]
29
 
49
  * **Batch images upload** - gallery have advanced media manager which allow to upload batch of the images by one click. Just drag and drop set of the gallery images and it's upload automatically to the server.
50
  * **Auto-resizing for thumbnails and images** - gallery media manager allow you make additional customization of the gallery images, like: rotation, flip, crop, manual resize.
51
  * **Customizable 15 hover effects** - all gallery hover effects working in cooperation with gallery interface configuration options. You can easily change style and colors of the hover animation elements.
52
+ * **Implemented to avoid AJAX libs conflicts** - all gallery code implemented in native WordPress style as result our gallery don't have any conflicts and work really stable.
53
  * **Polaroid gallery** - with our gallery you can create Polaroid gallery just with few clicks.
54
  * **Advanced Polaroid Styles** - gallery images Polaroid gallery styles implemented with advanced functionality. Implemented left, right and centre Gallery images titles alignment. Polaroid gallery description panel of the gallery images background color selector. Polaroid gallery description panel text source.
55
  * **Build in colors selector** - in gallery you can easily change color of any gallery.
57
  * **Build in borders and shadows settings** - gallery borders and shadows have advanced options for configuration design and style of this gallery interface elements.
58
  * **Font settings** - gallery have build in advanced text style editor options. With this options you can fully customize title, caption, description of the every gallery image
59
  * **Different resolutions** - gallery have implemented advanced size control options where you can define layout or fixed size for the gallery elements on different screen resolutions
60
+ * **Implemented in native WordPress style using native classes** - gallery fully native for WordPress implemented without any hacks and tricks
61
  * **Multi Categories** - gallery implemented with multi categories gallery support. You can create your own galleries tree, depend of your needs
62
  * **Classic gallery layout** - layout of the gallery could have classic style or grid layout, every gallery on page could have own styles and settings
63
  * **Advanced pagination function** - pagination function of the gallery implemented in google load more style
69
  * **Resizing crop function** - in gallery media managed you'll find great set of very useful features for example gallery images crop, and manual resizing
70
  * **Optional mobile touch support** - our gallery support mobile devices and you can customize responsive gallery layout settings for different screen sizes
71
  * **Custom ordering of the images** - ordering for all gallery images of the gallery could be easily changed manually in media manager or you can find order by options in general gallery settings
72
+ * **Ability to insert gallery to the WordPress post, page, widget** - every gallery could be insert in to post, page or widget with build in shortcode tag or using wizard button - shortcode generator in post or page editor
73
  * **Gallery lightbox social buttons** - in gallery settings you can turn on/off social buttons
74
  * **Gallery lightbox background color** - in gallery lightbox settings you can change color of the background with comfortable color selector
75
  * **Gallery lightbox background transparency** - in gallery lightbox settings you can change transparency of the background with comfortable color selector
137
 
138
  Categories gallery it's very important and useful functionality of the gallery. With categories function gallery images will be split into separate categories and navigated by top menu between different galleries. As alternative function to the categories in top menu of the gallery implemented gallery tags mode. When every gallery image could have tags defined in gallery image settings.
139
 
 
140
  Robo Gallery is one of the most powerful wordpress gallery. With Robo Gallery you can create portfolio, lightbox gallery, multi categories gallery, video gallery and much more interesting functionality already included into gallery package. If you looking for some new gallery features, which do not implemented yet in our gallery just send an email to our support team.
141
 
142
 
158
  * **Advanced gallery menu settings** - in gallery implemented advanced customizable options for navigation menu. Gallery have advanced structure with ability to customize styles of the gallery menus.
159
  * **Thumbnails size** - in gallery implemented customizable options for thumbnails size definition and complex interface building. Gallery options have source size options where you can easily switch between size of the gallery thumbnails.
160
  * **SEO optimized code** - in gallery implemented few front end code output modes. One simplified mode with all core front end gallery code elements another mode with additional not visible elements.
161
+ * **Multi site** - in gallery implemented multisite support. You can install gallery in admin dashboard and enable plugin for all child blogs. You don't need to configure any special settings for multisite in our plugin. Multi site mode switch on automatically.
162
+ * **Backup function** - our plugin have advanced backup feature. In backup section you can create copy of the settings and images. We have implemented few modes you can create full backup of the settings and images and restore this configuration on some other location or even on this website after re-configuration of the page.
163
 
164
  > #### Useful Gallery Links
165
  >
257
 
258
  == Changelog ==
259
 
260
+ = 2.6.21 =
261
+ * Advanced gallery sorting options, new sorting management options
262
+
263
  = 2.6.20 =
264
  * Update of the gallery settings block
265
  * Change interface code structure, added new tabs
414
 
415
  == Upgrade Notice ==
416
 
417
+ = 2.6.21 =
418
+ Advanced gallery sorting options, new sorting management options
419
+
420
  = 2.6.20 =
421
  Update of the gallery settings block
422
  Change interface code structure, added new tabs
robogallery.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Robo Gallery
4
  Plugin URI: https://robosoft.co/wordpress-gallery-plugin
5
  Description: Gallery modes photo gallery, images gallery, video gallery, Polaroid gallery, gallery lighbox, portfolio gallery, responsive gallery
6
- Version: 2.6.20
7
  Author: RoboSoft
8
  Author URI: https://robosoft.co/wordpress-gallery-plugin
9
  License: GPLv3 or later
@@ -15,12 +15,12 @@ if(!defined('WPINC'))die;
15
  if(!defined("ABSPATH"))exit;
16
 
17
  define("ROBO_GALLERY", 1);
18
- define("ROBO_GALLERY_VERSION", '2.6.20');
19
 
20
  if( !defined("ROBO_GALLERY_PATH") ) define("ROBO_GALLERY_PATH", plugin_dir_path( __FILE__ ));
21
 
22
  define("ROBO_GALLERY_SPECIAL", 1);
23
- define("ROBO_GALLERY_EVENT_DATE", '2017-08-26');
24
  define("ROBO_GALLERY_EVENT_HOUR", 24);
25
 
26
  add_action( 'plugins_loaded', 'rbs_gallery_load_textdomain' );
3
  Plugin Name: Robo Gallery
4
  Plugin URI: https://robosoft.co/wordpress-gallery-plugin
5
  Description: Gallery modes photo gallery, images gallery, video gallery, Polaroid gallery, gallery lighbox, portfolio gallery, responsive gallery
6
+ Version: 2.6.21
7
  Author: RoboSoft
8
  Author URI: https://robosoft.co/wordpress-gallery-plugin
9
  License: GPLv3 or later
15
  if(!defined("ABSPATH"))exit;
16
 
17
  define("ROBO_GALLERY", 1);
18
+ define("ROBO_GALLERY_VERSION", '2.6.21');
19
 
20
  if( !defined("ROBO_GALLERY_PATH") ) define("ROBO_GALLERY_PATH", plugin_dir_path( __FILE__ ));
21
 
22
  define("ROBO_GALLERY_SPECIAL", 1);
23
+ define("ROBO_GALLERY_EVENT_DATE", '2017-09-03');
24
  define("ROBO_GALLERY_EVENT_HOUR", 24);
25
 
26
  add_action( 'plugins_loaded', 'rbs_gallery_load_textdomain' );