diff --git a/admin/class-pg360-admin.php b/admin/class-pg360-admin.php new file mode 100644 index 0000000..6b1c0a4 --- /dev/null +++ b/admin/class-pg360-admin.php @@ -0,0 +1,254 @@ + + */ +class Pg360_Admin { + + /** + * The ID of this plugin. + * + * @since 1.0.0 + * @access private + * @var string $plugin_name The ID of this plugin. + */ + private $pg360_generator; + + /** + * The version of this plugin. + * + * @since 1.0.0 + * @access private + * @var string $version The current version of this plugin. + */ + private $pg360_version; + + /** + * Initialize the class and set its properties. + * + * @since 1.0.0 + * @param string $plugin_name The name of this plugin. + * @param string $version The version of this plugin. + */ + public function __construct( $pg360_generator, $pg360_version ) { + + $this->pg360_generator = $pg360_generator; + $this->pg360_version = $pg360_version; + + } + + /** + * Register the stylesheets for the admin area. + * + * @since 1.0.0 + */ + public function pg360_enqueue_styles($hook_suffix) { + + //"Create New " page + if($hook_suffix == 'pg-360-generator/admin/partials/pg360_new.php') { + wp_enqueue_style( $this->pg360_generator, plugin_dir_url( __FILE__ ) . 'css/pg360-admin.css', array(), $this->pg360_version, 'all' ); + + wp_enqueue_style('dropzone',plugin_dir_url( __FILE__ ).'css/pg360_dropzone.css', array(), $this->pg360_version, 'all' ); + + } + + //Help page + if($hook_suffix == 'pg-360-generator/admin/partials/pg360_help.php') { + wp_enqueue_style( 'ui_style', plugin_dir_url( __FILE__ ) . 'css/pg360_ui.css', array(), $this->pg360_version, 'all' ); + wp_enqueue_style( 'pg360_gallery', plugin_dir_url( __FILE__ ) . 'css/pg360_help.css', array(), $this->pg360_version, 'all' ); + + } + + //gallery page + if($hook_suffix == 'pg-360-generator/admin/partials/pg360_gallery.php') { + + wp_enqueue_style( $this->pg360_generator, plugin_dir_url( __FILE__ ) . 'css/pg360-admin.css', array(), $this->pg360_version, 'all' ); + + wp_enqueue_style( 'pg360_gallery',plugin_dir_url( __FILE__ ) . 'css/pg360_gallery.css' , array(), $this->pg360_version, 'all' ); + + } + + //setting page + if($hook_suffix == 'pg-360-generator/admin/partials/pg360_setting.php') { + wp_enqueue_style( 'pg360_setting', plugin_dir_url( __FILE__ ) .'css/pg360_setting.css', array(), $this->pg360_version, 'all' ); + } + } + + /** + * Register the JavaScript for the admin area. + * + * @since 1.0.0 + */ + public function pg360_enqueue_scripts($hook_suffix) { + + //create new page + if($hook_suffix == 'pg-360-generator/admin/partials/pg360_new.php') { + + wp_enqueue_script( $this->pg360_generator, plugin_dir_url( __FILE__ ) . 'js/pg360-admin.js', array( 'jquery' ), $this->pg360_version, false ); + + wp_enqueue_script('pg360_dropzone',plugin_dir_url( __FILE__ ) . 'js/dropzone.min.js', array(),$this->pg360_version,true); + + wp_enqueue_script('pg360_handle_media',plugin_dir_url( __FILE__ ) . 'js/pg360_handle_media.js',array('jquery'),$this->pg360_version,true); + + } + //help page + if($hook_suffix == 'pg-360-generator/admin/partials/pg360_help.php') { + + wp_enqueue_script('pg360_tabs',plugin_dir_url( __FILE__ ) . 'js/pg360_help.js', array('jquery','jquery-ui-tabs'),$this->pg360_version,true); + } + + //gallery page + if($hook_suffix == 'pg-360-generator/admin/partials/pg360_gallery.php') { + + wp_enqueue_script( $this->pg360_generator, plugin_dir_url( __FILE__ ) . 'js/pg360-admin.js', array( 'jquery' ), $this->pg360_version, false ); + + wp_enqueue_script('pg360_reel',plugin_dir_url( __FILE__ ) . 'js/jquery.reel-min.js', array('jquery'),$this->pg360_version,true); + + wp_enqueue_script('pg360_gallery',plugin_dir_url( __FILE__ ) . 'js/pg360_gallery.js', array('jquery'),$this->pg360_version,true); + + } + + //setting page + if($hook_suffix == 'pg-360-generator/admin/partials/pg360_setting.php') { + wp_enqueue_script( 'pg360_setting', plugin_dir_url( __FILE__ ) . 'js/pg360_setting.js', array( 'jquery' ,'wp-color-picker'), $this->pg360_version, false ); + + } + + } + + // Create Menu Pages + public function pg360_menu() { + + $pg360_general_setting='/pg-360-generator/admin/partials/pg360_setting.php'; + $pg360_create_new='/pg-360-generator/admin/partials/pg360_new.php'; + $pg360_help='/pg-360-generator/admin/partials/pg360_help.php'; + $pg360_gallery='/pg-360-generator/admin/partials/pg360_gallery.php'; + + add_menu_page('pg360_admin_menu','360° Generator','manage_options',$pg360_create_new,'',plugins_url('pg-360-generator/images/PG20.png'),10); + + add_submenu_page($pg360_create_new,'360° Generator','Create 360°','manage_options',$pg360_create_new); + + add_submenu_page($pg360_create_new,'360° Gallery','360° Gallery','manage_options',$pg360_gallery); + + add_submenu_page($pg360_create_new,'360° Settings','Settings','manage_options',$pg360_general_setting); + + add_submenu_page($pg360_create_new,'360° help','Help/Feedback','manage_options',$pg360_help); + } + + /*------------------------------------------- + * Handle setting page : + ---------------------------------------------*/ + public function pg360_main_setting(){ + + $pg360_general_setting='/pg-360-generator/admin/partials/pg360_setting.php'; + + //register setting into options table + register_setting('pg360_view_settings','pg360_watermark_chkbox'); + register_setting('pg360_view_settings','pg360_watermark'); + register_setting('pg360_view_settings','pg360_ctl_btn_color'); + register_setting('pg360_view_settings','pg360_ctl_background_color'); + register_setting('pg360_view_settings','pg360_loading_bar_thickness'); + register_setting('pg360_view_settings','pg360_loading_bar_color'); + + /**--------------------------------------------------- + * Setting Section + ------------------------------------------------------*/ + + add_settings_section('pg360_view_settings_section','View Settings', 'pg360_setting_section_cb', $pg360_general_setting ); + //setting section callback function + function pg360_setting_section_cb(){ + //put check code and switch interface by if condition + echo '

this section include advanced setting to adjust your 360 as you like to see

'; + } + + /**--------------------------------------------------- + * Setting Field + ------------------------------------------------------*/ + + //360_Watermark + add_settings_field('pg360_wm','Display Water Mark','pg360_setting_watermark_cb',$pg360_general_setting,'pg360_view_settings_section'); + + //Control buttons color + add_settings_field('pg360_ctl_btn_color','Control Button Color','pg360_setting_ctlcolor_cb',$pg360_general_setting,'pg360_view_settings_section'); + + //Control Buttons Background Color + add_settings_field('pg360_ctl_background_color','Control Button Background Color','pg360_setting_ctl_backcolor_cb',$pg360_general_setting,'pg360_view_settings_section'); + + //loading bar thickness + add_settings_field('pg360_loading_bar_thickness','Loading Bar Thickness (Pixel)','pg360_loading_bar_thickness_cb',$pg360_general_setting,'pg360_view_settings_section'); + + // loading bar Color + add_settings_field('pg360_loading_bar_color','360 Pre-loader Color','pg360_loading_bar_color_cb',$pg360_general_setting,'pg360_view_settings_section'); + + /**----------------------------------------------------- + * Callback function for setting field + --------------------------------------------------------*/ + + //Watermark + function pg360_setting_watermark_cb(){ + // $new_value=('Powered By ProdGraphy.com'); + // update_option( 'pg360_watermark', $new_value) ; + + echo ''; + + echo ''; + + } + + //Control buttons color + function pg360_setting_ctlcolor_cb(){ + echo ''; + echo '
'; + echo ''; + + echo ''; + + echo ''; + echo '
'; + + } + + //Control Buttons Background Color + function pg360_setting_ctl_backcolor_cb(){ + echo ''; + } + + // loading bar thickness + function pg360_loading_bar_thickness_cb(){ + echo ''; + + } + // 360 Pre-loader Color + function pg360_loading_bar_color_cb(){ + echo ''; + } + + + } +} \ No newline at end of file diff --git a/admin/css/pg360-admin.css b/admin/css/pg360-admin.css new file mode 100644 index 0000000..34542e5 --- /dev/null +++ b/admin/css/pg360-admin.css @@ -0,0 +1,300 @@ +/** + * All of the CSS for your admin-specific functionality should be + * included in this file. + */ + + +/* Tooltip text */ + +.pg360_tooltip .pg360_tooltiptext { + visibility: hidden; + width: 120px; + background-color: #555; + color: #fff; + text-align: center; + padding: 5px 0; + border-radius: 6px; + /* Position the tooltip text */ + position: absolute; + z-index: 1; + bottom: 125%; + left: 50%; + margin-left: -60px; + /* Fade in tooltip */ + opacity: 0; + transition: opacity 1s; +} + + +/* Tooltip arrow */ + +.pg360_tooltip .pg360_tooltiptext::after { + content: ""; + position: absolute; + top: 100%; + left: 50%; + margin-left: -5px; + border-width: 5px; + border-style: solid; + border-color: #555 transparent transparent transparent; +} + + +/* Show the tooltip text when you mouse over the tooltip container */ + +.pg360_tooltip:hover .pg360_tooltiptext { + visibility: visible; + opacity: 1; +} + + +/**Custom icons style */ + +@font-face { + font-family: 'ProdGraphy-Icons'; + src: url('fonts/ProdGraphy-Icons.ttf?e1vnx8') format('truetype'), url('fonts/ProdGraphy-Icons.woff?e1vnx8') format('woff'), url('fonts/ProdGraphy-Icons.svg?e1vnx8#ProdGraphy-Icons') format('svg'); + font-weight: normal; + font-style: normal; +} + +.icon { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'ProdGraphy-Icons' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.prodgraphy-fullscreen:before { + content: "\e989"; +} + +.prodgraphy-play:before { + content: "\ea1c"; +} + +.prodgraphy-pause:before { + content: "\ea1d"; +} + + +/*******************************************/ + +.more-option { + display: none; +} + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + opacity: 1; +} + +input[type=number] { + width: 60px; +} + +.pg360-row-one { + display: inline-block; + min-width: 450px; +} + +.pg360-row-one .pg360-field { + font-weight: 600; +} + +.pg360-row-two { + margin-left: 30px; + vertical-align: top; + border-left: solid 2px grey; + padding-left: 20px; +} + +.pg360-row-two .pg360-field { + margin-top: 10px; + font-weight: 600; +} + +.pg360-danger { + color: #dd2424; + font-weight: 600; +} + +.pg360_p { + max-width: 700px; + font-size: 14px; +} + +.pg360-field { + text-align: left; + padding: 10px 0px 10px 0; +} + +.pg360-field .vl { + display: none; +} + +.pg360-field .hintchkbx { + margin-top: 5px; +} + +.pg360_tip { + color: #0c6294; +} + +.input_label { + margin-top: 5px; + width: 200px; + line-height: 1.3; + float: left; + width: 200px; + display: block; + color: #23282d; +} + +.input_label .user_input { + display: inline-block; +} + +.user_input { + border-radius: 10px; +} + +#next1 { + margin: 25px; +} + +#next2 { + margin: 25px; +} + +body { + font-family: "Lato", sans-serif; +} + +iframe { + display: none; +} + +#pg360Dz { + display: none; +} + +#pg360Form { + display: block; +} + +.reel-preloader { + background-color: #FF4400; + color: #FF4400; +} + +.pg360_edit { + color: #0073aa; +} + +.pg360_edit_div { + display: none; +} + +.pg360_delete { + color: darkred; +} + + +/** +* Help page +*/ + +.pg360-logo { + display: inline-block; + float: left; +} + +#slidecontainer { + width: 100%; +} + +.slider { + -webkit-appearance: none; + width: 100%; + height: 15px; + border-radius: 5px; + background: #d3d3d3; + outline: none; + opacity: 0.7; + -webkit-transition: .2s; + transition: opacity .2s; +} + +.slider:hover { + opacity: 1; +} + +.slider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 25px; + height: 25px; + border-radius: 50%; + background: #4CAF50; + cursor: pointer; +} + +.slider::-moz-range-thumb { + width: 25px; + height: 25px; + border-radius: 50%; + background: #4CAF50; + cursor: pointer; +} + +.pg360_control { + text-align: center; + margin-top: 10px; +} + +.pg360_insert_chkbx { + padding-left: 20px; +} + +.pg360_watermark { + position: relative; + bottom: 2.5em; + right: -1em; +} + +.pg360_upload_icon { + color: orangered; +} + + +/* Drop Zone style customization*/ + +.dz-filename { + color: green; +} + +.dz-size { + color: green; +} + +.dz-progress { + color: green; +} + + +/* + * tool tip + */ + +.pg360_tooltip { + position: relative; + display: inline-block; + /* If you want dots under the hoverable text */ +} \ No newline at end of file diff --git a/admin/css/pg360_dropzone.css b/admin/css/pg360_dropzone.css new file mode 100644 index 0000000..0bf76b3 --- /dev/null +++ b/admin/css/pg360_dropzone.css @@ -0,0 +1,545 @@ +/* + * The MIT License + * Copyright (c) 2012 Matias Meno + */ + +@-webkit-keyframes passing-through { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); + } + 30%, + 70% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); + } +} + +@-moz-keyframes passing-through { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); + } + 30%, + 70% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); + } +} + +@keyframes passing-through { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); + } + 30%, + 70% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); + } +} + +@-webkit-keyframes slide-in { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); + } + 30% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } +} + +@-moz-keyframes slide-in { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); + } + 30% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } +} + +@keyframes slide-in { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); + } + 30% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } +} + +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } + 10% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); + } + 20% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} + +@-moz-keyframes pulse { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } + 10% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); + } + 20% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} + +@keyframes pulse { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } + 10% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); + } + 20% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} + +.dropzone, +.dropzone * { + box-sizing: border-box; +} + +.dropzone { + min-height: 150px; + border: 2px solid rgba(0, 0, 0, 0.3); + background: white; + padding: 20px 20px; +} + +.dropzone.dz-clickable { + cursor: pointer; +} + +.dropzone.dz-clickable * { + cursor: default; +} + +.dropzone.dz-clickable .dz-message, +.dropzone.dz-clickable .dz-message * { + cursor: pointer; +} + +.dropzone.dz-started .dz-message { + display: none; +} + +.dropzone.dz-drag-hover { + border-style: solid; +} + +.dropzone.dz-drag-hover .dz-message { + opacity: 0.5; +} + +.dropzone .dz-message { + text-align: center; + margin: 2em 0; +} + +.dropzone .dz-preview { + position: relative; + display: inline-block; + vertical-align: top; + margin: 16px; + min-height: 100px; +} + +.dropzone .dz-preview:hover { + z-index: 1000; +} + +.dropzone .dz-preview:hover .dz-details { + opacity: 1; +} + +.dropzone .dz-preview.dz-file-preview .dz-image { + border-radius: 20px; + background: #999; + background: linear-gradient(to bottom, #eee, #ddd); +} + +.dropzone .dz-preview.dz-file-preview .dz-details { + opacity: 1; +} + +.dropzone .dz-preview.dz-image-preview { + background: white; +} + +.dropzone .dz-preview.dz-image-preview .dz-details { + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + -ms-transition: opacity 0.2s linear; + -o-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; +} + +.dropzone .dz-preview .dz-remove { + padding-top: 15px; + font-size: 14px; + text-align: center; + display: block; + cursor: pointer; + border: none; +} + +.dropzone .dz-preview .dz-remove:hover { + text-decoration: underline; +} + +.dropzone .dz-preview:hover .dz-details { + opacity: 1; +} + +.dropzone .dz-preview .dz-details { + z-index: 20; + position: absolute; + top: 0; + left: 0; + opacity: 0; + font-size: 13px; + min-width: 100%; + max-width: 100%; + padding: 2em 1em; + text-align: center; + color: rgba(0, 0, 0, 0.9); + line-height: 150%; +} + +.dropzone .dz-preview .dz-details .dz-size { + margin-bottom: 1em; + font-size: 12px; +} + +.dropzone .dz-preview .dz-details .dz-filename { + white-space: nowrap; +} + +.dropzone .dz-preview .dz-details .dz-filename:hover span { + border: 1px solid rgba(200, 200, 200, 0.8); + background-color: rgba(255, 255, 255, 0.8); +} + +.dropzone .dz-preview .dz-details .dz-filename:not(:hover) { + overflow: hidden; + text-overflow: ellipsis; +} + +.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span { + border: 1px solid transparent; +} + +.dropzone .dz-preview .dz-details .dz-filename span, +.dropzone .dz-preview .dz-details .dz-size span { + background-color: rgba(255, 255, 255, 0.4); + padding: 0 0.4em; + border-radius: 3px; +} + +.dropzone .dz-preview:hover .dz-image img { + -webkit-transform: scale(1.05, 1.05); + -moz-transform: scale(1.05, 1.05); + -ms-transform: scale(1.05, 1.05); + -o-transform: scale(1.05, 1.05); + transform: scale(1.05, 1.05); + -webkit-filter: blur(8px); + filter: blur(8px); +} + +.dropzone .dz-preview .dz-image { + border-radius: 20px; + overflow: hidden; + width: 80px; + height: 80px; + position: relative; + display: block; + z-index: 10; +} + +.dropzone .dz-preview .dz-image img { + display: block; +} + +.dropzone .dz-preview.dz-success .dz-success-mark { + -webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + -moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + -ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + -o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); +} + +.dropzone .dz-preview.dz-error .dz-error-mark { + opacity: 1; + -webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + -moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + -ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + -o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); +} + +.dropzone .dz-preview .dz-success-mark, +.dropzone .dz-preview .dz-error-mark { + pointer-events: none; + opacity: 0; + z-index: 500; + position: absolute; + display: block; + top: 50%; + left: 50%; + margin-left: -27px; + margin-top: -27px; +} + +.dropzone .dz-preview .dz-success-mark svg, +.dropzone .dz-preview .dz-error-mark svg { + display: block; + width: 54px; + height: 54px; +} + +.dropzone .dz-preview.dz-processing .dz-progress { + opacity: 1; + -webkit-transition: all 0.2s linear; + -moz-transition: all 0.2s linear; + -ms-transition: all 0.2s linear; + -o-transition: all 0.2s linear; + transition: all 0.2s linear; +} + +.dropzone .dz-preview.dz-complete .dz-progress { + opacity: 0; + -webkit-transition: opacity 0.4s ease-in; + -moz-transition: opacity 0.4s ease-in; + -ms-transition: opacity 0.4s ease-in; + -o-transition: opacity 0.4s ease-in; + transition: opacity 0.4s ease-in; +} + +.dropzone .dz-preview:not(.dz-processing) .dz-progress { + -webkit-animation: pulse 6s ease infinite; + -moz-animation: pulse 6s ease infinite; + -ms-animation: pulse 6s ease infinite; + -o-animation: pulse 6s ease infinite; + animation: pulse 6s ease infinite; +} + +.dropzone .dz-preview .dz-progress { + opacity: 1; + z-index: 1000; + pointer-events: none; + position: absolute; + height: 16px; + left: 50%; + top: 50%; + margin-top: -8px; + width: 60px; + margin-left: -40px; + background: rgba(255, 255, 255, 0.9); + -webkit-transform: scale(1); + border-radius: 8px; + overflow: hidden; +} + +.dropzone .dz-preview .dz-progress .dz-upload { + background: #333; + background: linear-gradient(to bottom, #666, #444); + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 0; + -webkit-transition: width 300ms ease-in-out; + -moz-transition: width 300ms ease-in-out; + -ms-transition: width 300ms ease-in-out; + -o-transition: width 300ms ease-in-out; + transition: width 300ms ease-in-out; +} + +.dropzone .dz-preview.dz-error .dz-error-message { + display: block; +} + +.dropzone .dz-preview.dz-error:hover .dz-error-message { + opacity: 1; + pointer-events: auto; +} + +.dropzone .dz-preview .dz-error-message { + pointer-events: none; + z-index: 1000; + position: absolute; + display: block; + display: none; + opacity: 0; + -webkit-transition: opacity 0.3s ease; + -moz-transition: opacity 0.3s ease; + -ms-transition: opacity 0.3s ease; + -o-transition: opacity 0.3s ease; + transition: opacity 0.3s ease; + border-radius: 8px; + font-size: 13px; + top: 130px; + left: -10px; + width: 140px; + background: #be2626; + background: linear-gradient(to bottom, #be2626, #a92222); + padding: 0.5em 1.2em; + color: white; +} + +.dropzone .dz-preview .dz-error-message:after { + content: ''; + position: absolute; + top: -6px; + left: 64px; + width: 0; + height: 0; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #be2626; +} + + +/* ---------------------------------------------------------------------------- */ + +.dropzone { + border: 4px dashed gray; + border-radius: 30px; + background-color: lightgray; + margin-right: 20px; + margin-top: 30px; +} + +.dzTxt { + font-size: 20px; + margin: 10px; + text-align: center; +} + +.dzBtn { + padding: 10px; + border-radius: 10px; + background-color: darkcyan; +} \ No newline at end of file diff --git a/admin/css/pg360_gallery.css b/admin/css/pg360_gallery.css new file mode 100644 index 0000000..cb4f9d9 --- /dev/null +++ b/admin/css/pg360_gallery.css @@ -0,0 +1,212 @@ +/* +* Gallery page style +*/ + +body { + background-color: white; +} + +.pg360 { + float: left; + margin-right: 20px; + padding: 20px; + border: solid 2px rgb(212, 212, 212); +} + +iframe { + display: none; +} + + +/** + *Image filter + */ + +.ClassColorFilter_BW { + filter: grayscale(1); + -webkit-filter: grayscale(1); + -moz-filter: grayscale(1); +} + +.ClassColorFilter_PGfilter1 { + position: relative; + -webkit-filter: contrast(.9) sepia(.2); + filter: contrast(.9) sepia(.2) +} + +.ClassColorFilter_PGfilter1 img { + z-index: 1 +} + +.ClassColorFilter_PGfilter1:before { + z-index: 2 +} + +.ClassColorFilter_PGfilter1:after { + z-index: 3 +} + +.ClassColorFilter_PGfilter1::after { + background: -webkit-radial-gradient(circle, #d0ba8e 20%, #360309 85%, #1d0210 100%); + background: radial-gradient(circle, #d0ba8e 20%, #360309 85%, #1d0210 100%); + mix-blend-mode: overlay +} + +.ClassColorFilter_PGfilter2 { + position: relative; + -webkit-filter: contrast(1.1) brightness(1.1) saturate(1.3); + filter: contrast(1.1) brightness(1.1) saturate(1.3) +} + +.ClassColorFilter_PGfilter2 img { + width: 100%; + z-index: 1 +} + +.ClassColorFilter_PGfilter2:before { + z-index: 2 +} + +.ClassColorFilter_PGfilter2:after { + z-index: 3; + background: rgba(243, 106, 188, .3); + mix-blend-mode: screen +} + +.ClassColorFilter_PGfilter3 { + position: relative; + -webkit-filter: hue-rotate(-20deg) contrast(.9) saturate(.85) brightness(1.2); + filter: hue-rotate(-20deg) contrast(.9) saturate(.85) brightness(1.2) +} + +.ClassColorFilter_PGfilter3:after, +.ClassColorFilter_PGfilter3:before { + display: block; + height: 100%; + width: 100%; + top: 0; + left: 0; + position: absolute; + pointer-events: none +} + +.ClassColorFilter_PGfilter3 img { + width: 100%; + z-index: 1 +} + +.ClassColorFilter_PGfilter3:before { + z-index: 2 +} + +.ClassColorFilter_PGfilter3:after { + z-index: 3 +} + +.ClassColorFilter_PGfilter3::after { + background: -webkit-linear-gradient(left, rgba(66, 10, 14, .2), transparent); + background: linear-gradient(to right, rgba(66, 10, 14, .2), transparent); + mix-blend-mode: darken +} + + +/*==============================================================================================*/ + +.pg360_pack { + position: relative; +} + +.pg360_watermark { + position: relative; + bottom: 2.5em; + right: -1em; +} + + +/* button */ + +#pg360_control { + text-align: center; + margin-top: 10px; + margin-bottom: 10px; +} + +.pg360_btn_play { + padding: 5px; + padding-bottom: 7px; + text-decoration: none; + margin: 5px; + border-radius: 20px; + border: none; +} + +.pg360_btn_pause { + padding: 5px; + padding-bottom: 7px; + text-decoration: none; + margin: 5px; + border-radius: 20px; + border: none; +} + +.pg360_btn_fullscreen { + padding: 5px; + padding-bottom: 7px; + text-decoration: none; + margin: 5px; + border-radius: 20px; + border: none; +} + +a .pg360_btn { + text-decoration: none; +} + + +/*Loader*/ + +.loader { + display: none; + position: absolute; + float: left; + left: 50%; + top: 50%; + z-index: 100; + width: 75px; + height: 75px; + margin: -75px 0 0 -75px; + border: 12px solid lightgrey; + border-radius: 50%; + border-top: 12px solid orangered; + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} + +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + } +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +.pg360_name { + text-align: center; + font-size: 16px; +} + +.pg360-row-two { + border: none; + padding-left: 0; + margin-left: 0; +} \ No newline at end of file diff --git a/admin/css/pg360_help.css b/admin/css/pg360_help.css new file mode 100644 index 0000000..14edfbc --- /dev/null +++ b/admin/css/pg360_help.css @@ -0,0 +1,183 @@ +#pg360_pricing-table { + margin: 100px auto; + text-align: center; + width: 892px; + /* total computed width = 222 x 3 + 226 */ +} + +#pg360_pricing-table .pg360_plan { + font: 12px 'Lucida Sans', 'trebuchet MS', Arial, Helvetica; + text-shadow: 0 1px rgba(255, 255, 255, .8); + background: #fff; + border: 1px solid #ddd; + color: #333; + padding: 20px; + width: 180px; + /* plan width = 180 + 20 + 20 + 1 + 1 = 222px */ + float: left; + position: relative; +} + +#pg360_pricing-table #pg360_most-popular { + z-index: 2; + top: -13px; + border-width: 3px; + padding: 30px 20px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + -moz-box-shadow: 20px 0 10px -10px rgba(0, 0, 0, .15), -20px 0 10px -10px rgba(0, 0, 0, .15); + -webkit-box-shadow: 20px 0 10px -10px rgba(0, 0, 0, .15), -20px 0 10px -10px rgba(0, 0, 0, .15); + box-shadow: 20px 0 10px -10px rgba(0, 0, 0, .15), -20px 0 10px -10px rgba(0, 0, 0, .15); +} + +#pg360_pricing-table .pg360_plan:nth-child(1) { + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} + +#pg360_pricing-table .pg360_plan:nth-child(4) { + -moz-border-radius: 0 5px 5px 0; + -webkit-border-radius: 0 5px 5px 0; + border-radius: 0 5px 5px 0; +} + + +/* --------------- */ + +#pg360_pricing-table h3 { + font-size: 20px; + font-weight: normal; + padding: 20px; + margin: -20px -20px 50px -20px; + background-color: #eee; + background-image: -moz-linear-gradient(#fff, #eee); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee)); + background-image: -webkit-linear-gradient(#fff, #eee); + background-image: -o-linear-gradient(#fff, #eee); + background-image: -ms-linear-gradient(#fff, #eee); + background-image: linear-gradient(#fff, #eee); +} + +#pg360_pricing-table #pg360_most-popular h3 { + background-color: #ddd; + background-image: -moz-linear-gradient(#eee, #ddd); + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#ddd)); + background-image: -webkit-linear-gradient(#eee, #ddd); + background-image: -o-linear-gradient(#eee, #ddd); + background-image: -ms-linear-gradient(#eee, #ddd); + background-image: linear-gradient(#eee, #ddd); + margin-top: -30px; + padding-top: 30px; + -moz-border-radius: 5px 5px 0 0; + -webkit-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +#pg360_pricing-table .pg360_plan:nth-child(1) h3 { + -moz-border-radius: 5px 0 0 0; + -webkit-border-radius: 5px 0 0 0; + border-radius: 5px 0 0 0; +} + +#pg360_pricing-table .pg360_plan:nth-child(4) h3 { + -moz-border-radius: 0 5px 0 0; + -webkit-border-radius: 0 5px 0 0; + border-radius: 0 5px 0 0; +} + +#pg360_pricing-table h3 span { + display: block; + font: bold 25px/100px Georgia, Serif; + color: #777; + background: #fff; + border: 5px solid #fff; + height: 100px; + width: 100px; + margin: 10px auto -65px; + -moz-border-radius: 100px; + -webkit-border-radius: 100px; + border-radius: 100px; + -moz-box-shadow: 0 5px 20px #ddd inset, 0 3px 0 #999 inset; + -webkit-box-shadow: 0 5px 20px #ddd inset, 0 3px 0 #999 inset; + box-shadow: 0 5px 20px #ddd inset, 0 3px 0 #999 inset; +} + + +/* --------------- */ + +#pg360_pricing-table ul { + margin: 20px 0 0 0; + padding: 0; + list-style: none; +} + +#pg360_pricing-table li { + border-top: 1px solid #ddd; + padding: 10px 0; +} + + +/* --------------- */ + +#pg360_pricing-table .pg360_signup { + position: relative; + padding: 8px 20px; + margin: 20px 0 0 0; + color: #fff; + font: bold 14px Arial, Helvetica; + text-transform: uppercase; + text-decoration: none; + display: inline-block; + background-color: #72ce3f; + background-image: -moz-linear-gradient(#72ce3f, #62bc30); + background-image: -webkit-gradient(linear, left top, left bottom, from(#72ce3f), to(#62bc30)); + background-image: -webkit-linear-gradient(#72ce3f, #62bc30); + background-image: -o-linear-gradient(#72ce3f, #62bc30); + background-image: -ms-linear-gradient(#72ce3f, #62bc30); + background-image: linear-gradient(#72ce3f, #62bc30); + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + text-shadow: 0 1px 0 rgba(0, 0, 0, .3); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, .5), 0 2px 0 rgba(0, 0, 0, .7); + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .5), 0 2px 0 rgba(0, 0, 0, .7); + box-shadow: 0 1px 0 rgba(255, 255, 255, .5), 0 2px 0 rgba(0, 0, 0, .7); +} + +#pg360_pricing-table .pg360_signup:hover { + background-color: #62bc30; + background-image: -moz-linear-gradient(#62bc30, #72ce3f); + background-image: -webkit-gradient(linear, left top, left bottom, from(#62bc30), to(#72ce3f)); + background-image: -webkit-linear-gradient(#62bc30, #72ce3f); + background-image: -o-linear-gradient(#62bc30, #72ce3f); + background-image: -ms-linear-gradient(#62bc30, #72ce3f); + background-image: linear-gradient(#62bc30, #72ce3f); +} + +#pg360_pricing-table .pg360_signup:active, +#pg360_pricing-table .pg360_signup:focus { + background: #62bc30; + top: 2px; + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, .7) inset; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .7) inset; + box-shadow: 0 0 3px rgba(0, 0, 0, .7) inset; +} + + +/* --------------- */ + +.pg360_clear:before, +.pg360_clear:after { + content: ""; + display: table +} + +.pg360_clear:after { + clear: both +} + +.pg360_clear { + zoom: 1 +} \ No newline at end of file diff --git a/admin/css/pg360_setting.css b/admin/css/pg360_setting.css new file mode 100644 index 0000000..e3692aa --- /dev/null +++ b/admin/css/pg360_setting.css @@ -0,0 +1,42 @@ +.pg360_setting_ctrlbtn { + float: right; +} + +.pg360_btn_a { + padding: 5px; + padding-bottom: 7px; + text-decoration: none; + margin: 5px; + border-radius: 20px; + border: none; +} + +#overlay { + position: fixed; + /* Sit on top of the page content */ + /* display: none; */ + /* Hidden by default */ + width: 100%; + /* Full width (cover the whole page) */ + height: 100%; + /* Full height (cover the whole page) */ + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.8); + /* Black background with opacity */ + z-index: 2; + /* Specify a stack order in case you're using a different order for other elements */ + cursor: pointer; + /* Add a pointer on hover */ +} + +.overlay_text { + text-align: center; + position: absolute; + top: 50%; + left: 30%; + color: white; + font-size: 24px; +} \ No newline at end of file diff --git a/admin/css/pg360_shortcode.css b/admin/css/pg360_shortcode.css new file mode 100644 index 0000000..ea51609 --- /dev/null +++ b/admin/css/pg360_shortcode.css @@ -0,0 +1,31 @@ +/* +*style thickbox apear when click pg360 media button: +*/ + +.pg360_bottom_toolBar { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 60px; + z-index: 80; + background: #f3f3f3; + border-top: 1px solid #ddd; +} + +.pg360_ControlButtons { + position: absolute; + width: 170px; + text-align: center; + right: 0; + margin-top: 15px; +} + +#pg360Insert { + margin-right: 15px; +} + +.pg360_mainContent { + overflow: auto; + outline: 0px; +} \ No newline at end of file diff --git a/admin/css/pg360_ui.css b/admin/css/pg360_ui.css new file mode 100644 index 0000000..5b289a5 --- /dev/null +++ b/admin/css/pg360_ui.css @@ -0,0 +1,2063 @@ +/*! jQuery UI - v1.12.1 - 2016-09-14 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + + +/* Layout helpers +----------------------------------*/ + +.ui-helper-hidden { + display: none; +} + +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} + +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} + +.ui-helper-clearfix:after { + clear: both; +} + +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity=0); + /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ + +.ui-state-disabled { + cursor: default !important; + pointer-events: none; +} + + +/* Icons +----------------------------------*/ + +.ui-icon { + display: inline-block; + vertical-align: middle; + margin-top: -.25em; + position: relative; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} + + +/* Misc visuals +----------------------------------*/ + + +/* Overlays */ + +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + font-size: 100%; +} + +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} + +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} + +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} + +.ui-menu .ui-menu { + position: absolute; +} + +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} + +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px .4em; +} + +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} + +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + + +/* icon support */ + +.ui-menu-icons { + position: relative; +} + +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} + + +/* left-aligned */ + +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + + +/* right-aligned */ + +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} + +.ui-button { + padding: .4em 1em; + display: inline-block; + position: relative; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + /* Support: IE <= 11 */ + overflow: visible; +} + +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} + + +/* to make room for the icon, a width needs to be set here */ + +.ui-button-icon-only { + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; +} + + +/* no icon support for input elements */ + +input.ui-button.ui-button-icon-only { + text-indent: 0; +} + + +/* button icon element(s) */ + +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; +} + +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; +} + +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; + padding: .4em 1em; +} + + +/* workarounds */ + + +/* Support: Firefox 5 - 40 */ + +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} + +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} + +.ui-controlgroup>.ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} + +.ui-controlgroup>.ui-controlgroup-item:focus, +.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} + +.ui-controlgroup-vertical>.ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} + +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} + +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} + +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} + +.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item { + border-left: none; +} + +.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item { + border-top: none; +} + +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} + +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + + +/* Spinner specific style fixes */ + +.ui-controlgroup-vertical .ui-spinner-input { + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em); +} + +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} + +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} + +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} + +.ui-checkboxradio-disabled { + pointer-events: none; +} + +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} + +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} + +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} + +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} + +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} + +.ui-datepicker .ui-datepicker-next { + right: 2px; +} + +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} + +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} + +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} + +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} + +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} + +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} + +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} + +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} + +.ui-datepicker td { + border: 0; + padding: 1px; +} + +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} + +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} + +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} + +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + + +/* with multiple calendars */ + +.ui-datepicker.ui-datepicker-multi { + width: auto; +} + +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} + +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} + +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} + +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} + +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} + +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} + +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} + +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + + +/* RTL support */ + +.ui-datepicker-rtl { + direction: rtl; +} + +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} + +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} + +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} + +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} + +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + + +/* Icons */ + +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} + +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} + +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} + +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} + +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} + +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} + +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} + +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} + +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} + +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} + +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} + +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} + +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} + +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} + +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} + +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} + +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} + +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} + +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} + +.ui-resizable { + position: relative; +} + +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} + +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} + +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} + +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} + +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} + +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} + +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} + +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} + +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} + +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} + +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); + /* support: IE8 */ + opacity: 0.25; +} + +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} + +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} + +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} + +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} + +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} + +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} + +.ui-selectmenu-open { + display: block; +} + +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} + +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} + +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} + +.ui-slider { + position: relative; + text-align: left; +} + +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} + +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + + +/* support: IE8 - See #6727 */ + +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} + +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} + +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} + +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} + +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} + +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} + +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} + +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} + +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} + +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} + +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} + +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} + +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} + + +/* more specificity required here to override default borders */ + +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} + +.ui-spinner-up { + top: 0; +} + +.ui-spinner-down { + bottom: 0; +} + +.ui-tabs { + position: relative; + /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} + +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} + +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} + +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} + +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} + +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} + +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} + +body .ui-tooltip { + border-width: 2px; +} + + +/* Component containers +----------------------------------*/ + +.ui-widget { + font-family: Arial, Helvetica, sans-serif; + font-size: 1em; +} + +.ui-widget .ui-widget { + font-size: 1em; +} + +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Arial, Helvetica, sans-serif; + font-size: 1em; +} + +.ui-widget.ui-widget-content { + border: 1px solid #c5c5c5; +} + +.ui-widget-content { + border: 1px solid #dddddd; + background: #ffffff; + color: #333333; +} + +.ui-widget-content a { + color: #333333; +} + +.ui-widget-header { + border: 1px solid #dddddd; + background: #e9e9e9; + color: #333333; + font-weight: bold; +} + +.ui-widget-header a { + color: #333333; +} + + +/* Interaction states +----------------------------------*/ + +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ + +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #c5c5c5; + background: #f6f6f6; + font-weight: normal; + color: #454545; +} + +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #454545; + text-decoration: none; +} + +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #cccccc; + background: #ededed; + font-weight: normal; + color: #2b2b2b; +} + +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #2b2b2b; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #003eff; + background: #007fff; + font-weight: normal; + color: #ffffff; +} + +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #003eff; + background-color: #ffffff; +} + +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #ffffff; + text-decoration: none; +} + + +/* Interaction Cues +----------------------------------*/ + +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #dad55e; + background: #fffa90; + color: #777620; +} + +.ui-state-checked { + border: 1px solid #dad55e; + background: #fffa90; +} + +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #777620; +} + +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #f1a899; + background: #fddfdf; + color: #5f3f3f; +} + +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #5f3f3f; +} + +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #5f3f3f; +} + +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} + +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter: Alpha(Opacity=70); + /* support: IE8 */ + font-weight: normal; +} + +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter: Alpha(Opacity=35); + /* support: IE8 */ + background-image: none; +} + +.ui-state-disabled .ui-icon { + filter: Alpha(Opacity=35); + /* support: IE8 - See #6059 */ +} + + +/* Icons +----------------------------------*/ + + +/* states and images */ + +.ui-icon { + width: 16px; + height: 16px; +} + +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} + +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} + +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("images/ui-icons_555555_256x240.png"); +} + +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} + +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_777620_256x240.png"); +} + +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cc0000_256x240.png"); +} + +.ui-button .ui-icon { + background-image: url("images/ui-icons_777777_256x240.png"); +} + + +/* positioning */ + +.ui-icon-blank { + background-position: 16px 16px; +} + +.ui-icon-caret-1-n { + background-position: 0 0; +} + +.ui-icon-caret-1-ne { + background-position: -16px 0; +} + +.ui-icon-caret-1-e { + background-position: -32px 0; +} + +.ui-icon-caret-1-se { + background-position: -48px 0; +} + +.ui-icon-caret-1-s { + background-position: -65px 0; +} + +.ui-icon-caret-1-sw { + background-position: -80px 0; +} + +.ui-icon-caret-1-w { + background-position: -96px 0; +} + +.ui-icon-caret-1-nw { + background-position: -112px 0; +} + +.ui-icon-caret-2-n-s { + background-position: -128px 0; +} + +.ui-icon-caret-2-e-w { + background-position: -144px 0; +} + +.ui-icon-triangle-1-n { + background-position: 0 -16px; +} + +.ui-icon-triangle-1-ne { + background-position: -16px -16px; +} + +.ui-icon-triangle-1-e { + background-position: -32px -16px; +} + +.ui-icon-triangle-1-se { + background-position: -48px -16px; +} + +.ui-icon-triangle-1-s { + background-position: -65px -16px; +} + +.ui-icon-triangle-1-sw { + background-position: -80px -16px; +} + +.ui-icon-triangle-1-w { + background-position: -96px -16px; +} + +.ui-icon-triangle-1-nw { + background-position: -112px -16px; +} + +.ui-icon-triangle-2-n-s { + background-position: -128px -16px; +} + +.ui-icon-triangle-2-e-w { + background-position: -144px -16px; +} + +.ui-icon-arrow-1-n { + background-position: 0 -32px; +} + +.ui-icon-arrow-1-ne { + background-position: -16px -32px; +} + +.ui-icon-arrow-1-e { + background-position: -32px -32px; +} + +.ui-icon-arrow-1-se { + background-position: -48px -32px; +} + +.ui-icon-arrow-1-s { + background-position: -65px -32px; +} + +.ui-icon-arrow-1-sw { + background-position: -80px -32px; +} + +.ui-icon-arrow-1-w { + background-position: -96px -32px; +} + +.ui-icon-arrow-1-nw { + background-position: -112px -32px; +} + +.ui-icon-arrow-2-n-s { + background-position: -128px -32px; +} + +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px; +} + +.ui-icon-arrow-2-e-w { + background-position: -160px -32px; +} + +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px; +} + +.ui-icon-arrowstop-1-n { + background-position: -192px -32px; +} + +.ui-icon-arrowstop-1-e { + background-position: -208px -32px; +} + +.ui-icon-arrowstop-1-s { + background-position: -224px -32px; +} + +.ui-icon-arrowstop-1-w { + background-position: -240px -32px; +} + +.ui-icon-arrowthick-1-n { + background-position: 1px -48px; +} + +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px; +} + +.ui-icon-arrowthick-1-e { + background-position: -32px -48px; +} + +.ui-icon-arrowthick-1-se { + background-position: -48px -48px; +} + +.ui-icon-arrowthick-1-s { + background-position: -64px -48px; +} + +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px; +} + +.ui-icon-arrowthick-1-w { + background-position: -96px -48px; +} + +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px; +} + +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px; +} + +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px; +} + +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px; +} + +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px; +} + +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px; +} + +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px; +} + +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px; +} + +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px; +} + +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px; +} + +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px; +} + +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px; +} + +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px; +} + +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px; +} + +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px; +} + +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px; +} + +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px; +} + +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px; +} + +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px; +} + +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px; +} + +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px; +} + +.ui-icon-arrow-4 { + background-position: 0 -80px; +} + +.ui-icon-arrow-4-diag { + background-position: -16px -80px; +} + +.ui-icon-extlink { + background-position: -32px -80px; +} + +.ui-icon-newwin { + background-position: -48px -80px; +} + +.ui-icon-refresh { + background-position: -64px -80px; +} + +.ui-icon-shuffle { + background-position: -80px -80px; +} + +.ui-icon-transfer-e-w { + background-position: -96px -80px; +} + +.ui-icon-transferthick-e-w { + background-position: -112px -80px; +} + +.ui-icon-folder-collapsed { + background-position: 0 -96px; +} + +.ui-icon-folder-open { + background-position: -16px -96px; +} + +.ui-icon-document { + background-position: -32px -96px; +} + +.ui-icon-document-b { + background-position: -48px -96px; +} + +.ui-icon-note { + background-position: -64px -96px; +} + +.ui-icon-mail-closed { + background-position: -80px -96px; +} + +.ui-icon-mail-open { + background-position: -96px -96px; +} + +.ui-icon-suitcase { + background-position: -112px -96px; +} + +.ui-icon-comment { + background-position: -128px -96px; +} + +.ui-icon-person { + background-position: -144px -96px; +} + +.ui-icon-print { + background-position: -160px -96px; +} + +.ui-icon-trash { + background-position: -176px -96px; +} + +.ui-icon-locked { + background-position: -192px -96px; +} + +.ui-icon-unlocked { + background-position: -208px -96px; +} + +.ui-icon-bookmark { + background-position: -224px -96px; +} + +.ui-icon-tag { + background-position: -240px -96px; +} + +.ui-icon-home { + background-position: 0 -112px; +} + +.ui-icon-flag { + background-position: -16px -112px; +} + +.ui-icon-calendar { + background-position: -32px -112px; +} + +.ui-icon-cart { + background-position: -48px -112px; +} + +.ui-icon-pencil { + background-position: -64px -112px; +} + +.ui-icon-clock { + background-position: -80px -112px; +} + +.ui-icon-disk { + background-position: -96px -112px; +} + +.ui-icon-calculator { + background-position: -112px -112px; +} + +.ui-icon-zoomin { + background-position: -128px -112px; +} + +.ui-icon-zoomout { + background-position: -144px -112px; +} + +.ui-icon-search { + background-position: -160px -112px; +} + +.ui-icon-wrench { + background-position: -176px -112px; +} + +.ui-icon-gear { + background-position: -192px -112px; +} + +.ui-icon-heart { + background-position: -208px -112px; +} + +.ui-icon-star { + background-position: -224px -112px; +} + +.ui-icon-link { + background-position: -240px -112px; +} + +.ui-icon-cancel { + background-position: 0 -128px; +} + +.ui-icon-plus { + background-position: -16px -128px; +} + +.ui-icon-plusthick { + background-position: -32px -128px; +} + +.ui-icon-minus { + background-position: -48px -128px; +} + +.ui-icon-minusthick { + background-position: -64px -128px; +} + +.ui-icon-close { + background-position: -80px -128px; +} + +.ui-icon-closethick { + background-position: -96px -128px; +} + +.ui-icon-key { + background-position: -112px -128px; +} + +.ui-icon-lightbulb { + background-position: -128px -128px; +} + +.ui-icon-scissors { + background-position: -144px -128px; +} + +.ui-icon-clipboard { + background-position: -160px -128px; +} + +.ui-icon-copy { + background-position: -176px -128px; +} + +.ui-icon-contact { + background-position: -192px -128px; +} + +.ui-icon-image { + background-position: -208px -128px; +} + +.ui-icon-video { + background-position: -224px -128px; +} + +.ui-icon-script { + background-position: -240px -128px; +} + +.ui-icon-alert { + background-position: 0 -144px; +} + +.ui-icon-info { + background-position: -16px -144px; +} + +.ui-icon-notice { + background-position: -32px -144px; +} + +.ui-icon-help { + background-position: -48px -144px; +} + +.ui-icon-check { + background-position: -64px -144px; +} + +.ui-icon-bullet { + background-position: -80px -144px; +} + +.ui-icon-radio-on { + background-position: -96px -144px; +} + +.ui-icon-radio-off { + background-position: -112px -144px; +} + +.ui-icon-pin-w { + background-position: -128px -144px; +} + +.ui-icon-pin-s { + background-position: -144px -144px; +} + +.ui-icon-play { + background-position: 0 -160px; +} + +.ui-icon-pause { + background-position: -16px -160px; +} + +.ui-icon-seek-next { + background-position: -32px -160px; +} + +.ui-icon-seek-prev { + background-position: -48px -160px; +} + +.ui-icon-seek-end { + background-position: -64px -160px; +} + +.ui-icon-seek-start { + background-position: -80px -160px; +} + + +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ + +.ui-icon-seek-first { + background-position: -80px -160px; +} + +.ui-icon-stop { + background-position: -96px -160px; +} + +.ui-icon-eject { + background-position: -112px -160px; +} + +.ui-icon-volume-off { + background-position: -128px -160px; +} + +.ui-icon-volume-on { + background-position: -144px -160px; +} + +.ui-icon-power { + background-position: 0 -176px; +} + +.ui-icon-signal-diag { + background-position: -16px -176px; +} + +.ui-icon-signal { + background-position: -32px -176px; +} + +.ui-icon-battery-0 { + background-position: -48px -176px; +} + +.ui-icon-battery-1 { + background-position: -64px -176px; +} + +.ui-icon-battery-2 { + background-position: -80px -176px; +} + +.ui-icon-battery-3 { + background-position: -96px -176px; +} + +.ui-icon-circle-plus { + background-position: 0 -192px; +} + +.ui-icon-circle-minus { + background-position: -16px -192px; +} + +.ui-icon-circle-close { + background-position: -32px -192px; +} + +.ui-icon-circle-triangle-e { + background-position: -48px -192px; +} + +.ui-icon-circle-triangle-s { + background-position: -64px -192px; +} + +.ui-icon-circle-triangle-w { + background-position: -80px -192px; +} + +.ui-icon-circle-triangle-n { + background-position: -96px -192px; +} + +.ui-icon-circle-arrow-e { + background-position: -112px -192px; +} + +.ui-icon-circle-arrow-s { + background-position: -128px -192px; +} + +.ui-icon-circle-arrow-w { + background-position: -144px -192px; +} + +.ui-icon-circle-arrow-n { + background-position: -160px -192px; +} + +.ui-icon-circle-zoomin { + background-position: -176px -192px; +} + +.ui-icon-circle-zoomout { + background-position: -192px -192px; +} + +.ui-icon-circle-check { + background-position: -208px -192px; +} + +.ui-icon-circlesmall-plus { + background-position: 0 -208px; +} + +.ui-icon-circlesmall-minus { + background-position: -16px -208px; +} + +.ui-icon-circlesmall-close { + background-position: -32px -208px; +} + +.ui-icon-squaresmall-plus { + background-position: -48px -208px; +} + +.ui-icon-squaresmall-minus { + background-position: -64px -208px; +} + +.ui-icon-squaresmall-close { + background-position: -80px -208px; +} + +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px; +} + +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px; +} + +.ui-icon-grip-solid-vertical { + background-position: -32px -224px; +} + +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px; +} + +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px; +} + +.ui-icon-grip-diagonal-se { + background-position: -80px -224px; +} + + +/* Misc visuals +----------------------------------*/ + + +/* Corner radius */ + +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 3px; +} + +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 3px; +} + +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 3px; +} + +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 3px; +} + + +/* Overlays */ + +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + filter: Alpha(Opacity=30); + /* support: IE8 */ +} + +.ui-widget-shadow { + -webkit-box-shadow: 0px 0px 5px #666666; + box-shadow: 0px 0px 5px #666666; +} \ No newline at end of file diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 0000000..e71af0e --- /dev/null +++ b/admin/index.php @@ -0,0 +1 @@ +'),this.element.appendChild(e)),g=e.getElementsByTagName("span")[0],g&&(null!=g.textContent?g.textContent=this.options.dictFallbackMessage:null!=g.innerText&&(g.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(a,b,c,d){var e,f,g;if(e={srcX:0,srcY:0,srcWidth:a.width,srcHeight:a.height},f=a.width/a.height,null==b&&null==c?(b=e.srcWidth,c=e.srcHeight):null==b?b=c*f:null==c&&(c=b/f),b=Math.min(b,e.srcWidth),c=Math.min(c,e.srcHeight),g=b/c,e.srcWidth>b||e.srcHeight>c)if("crop"===d)f>g?(e.srcHeight=a.height,e.srcWidth=e.srcHeight*g):(e.srcWidth=a.width,e.srcHeight=e.srcWidth/g);else{if("contain"!==d)throw new Error("Unknown resizeMethod '"+d+"'");f>g?c=b/f:b=c*f}return e.srcX=(a.width-e.srcWidth)/2,e.srcY=(a.height-e.srcHeight)/2,e.trgWidth=b,e.trgHeight=c,e},transformFile:function(a,b){return(this.options.resizeWidth||this.options.resizeHeight)&&a.type.match(/image.*/)?this.resizeImage(a,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,b):b(a)},previewTemplate:'
\n
\n
\n
\n
\n
\n
\n
\n
\n \n Check\n \n \n \n \n \n
\n
\n \n Error\n \n \n \n \n \n \n \n
\n
',drop:function(a){return this.element.classList.remove("dz-drag-hover")},dragstart:h,dragend:function(a){return this.element.classList.remove("dz-drag-hover")},dragenter:function(a){return this.element.classList.add("dz-drag-hover")},dragover:function(a){return this.element.classList.add("dz-drag-hover")},dragleave:function(a){return this.element.classList.remove("dz-drag-hover")},paste:h,reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(a){var b,c,e,f,g,h,i,j,k,l,m,n,o;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){for(a.previewElement=d.createElement(this.options.previewTemplate.trim()),a.previewTemplate=a.previewElement,this.previewsContainer.appendChild(a.previewElement),j=a.previewElement.querySelectorAll("[data-dz-name]"),b=0,f=j.length;b'+this.options.dictRemoveFile+""),a.previewElement.appendChild(a._removeLink)),m=function(b){return function(c){return c.preventDefault(),c.stopPropagation(),a.status===d.UPLOADING?d.confirm(b.options.dictCancelUploadConfirmation,function(){return b.removeFile(a)}):b.options.dictRemoveFileConfirmation?d.confirm(b.options.dictRemoveFileConfirmation,function(){return b.removeFile(a)}):b.removeFile(a)}}(this),l=a.previewElement.querySelectorAll("[data-dz-remove]"),o=[],e=0,h=l.length;e'+this.options.dictDefaultMessage+"")),this.clickableElements.length&&(h=function(a){return function(){return a.hiddenFileInput&&a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput),a.hiddenFileInput=document.createElement("input"),a.hiddenFileInput.setAttribute("type","file"),(null==a.options.maxFiles||a.options.maxFiles>1)&&a.hiddenFileInput.setAttribute("multiple","multiple"),a.hiddenFileInput.className="dz-hidden-input",null!=a.options.acceptedFiles&&a.hiddenFileInput.setAttribute("accept",a.options.acceptedFiles),null!=a.options.capture&&a.hiddenFileInput.setAttribute("capture",a.options.capture),a.hiddenFileInput.style.visibility="hidden",a.hiddenFileInput.style.position="absolute",a.hiddenFileInput.style.top="0",a.hiddenFileInput.style.left="0",a.hiddenFileInput.style.height="0",a.hiddenFileInput.style.width="0",document.querySelector(a.options.hiddenInputContainer).appendChild(a.hiddenFileInput),a.hiddenFileInput.addEventListener("change",function(){var b,c,d,e;if(c=a.hiddenFileInput.files,c.length)for(d=0,e=c.length;d',this.options.dictFallbackText&&(c+="

"+this.options.dictFallbackText+"

"),c+='',b=d.createElement(c),"FORM"!==this.element.tagName?(e=d.createElement('
'),e.appendChild(b)):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=e?e:b)},d.prototype.getExistingFallback=function(){var a,b,c,d,e,f;for(b=function(a){var b,c,d;for(c=0,d=a.length;c0){for(i=["TB","GB","MB","KB","b"],c=d=0,e=i.length;d=b){f=a/Math.pow(this.options.filesizeBase,4-c),g=h;break}f=Math.round(10*f)/10}return""+f+" "+g},d.prototype._updateMaxFilesReachedClass=function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")},d.prototype.drop=function(a){var b,c;a.dataTransfer&&(this.emit("drop",a),b=a.dataTransfer.files,this.emit("addedfiles",b),b.length&&(c=a.dataTransfer.items,c&&c.length&&null!=c[0].webkitGetAsEntry?this._addFilesFromItems(c):this.handleFiles(b)))},d.prototype.paste=function(a){var b,c;if(null!=(null!=a&&null!=(c=a.clipboardData)?c.items:void 0))return this.emit("paste",a),b=a.clipboardData.items,b.length?this._addFilesFromItems(b):void 0},d.prototype.handleFiles=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;c0){for(f=0,g=c.length;f1024*this.options.maxFilesize*1024?b(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(a.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):d.isValidFile(a,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(b(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",a)):this.options.accept.call(this,a,b):b(this.options.dictInvalidFileType)},d.prototype.addFile=function(a){return a.upload={progress:0,total:a.size,bytesSent:0},this.files.push(a),a.status=d.ADDED,this.emit("addedfile",a),this._enqueueThumbnail(a),this.accept(a,function(b){return function(c){return c?(a.accepted=!1,b._errorProcessing([a],c)):(a.accepted=!0,b.options.autoQueue&&b.enqueueFile(a)),b._updateMaxFilesReachedClass()}}(this))},d.prototype.enqueueFiles=function(a){var b,c,d;for(c=0,d=a.length;c4&&(j.width=p.trgHeight,j.height=p.trgWidth),e){case 2:k.translate(j.width,0),k.scale(-1,1);break;case 3:k.translate(j.width,j.height),k.rotate(Math.PI);break;case 4:k.translate(0,j.height),k.scale(1,-1);break;case 5:k.rotate(.5*Math.PI),k.scale(1,-1);break;case 6:k.rotate(.5*Math.PI),k.translate(0,-j.height);break;case 7:k.rotate(.5*Math.PI),k.translate(j.width,-j.height),k.scale(-1,1);break;case 8:k.rotate(-.5*Math.PI),k.translate(-j.width,0)}if(g(k,i,null!=(l=p.srcX)?l:0,null!=(m=p.srcY)?m:0,p.srcWidth,p.srcHeight,null!=(n=p.trgX)?n:0,null!=(o=p.trgY)?o:0,p.trgWidth,p.trgHeight),q=j.toDataURL("image/png"),null!=f)return f(q,j)})}}(this),null!=f&&(i.onerror=f),i.src=a.dataURL},d.prototype.processQueue=function(){var a,b,c,d;if(b=this.options.parallelUploads,c=this.getUploadingFiles().length,a=c,!(c>=b)&&(d=this.getQueuedFiles(),d.length>0)){if(this.options.uploadMultiple)return this.processFiles(d.slice(0,b-c));for(;a=I;m=0<=I?++A:--A)c=function(c){return function(d,e,f){return function(d){if(h.append(e,d,f),++b===a.length)return c.submitRequest(O,h,a)}}}(this),K.push(this.options.transformFile.call(this,a[m],c(a[m],this._getParamName(m),this._renameFilename(g.name,g))));return K},d.prototype.submitRequest=function(a,b,c){return a.send(b)},d.prototype._finished=function(a,b,c){var e,f,g;for(f=0,g=a.length;f=h;d=0<=h?++f:--f)e[d]=c.charCodeAt(d);return new Blob([b],{type:g})},i=function(a,b){var c,d,e,f;for(f=[],d=0,e=a.length;dj;)b=e[4*(h-1)+3],0===b?f=h:j=h,h=f+j>>1;return i=h/g,0===i?1:i},g=function(a,b,c,d,e,g,h,i,j,k){var l;return l=f(b),a.drawImage(b,c,d,e,g,h,i,j,k/l)},c=function(){function a(){}return a.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a.encode64=function(a){var b,c,d,e,f,g,h,i,j;for(j="",b=void 0,c=void 0,d="",e=void 0,f=void 0,g=void 0,h="",i=0;;)if(b=a[i++],c=a[i++],d=a[i++],e=b>>2,f=(3&b)<<4|c>>4,g=(15&c)<<2|d>>6,h=63&d,isNaN(c)?g=h=64:isNaN(d)&&(h=64),j=j+this.KEY_STR.charAt(e)+this.KEY_STR.charAt(f)+this.KEY_STR.charAt(g)+this.KEY_STR.charAt(h),b=c=d="",e=f=g=h="",!(ia.length)break}return f},a.decode64=function(a){var b,c,d,e,f,g,h,i,j,k;for("",d=void 0,e=void 0,f="",g=void 0,h=void 0,i=void 0,j="",k=0,c=[],b=/[^A-Za-z0-9\+\/\=]/g,b.exec(a)&&console.warning("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");;)if(g=this.KEY_STR.indexOf(a.charAt(k++)),h=this.KEY_STR.indexOf(a.charAt(k++)),i=this.KEY_STR.indexOf(a.charAt(k++)),j=this.KEY_STR.indexOf(a.charAt(k++)),d=g<<2|h>>4,e=(15&h)<<4|i>>2,f=(3&i)<<6|j,c.push(d),64!==i&&c.push(e),64!==j&&c.push(f),d=e=f="",g=h=i=j="",!(k"}function x(f){return"."+ +(f||"")}function Va(f){return f.replace(Da,n.cdn)}function Ea(f){return"url('"+$b(f)+"')"}function ac(f,j){return typeof j==tb?j[f]:j}function Fa(f,j,o){return ub(f,Ga(j,o))}function Ha(f,j){return H(f)*(j?-1:1)}function Wa(f){return f.touch||f.originalEvent.touches&&f.originalEvent.touches[0]||f}function vb(f){return f.originalEvent}function y(f){return f===s?0:typeof f==wb?f:f+"px"}function Ca(f){return"#"+f}function bc(f,j,o){for(;f.length "+x(z)+")").each(function(f,j){f=k(j);j=f.data();j.images=yb(j.images);var o={};k(x(dc)+"[data-for="+f.attr(ka)+"]").each(function(t,r){t=k(r);r=t.data();r.x=cc(yb(r.x));r.y=cc(yb(r.y));var g=t.attr(ka);r.node=t.removeData();o[g]=r});j.annotations=o;f.removeData().reel(j)})},fn:{reel:function(){var f=arguments,j=k(this),o=j.data(),t=f[0]||{},r=f[1];if(typeof t!="object")if(t.slice(0,1)==":")return j.trigger(t.slice(1), +r);else if(f.length==1)return o[t];else{if(r!==s){n.normal[t]&&(r=n.normal[t](r,o));if(o[t]===s)o[t]=r;else if(o[t]!==r)j.trigger(t+"Change",[s,o[t]=r])}return j}else{var g=k.extend({},n.def,t),K=[];j.filter(Xa).unreel().filter(function(){var h=k(this),e=g.attr,a=e.src||h.attr(ra),I=e.width||h.attr(L)||h.width();h=e.height||h.attr(D)||h.height();if(!a)return Ab("`src` attribute missing on target image");if(!I||!h)return Ab("Dimension(s) of the target image unknown");return true}).each(function(){var h= +k(this),e=function(c,d){return h.reel(c,d)&&a(c)},a=function(c){return h.data(c)},I={setup:function(){if(!(h.hasClass(z)&&h.parent().hasClass(Bb))){e(Ia,g);var c={src:h.attr(ra),width:h.attr(D)||null,height:h.attr(L)||null,style:h.attr($)||null,"class":h.attr(ec)||null},d=h.attr(g.attr).attr(ra),b=e(ka,h.attr(ka)||h.attr(ka,z+"-"+ +new Date).attr(ka)),i=k.extend({},h.data()),p=e(aa,g.images||[]),m=e(W,g.stitched),l=!p.length||m;l=e(Ya,g.responsive&&(Fc?true:!l));var q=e(fc,{}),u=g.loops,v=g.orbital, +E=g.revolution,ba=g.rows,ca=e(sa,Ga(g.footage,g.frames));e(Za,g.spacing);var Cb=e(D,+h.attr(D)||h.width()),Db=e(L,+h.attr(L)||h.height()),Gc=e(Ja,g.shy),gc=e(O,v&&ca||ba<=1&&p.length||g.frames),Hc=ba>1||v;e(Ka,ac("x",E)||m/2||Cb*2);e(Eb,!Hc?0:ac("y",E)||(ba>3?Db:Db/(5-ba)));ba=m?1:la(gc/ca);e(Fb,m-(u?0:Cb));e($a,0);b=Ca(b+g.suffix);u=h.attr(ec);u=!u?P:u+A;u=k(V(ta),{id:b.substr(1),"class":u+A+Bb+A+hc+"0"});u=h.wrap(u.addClass(g.klass)).addClass(z);K.push(Bc(u)[0]);u=u.parent().bind(I.instance);e(Gb, +p.length?P:g.image||d.replace(n.re.image,"$1"+g.suffix+".$2"));e(ab,k(V(ta),{"class":Hb}).appendTo("body"));e(La,k());e(ic,[]);e(J,null);e(B,null);e(Q,g.row);e(ua,0);e(Ib,ba);e(jc,g.rowlock);e(kc,g.framelock);e(bb,e(Ma,e(cb,0)));e(db,1/gc);e(lc,b);e(M,e(va,g.speed)<0);e(Na,false);e(ma,0);e(wa,g.vertical);e(da,0);e(xa,Ha(1,!g.cw&&!m));e(eb,{});e(ea,false);e(fb,e(Jb,0));e(gb,e(hb,0));e(Oa,false);e(Kb,false);e(fa,false);e(mc,g.brake);e(Lb,!!v);e(ga,g.tempo/(n.lazy?g.laziness:1));e(ya,-1);e(ib,-1);e(Pa, +g.annotations||u.unbind(x(Pa))&&{});e(Mb,1);e(nc,{attr:c,data:i});g.steppable||u.unbind("up.steppable");g.indicator||u.unbind(".indicator");C(P,{overflow:Nb,position:"relative"});l||C(P,{width:Cb,height:Db});l&&k.each(Ic,function(cd,oc){q[oc]=a(oc)});C(na+A+x(z),{display:Ob});C(x(Hb),{position:"fixed",left:y(-100),top:y(-100)},true);C(x(Hb)+A+Xa,{position:Qa,width:10,height:10},true);ha.bind(I.pool);h.trigger(Gc?"prepare":"setup")}},instance:{teardown:function(){var c=h.data(nc);h.parent().unbind(I.instance); +if(a(Ja))h.parent().unbind(jb,ia);else a($).remove()&&a(La).unbind(F);a(ab).empty();clearTimeout(Pb);clearTimeout(Qb);k(U).unbind(pc,qc);k(U).unbind(F);ha.unbind(I.pool);oa.unbind(ja);h.siblings().unbind(F).remove();kb();h.removeAttr("onloaded");Cc(h.unbind(F).removeData().unwrap().attr(c.attr).data(c.data));h.attr($)==P&&h.removeAttr($)},setup:function(){function c(q){return h.trigger("down",[Wa(q).clientX,Wa(q).clientY,q])&&q.give}function d(q,u){return!u||h.trigger("wheel",[u,q])&&q.give}var b= +h.parent().append(za()),i=e(La,k(g.area||b)),p=g.rows>1,m=g.cursor,l=m==rc?Jc:m||Kc;m=m==rc?Lc+A+"!important":s;C(A+x(z),{MozUserSelect:lb,WebkitUserSelect:lb,MozTransform:"translateZ(0)"});h.unbind(jb,ia);i.bind(Mc,c).bind(g.clickfree?Nc:Oc,c).bind(g.wheelable?Pc:null,d).bind(Qc,function(){return false});C(P,{cursor:Va(l)});C(x(Rb),{cursor:"wait"});C(x(mb)+na+x(mb)+" *",{cursor:Va(m||l)},true);if(a(Ya)){C(A+x(z),{width:"100%",height:Sb});k(U).bind(pc,qc)}g.hint&&i.attr("title",g.hint);g.indicator&& +b.append(Ra("x"));p&&g.indicator&&b.append(Ra("y"));g.monitor&&b.append(sc=k(V(ta),{"class":tc}))&&C(A+x(tc),{position:Qa,left:0,top:0})},preload:function(){function c(){var q=l.children(":not([src]):first");return q.attr(ra,q.data(ra))}var d=h.parent(),b=a(aa),i=!b.length,p=n.preload[g.preload]||n.preload[n.def.preload];b=i?[a(Gb)]:p(b.slice(0),g,a);e(da,i?0.5:0);var m=0,l=a(ab).empty();i=[];d.addClass(Rb);e($,a($)||k("<"+$+' type="text/css">'+C.rules.join("\n")+"").prependTo(Tb));e(Na,true); +h.trigger("stop");g.responsive&&Ub();for(h.trigger("resize",true);b.length;){p=n.substitute(g.path+b.shift(),a);k(V(Xa)).data(ra,p).appendTo(l).bind("load error abort",function(q){q.type!="load"&&h.trigger(q.type);return!Ec(d)&&h.trigger("preloaded")&&c()&&false});i.push(p)}setTimeout(function(){for(;++m1||h.css({backgroundImage:Ea(n.substitute(g.path+a(Gb),a))}).attr({src:Va(uc)});a(W)&&h.attr({src:Va(uc)});a(Kb)||e(ma,g.velocity||0);e(Na,false);pa=true},prepare:function(){h.css("display",Ob).parent().one(jb,ia)},opening:function(){if(!g.opening)return h.trigger("openingDone");e(fa,true);e(Vb,!a(va));var c=g.entry||g.speed,d=a(B),b=g.opening;e(B,d-c*b);e(ya,la(b*Y(ga)))},openingDone:function(){function c(b){return h.trigger("orient",[vb(b).alpha, +vb(b).beta,vb(b).gamma,b])&&b.give}e(Sa,false);e(fa,false);var d=nb+x(fa);ha.unbind(d,I.pool[d]);g.orientable&&k(U).bind(Rc,c);if(g.delay>0)Pb=setTimeout(function(){h.trigger("play")},g.delay*1E3);else h.trigger("play")},play:function(c,d){d=d?e(va,d):a(va)*Ha(1,a(M));(c=g.duration)&&e(ib,la(c*Y(ga)));e(M,d<0);d=e(Sa,!!d);e(Vb,!d);Aa()},reach:function(c,d,b){if(d!=a(J)){c=a(O);e(Q,la(d/c));var i=e(bb,a(J));d=e(Ma,d);d=e(cb,n.math.distance(i,d,c));b=H(b||a(va))*Ha(1,d<0);h.trigger("play",b)}},pause:function(){w()}, +stop:function(){var c=e(Vb,true);e(Sa,!c)},down:function(c,d,b,i){function p(l){return h.trigger("pan",[Wa(l).clientX,Wa(l).clientY,l])&&l.give}function m(l){return h.trigger("up",[l])&&l.give}if(!(!g.clickfree&&i&&i.button!==s&&i.button!=Sc))if(g.draggable){e(ea,a(J));c=g.clickfree;e(ma,0);i=c?a(La):oa;ob=pb(a(Ka),d,b);w();kb();G=0;k(zb,oa).addClass(mb);i.bind(Tc+A+Uc,p).bind(Vc+A+Wc,m).bind(c?Xc:Yc,m)}},up:function(){e(ea,false);e(Oa,false);var c=g.throwable,d=H(Ta[0]+Ta[1])/60;N=e(ma,!c?0:c=== +true?d:Ga(c,d))?1:0;w();kb();k(zb,oa).removeClass(mb);(g.clickfree?a(La):oa).unbind(ja)},pan:function(c,d,b,i){if(g.draggable&&Ua){Ua=false;w();c=g.rows;var p=g.orbital,m=!a(Oa)&&c<=1&&!p&&g.scrollable,l={x:d-ob.x,y:b-ob.y},q={x:H(l.x),y:H(l.y)};if(i&&m&&q.x0||q.y>0){i&&(i.give=false);G=ub(q.x,q.y);ob={x:d,y:b};i=a(Ka);m=a(eb);q=a(wa);if(!a(kc)){var u=e(B,vc(q?b-m.y:d-m.x,a(fb),i,a(gb),a(hb),a(xa),q?b-m.y:d-m.x));e(Oa,a(Oa)||a(J)!=a(ea));(l=wc(q?l.y:l.x||0))&&e(M,l< +0)}if(p&&a(Lb)){e(wa,H(b-m.y)>H(d-m.x));m=pb(i,d,b)}if(c>1&&!a(jc)){c=a(Eb);p=a(Jb);l=-p*c;e(ua,n.math.envelope(b-m.y,p,c,l,l+c,-1))}!(u%1)&&!g.loops&&pb(i,d,b)}}},wheel:function(c,d,b){if(d){qb=true;c=la(qa.sqrt(H(d))/2);c=Ha(c,d>0);d=0.0833*a(Ka);pb(d);c&&e(M,c<0);e(ma,0);e(B,vc(c,a(fb),d,a(gb),a(hb),a(xa)));b&&b.preventDefault();b&&(b.give=false);w();h.trigger("up",[b])}},orient:function(c,d){if(!(!Ua||R)){xc=true;c=d/360;fraction=e(B,+(g.stitched||g.cw?1-c:c).toFixed(2));Ua=false}},fractionChange:function(c, +d,b){if(d===s){c=1+rb(b/a(db));d=g.rows>1;b=g.orbital;e(Lb,!!b&&(c<=b||c>=a(sa)-b+2));if(d)c+=(a(Q)-1)*a(O);e(J,c)}},tierChange:function(c,d,b){if(d===s){c=e(Q,S(Wb(b,1,g.rows)));d=a(O);b=a(J)%d||d;e(J,b+c*d-d)}},rowChange:function(c,d,b){d===s&&Xb(ua,s,b,g.rows)},frameChange:function(c,d,b){if(d===s){this.className=this.className.replace(n.re.frame_klass,hc+b);c=a(O);d=g.rows;var i=g.path,p=b%c||c,m=((b-p)/c+1-1)/(d-1),l=a(Q);!d?a(ua):Xb(ua,m,l,d);var q=Xb(B,s,p,c),u=a(sa);if(g.orbital&&a(wa)){b= +g.inversed?u+1-b:b;b+=u}var v=a(W);c=a(aa);if(!c.length||v){p=a(Za);var E=a(D);m=a(L);if(v){b=e($a,S(Wb(q,0,a(Fb)))%v);d=d<=1?0:(m+p)*(d-l);b=[y(-b),y(-d)];c=c.length>1&&c[l-1];d=n.substitute(i+c,a);c&&h.css("backgroundImage").search(d)<0&&h.css({backgroundImage:Ea(d)})}else{i=g.horizontal;l=b%u-1;l=l<0?u-1:l;b=rb((b-0.1)/u);b+=d>1?0:a(M)?0:!g.directional?0:a(Ib);b=b*((i?m:E)+p);d=l*((i?E:m)+p);b=c.length?[0,0]:i?[y(-d),y(-b)]:[y(-b),y(-d)]}h.css({backgroundPosition:b.join(A)})}else{a(Ya)&&Ub();a(da)&& +h.attr({src:$b(n.substitute(i+c[b-1],a))})}}},"frameChange.reach":function(c,d,b){if(!(!a(Ma)||d!==s)){c=n.math.distance(a(bb),b,a(O));if(H(c)>=H(a(cb))){e(J,e(Ma));e(Ma,e(cb,e(bb,0)));h.trigger("stop")}}},"imageChange imagesChange":function(){h.trigger("preload")},"fractionChange.indicator":function(c,d,b){if(g.indicator&&d===s){c=g.indicator;var i=g.orbital;d=i&&a(wa)?a(L):a(D);i=i?a(sa):g.images.length||a(O);i=la(d/i);d-=i;b=S(Wb(b,0,d));b=!g.cw||a(W)?b:d-b;Ra.$x.css(a(wa)?{left:0,top:y(b),bottom:Sb, +width:c,height:i}:{bottom:0,left:y(b),top:Sb,width:i,height:c})}},"tierChange.indicator":function(c,d,b){if(g.rows>1&&g.indicator&&d===s){var i=a(L);c=g.indicator;d=la(i/g.rows);i-=d;b=S(b*i);Ra.$y.css({left:0,top:b,width:c,height:d})}},"setup.annotations":function(){var c=h.parent();k.each(a(Pa),function(d,b){var i=typeof b.node==wb?k(b.node):b.node||{};i=i.jquery?i:k(V(ta),i);i=i.attr({id:d}).addClass(dc);var p=b.image?k(V(Xa),b.image):k(),m=b.link?k(V("a"),b.link).click(function(){h.trigger("up.annotations", +{target:m})}):k();C(Ca(d),{display:lb,position:Qa},true);b.image||b.link&&i.append(m);b.link||b.image&&i.append(p);b.link&&b.image&&i.append(m.append(p));i.appendTo(c)})},"prepare.annotations":function(){k.each(a(Pa),function(c){k(Ca(c)).hide()})},"frameChange.annotations":function(c,d){if(!(!a(da)||d!==s)){var b=a(D),i=a(W),p=a($a);k.each(a(Pa),function(m,l){m=k(Ca(m));var q=l.start||1,u=l.end,v=v||a(J),E=v-1,ba=l.at?l.at[E]=="+":false;E=l.at?E:E-q+1;v=typeof l.x!=tb?l.x:l.x[E];var ca=typeof l.y!= +tb?l.y:l.y[E];l=v!==s&&ca!==s&&(l.at?ba:E>=0&&(!u||E<=u-q));if(i){q=v>i-b&&p>=0&&pi-b)?v:v+i;v=!q?v:v-i;v-=p}if(a(Ya)){q=a(Mb);v=v&&v*q;ca=ca&&ca*q}v={display:l?Ob:lb,left:y(v),top:y(ca)};m.css(v)})}},"up.annotations":function(c,d){if(!(G>10||qb)){c=k(d.target);(c.is("a")?c:c.parents("a")).attr("href")&&(G=10)}},"up.steppable":function(){G||qb||h.trigger(a(eb).x-h.offset().left>0.5*a(D)?"stepRight":"stepLeft")},"stepLeft stepRight":function(){w()},stepLeft:function(){e(M,false);e(B, +a(B)-a(db)*a(xa))},stepRight:function(){e(M,true);e(B,a(B)+a(db)*a(xa))},stepUp:function(){e(Q,a(Q)-1)},stepDown:function(){e(Q,a(Q)+1)},resize:function(c,d){if(!(a(Na)&&!d)){var b=a(W),i=a(Za);c=a(L);var p=!a(aa).length||b,m=g.rows||1;b=a(aa).length?!b?s:y(b)+A+y(c):b&&y(b)+A+y((c+i)*m-i)||y((a(D)+i)*a(sa)-i)+A+y((c+i)*a(Ib)*m*(g.directional?2:1)-i);h.css({height:p?y(c):null,backgroundSize:b||null});d||h.trigger("imagesChange")}},"setup.fu":function(){e(J,g.frame+(a(Q)-1)*a(O));h.trigger("preload")}, +"wheel.fu":function(){qb=false},"clean.fu":function(){h.trigger("teardown")},"loaded.fu":function(){h.trigger("opening")}},pool:{"tick.reel.preload":function(){if(!(!(pa||a(Na))||a(Ja))){var c=a(D),d=Zc(za.$.css(D)),b=a(aa).length||1,i=S(1/b*a(da)*c);za.$.css({width:d+(i-d)/3+1});if(a(da)===b&&d>c-1){pa=false;za.$.fadeOut(300,function(){za.$.css({opacity:1,width:0})})}}},"tick.reel":function(c){if(!a(Ja)){var d=a(ma),b=Y(ga),i=g.monitor;if(!(!n.intense&&$c())){if(N){d=d-a(mc)/b*N;d=e(ma,d>0.1?d:(N= +R=0))}i&&sc.text(a(i));d&&N++;R&&R++;wc(0);Ua=true;if(R&&!d)return T(c);if(a(ea))return T(c,w());if(!(a(ya)>0)){if(!g.loops&&g.rebound){!R&&!(a(B)%1)?Yb++:(Yb=0);Yb>=g.rebound*1E3/b&&e(M,!a(M))}c=a(xa)*Ha(1,a(M));b=a(ib);d=(!a(Sa)||xc||!b?d:H(a(va))+d)/Y(ga);e(B,a(B)-d*c);b=!g.duration?b:b>0&&e(ib,b-1);!b&&a(Sa)&&h.trigger("stop")}}}},"tick.reel.opening":function(){if(a(fa)){var c=(g.entry||g.speed)/Y(ga)*(g.cw?-1:1),d=e(ya,a(ya)-1);e(B,a(B)+c);d||h.trigger("openingDone")}}}},pa=false,T=function(c, +d){return c.stopImmediatePropagation()||d},ia=function(){h.trigger("setup")},R,N=0,Aa=function(){return R=0},w=function(){clearTimeout(Pb);ha.unbind(nb+x(fa),I.pool[nb+x(fa)]);e(ya,0);e(Kb,true);return R=-g.timeout*Y(ga)},G=0,qb=false,xc=false,sc=k(),za=function(){C(A+x(yc),{position:Qa,left:0,bottom:0,height:g.preloader,overflow:Nb,backgroundColor:"#000"});return za.$=k(V(ta),{"class":yc})},Ra=function(c){C(A+x(zc)+x(c),{position:Qa,width:0,height:0,overflow:Nb,backgroundColor:"#000"});return Ra["$"+ +c]=k(V(ta),{"class":zc+A+c})},C=function(c,d,b){function i(p){var m=[];k.each(p,function(l,q){m.push(l.replace(/([A-Z])/g,"-$1").toLowerCase()+":"+y(q)+";")});return"{"+m.join(P)+"}"}b=b?P:a(lc);c=c.replace(/^/,b).replace(na,na+b);return C.rules.push(c+i(d))&&d},$c=function(){var c=a(L),d=a(D),b=h[0].getBoundingClientRect();return b.top<-c||b.left<-d||b.right>d+k(U).width()||b.bottom>c+k(U).height()},Yb=0,ob={x:0,y:0},wc=function(c){return Ta.push(c)&&Ta.shift()&&c},kb=function(){return Ta=[0,0]}, +Ta=kb(),vc=g.graph||n.math[g.loops?"hatch":"envelope"],qc=function(){clearTimeout(Qb);Qb=setTimeout(Ub,n.resize_gauge)},Ub=function(){if(h.width()!=a(D)){var c=a(fc),d=e(Mb,h.width()/c.width);k.each(c,function(b,i){e(b,S(i*d))});h.trigger("resize")}},Pb,Qb,pb=function(c,d,b){var i=e(fb,a(B));e(Jb,a(ua));var p=g.loops;e(gb,p?0:-i*c);e(hb,p?c:c-i*c);return d!==s&&e(eb,{x:d,y:b})||s},Ua=true,Xb=function(c,d,b,i){if(i){var p=a(c)||0;b=d!==s?d:(b-1)/(i-1);b=c!=B?b:Ga(b,0.9999);return d=+H(p-b).toFixed(8)>= ++(1/(i-1)).toFixed(8)?e(c,b):d||p}},oa=ha;try{if(ha[0]!=top.document)oa=ha.add(top.document)}catch(dd){}top===self?k():function(c){k("iframe",oa.last()).each(function(){try{if(k(this).contents().find(Tb).html()==k(Tb).html())return(c=k(this))&&false}catch(d){}});return c}();C.rules=[];I.setup()});sb=sb||function h(){var e=+new Date,a=Y(ga);if(!a)return sb=null;ha.trigger(nb);n.cost=(+new Date+n.cost-e)/2;return sb=setTimeout(h,ub(4,1E3/a-n.cost))}();return k(K)}},unreel:function(){return this.trigger("teardown")}}, +re:{image:/^(.*)\.(jpg|jpeg|png|gif)\??.*$/i,ua:[/(msie|opera|firefox|chrome|safari)[ \/:]([\d.]+)/i,/(webkit)\/([\d.]+)/i,/(mozilla)\/([\d.]+)/i],array:/ *, */,lazy_agent:/\(iphone|ipod|android|fennec|blackberry/i,frame_klass:/frame-\d+/,substitution:/(@([A-Z]))/g,no_match:/^(undefined|)$/,sequence:/(^[^#|]*([#]+)[^#|]*)($|[|]([0-9]+)\.\.([0-9]+))($|[|]([0-9]+)$)/},cdn:"http://code.vostrel.net/",math:{envelope:function(f,j,o,t,r,g){return j+Fa(t,r,-f*g)/o},hatch:function(f,j,o,t,r,g){f=(ft?f-o:f}},preload:{fidelity:function(f,j,o){function t(e,a,I){function pa(G){for(;!(G>=1&&G<=N);)G+=G<1?+N:-N;return h[I+G]||(h[I+G]=!!T.push(G))}if(!e.length)return[];var T=[],ia=4*a,R=j.frame,N=e.length;a=true;for(var Aa=N/ia,w=0;w1;){w=0;ia=T.length;Aa/=2;for(a=!a;w ProdGraphy.com'); + }, + }); + }); + + /** + * 2nd step + * DropZone AJAX -> upload images and insert it's URL into database + */ + + // Disabling autoDiscover, otherwise Dropzone will try to attach twice. + Dropzone.autoDiscover = false; + + //Now we will use jQuery to bind our configuration with the element. + $("#pg360-media-uploader").dropzone({ + + url: pg360Param.upload, + acceptedFiles: 'image/*', + success: function(file, response) { + file.previewElement.classList.add("dz-success"); + file['attachment_id'] = response; // push the id for future reference + var ids = $('#media-ids').val() + ',' + response; + $('#media-ids').val(ids); + }, + error: function(file, response) { + file.previewElement.classList.add("dz-error"); + }, + // update the following section is for removing image from library + addRemoveLinks: true, + thumbnailWidth: 80, + thumbnailHeight: 80, + parallelUploads: 1, + dictDefaultMessage: "Drop files here to upload or click
Arrange Image Files By Name Before Upload
", + + removedfile: function(file) { + var attachment_id = file.attachment_id; + $.ajax({ + type: 'POST', + url: pg360Param.delete, + data: { + media_id: attachment_id, + action: 'pg360_handle_deleted_media', + }, + }); + var _ref; + return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0; + } + }); + + + /** + * 3rd Step + * reel 360 AJAX -> project preview after 360 + */ + $('#next2').on('click', function() { + $.ajax({ + url: pg360Param.pg360Reel, + type: 'POST', + data: { + action: 'pg360_handle_reel', + }, + success: function(response) { + $('#pg360Dz').hide(); + $('#pg360Form').hide(); + window.location.replace('admin.php?page=pg-360-generator/admin/partials/pg360_gallery.php'); + }, + error: function() { + alert('Some thing wrong contact at ProdGraphy.com') + } + }) + }) +}); \ No newline at end of file diff --git a/admin/js/pg360_help.js b/admin/js/pg360_help.js new file mode 100644 index 0000000..c5a442a --- /dev/null +++ b/admin/js/pg360_help.js @@ -0,0 +1,6 @@ +jQuery(document).ready(function($) { + + $(function() { + $("#pg360_tabs").tabs(); + }); +}); \ No newline at end of file diff --git a/admin/js/pg360_setting.js b/admin/js/pg360_setting.js new file mode 100644 index 0000000..d915233 --- /dev/null +++ b/admin/js/pg360_setting.js @@ -0,0 +1,15 @@ +/** + * setting page + */ +jQuery(document).ready(function($) { + $('.pg360_color').wpColorPicker(); + + $(function() { + if ($('#pg360_watermark_chkbox').is(":checked")) { + $("#pg360_watermark").prop('disabled', false); + } else { + $("#pg360_watermark").prop('disabled', true); + }; + }); + +}); \ No newline at end of file diff --git a/admin/js/pg360_shortcode.js b/admin/js/pg360_shortcode.js new file mode 100644 index 0000000..f206648 --- /dev/null +++ b/admin/js/pg360_shortcode.js @@ -0,0 +1,49 @@ +(function($) { + $(function() { + + //Cancel Button Function + $('#pg360Cancel').click(function() { + tb_remove(); + }) + + //Insert Button Function + $('#pg360Insert').click(function() { + + var pg360SelectedProject = $('.pg360_insert_chkbx:checked').map(function() { + return $(this).val(); + }).get(); + + if (pg360SelectedProject == "") {} else { + for (var i = 0; i < pg360SelectedProject.length; i++) { + window.parent.send_to_editor('[prodgraphy-' + pg360SelectedProject[i] + ']'); + } + tb_remove(); + } + }); + + /**----------------------------------------------- + * Edit in Gallery + --------------------------------------------------*/ + $(".pg360_edit").on('click', function() { + + var pg360EditClickedID = $(this).parent('div').prop('id'); + $('div#' + pg360EditClickedID).children('div').toggle(); + + $('#pg360_form' + pg360EditClickedID).on('submit', function() { + + $.ajax({ + url: pg360Project.edit, + type: "post", + action: 'pg360_project_edit', + success: function() { + location.reload(); + }, + error: function() { + alert('Something Wrong!! contact ProdGraphy.com') + }, + + }); + }); + }); + }); +})(jQuery); \ No newline at end of file diff --git a/admin/partials/pg360-admin-display.php b/admin/partials/pg360-admin-display.php new file mode 100644 index 0000000..20e754e --- /dev/null +++ b/admin/partials/pg360-admin-display.php @@ -0,0 +1,16 @@ + + + diff --git a/admin/partials/pg360_gallery.php b/admin/partials/pg360_gallery.php new file mode 100644 index 0000000..3ccc393 --- /dev/null +++ b/admin/partials/pg360_gallery.php @@ -0,0 +1,21 @@ +360° Gallery '; +$pg360_powered='

Powered By ProdGraphy

'; +echo $pg360_gallery_title; +echo $pg360_powered; +echo '

Can adjust almost all options just click Edit Options found under each 360°

' ; +$pg360_genrator=new pg360_generator(); +$pg360_genrator->pg360_postInsert=false; +$pg360_genrator->pg360_generate_code(); \ No newline at end of file diff --git a/admin/partials/pg360_help.php b/admin/partials/pg360_help.php new file mode 100644 index 0000000..16e4495 --- /dev/null +++ b/admin/partials/pg360_help.php @@ -0,0 +1,185 @@ + +

Help

+ +
+ + +
+
    +

    Getting Started

    +

    in this section we discuss how to start use this plugin.

    +
      +
    1. +

      To start build your first interactive 360° ,go to page Create 360° page under 360° Generator main menu ,then type your 360° name (this is the only required field) after that click Next as below screenshot.

      +

      Note : this plugin give you the ability to manipulate many options ,just click + More Options (Discussed in detail in "Discuss + More Options / Edit Options" section

      + +
    2. +
    3. +

      Now drop your files in drop file area or you can click inside this area it will open window to select and upload your files as below screenshots

      + + + + +

      Then click Save To Gallery button

      +

      IMPORTANT NOTE :

      YOU HAVE TO ORDER YOUR IMAGE FILES BY NAME BEFORE UPLOADING

      +
    4. +
    5. +

      You will be redirect automatically to 360° Gallery ,it's time to check your responsive 360° , and adjust it to your favorite view by manipulating options like color filter ,height , width ,cursor shape..., (it was possible to customize from the beginning from the first step)

      +

      What you see in 360° Gallery page is what you will see in your post /page

      + + + +
    6. +
    +

    Insert 360° to Page / Post :

    +

    This plugin provide to user this button just above page / post edit area to ease inserting 360° to your website

    +

    to insert 360° to your page /post click PG Add 360button then select 360° you want to insert ,then click insert and you are done

    + + +

    Discuss + More Options / Edit Options

    +

    +
      +
    1. Image Height % control image height in % of original image height
    2. +
    3. Image Width %control image width in % of original image width
    4. +
    5. Cursor Shape choose from many cursor shape to be display over 360
    6. +
    7. Rotation Speed choose rotation speed from 0 (no rotation) to 1 (max rotation speed)
    8. +
    9. Multi Vertical Layer? choose Yes if you use to display multi layer in vertical direction to be almost 3D, provided that your image set are multi layer in photography
    10. +
    11. Display Hint When Mouse Hover customize what ever hint to be displayed when hover over 360
    12. +
    13. Color Filterchoose from color filters to do color effect over 360
    14. +
    15. Mouse/Touch Interactivecheck if you want your 360° be interactive with user mouse /touch or remove check to be only rotated 360° without any interaction
    16. +
    17. Gyroscope devices compatible when checked your 360° will be gyroscopic device compatible like mobile and tablet
    18. +
    19. Click Free when checked 360° will be interactive with user mouse hover only (no need to click and drag to interact)
    20. +
    21. Display Control Button (Play-Pause-Full Screen) when check display control button under each 360° embedded in your website
    22. +
    23. Only Rotate After Clickwhen checked 360° will download and rotate only after user click
    24. +
    25. Inverse Direction very useful option when you notice that your 360° interact in reverse direction of mouse /touch direction
    26. +
    27. Disable Right Clickwhen check it disable right click menu from show up
    28. +
    + +

    Delete 360

    +

    To Permanently Delete any of 360° go to 360° Gallery and click Permanently Delete under 360° you want to Delete

    + +

    Technical Support / Feedback

    +

    For technical issue reporting or asking for any help you can contact us via :

    +
      +
    1. 360° Generator Support
    2. + +
    3. also you can chat with us via our website ProdGraphy.com
    4. +
    5. Or you can email us Technical.Support@ProdGraphy.com
    6. +
    +

    For feedback you can contact us any way you want , or you can rate our plugin from here

    +
+
+ + +
+
    +
  • What this plugin used for ?

  • +

    360° Generatorplugin used for producing 360° photos from ordinary set of photos

    + +
  • Who can benefit from using this plugin ?

  • +

    What ever your web application need 360° photo,for example :

    +
      +
    1. E-commerce websites .
    2. +
    3. Tourism websites .
    4. +
    5. Real estate websites .
    6. +
    7. Any one looking for responsive 360° .
    8. +
    + +
  • How to make interactive 360° ?

  • +

    Just follow up this simple steps after entering "360° Generator":

    +
      +
    1. From "Create new" page just enter your 360° name then click "NEXT"
    2. +
    3. Just drop your photo ( click to upload ) then BOOM your are there just click " Save to Gallery "
    4. +

      *Note : check awesome options By click "+ More Options" before first step

      +
    + +
  • Image order not right in 360° ?

  • +

    You have to order your image files by name before uploading process

    + +
  • How take photos to use in this plugin

  • +

    please check YouTube channel from Here

    + +

    Technical Support / Feedback

    +

    For technical issue reporting or asking for any help you can contact us via :

    +
      +
    1. 360° Generator Support
    2. + +
    3. also you can chat with us via our website ProdGraphy.com
    4. +
    5. Or you can email us Technical.Support@ProdGraphy.com
    6. +
    +

    For feedback you can contact us any way you want , or you can rate our plugin from here

    +
+ +
+ + + +
+

PG 360° Generator

+

ProdGraphy Solutions for Your Business

+

our solutions are very flexible, we offer not just smart software but our premium packages includes technical support and customizable solutions only for your business ,just let us talk about proper solutions only for you.

+

For more information cotact us ProdGraphy.com

+
+
+

Basic Plan $0

+
    +
  • 360° Generator
  • +
  • Option Fully interactive with mouse / touch screen
  • +
  • 4 Basic Color Filters
  • +
  • 360° Width / Height Full Control
  • +
  • cursor shape Customization
  • +
  • 360° Rotation Speed Control
  • +
  • Option Gyroscope devices compatible (Mobile-Tablets ...)
  • +
  • Option Rotation with mouse hover only
  • +
  • Option Rotation/loading after click
  • +
  • Option Inverse Rotation Direction
  • +
+
+ +
+

Customizable Plan$99

+
    +
  • ProdGraphy flexible enough to Give you the possibility for customize plan ,just contact us lets customize your own plan only for your business needs
  • +
+ +
+
+
+
diff --git a/admin/partials/pg360_new.php b/admin/partials/pg360_new.php new file mode 100644 index 0000000..00174c6 --- /dev/null +++ b/admin/partials/pg360_new.php @@ -0,0 +1,200 @@ +admin_url( 'admin-ajax.php?action=pg360_handle_dropped_media' ), + 'delete'=>admin_url( 'admin-ajax.php?action=pg360_handle_deleted_media' ), + + //for database + 'update'=>admin_url( 'admin-ajax.php?action=pg360_handle_project' ), +); + +//localize script in this file: +wp_localize_script('pg360_handle_media','pg360Param', $pg360Param); + +$pg360_title="Create New 360°"; +?> +

+ + + +
+ +
+ + + +

* Required Fields

+

+ Just in 2 simple clicks you can achieve awesome interactive 360° ,just put new 360° name then press next and upload your photos then boom you there it's your awesome 360°. + You can edit all option later. +

+ +
+
+ + +
+ +
+ +
+
+ + +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ Available only on premium version + + +
+
+ +
+
+ Available only on premium version + + + +
+ +
+ +
+ +
+

Quick Selection Options

+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ Available only on premium version + + +
+ +
+ +
+
+ +
+
+
+
+
+
+ +
+
\ No newline at end of file diff --git a/admin/partials/pg360_setting.php b/admin/partials/pg360_setting.php new file mode 100644 index 0000000..0e489de --- /dev/null +++ b/admin/partials/pg360_setting.php @@ -0,0 +1,33 @@ + +
+

Available only on premium version ProdGraphy.com

+
+
+
+

+ ProdGraphy 360° General Settings +

+
+
+ +
+
diff --git a/images/PG20.png b/images/PG20.png new file mode 100644 index 0000000..6c7464e Binary files /dev/null and b/images/PG20.png differ diff --git a/images/screenshot-1.png b/images/screenshot-1.png new file mode 100644 index 0000000..21b1b63 Binary files /dev/null and b/images/screenshot-1.png differ diff --git a/images/screenshot-2.png b/images/screenshot-2.png new file mode 100644 index 0000000..b25a561 Binary files /dev/null and b/images/screenshot-2.png differ diff --git a/images/screenshot-3.png b/images/screenshot-3.png new file mode 100644 index 0000000..681dc42 Binary files /dev/null and b/images/screenshot-3.png differ diff --git a/images/screenshot-4.png b/images/screenshot-4.png new file mode 100644 index 0000000..a792066 Binary files /dev/null and b/images/screenshot-4.png differ diff --git a/images/screenshot-5.png b/images/screenshot-5.png new file mode 100644 index 0000000..1246fc1 Binary files /dev/null and b/images/screenshot-5.png differ diff --git a/images/screenshot-6.png b/images/screenshot-6.png new file mode 100644 index 0000000..eece1e2 Binary files /dev/null and b/images/screenshot-6.png differ diff --git a/includes/class-pg360-activator.php b/includes/class-pg360-activator.php new file mode 100644 index 0000000..842ee7b --- /dev/null +++ b/includes/class-pg360-activator.php @@ -0,0 +1,95 @@ + + */ +class Pg360_Activator { + + /** + * Short Description. (use period) + * + * Long Description. + * + * @since 1.0.0 + */ + public static function pg360_activate() { + //define database version: + global $pg360_db_version; + $pg360_db_version="1.0"; + + //foreign key for int only + add_option( 'pg360_db_version', $pg360_db_version ); + + //DB + global $wpdb; + $pg360_table1Name = $wpdb->prefix .'pg360_project'; + if($wpdb->get_var("SHOW TABLES LIKE '$pg360_table1Name'") !== $pg360_table1Name) { + + $charset_collate = $wpdb->get_charset_collate();// see how to be truly written + + //Create DB Table to store each project data : + + $pg360_addNew_sql="CREATE TABLE $pg360_table1Name ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `ProjectName` varchar(15) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `ShortCode` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `CreationTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `ProjectWidth` mediumint(8) NOT NULL, + `ProjectHeight` mediumint(8) NOT NULL, + `NoPerLayer` tinyint(3) unsigned NOT NULL, + `NoOfLayer` tinyint(3) unsigned NOT NULL, + `CursorShape` enum('hand','','default','none','alias','col-resize','row-resize') CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `ColorFilter` enum('default','BW','PGfilter1','PGfilter2','PGfilter3') CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `Speed` decimal(2,1) unsigned NOT NULL, + `Hint` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `Interactive` bit(1) NOT NULL, + `Orientable` bit(1) NOT NULL, + `ClickFree` bit(1) NOT NULL, + `CW` bit(1) NOT NULL, + `Shy` bit(1) NOT NULL, + PRIMARY KEY (`ID`), + UNIQUE KEY `projectName` (`projectName`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8"; + + require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); + dbDelta( $pg360_addNew_sql ); + } + //Create DB Table to store images URI W.R.T Project table : + $pg360_table2Name = $wpdb->prefix .'pg360_images'; + if($wpdb->get_var("SHOW TABLES LIKE '$pg360_table2Name'") !== $pg360_table2Name) { + + $pg360_images_sql="CREATE TABLE $pg360_table2Name ( + `ImageID` int(11) NOT NULL AUTO_INCREMENT, + `ProjectID` int(11) NOT NULL, + `ImageURL` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `Width` mediumint(8) NOT NULL, + `Height` mediumint(8) NOT NULL, + `UploadTime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`ImageID`), + KEY `pg360Relations` (`projectID`), + CONSTRAINT `pg360Relations` + FOREIGN KEY (`projectID`) REFERENCES $pg360_table1Name (`ID`) ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=UTF8"; + + require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); + dbDelta( $pg360_images_sql ); + } + } +} \ No newline at end of file diff --git a/includes/class-pg360-deactivator.php b/includes/class-pg360-deactivator.php new file mode 100644 index 0000000..5d3acd6 --- /dev/null +++ b/includes/class-pg360-deactivator.php @@ -0,0 +1,36 @@ + + */ +class Pg360_Deactivator { + + /** + * Short Description. (use period) + * + * Long Description. + * + * @since 1.0.0 + */ + public static function pg360_deactivate() { + delete_option( 'pg360_db_version'); + } + +} diff --git a/includes/class-pg360-generator.php b/includes/class-pg360-generator.php new file mode 100644 index 0000000..e842e7b --- /dev/null +++ b/includes/class-pg360-generator.php @@ -0,0 +1,463 @@ + +
+ admin_url('admin-ajax.php?action=pg360_EditID'), + 'edit' => admin_url('admin-ajax.php?action=pg360_project_edit'), + 'delete' => admin_url('admin-ajax.php?action=pg360_project_delete'), + ); + wp_localize_script('pg360_gallery', 'pg360Project', $pg360Project); + + global $wpdb; + //extract data from DB: + $pg360_table1Name = $wpdb->prefix . 'pg360_project'; + $pg360_table2Name = $wpdb->prefix . 'pg360_images'; + + $pg360_projectNo = $wpdb->query( + "SELECT ID FROM $pg360_table1Name" + );//Number of project to display + + //for loop to get all values in array + for ($i = 0; $i <$pg360_projectNo; $i++) { + + $pg360_ProjectID[$i] = $wpdb->get_var( + "SELECT ID FROM $pg360_table1Name", + 0, + $i + );//get project ID + + $pg360_ProjectImages[$i] = $wpdb->get_results( + "SELECT ImageURL FROM $pg360_table2Name WHERE ProjectID=$pg360_ProjectID[$i] " + );// array contain last project all URI + + if (count($pg360_ProjectImages[$i],0)!==0){ + + $pg360_ProjectName[$i] = $wpdb->get_var( + "SELECT ProjectName FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i] " + );//get Project Name + + $pg360_ProjectWidth[$i] = $wpdb->get_var( + "SELECT ProjectWidth FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i]" );//get Project width + + $pg360_ProjectHeight[$i] = $wpdb->get_var( + "SELECT ProjectHeight FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i]" + );//get Project height + + $pg360_NoOfLayer[$i] = $wpdb->get_var( + "SELECT NoOfLayer FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i]" + );//number of layer + + $pg360_CursorShape[$i] = $wpdb->get_var( + "SELECT CursorShape FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i]" + );//get project CursorShape + + $pg360_Speed[$i] = $wpdb->get_var( + "SELECT Speed FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i]" + );//Project Speed + + $pg360_CW[$i] = $wpdb->get_var( + "SELECT CW FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i]" + );//inverse direction + + $pg360_Hint[$i] = $wpdb->get_var( + "SELECT Hint FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i]" + );//get project Hint + + $pg360_Interactive[$i] = $wpdb->get_var( + "SELECT Interactive FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i]" + );//get project Interactive + + $ImgColorFilter[$i]=$wpdb->get_var( + "SELECT ColorFilter FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i]" + );//get project color filter + + if ($ImgColorFilter[$i]=='BW'){ + $ClassColorFilter[$i]='ClassColorFilter_BW'; + }elseif($ImgColorFilter[$i]=='PGfilter1'){ + $ClassColorFilter[$i]='ClassColorFilter_PGfilter1'; + }elseif($ImgColorFilter[$i]=='PGfilter2'){ + $ClassColorFilter[$i]='ClassColorFilter_PGfilter2'; + }elseif($ImgColorFilter[$i]=='PGfilter3'){ + $ClassColorFilter[$i]='ClassColorFilter_PGfilter3'; + }else{ + $ClassColorFilter[$i]=""; + } + + $pg360_Orientable[$i] = $wpdb->get_var( + "SELECT Orientable FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i]" + );//get project Orientable + + $pg360_ClickFree[$i] = $wpdb->get_var( + "SELECT ClickFree FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i]" + );//get project ClickFree + + $pg360_Shy[$i] = $wpdb->get_var( + "SELECT Shy FROM $pg360_table1Name WHERE ID=$pg360_ProjectID[$i]" + );//Project Shy + + $pg360_ProjectImagesWidth[$i] = $wpdb->get_results( + "SELECT Width FROM $pg360_table2Name WHERE ProjectID=$pg360_ProjectID[$i] " + );// array contain last project all URI + $pg360_ProjectImagesHeight[$i] = $wpdb->get_results( + "SELECT Height FROM $pg360_table2Name WHERE ProjectID=$pg360_ProjectID[$i] " + );// array contain last project all URI + + /*------------------------------------- + * Generate Gallery Page + ----------------------------------------*/ + ?> +
+
+ Error Code PG360-404 :Can not find image to Display' + data-images ='ImageURL . ','; + else + echo $pg360_ProjectImages[$i][$j]->ImageURL; + }; + ?>' + data-frames ='' + data-rows ='1' + data-cw ='' + data-speed ='' + data-cursor ='' + data-shy ='' + data-clickfree ='' + data-suffix ='' + data-draggable ='' + data-orientable ='' + data-preloader ='' + data-hint ='' + > +
+ + Prodgraphy.com'; + }else{ + echo'Powered By Prodgraphy.com'; + } + ?> + +
+
+ + Available only on premium version + + + + + + + +
+
+ +
+ pg360_postInsert == true) { + ?> +
+ + Select + + + +
+ + Edit Options +
+ + +
+ + + + +
+
+ + +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ Available only on premium version + + +
+
+
+
+ Available only on premium version + + + +
+ +
+ +
+ +

Quick Selection Options

+ +
+ + +
+ +
+ + '; + }else{ + echo ''; + } + ?> +
+ +
+ + '; + }else{ + echo ''; + } + ?> +
+ +
+ + '; + }else{ + echo ''; + } + ?> +
+ +
+ Available only on premium version + + +
+ +
+ + '; + }else{ + echo ''; + } + ?> +
+ +
+ + '; + }else{ + echo ''; + } + ?> +
+ +
+ Available only on premium version + + + +
+ +
+ + + +
+ + Permanently Delete +
+ +
+ + query($wpdb->prepare("DELETE FROM $pg360_table1Name WHERE `ID` =%s",$pg360_ProjectID[$i])); + $pg360_projectNo=$pg360_projectNo-1; + } + }; + } +}; diff --git a/includes/class-pg360-handle-media.php b/includes/class-pg360-handle-media.php new file mode 100644 index 0000000..5a65311 --- /dev/null +++ b/includes/class-pg360-handle-media.php @@ -0,0 +1,220 @@ +prefix .'pg360_project'; + $pg360_table2Name = $wpdb->prefix .'pg360_images'; + + //Check if project name exist or not: + $pg360_name="'".sanitize_text_field($_POST['ProjectName'])."'"; + $pn_query=$wpdb->query( + "SELECT * FROM $pg360_table1Name WHERE ProjectName=$pg360_name" + ); + + if ($pn_query){ + $pg360_LastProjectID=$wpdb->get_var( + "SELECT ID FROM $pg360_table1Name WHERE ID = (SELECT MAX(ID) FROM $pg360_table1Name)" + );//variable contain last constructed project ID + + $ProjectName=sanitize_text_field($_POST['ProjectName']).$pg360_LastProjectID; + }else{ + //collect values of input fields + $ProjectName=sanitize_text_field($_POST['ProjectName']); + } + if (isset($_POST['Height'])): + $Height=$_POST['Height']; + endif; + if (isset($_POST['Width'])): + $Width=$_POST['Width']; + endif; + + $NoOfLayer=1; + + if (isset($_POST['Speed'])): + $Speed=$_POST['Speed']; + endif; + + if(isset($_POST['CursorShape'])): + $CursorShape=$_POST['CursorShape']; + endif; + if(isset($_POST['ColorFilter'])): + $ColorFilter=$_POST['ColorFilter']; + endif; + + if (isset($_POST['Draggable'])){ + $Interactive=true; + }else{ + $Interactive=false; + } + $Hint="Powered by ProdGraphy.com"; + if (isset($_POST['Orientable'])){ + $Orientable=true; + }else{ + $Orientable=false; + } + + if (isset($_POST['ClickFree'])){ + $ClickFree=true; + }else{ + $ClickFree=false; + } + + if (isset($_POST['CW'])){ + $CW=true; + }else{ + $CW=false; + } + + if (isset($_POST['Shy'])){ + $Shy=true; + }else{ + $Shy=false; + } + + $wpdb->insert( $pg360_table1Name, + array( + 'ProjectName' => $ProjectName, + 'ProjectWidth' => $Width, + 'ProjectHeight' => $Height, + 'ShortCode' => ('prodgraphy-'.$ProjectName), + 'CreationTime' => current_time('mysql'), + 'NoOfLayer' => $NoOfLayer, + 'Speed' => $Speed, + 'CursorShape' => $CursorShape, + 'ColorFilter' => $ColorFilter, + 'Interactive' => $Interactive, + 'Orientable' => $Orientable, + 'ClickFree' => $ClickFree, + 'CW' => $CW, + 'Shy' => $Shy, + 'Hint' => $Hint, + ) + ); + } + wp_die(); + } + + //The following function will take care of the uploading the image and saving as an attachment in the WordPress library. + + public function pg360_handle_dropped_media() { + + status_header(200); //Set HTTP status header. + global $wpdb;//enter DB + $pg360_table2Name = $wpdb->prefix .'pg360_images'; + $pg360_table1Name = $wpdb->prefix .'pg360_project'; + + $upload_dir = wp_upload_dir(); + $upload_url = $upload_dir['url'] . '/'; + $upload_base=$upload_dir['basedir'] . '/'; + $upload_base_url=content_url($upload_base); + $num_files = count($_FILES['file']['tmp_name']); + + $newupload = 0; + + if (!empty($_FILES) ) { + $files = $_FILES; + foreach($files as $file) { + $newfile = array ( + 'name' => $file['name'], + 'type' => $file['type'], + 'tmp_name' => $file['tmp_name'], + 'error' => $file['error'], + 'size' => $file['size'], + ); + + $_FILES = array('upload'=>$newfile); + foreach($_FILES as $filepg360 => $array) { + $newupload = media_handle_upload( $filepg360, 0 ); + + if($newupload){ + + $req= $wpdb->get_var( + "SELECT ID FROM $pg360_table1Name WHERE ID = ( SELECT MAX(ID) FROM $pg360_table1Name)" + );// variable contain project ID to make relation with project images + + $pg360_guid= $wpdb->get_var( + "SELECT guid FROM wp_posts WHERE ID =$newupload" + );// variable contain guid from wp_posts table + + $fileinfo=getimagesize($pg360_guid);//get image width-height and type + + $wpdb->insert( + $pg360_table2Name, + array( + 'ProjectID'=>$req, + 'ImageURL' =>$pg360_guid, + 'Width'=>$fileinfo[0], + 'Height'=>$fileinfo[1], + ) + ); + + } + + } + } + } + /** + * number of image per 360 update + */ + $NOL= $wpdb->get_var( + "SELECT NoOfLayer FROM $pg360_table1Name WHERE ID = ( SELECT MAX(ID) FROM $pg360_table1Name)" + );// variable contain project number of vertical layer + $NP360= count($wpdb->get_results( + "SELECT ProjectID FROM $pg360_table2Name WHERE projectID = ( SELECT MAX(ID) FROM $pg360_table1Name)" + ),0);// variable contain image count for current project + + //Update no of image per 360 + $wpdb->update( + $pg360_table1Name, + array( + 'NoPerLayer'=>($NP360/$NOL) + ), + array( + 'ID'=>$req + ) + ); + + wp_die(); + } + + public function pg360_handle_deleted_media(){ + + if( isset($_REQUEST['media_id']) ){ + $post_id = absint( $_REQUEST['media_id'] ); + + global $wpdb;//enter DB + $pg360_table2Name = $wpdb->prefix .'pg360_images'; + + $post_URL=$wpdb->get_var( + "SELECT guid FROM 'wp_posts' WHERE ID = $post_id" + ); + + $wpdb->query( + 'DELETE FROM $pg360_table2Name WHERE imageURI=$post_URL' + ); + + $status = wp_delete_attachment($post_id, true); + + if( $status ) + echo json_encode(array('status' => 'OK')); + else + echo json_encode(array('status' => 'FAILED')); + } + wp_die(); + } +} \ No newline at end of file diff --git a/includes/class-pg360-i18n.php b/includes/class-pg360-i18n.php new file mode 100644 index 0000000..3e16a65 --- /dev/null +++ b/includes/class-pg360-i18n.php @@ -0,0 +1,47 @@ + + */ +class Pg360_i18n { + + + /** + * Load the plugin text domain for translation. + * + * @since 1.0.0 + */ + public function load_plugin_textdomain() { + + load_plugin_textdomain( + 'pg360', + false, + dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/' + ); + + } + + + +} diff --git a/includes/class-pg360-loader.php b/includes/class-pg360-loader.php new file mode 100644 index 0000000..d694f08 --- /dev/null +++ b/includes/class-pg360-loader.php @@ -0,0 +1,129 @@ + + */ +class Pg360_Loader { + + /** + * The array of actions registered with WordPress. + * + * @since 1.0.0 + * @access protected + * @var array $actions The actions registered with WordPress to fire when the plugin loads. + */ + protected $pg360_actions; + + /** + * The array of filters registered with WordPress. + * + * @since 1.0.0 + * @access protected + * @var array $filters The filters registered with WordPress to fire when the plugin loads. + */ + protected $pg360_filters; + + /** + * Initialize the collections used to maintain the actions and filters. + * + * @since 1.0.0 + */ + public function __construct() { + + $this->pg360_actions = array(); + $this->pg360_filters = array(); + + } + + /** + * Add a new action to the collection to be registered with WordPress. + * + * @since 1.0.0 + * @param string $hook The name of the WordPress action that is being registered. + * @param object $component A reference to the instance of the object on which the action is defined. + * @param string $callback The name of the function definition on the $component. + * @param int $priority Optional. The priority at which the function should be fired. Default is 10. + * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1. + */ + public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { + $this->pg360_actions = $this->add( $this->pg360_actions, $hook, $component, $callback, $priority, $accepted_args ); + } + + /** + * Add a new filter to the collection to be registered with WordPress. + * + * @since 1.0.0 + * @param string $hook The name of the WordPress filter that is being registered. + * @param object $component A reference to the instance of the object on which the filter is defined. + * @param string $callback The name of the function definition on the $component. + * @param int $priority Optional. The priority at which the function should be fired. Default is 10. + * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1 + */ + public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { + $this->pg360_filters = $this->add( $this->pg360_filters, $hook, $component, $callback, $priority, $accepted_args ); + } + + /** + * A utility function that is used to register the actions and hooks into a single + * collection. + * + * @since 1.0.0 + * @access private + * @param array $hooks The collection of hooks that is being registered (that is, actions or filters). + * @param string $hook The name of the WordPress filter that is being registered. + * @param object $component A reference to the instance of the object on which the filter is defined. + * @param string $callback The name of the function definition on the $component. + * @param int $priority The priority at which the function should be fired. + * @param int $accepted_args The number of arguments that should be passed to the $callback. + * @return array The collection of actions and filters registered with WordPress. + */ + private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) { + + $hooks[] = array( + 'hook' => $hook, + 'component' => $component, + 'callback' => $callback, + 'priority' => $priority, + 'accepted_args' => $accepted_args + ); + + return $hooks; + + } + + /** + * Register the filters and actions with WordPress. + * + * @since 1.0.0 + */ + public function run() { + + foreach ( $this->pg360_filters as $hook ) { + add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); + } + + foreach ( $this->pg360_actions as $hook ) { + add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); + } + + } + +} diff --git a/includes/class-pg360-project-edit-delete.php b/includes/class-pg360-project-edit-delete.php new file mode 100644 index 0000000..f9aa378 --- /dev/null +++ b/includes/class-pg360-project-edit-delete.php @@ -0,0 +1,163 @@ +prefix .'pg360_project'; + + /** + * collect Edited values: + */ + + if (isset($_POST['ProjectName'])){ + + //Check if project name exist or not: + $pg360_name="'".sanitize_text_field($_POST['ProjectName'])."'"; + + $pn_query=$wpdb->query( + "SELECT * FROM $pg360_table1Name WHERE ProjectName=$pg360_name AND ID <> $pg360_projectID_toEdit" + ); + + if ($pn_query){ + $ProjectName=sanitize_text_field($_POST['ProjectName'].$pg360_projectID_toEdit); + }else{ + $ProjectName=sanitize_text_field($_POST['ProjectName']); + } + } + if (isset($_POST['Width'])): + $Width=$_POST['Width']; + endif; + + if (isset($_POST['Height'])): + $Height=$_POST['Height']; + endif; + + + if (isset($_POST['NoOfLayer'])): + $NoOfLayer=$_POST['NoOfLayer']; + endif; + + if (isset($_POST['Speed'])): + $Speed=$_POST['Speed']; + endif; + + if(isset($_POST['CursorShape'])): + $CursorShape=$_POST['CursorShape']; + endif; + + if(isset($_POST['ColorFilter'])): + $ColorFilter=$_POST['ColorFilter']; + endif; + + if (isset($_POST['Draggable'])){ + $Interactive=true; + }else{ + $Interactive=false; + } + + if (isset($_POST['Orientable'])){ + $Orientable=true; + }else{ + $Orientable=false; + } + + if (isset($_POST['ClickFree'])){ + $ClickFree=true; + }else{ + $ClickFree=false; + } + + if (isset($_POST['CW'])){ + $CW=true; + }else{ + $CW=false; + } + + if (isset($_POST['Shy'])){ + $Shy=true; + }else{ + $Shy=false; + } + + if (isset($_POST['Hint'])){ + $Hint=$_POST['HintInput']; + }else{ + $Hint="Powered by ProdGraphy"; + } + $data=array( + 'ProjectName' => $ProjectName, + 'ShortCode' => ('prodgraphy-'.$ProjectName), + 'CreationTime' => current_time('mysql'), + 'ProjectWidth' => $Width, + 'ProjectHeight' => $Height, + 'NoOfLayer' => $NoOfLayer, + 'CursorShape' => $CursorShape, + 'ColorFilter' => $ColorFilter, + 'Speed' => $Speed, + 'Hint' => $Hint, + 'Interactive' => $Interactive, + 'Orientable' => $Orientable, + 'ClickFree' => $ClickFree, + 'CW' => $CW, + 'Shy' => $Shy, + ); + $data=stripslashes_deep($data); + + $where=array( + 'ID'=>$pg360_projectID_toEdit, + ); + + $updated=$wpdb->update($pg360_table1Name,$data,$where); + } + wp_die(); + } + + /** + * Delete 360 + */ + public function pg360_project_delete(){ + + if (isset($_POST['pg360DelClickedID'])) { + $pg360_projectID_toDel=$_POST['pg360DelClickedID']; + + global $wpdb; + $pg360_table1Name = $wpdb->prefix .'pg360_project'; + $pg360_table2Name = $wpdb->prefix .'pg360_images'; + + $pg360_ProjectImages=$wpdb->get_results( + "SELECT ImageURL FROM $pg360_table2Name WHERE ProjectID=$pg360_projectID_toDel " + );// array contain last project all URI + for ($i=0; $i < count($pg360_ProjectImages,0); $i++) { + $img_guid="'".$pg360_ProjectImages[$i]->ImageURL."'"; + $att_ID= $wpdb->get_var( + "SELECT ID FROM wp_posts WHERE guid=$img_guid" + ); + wp_delete_attachment( $att_ID, true ); + } + $wpdb->query( + "DELETE FROM $pg360_table1Name WHERE `ID` = $pg360_projectID_toDel" + ); + } + } + +} diff --git a/includes/class-pg360-shortcode-button.php b/includes/class-pg360-shortcode-button.php new file mode 100644 index 0000000..afc692e --- /dev/null +++ b/includes/class-pg360-shortcode-button.php @@ -0,0 +1,255 @@ +prefix .'pg360_project'; + $pg360_table2Name = $wpdb->prefix .'pg360_images'; + + //check table exist (to prevent activate plugin error) + if($wpdb->get_var("SHOW TABLES LIKE '$pg360_table1Name'") == $pg360_table1Name) { + + $this->pg360_ShortCodes=$wpdb->get_results( + "SELECT ShortCode FROM $pg360_table1Name" + );// array contain short codes + + for ($i=0; $i pg360_ShortCodes,0) ; $i++) { + + $this->pg360_ShortCode=$this->pg360_ShortCodes[$i]->ShortCode; + add_shortcode($this->pg360_ShortCode,array($this,'pg360_shortcode_generator')); + }; + } + } + + /** + * Short Code Generator + * this function to return what shorcode represent + */ + public function pg360_shortcode_generator($atts,$content=NULL,$tag){ + + $tag="'".$tag."'"; + global $wpdb; + + /** + * extract data from DB: + */ + $pg360_table1Name = $wpdb->prefix .'pg360_project'; + + $pg360_ProjectName=$wpdb->get_var( + "SELECT ProjectName FROM $pg360_table1Name WHERE ShortCode=$tag" + );//Project name + + $pg360_ProjectWidth = $wpdb->get_var( + "SELECT ProjectWidth FROM $pg360_table1Name WHERE ShortCode=$tag" + );//get Project width + + $pg360_ProjectHeight = $wpdb->get_var( + "SELECT ProjectHeight FROM $pg360_table1Name WHERE ShortCode=$tag" + );//get Project height + + $pg360_NoOfLayer=1; + + $pg360_CursorShape=$wpdb->get_var( + "SELECT CursorShape FROM $pg360_table1Name WHERE ShortCode=$tag" + );//get project CursorShape + + $pg360_Speed=$wpdb->get_var( + "SELECT Speed FROM $pg360_table1Name WHERE ShortCode=$tag" + );//Project Speed + + $pg360_CW=$wpdb->get_var( + "SELECT CW FROM $pg360_table1Name WHERE ShortCode=$tag" + );//inverse direction + + $pg360_Preloader=1; + + $pg360_Hint=$wpdb->get_var( + "SELECT Hint FROM $pg360_table1Name WHERE ShortCode=$tag" + );//get project Hint + + $pg360_Interactive=$wpdb->get_var( + "SELECT Interactive FROM $pg360_table1Name WHERE ShortCode=$tag" + );//get project Interactive + + $pg360_Orientable=$wpdb->get_var( + "SELECT Orientable FROM $pg360_table1Name WHERE ShortCode=$tag" + );//get project Orientable + + $pg360_ClickFree=$wpdb->get_var( + "SELECT ClickFree FROM $pg360_table1Name WHERE ShortCode=$tag" + );//get project ClickFree + + $pg360_Shy=$wpdb->get_var( + "SELECT Shy FROM $pg360_table1Name WHERE ShortCode=$tag" + );//Project Shy + $pg360_ProjectID=$wpdb->get_var( + "SELECT ID FROM $pg360_table1Name WHERE ShortCode=$tag" + );//Project id + + $ImgColorFilter=$wpdb->get_var( + "SELECT ColorFilter FROM $pg360_table1Name WHERE ShortCode=$tag" + );//get project color filter + + if ($ImgColorFilter=='BW'){ + $ClassColorFilter='ClassColorFilter_BW'; + }elseif($ImgColorFilter=='PGfilter1'){ + $ClassColorFilter='ClassColorFilter_PGfilter1'; + }elseif($ImgColorFilter=='PGfilter2'){ + $ClassColorFilter='ClassColorFilter_PGfilter2'; + }elseif($ImgColorFilter=='PGfilter3'){ + $ClassColorFilter='ClassColorFilter_PGfilter3'; + }else{ + $ClassColorFilter=""; + } + + /** + * From Image Table: + */ + + $pg360_table2Name = $wpdb->prefix .'pg360_images'; + + $pg360_ProjectImages=$wpdb->get_results( + "SELECT ImageURL FROM $pg360_table2Name WHERE ProjectID=$pg360_ProjectID " + );// array contain last project all URI + + $pg360_ProjectImagesWidth=$wpdb->get_results( + "SELECT Width FROM $pg360_table2Name WHERE ProjectID=$pg360_ProjectID " + );// array contain last project all URI + + $pg360_ProjectImagesHeight=$wpdb->get_results( + "SELECT Height FROM $pg360_table2Name WHERE ProjectID=$pg360_ProjectID " + );// array contain last project all URI + + + /** + * Returned HTML : + */ + + $content.= '
'; + $content.='
'; + $content.= 'Width.'"'; + $content.= 'height="'.$pg360_ProjectHeight/100*$pg360_ProjectImagesHeight[0]->Height.'"'; + $content.= 'alt="Error Code PG360-404 :Can not find image to Display"'; + $content.= "class='reel ". $ClassColorFilter."'"; + $content.= "id='".'pg360_'. $pg360_ProjectName.$pg360_ProjectID."'";//to disable right click with + $content.= "data-images='"; + for ($j=0; $j < count($pg360_ProjectImages,0) ; $j++) { + if ($j<(count($pg360_ProjectImages,0)-1)) + $content.= $pg360_ProjectImages[$j]->ImageURL.','; + else + $content.= $pg360_ProjectImages[$j]->ImageURL."'"; + }; + $content.= "data-frames='". (count($pg360_ProjectImages,0)/$pg360_NoOfLayer)."'"; + $content.= "data-rows='".($pg360_NoOfLayer)."'"; + $content.= "data-cw='".$pg360_CW."'"; + $content.= "data-speed='".($pg360_Speed)."'" ; + $content.= "data-cursor='".$pg360_CursorShape."'"; + $content.= "data-shy='" .$pg360_Shy."'"; + $content.= "data-clickfree='".$pg360_ClickFree."'"; + $content.= "data-suffix=' '"; + $content.= "data-draggable='". $pg360_Interactive."'"; + $content.= "data-orientable='".$pg360_Orientable."'"; + $content.= "data-preloader='".$pg360_Preloader."'"; + $content.= "data-hint='".$pg360_Hint."'"; + $content.= "data-responsive=false"; + $content.= ">"; + $content.= "
"; + $content.=""; + if (get_option( 'pg360_watermark' )==''){ + $content.="Powered By ProdGraphy.com"; + }else{ + $content.= "Powered By ProdGraphy.com"; + } + $content.=""; + $content.="
";//wtr mrk + $content.= "
"; + $content.= "
";//pg360_pack + + return ($content); + } + + //Use action media_buttons + public function pg360_button() { + ?> + + + + PG Add 360° + + pg360_inside_thickbox(); + } + + public function pg360_inside_thickbox(){ + global $wpdb; + $pg360_table1Name = $wpdb->prefix .'pg360_project'; + $pg360_table2Name = $wpdb->prefix .'pg360_images'; + + $pg360_ProjectNames=$wpdb->get_results( + "SELECT ProjectName FROM $pg360_table1Name" + );// array contain project name + + for ($i=0; $i get_var( + "SELECT ProjectName FROM $pg360_table1Name", + 0, + $i + ); + if (isset($_POST[$pg360_ProjectName[$i]])){ + echo $pg360_ProjectName[$i]; + } + }; + ?> + + + + + */ +class Pg360 { + + /** + * The loader that's responsible for maintaining and registering all hooks that power + * the plugin. + * + * @since 1.0.0 + * @access protected + * @var Pg360_Loader $loader Maintains and registers all hooks for the plugin. + */ + protected $pg360_loader; + + /** + * The unique identifier of this plugin. + * + * @since 1.0.0 + * @access protected + * @var string $plugin_name The string used to uniquely identify this plugin. + */ + protected $pg360_generator; + + /** + * The current version of the plugin. + * + * @since 1.0.0 + * @access protected + * @var string $version The current version of the plugin. + */ + protected $pg360_generator_version; + + /** + * Define the core functionality of the plugin. + * + * Set the plugin name and the plugin version that can be used throughout the plugin. + * Load the dependencies, define the locale, and set the hooks for the admin area and + * the public-facing side of the site. + * + * @since 1.0.0 + */ + public function __construct() { + if ( defined( 'PG_360_GENERATOR_VERSION' ) ) { + $this->pg360_generator_version = PG_360_GENERATOR_VERSION; + } else { + $this->pg360_generator_version = '1.1.0'; + } + $this->pg360_generator = 'pg360'; + + $this->pg360_load_dependencies(); + $this->pg360_set_locale(); + $this->pg360_define_admin_hooks(); + $this->pg360_define_public_hooks(); + + } + + /** + * Load the required dependencies for this plugin. + * + * Include the following files that make up the plugin: + * + * - Pg360_Loader. Orchestrates the hooks of the plugin. + * - Pg360_i18n. Defines internationalization functionality. + * - Pg360_Admin. Defines all hooks for the admin area. + * - Pg360_Public. Defines all hooks for the public side of the site. + * + * Create an instance of the loader which will be used to register the hooks + * with WordPress. + * + * @since 1.0.0 + * @access private + */ + private function pg360_load_dependencies() { + + /** + * The class responsible for orchestrating the actions and filters of the + * core plugin. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-pg360-loader.php'; + + /** + * The class responsible for defining internationalization functionality + * of the plugin. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-pg360-i18n.php'; + + /** + * The class responsible for defining all actions that occur in the admin area. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-pg360-admin.php'; + + /** + * The class responsible for defining all actions that occur in the public-facing + * side of the site. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-pg360-public.php'; + + /** + * The class responsible for handling dropped media,handle DB,collect data and generate 360 + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-pg360-handle-media.php'; + + /** + * The class responsible for media button and generate shortCode + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-pg360-shortcode-button.php'; + + /* + * This class handle Edit/Delete Project in Gallery + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-pg360-project-edit-delete.php'; + + /* + * This class responsible about generate 360 code + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-pg360-generator.php'; + + + $this->pg360_loader = new Pg360_Loader(); + + } + + /** + * Define the locale for this plugin for internationalization. + * + * Uses the Pg360_i18n class in order to set the domain and to register the hook + * with WordPress. + * + * @since 1.0.0 + * @access private + */ + private function pg360_set_locale() { + + $pg360_i18n = new Pg360_i18n(); + + $this->pg360_loader->add_action( 'plugins_loaded', $pg360_i18n, 'load_plugin_textdomain' ); + + } + + /** + * Register all of the hooks related to the admin area functionality + * of the plugin. + * + * @since 1.0.0 + * @access private + */ + private function pg360_define_admin_hooks() { + + $pg360_admin = new Pg360_Admin( $this->get_pg360_generator(), $this->get_pg360_generator_version() ); + $pg360_handlemedia = new pg360_handle_media($this->get_pg360_generator(), $this->get_pg360_generator_version()); + $pg360ProjectED=new pg360_project_edit_delete($this->get_pg360_generator(), $this->get_pg360_generator_version()); + $pg360_button_shortcode=new pg360_gallery_shortcode_button($this->get_pg360_generator(), $this->get_pg360_generator_version()); + + $this->pg360_loader->add_action( 'admin_enqueue_scripts', $pg360_admin , 'pg360_enqueue_styles' ); + $this->pg360_loader->add_action( 'admin_enqueue_scripts', $pg360_admin , 'pg360_enqueue_scripts' ); + + //Admin Menu + $this->pg360_loader->add_action( 'admin_menu', $pg360_admin , 'pg360_menu' ); + + //setting + $this->pg360_loader->add_action( 'admin_init',$pg360_admin , 'pg360_main_setting' ); + + //Dropzone Work + $this->pg360_loader->add_action( 'wp_ajax_pg360_handle_dropped_media',$pg360_handlemedia,'pg360_handle_dropped_media' ); + $this->pg360_loader->add_action( 'admin_post_pg360_handle_deleted_media',$pg360_handlemedia, 'pg360_handle_deleted_media'); + + //DB Work + $this->pg360_loader->add_action( 'wp_ajax_pg360_handle_project',$pg360_handlemedia,'pg360_handle_project'); + $this->pg360_loader->add_action( 'wp_ajax_pg360_delete_project',$pg360_handlemedia, 'pg360_delete_project'); + + //reel jQuery + $this->pg360_loader->add_action( 'wp_ajax_pg360_handle_reel',$pg360_handlemedia,'pg360_handle_reel'); + + //gallery edit/delete + $this->pg360_loader->add_action( 'wp_ajax_pg360_pass_id',$pg360ProjectED,'pg360_pass_id'); + $this->pg360_loader->add_action( 'wp_ajax_pg360_project_edit',$pg360ProjectED,'pg360_project_edit'); + $this->pg360_loader->add_action( 'wp_ajax_pg360_project_delete',$pg360ProjectED, 'pg360_project_delete'); + + //media button + $this->pg360_loader->add_action('media_buttons',$pg360_button_shortcode,'pg360_button',11); + $this->pg360_loader->add_action('wp_enqueue_media',$pg360_button_shortcode,'pg360_enqueue_shortcode_scripts'); + + //silence migrate Jquery + add_action( 'wp_default_scripts', function( $scripts ) { + if ( ! empty( $scripts->registered['jquery'] ) ) { + $scripts->registered['jquery']->deps = array_diff( $scripts->registered['jquery']->deps, array( 'jquery-migrate' ) ); + } + } ); + + } + + /** + * Register all of the hooks related to the public-facing functionality + * of the plugin. + * + * @since 1.0.0 + * @access private + */ + private function pg360_define_public_hooks() { + + $pg360_public = new Pg360_Public( $this->get_pg360_generator(), $this->get_pg360_generator_version() ); + + $this->pg360_loader->add_action( 'wp_enqueue_scripts', $pg360_public, 'pg360_enqueue_styles' ); + $this->pg360_loader->add_action( 'wp_enqueue_scripts', $pg360_public, 'pg360_enqueue_scripts' ); + + } + + /** + * Run the loader to execute all of the hooks with WordPress. + * + * @since 1.0.0 + */ + public function run() { + $this->pg360_loader->run(); + } + + /** + * The name of the plugin used to uniquely identify it within the context of + * WordPress and to define internationalization functionality. + * + * @since 1.0.0 + * @return string The name of the plugin. + */ + public function get_pg360_generator() { + return $this->pg360_generator; + } + + /** + * The reference to the class that orchestrates the hooks with the plugin. + * + * @since 1.0.0 + * @return Pg360_Loader Orchestrates the hooks of the plugin. + */ + public function get_pg360_loader() { + return $this->pg360_loader; + } + + /** + * Retrieve the version number of the plugin. + * + * @since 1.0.0 + * @return string The version number of the plugin. + */ + public function get_pg360_generator_version() { + return $this->pg360_generator_version; + } + +} diff --git a/includes/index.php b/includes/index.php new file mode 100644 index 0000000..e71af0e --- /dev/null +++ b/includes/index.php @@ -0,0 +1 @@ +run(); + +} +run_pg360(); diff --git a/pg360_LICENSE.txt b/pg360_LICENSE.txt new file mode 100644 index 0000000..ecbc059 --- /dev/null +++ b/pg360_LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. \ No newline at end of file diff --git a/public/class-pg360-public.php b/public/class-pg360-public.php new file mode 100644 index 0000000..f521613 --- /dev/null +++ b/public/class-pg360-public.php @@ -0,0 +1,81 @@ + + */ +class Pg360_Public { + + /** + * The ID of this plugin. + * + * @since 1.0.0 + * @access private + * @var string The ID of this plugin. + */ + private $pg360_generator; + + /** + * The version of this plugin. + * + * @since 1.0.0 + * @access private + * @var string $version The current version of this plugin. + */ + private $pg360_generator_version; + + /** + * Initialize the class and set its properties. + * + * @since 1.0.0 + * @param string The name of the plugin. + * @param string The version of this plugin. + */ + public function __construct( $pg360_generator, $pg360_generator_version ) { + + $this->pg360_generator = $pg360_generator; + $this->pg360_generator_version = $pg360_generator_version; + + } + + /** + * Register the stylesheets for the public-facing side of the site. + * + * @since 1.1.0 + */ + public function pg360_enqueue_styles() { + + wp_enqueue_style( $this->pg360_generator, plugin_dir_url( __FILE__ ) . 'css/pg360-public.css', array(), $this->pg360_generator_version, 'all' ); + + } + + /** + * Register the JavaScript for the public-facing side of the site. + * + * @since 1.0.0 + */ + public function pg360_enqueue_scripts() { + + wp_enqueue_script( $this->pg360_generator, plugin_dir_url( __FILE__ ) . 'js/pg360-public.js', array( 'jquery' ), $this->pg360_generator_version, true ); + + wp_enqueue_script( 'pg360_reel', plugins_url('pg-360-generator/admin/js/jquery.reel-min.js'), array('jquery'),'' ,true ); + + } + +} diff --git a/public/css/pg360-public.css b/public/css/pg360-public.css new file mode 100644 index 0000000..035f39f --- /dev/null +++ b/public/css/pg360-public.css @@ -0,0 +1,147 @@ +/** + * All of the CSS for your public-facing functionality should be + * included in this file. + */ + +.ClassColorFilter_BW { + filter: grayscale(1); + -webkit-filter: grayscale(1); + -moz-filter: grayscale(1); +} + +.ClassColorFilter_PGfilter1 { + position: relative; + -webkit-filter: contrast(.9) sepia(.2); + filter: contrast(.9) sepia(.2) +} + +.ClassColorFilter_PGfilter1 img { + z-index: 1 +} + + +/* .ClassColorFilter_PGfilter1:before { + z-index: 2 +} + +.ClassColorFilter_PGfilter1:after { + z-index: 3 +} */ + +.ClassColorFilter_PGfilter1::after { + background: -webkit-radial-gradient(circle, #d0ba8e 20%, #360309 85%, #1d0210 100%); + background: radial-gradient(circle, #d0ba8e 20%, #360309 85%, #1d0210 100%); + mix-blend-mode: overlay +} + +.ClassColorFilter_PGfilter2 { + position: relative; + -webkit-filter: contrast(1.1) brightness(1.1) saturate(1.3); + filter: contrast(1.1) brightness(1.1) saturate(1.3) +} + +.ClassColorFilter_PGfilter2 img { + width: 100%; + z-index: 1 +} + +.ClassColorFilter_PGfilter2:before { + z-index: 2 +} + +.ClassColorFilter_PGfilter2:after { + z-index: 3; + background: rgba(243, 106, 188, .3); + mix-blend-mode: screen +} + +.ClassColorFilter_PGfilter3 { + position: relative; + -webkit-filter: hue-rotate(-20deg) contrast(.9) saturate(.85) brightness(1.2); + filter: hue-rotate(-20deg) contrast(.9) saturate(.85) brightness(1.2) +} + +.ClassColorFilter_PGfilter3:after, +.ClassColorFilter_PGfilter3:before { + display: block; + height: 100%; + width: 100%; + top: 0; + left: 0; + position: absolute; + pointer-events: none +} + +.ClassColorFilter_PGfilter3 img { + width: 100%; + z-index: 1 +} + +.ClassColorFilter_PGfilter3:before { + z-index: 2 +} + +.ClassColorFilter_PGfilter3:after { + z-index: 3 +} + +.ClassColorFilter_PGfilter3::after { + background: -webkit-linear-gradient(left, rgba(66, 10, 14, .2), transparent); + background: linear-gradient(to right, rgba(66, 10, 14, .2), transparent); + mix-blend-mode: darken +} + +.ClassColorFilter_PGfilter4 { + position: relative; + -webkit-filter: contrast(.9) brightness(1.1); + filter: contrast(.9) brightness(1.1) +} + +.ClassColorFilter_PGfilter4:after, +.ClassColorFilter_PGfilter4:before { + display: block; + height: 100%; + width: 50%; + top: 0; + left: 0; + position: absolute; + pointer-events: none; + text-align: center; +} + +.ClassColorFilter_PGfilter4 img { + width: 100%; + z-index: 1 +} + +.ClassColorFilter_PGfilter4:before { + z-index: 2 +} + +.ClassColorFilter_PGfilter4:after { + z-index: 3 +} + +.ClassColorFilter_PGfilter4::after { + background: -webkit-radial-gradient(circle, rgba(168, 223, 193, .4) 70%, #c4b7c8); + background: radial-gradient(circle, rgba(168, 223, 193, .4) 70%, #c4b7c8); + mix-blend-mode: overlay +} + + +/* + * Water Mark +*/ + +.pg360_pack { + position: relative; +} + +.pg360_watermark { + font-size: 80%; + position: relative; + bottom: 2em; + right: 1em; + left: 1em; + overflow: none; +} \ No newline at end of file diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..e71af0e --- /dev/null +++ b/public/index.php @@ -0,0 +1 @@ + + + +registered['jquery'] ) ) { + $scripts->registered['jquery']->deps = array_diff( $scripts->registered['jquery']->deps, array( 'jquery-migrate' ) ); + } +} ); + diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..935131b --- /dev/null +++ b/readme.txt @@ -0,0 +1,146 @@ +=== 360 Generator === +Contributors: ibrahimezzat +Donate link: http://www.prodgraphy.com +Tags: 360, 360 spin, responsive imaging, watermark images, dynamic images, image plugin, media library, image editor ,360 eCommerce ,3D imaging,360 product ,360 photography ,responsive ,gallery ,image ,360 photo ,360 picture ,photography ,interactive ,prodgraphy ,pg360 +Requires at least: 3.3 +Tested up to: 4.9 +Stable tag: 4.9 +Requires PHP: 5.2 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Easy way to make interactive 360° from set of photos ,also provides many options like size control,color filters ,custom cursor shape ...etc + +== Description == + +"360 Generator" WordPress Plugin Take your business to whole new level of professionalism and increase your site traffic. + +360° Generator Plugin major features: + +* No image size limitation. +* Automatically all of uploaded images available in WordPress media library too. +* 360 Multi Row (3D) Possibility. +* Produced 360 fully responsive with mouse click/mouse hover/touch screen. +* Images width / height full control. +* Cursor shape customization. +* Gyroscope devices compatible (Mobile-Tablets ...etc). +* Option Rotation with mouse hover only. +* Option loading / rotating 360 after click. +* Option Inverse Rotation Direction to fit with 360 rotations. +* Option Control Button Play-Pause-Full screen +* Option Disable Right Click. +* Option Overlay Text. +* Customize Your Own Water Mark. +* Customize Your Own Mouse Hint. +* Amazing cool color filters (color preset) + +see the all available features from [here](www.prodgraphy.com) + +Free and paid plan or even customize one are available to fit your business needs with [www.ProdGraphy.com](www.ProdGraphy.com) + += 360° Rotation = + +"ProdGraphy 360° Generator" provides amazing 360° rotation in just 2 easy clicks and make you fully control all parameters also provide the possibility of multi row (3D) view only just from set of photo. + += Available Plans = + +Free and paid plan or even customize one are available to fit your business needs with [www.ProdGraphy.com](www.ProdGraphy.com) + +* Free Plan $0 +* Premium Plan $29 +* Customize Plan -> we have the flexibility to make your custom plan only contact us to make custom plan fit your business needs . + += Technical Support /Feedback = + +we offer not just plugin ,it comes with the technical support. +also we appreciate issues / suggestion feedback to continuously improve our self or our features . For technical issue reporting or asking for any help you can contact us via : + +[360° Generator Support](https://wordpress.org/support/plugin/pg-360-generator) +also you can chat with us via our website [ProdGraphy.com](http://www.prodgraphy.com) +Or you can email us + + +== Installation == + +1. Search for the " 360 Generator " plugin via the Plugins section of your WordPress dashboard. +1. Install and activate the plugin. + += Manual installation = + +1. Instead of the quick installation above, you can [download](https://wordpress.org/plugins/pg-360-generator/) and unzip the plugin to your computer. +1. Upload the `PG-360-generator` folder to the `/wp-content/plugins/` directory of your WordPress site. +1. Activate the plugin through the 'Plugins' menu in WordPress. + +== Frequently asked questions == + += How to make interactive 360° ? = + +Just follow up screenshots steps after entering "360° Generator": + +From "Create new" page just enter your 360° name then click "NEXT"(*Note : check awesome options By click "+ More Options" before first step + +) +Just drop your photo ( click to upload ) then BOOM your are there just click " Save to Gallery " + += Who can benefit from using this plugin ? = + +What ever your web application need 360° photo,for example : + +1. E-commerce websites . +2. Tourism websites . +3. Real estate websites . +4. Any one looking for responsive 360° . + += Can use the Plugin to organize gallery images = + +Yes, of course ,one of the main advantage using this plugin is you will find all images in WordPress media library as you can apply color filter or make special effect on your photo. + += Image order not right in 360° ? = + +You have to order your image files by name before uploading process (follow Screenshot instructions) + += the Plugin doesn't work for me = + +just contact our technical support : +[360° Generator Support](https://wordpress.org/support/plugin/pg-360-generator) +also you can chat with us via our website [ProdGraphy.com](http://www.prodgraphy.com) +Or you can email us + +== Screenshots == + +1. To start build your first interactive 360° ,go to page Create 360° page under 360° Generator main menu ,then type your 360° name (this is the only required field) after that click " Next" as screenshot. +Note : this plugin give you the ability to manipulate many options ,just click "+ More Options" + +2. IMPORTANT NOTE : YOU HAVE TO ORDER YOUR IMAGE FILES BY NAME BEFORE UPLOADING + +3. Now drop your files in drop file area or you can click inside this area it will open window to select and upload your files as below screenshots + +Then click "Save To Gallery" button + +4. You will be redirect automatically to 360° Gallery ,it's time to check your responsive 360° , and adjust it to your favorite view by manipulating options like color filter ,height , width ,cursor shape..., (it was possible to customize from the beginning from the first step) +What you see in 360° Gallery page is what you will see in your post /page + +5. This plugin provide to user this button just above page / post edit area to ease inserting 360° to your website + +6. to insert 360° to your page /post click "PG Add 360" button then select 360° you want to insert ,then click insert and you are done + +== Changelog == + += 1.1.2 = +* image order issue Fix + += 1.1.1 = +* update help section + += 1.1.0 = +* fix minor issue +* update help section +* update readme.txt file + += 1.0 = +* The first release of the official PG 360 Generator plugin for WordPress. + +== Upgrade notice == + += 1.0 = +Start using of the official PG 360 Generator plugin for WordPress. diff --git a/uninstall.php b/uninstall.php new file mode 100644 index 0000000..95d701b --- /dev/null +++ b/uninstall.php @@ -0,0 +1,31 @@ +