Changeset 28097 for extensions/TakeATour
- Timestamp:
- Apr 6, 2014, 3:51:22 PM (10 years ago)
- Location:
- extensions/TakeATour
- Files:
-
- 1 deleted
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/TakeATour/js/custom-bootstrap-tour-standalone.js
r27993 r28097 819 819 _this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true."); 820 820 } 821 if (step.title === "" & step.content === "") { 822 if (skipToPrevious) { 823 _this._showPrevStep(); 824 } else { 825 _this._showNextStep(); 826 } 827 return; 828 } 821 829 if (step.backdrop) { 822 830 _this._showBackdrop(!_this._isOrphan(step) ? step.element : void 0); … … 975 983 $.extend(options, step.options); 976 984 } 977 if (step.reflex ) {985 if (step.reflex & !isOrphan) { 978 986 $element.css("cursor", "pointer").on("click.tour-" + this._options.name, (function(_this) { 979 987 return function() { -
extensions/TakeATour/js/custom-bootstrap-tour-standalone.min.js
r27898 r28097 1 /* ===========================================================2 # bootstrap-tour - v0.9.03 # http://bootstraptour.com4 # ==============================================================5 # Copyright 2012-2013 Ulrich Sossou6 #7 # Licensed under the Apache License, Version 2.0 (the "License");8 # you may not use this file except in compliance with the License.9 # You may obtain a copy of the License at10 #11 # http://www.apache.org/licenses/LICENSE-2.012 #13 # Unless required by applicable law or agreed to in writing, software14 # distributed under the License is distributed on an "AS IS" BASIS,15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.16 # See the License for the specific language governing permissions and17 # limitations under the License.18 */19 /* ========================================================================20 * Bootstrap: tooltip.js v3.1.021 * http://getbootstrap.com/javascript/#tooltip22 * Inspired by the original jQuery.tipsy by Jason Frame23 * ========================================================================24 * Copyright 2011-2014 Twitter, Inc.25 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)26 * ======================================================================== */27 28 29 +function ($) {30 'use strict';31 32 // TOOLTIP PUBLIC CLASS DEFINITION33 // ===============================34 35 var Tooltip = function (element, options) {36 this.type =37 this.options =38 this.enabled =39 this.timeout =40 this.hoverState =41 this.$element = null42 43 this.init('tooltip', element, options)44 }45 46 Tooltip.DEFAULTS = {47 animation: true,48 placement: 'top',49 selector: false,50 template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',51 trigger: 'hover focus',52 title: '',53 delay: 0,54 html: false,55 container: false56 }57 58 Tooltip.prototype.init = function (type, element, options) {59 this.enabled = true60 this.type = type61 this.$element = $(element)62 this.options = this.getOptions(options)63 64 var triggers = this.options.trigger.split(' ')65 66 for (var i = triggers.length; i--;) {67 var trigger = triggers[i]68 69 if (trigger == 'click') {70 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))71 } else if (trigger != 'manual') {72 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'73 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'74 75 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))76 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))77 }78 }79 80 this.options.selector ?81 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :82 this.fixTitle()83 }84 85 Tooltip.prototype.getDefaults = function () {86 return Tooltip.DEFAULTS87 }88 89 Tooltip.prototype.getOptions = function (options) {90 options = $.extend({}, this.getDefaults(), this.$element.data(), options)91 92 if (options.delay && typeof options.delay == 'number') {93 options.delay = {94 show: options.delay,95 hide: options.delay96 }97 }98 99 return options100 }101 102 Tooltip.prototype.getDelegateOptions = function () {103 var options = {}104 var defaults = this.getDefaults()105 106 this._options && $.each(this._options, function (key, value) {107 if (defaults[key] != value) options[key] = value108 })109 110 return options111 }112 113 Tooltip.prototype.enter = function (obj) {114 var self = obj instanceof this.constructor ?115 obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)116 117 clearTimeout(self.timeout)118 119 self.hoverState = 'in'120 121 if (!self.options.delay || !self.options.delay.show) return self.show()122 123 self.timeout = setTimeout(function () {124 if (self.hoverState == 'in') self.show()125 }, self.options.delay.show)126 }127 128 Tooltip.prototype.leave = function (obj) {129 var self = obj instanceof this.constructor ?130 obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)131 132 clearTimeout(self.timeout)133 134 self.hoverState = 'out'135 136 if (!self.options.delay || !self.options.delay.hide) return self.hide()137 138 self.timeout = setTimeout(function () {139 if (self.hoverState == 'out') self.hide()140 }, self.options.delay.hide)141 }142 143 Tooltip.prototype.show = function () {144 var e = $.Event('show.bs.' + this.type)145 146 if (this.hasContent() && this.enabled) {147 this.$element.trigger(e)148 149 if (e.isDefaultPrevented()) return150 var that = this;151 152 var $tip = this.tip()153 154 this.setContent()155 156 if (this.options.animation) $tip.addClass('fade')157 158 var placement = typeof this.options.placement == 'function' ?159 this.options.placement.call(this, $tip[0], this.$element[0]) :160 this.options.placement161 162 var autoToken = /\s?auto?\s?/i163 var autoPlace = autoToken.test(placement)164 if (autoPlace) placement = placement.replace(autoToken, '') || 'top'165 166 $tip167 .detach()168 .css({ top: 0, left: 0, display: 'block' })169 .addClass(placement)170 171 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)172 173 var pos = this.getPosition()174 var actualWidth = $tip[0].offsetWidth175 var actualHeight = $tip[0].offsetHeight176 177 if (autoPlace) {178 var $parent = this.$element.parent()179 180 var orgPlacement = placement181 var docScroll = document.documentElement.scrollTop || document.body.scrollTop182 var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth()183 var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()184 var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left185 186 placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :187 placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :188 placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :189 placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :190 placement191 192 $tip193 .removeClass(orgPlacement)194 .addClass(placement)195 }196 197 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)198 199 this.applyPlacement(calculatedOffset, placement)200 this.hoverState = null201 202 var complete = function() {203 that.$element.trigger('shown.bs.' + that.type)204 }205 206 $.support.transition && this.$tip.hasClass('fade') ?207 $tip208 .one($.support.transition.end, complete)209 .emulateTransitionEnd(150) :210 complete()211 }212 }213 214 Tooltip.prototype.applyPlacement = function (offset, placement) {215 var replace216 var $tip = this.tip()217 var width = $tip[0].offsetWidth218 var height = $tip[0].offsetHeight219 220 // manually read margins because getBoundingClientRect includes difference221 var marginTop = parseInt($tip.css('margin-top'), 10)222 var marginLeft = parseInt($tip.css('margin-left'), 10)223 224 // we must check for NaN for ie 8/9225 if (isNaN(marginTop)) marginTop = 0226 if (isNaN(marginLeft)) marginLeft = 0227 228 offset.top = offset.top + marginTop229 offset.left = offset.left + marginLeft230 231 // $.fn.offset doesn't round pixel values232 // so we use setOffset directly with our own function B-0233 $.offset.setOffset($tip[0], $.extend({234 using: function (props) {235 $tip.css({236 top: Math.round(props.top),237 left: Math.round(props.left)238 })239 }240 }, offset), 0)241 242 $tip.addClass('in')243 244 // check to see if placing tip in new offset caused the tip to resize itself245 var actualWidth = $tip[0].offsetWidth246 var actualHeight = $tip[0].offsetHeight247 248 if (placement == 'top' && actualHeight != height) {249 replace = true250 offset.top = offset.top + height - actualHeight251 }252 253 if (/bottom|top/.test(placement)) {254 var delta = 0255 256 if (offset.left < 0) {257 delta = offset.left * -2258 offset.left = 0259 260 $tip.offset(offset)261 262 actualWidth = $tip[0].offsetWidth263 actualHeight = $tip[0].offsetHeight264 }265 266 this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')267 } else {268 this.replaceArrow(actualHeight - height, actualHeight, 'top')269 }270 271 if (replace) $tip.offset(offset)272 }273 274 Tooltip.prototype.replaceArrow = function (delta, dimension, position) {275 this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')276 }277 278 Tooltip.prototype.setContent = function () {279 var $tip = this.tip()280 var title = this.getTitle()281 282 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)283 $tip.removeClass('fade in top bottom left right')284 }285 286 Tooltip.prototype.hide = function () {287 var that = this288 var $tip = this.tip()289 var e = $.Event('hide.bs.' + this.type)290 291 function complete() {292 if (that.hoverState != 'in') $tip.detach()293 that.$element.trigger('hidden.bs.' + that.type)294 }295 296 this.$element.trigger(e)297 298 if (e.isDefaultPrevented()) return299 300 $tip.removeClass('in')301 302 $.support.transition && this.$tip.hasClass('fade') ?303 $tip304 .one($.support.transition.end, complete)305 .emulateTransitionEnd(150) :306 complete()307 308 this.hoverState = null309 310 return this311 }312 313 Tooltip.prototype.fixTitle = function () {314 var $e = this.$element315 if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {316 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')317 }318 }319 320 Tooltip.prototype.hasContent = function () {321 return this.getTitle()322 }323 324 Tooltip.prototype.getPosition = function () {325 var el = this.$element[0]326 return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {327 width: el.offsetWidth,328 height: el.offsetHeight329 }, this.$element.offset())330 }331 332 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {333 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :334 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :335 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :336 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }337 }338 339 Tooltip.prototype.getTitle = function () {340 var title341 var $e = this.$element342 var o = this.options343 344 title = $e.attr('data-original-title')345 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)346 347 return title348 }349 350 Tooltip.prototype.tip = function () {351 return this.$tip = this.$tip || $(this.options.template)352 }353 354 Tooltip.prototype.arrow = function () {355 return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')356 }357 358 Tooltip.prototype.validate = function () {359 if (!this.$element[0].parentNode) {360 this.hide()361 this.$element = null362 this.options = null363 }364 }365 366 Tooltip.prototype.enable = function () {367 this.enabled = true368 }369 370 Tooltip.prototype.disable = function () {371 this.enabled = false372 }373 374 Tooltip.prototype.toggleEnabled = function () {375 this.enabled = !this.enabled376 }377 378 Tooltip.prototype.toggle = function (e) {379 var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this380 self.tip().hasClass('in') ? self.leave(self) : self.enter(self)381 }382 383 Tooltip.prototype.destroy = function () {384 clearTimeout(this.timeout)385 this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)386 }387 388 389 // TOOLTIP PLUGIN DEFINITION390 // =========================391 392 var old = $.fn.tooltip393 394 $.fn.tooltip = function (option) {395 return this.each(function () {396 var $this = $(this)397 var data = $this.data('bs.tooltip')398 var options = typeof option == 'object' && option399 400 if (!data && option == 'destroy') return401 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))402 if (typeof option == 'string') data[option]()403 })404 }405 406 $.fn.tooltip.Constructor = Tooltip407 408 409 // TOOLTIP NO CONFLICT410 // ===================411 412 $.fn.tooltip.noConflict = function () {413 $.fn.tooltip = old414 return this415 }416 417 }(jQuery);418 419 /* ========================================================================420 * Bootstrap: popover.js v3.1.0421 * http://getbootstrap.com/javascript/#popovers422 * ========================================================================423 * Copyright 2011-2014 Twitter, Inc.424 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)425 * ======================================================================== */426 427 428 +function ($) {429 'use strict';430 431 // POPOVER PUBLIC CLASS DEFINITION432 // ===============================433 434 var Popover = function (element, options) {435 this.init('popover', element, options)436 }437 438 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')439 440 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {441 placement: 'right',442 trigger: 'click',443 content: '',444 template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'445 })446 447 448 // NOTE: POPOVER EXTENDS tooltip.js449 // ================================450 451 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)452 453 Popover.prototype.constructor = Popover454 455 Popover.prototype.getDefaults = function () {456 return Popover.DEFAULTS457 }458 459 Popover.prototype.setContent = function () {460 var $tip = this.tip()461 var title = this.getTitle()462 var content = this.getContent()463 464 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)465 $tip.find('.popover-content')[ // we use append for html objects to maintain js events466 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'467 ](content)468 469 $tip.removeClass('fade top bottom left right in')470 471 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do472 // this manually by checking the contents.473 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()474 }475 476 Popover.prototype.hasContent = function () {477 return this.getTitle() || this.getContent()478 }479 480 Popover.prototype.getContent = function () {481 var $e = this.$element482 var o = this.options483 484 return $e.attr('data-content')485 || (typeof o.content == 'function' ?486 o.content.call($e[0]) :487 o.content)488 }489 490 Popover.prototype.arrow = function () {491 return this.$arrow = this.$arrow || this.tip().find('.arrow')492 }493 494 Popover.prototype.tip = function () {495 if (!this.$tip) this.$tip = $(this.options.template)496 return this.$tip497 }498 499 500 // POPOVER PLUGIN DEFINITION501 // =========================502 503 var old = $.fn.popover504 505 $.fn.popover = function (option) {506 return this.each(function () {507 var $this = $(this)508 var data = $this.data('bs.popover')509 var options = typeof option == 'object' && option510 511 if (!data && option == 'destroy') return512 if (!data) $this.data('bs.popover', (data = new Popover(this, options)))513 if (typeof option == 'string') data[option]()514 })515 }516 517 $.fn.popover.Constructor = Popover518 519 520 // POPOVER NO CONFLICT521 // ===================522 523 $.fn.popover.noConflict = function () {524 $.fn.popover = old525 return this526 }527 528 }(jQuery);529 530 (function($, window) {531 var Tour, document;532 document = window.document;533 Tour = (function() {534 function Tour(options) {535 this._options = $.extend({536 name: "tour",537 steps: [],538 container: "body",539 keyboard: true,540 storage: window.localStorage,541 debug: false,542 backdrop: false,543 redirect: true,544 orphan: false,545 duration: false,546 basePath: "",547 template: "<div class='popover'> <div class='arrow'></div> <h3 class='popover-title'></h3> <div class='popover-content'></div> <div class='popover-navigation'> <div class='btn-group'> <button class='btn btn-sm btn-default' data-role='prev'>« Prev</button> <button class='btn btn-sm btn-default' data-role='next'>Next »</button> <button class='btn btn-sm btn-default' data-role='pause-resume' data-pause-text='Pause' data-resume-text='Resume'>Pause</button> </div> <button class='btn btn-sm btn-default' data-role='end'>End tour</button> </div> </div>",548 afterSetState: function(key, value) {},549 afterGetState: function(key, value) {},550 afterRemoveState: function(key) {},551 onStart: function(tour) {},552 onEnd: function(tour) {},553 onShow: function(tour) {},554 onShown: function(tour) {},555 onHide: function(tour) {},556 onHidden: function(tour) {},557 onNext: function(tour) {},558 onPrev: function(tour) {},559 onPause: function(tour, duration) {},560 onResume: function(tour, duration) {}561 }, options);562 this._force = false;563 this._inited = false;564 this.backdrop = {565 overlay: null,566 $element: null,567 $background: null,568 backgroundShown: false,569 overlayElementShown: false570 };571 this;572 }573 574 Tour.prototype.addSteps = function(steps) {575 var step, _i, _len;576 for (_i = 0, _len = steps.length; _i < _len; _i++) {577 step = steps[_i];578 this.addStep(step);579 }580 return this;581 };582 583 Tour.prototype.addStep = function(step) {584 this._options.steps.push(step);585 return this;586 };587 588 Tour.prototype.getStep = function(i) {589 if (this._options.steps[i] != null) {590 return $.extend({591 id: "step-" + i,592 path: "",593 placement: "right",594 title: "",595 content: "<p></p>",596 next: i === this._options.steps.length - 1 ? -1 : i + 1,597 prev: i - 1,598 animation: true,599 container: this._options.container,600 backdrop: this._options.backdrop,601 redirect: this._options.redirect,602 orphan: this._options.orphan,603 duration: this._options.duration,604 template: this._options.template,605 onShow: this._options.onShow,606 onShown: this._options.onShown,607 onHide: this._options.onHide,608 onHidden: this._options.onHidden,609 onNext: this._options.onNext,610 onPrev: this._options.onPrev,611 onPause: this._options.onPause,612 onResume: this._options.onResume613 }, this._options.steps[i]);614 }615 };616 617 Tour.prototype.init = function(force) {618 var _this = this;619 this._force = force;620 if (this.ended()) {621 this._debug("Tour ended, init prevented.");622 return this;623 }624 this.setCurrentStep();625 this._initMouseNavigation();626 this._initKeyboardNavigation();627 this._onResize(function() {628 return _this.showStep(_this._current);629 });630 if (this._current !== null) {631 this.showStep(this._current);632 }633 this._inited = true;634 return this;635 };636 637 Tour.prototype.start = function(force) {638 var promise;639 if (force == null) {640 force = false;641 }642 if (!this._inited) {643 this.init(force);644 }645 if (this._current === null) {646 promise = this._makePromise(this._options.onStart != null ? this._options.onStart(this) : void 0);647 this._callOnPromiseDone(promise, this.showStep, 0);648 }649 return this;650 };651 652 Tour.prototype.next = function() {653 var promise;654 promise = this.hideStep(this._current);655 return this._callOnPromiseDone(promise, this._showNextStep);656 };657 658 Tour.prototype.prev = function() {659 var promise;660 promise = this.hideStep(this._current);661 return this._callOnPromiseDone(promise, this._showPrevStep);662 };663 664 Tour.prototype.goTo = function(i) {665 var promise;666 promise = this.hideStep(this._current);667 return this._callOnPromiseDone(promise, this.showStep, i);668 };669 670 Tour.prototype.end = function() {671 var endHelper, promise,672 _this = this;673 endHelper = function(e) {674 $(document).off("click.tour-" + _this._options.name);675 $(document).off("keyup.tour-" + _this._options.name);676 $(window).off("resize.tour-" + _this._options.name);677 _this._setState("end", "yes");678 _this._inited = false;679 _this._force = false;680 _this._clearTimer();681 if (_this._options.onEnd != null) {682 return _this._options.onEnd(_this);683 }684 };685 promise = this.hideStep(this._current);686 return this._callOnPromiseDone(promise, endHelper);687 };688 689 Tour.prototype.ended = function() {690 return !this._force && !!this._getState("end");691 };692 693 Tour.prototype.restart = function() {694 this._removeState("current_step");695 this._removeState("end");696 this.setCurrentStep(0);697 return this.start();698 };699 700 Tour.prototype.pause = function() {701 var step;702 step = this.getStep(this._current);703 if (!(step && step.duration)) {704 return this;705 }706 this._paused = true;707 this._duration -= new Date().getTime() - this._start;708 window.clearTimeout(this._timer);709 this._debug("Paused/Stopped step " + (this._current + 1) + " timer (" + this._duration + " remaining).");710 if (step.onPause != null) {711 return step.onPause(this, this._duration);712 }713 };714 715 Tour.prototype.resume = function() {716 var step,717 _this = this;718 step = this.getStep(this._current);719 if (!(step && step.duration)) {720 return this;721 }722 this._paused = false;723 this._start = new Date().getTime();724 this._duration = this._duration || step.duration;725 this._timer = window.setTimeout(function() {726 if (_this._isLast()) {727 return _this.next();728 } else {729 return _this.end();730 }731 }, this._duration);732 this._debug("Started step " + (this._current + 1) + " timer with duration " + this._duration);733 if ((step.onResume != null) && this._duration !== step.duration) {734 return step.onResume(this, this._duration);735 }736 };737 738 Tour.prototype.hideStep = function(i) {739 var hideStepHelper, promise, step,740 _this = this;741 step = this.getStep(i);742 if (!step) {743 return;744 }745 this._clearTimer();746 promise = this._makePromise(step.onHide != null ? step.onHide(this, i) : void 0);747 hideStepHelper = function(e) {748 var $element;749 $element = $(step.element);750 if (!($element.data("bs.popover") || $element.data("popover"))) {751 $element = $("body");752 }753 $element.popover("destroy");754 if (step.reflex) {755 $element.css("cursor", "").off("click.tour-" + _this._options.name);756 }757 if (step.backdrop) {758 _this._hideBackdrop();759 }760 if (step.onHidden != null) {761 return step.onHidden(_this);762 }763 };764 this._callOnPromiseDone(promise, hideStepHelper);765 return promise;766 };767 768 Tour.prototype.showStep = function(i) {769 var promise, showStepHelper, skipToPrevious, step,770 _this = this;771 if (this.ended()) {772 this._debug("Tour ended, showStep prevented.");773 return this;774 }775 step = this.getStep(i);776 if (!step) {777 return;778 }779 skipToPrevious = i < this._current;780 promise = this._makePromise(step.onShow != null ? step.onShow(this, i) : void 0);781 showStepHelper = function(e) {782 var current_path, path;783 _this.setCurrentStep(i);784 path = (function() {785 switch (toString.call(step.path)) {786 case "[object Function]":787 return step.path();788 case "[object String]":789 return this._options.basePath + step.path;790 default:791 return step.path;792 }793 }).call(_this);794 current_path = [document.location.pathname, document.location.hash].join("?");795 window.console.log(current_path);796 console.log(current_path);797 console.log("FUCK");798 if (_this._isRedirect(path, current_path)) {799 //_this._redirect(step, path);800 console.log(current_path);801 console.log(path);802 return;803 }804 if (_this._isOrphan(step)) {805 if (!step.orphan) {806 _this._debug("Skip the orphan step " + (_this._current + 1) + ". Orphan option is false and the element doesn't exist or is hidden.");807 if (skipToPrevious) {808 _this._showPrevStep();809 } else {810 _this._showNextStep();811 }812 return;813 }814 _this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true.");815 }816 if (step.backdrop) {817 _this._showBackdrop(!_this._isOrphan(step) ? step.element : void 0);818 }819 _this._scrollIntoView(step.element, function() {820 if ((step.element != null) && step.backdrop) {821 _this._showOverlayElement(step.element);822 }823 _this._showPopover(step, i);824 if (step.onShown != null) {825 step.onShown(_this);826 }827 return _this._debug("Step " + (_this._current + 1) + " of " + _this._options.steps.length);828 });829 if (step.duration) {830 return _this.resume();831 }832 };833 this._callOnPromiseDone(promise, showStepHelper);834 return promise;835 };836 837 Tour.prototype.getCurrentStep = function() {838 return this._current;839 };840 841 Tour.prototype.setCurrentStep = function(value) {842 if (value != null) {843 this._current = value;844 this._setState("current_step", value);845 } else {846 this._current = this._getState("current_step");847 this._current = this._current === null ? null : parseInt(this._current, 10);848 }849 return this;850 };851 852 Tour.prototype._setState = function(key, value) {853 var e, keyName;854 if (this._options.storage) {855 keyName = "" + this._options.name + "_" + key;856 try {857 this._options.storage.setItem(keyName, value);858 } catch (_error) {859 e = _error;860 if (e.code === DOMException.QUOTA_EXCEEDED_ERR) {861 this.debug("LocalStorage quota exceeded. State storage failed.");862 }863 }864 return this._options.afterSetState(keyName, value);865 } else {866 if (this._state == null) {867 this._state = {};868 }869 return this._state[key] = value;870 }871 };872 873 Tour.prototype._removeState = function(key) {874 var keyName;875 if (this._options.storage) {876 keyName = "" + this._options.name + "_" + key;877 this._options.storage.removeItem(keyName);878 return this._options.afterRemoveState(keyName);879 } else {880 if (this._state != null) {881 return delete this._state[key];882 }883 }884 };885 886 Tour.prototype._getState = function(key) {887 var keyName, value;888 if (this._options.storage) {889 keyName = "" + this._options.name + "_" + key;890 value = this._options.storage.getItem(keyName);891 } else {892 if (this._state != null) {893 value = this._state[key];894 }895 }896 if (value === void 0 || value === "null") {897 value = null;898 }899 this._options.afterGetState(key, value);900 return value;901 };902 903 Tour.prototype._showNextStep = function() {904 var promise, showNextStepHelper, step,905 _this = this;906 step = this.getStep(this._current);907 showNextStepHelper = function(e) {908 return _this.showStep(step.next);909 };910 promise = this._makePromise(step.onNext != null ? step.onNext(this) : void 0);911 return this._callOnPromiseDone(promise, showNextStepHelper);912 };913 914 Tour.prototype._showPrevStep = function() {915 var promise, showPrevStepHelper, step,916 _this = this;917 step = this.getStep(this._current);918 showPrevStepHelper = function(e) {919 return _this.showStep(step.prev);920 };921 promise = this._makePromise(step.onPrev != null ? step.onPrev(this) : void 0);922 return this._callOnPromiseDone(promise, showPrevStepHelper);923 };924 925 Tour.prototype._debug = function(text) {926 if (this._options.debug) {927 return window.console.log("Bootstrap Tour '" + this._options.name + "' | " + text);928 }929 };930 931 Tour.prototype._isRedirect = function(path, currentPath) {932 console.log(path.replace(/\?.*$/, "").replace(/\/?$/, ""));933 console.log(currentPath.replace(/\/?$/, ""));934 return (path != null) && path !== "" && ((toString.call(path) === "[object RegExp]" && !path.test(currentPath)) || (toString.call(path) === "[object String]" && path.replace(/\?.*$/, "").replace(/\/?$/, "") !== currentPath.replace(/\/?$/, "")));935 };936 937 Tour.prototype._redirect = function(step, path) {938 if ($.isFunction(step.redirect)) {939 return step.redirect.call(this, path);940 } else if (step.redirect === true) {941 this._debug("Redirect to " + path);942 return document.location.href = path;943 }944 };945 946 Tour.prototype._isOrphan = function(step) {947 return (step.element == null) || !$(step.element).length || $(step.element).is(":hidden") && ($(step.element)[0].namespaceURI !== "http://www.w3.org/2000/svg");948 };949 950 Tour.prototype._isLast = function() {951 return this._current < this._options.steps.length - 1;952 };953 954 Tour.prototype._showPopover = function(step, i) {955 var $element, $navigation, $template, $tip, isOrphan, options,956 _this = this;957 options = $.extend({}, this._options);958 $template = $.isFunction(step.template) ? $(step.template(i, step)) : $(step.template);959 $navigation = $template.find(".popover-navigation");960 isOrphan = this._isOrphan(step);961 if (isOrphan) {962 step.element = "body";963 step.placement = "top";964 $template = $template.addClass("orphan");965 }966 $element = $(step.element);967 $template.addClass("tour-" + this._options.name + " tour-" + this._options.name + "-" + i);968 if (step.options) {969 $.extend(options, step.options);970 }971 if (step.reflex) {972 $element.css("cursor", "pointer").on("click.tour-" + this._options.name, function() {973 if (_this._isLast()) {974 return _this.next();975 } else {976 return _this.end();977 }978 });979 }980 if (step.prev < 0) {981 $navigation.find("[data-role='prev']").addClass("disabled");982 }983 if (step.next < 0) {984 $navigation.find("[data-role='next']").addClass("disabled");985 }986 if (!step.duration) {987 $navigation.find("[data-role='pause-resume']").remove();988 }989 step.template = $template.clone().wrap("<div>").parent().html();990 $element.popover({991 placement: step.placement,992 trigger: "manual",993 title: step.title,994 content: step.content,995 html: true,996 animation: step.animation,997 container: step.container,998 template: step.template,999 selector: step.element1000 }).popover("show");1001 $tip = $element.data("bs.popover") ? $element.data("bs.popover").tip() : $element.data("popover").tip();1002 $tip.attr("id", step.id);1003 this._reposition($tip, step);1004 if (isOrphan) {1005 return this._center($tip);1006 }1007 };1008 1009 Tour.prototype._reposition = function($tip, step) {1010 var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset;1011 offsetWidth = $tip[0].offsetWidth;1012 offsetHeight = $tip[0].offsetHeight;1013 tipOffset = $tip.offset();1014 originalLeft = tipOffset.left;1015 originalTop = tipOffset.top;1016 offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight();1017 if (offsetBottom < 0) {1018 tipOffset.top = tipOffset.top + offsetBottom;1019 }1020 offsetRight = $("html").outerWidth() - tipOffset.left - $tip.outerWidth();1021 if (offsetRight < 0) {1022 tipOffset.left = tipOffset.left + offsetRight;1023 }1024 if (tipOffset.top < 0) {1025 tipOffset.top = 0;1026 }1027 if (tipOffset.left < 0) {1028 tipOffset.left = 0;1029 }1030 $tip.offset(tipOffset);1031 if (step.placement === "bottom" || step.placement === "top") {1032 if (originalLeft !== tipOffset.left) {1033 return this._replaceArrow($tip, (tipOffset.left - originalLeft) * 2, offsetWidth, "left");1034 }1035 } else {1036 if (originalTop !== tipOffset.top) {1037 return this._replaceArrow($tip, (tipOffset.top - originalTop) * 2, offsetHeight, "top");1038 }1039 }1040 };1041 1042 Tour.prototype._center = function($tip) {1043 return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2);1044 };1045 1046 Tour.prototype._replaceArrow = function($tip, delta, dimension, position) {1047 return $tip.find(".arrow").css(position, delta ? 50 * (1 - delta / dimension) + "%" : "");1048 };1049 1050 Tour.prototype._scrollIntoView = function(element, callback) {1051 var $element, $window, counter, offsetTop, scrollTop, windowHeight,1052 _this = this;1053 $element = $(element);1054 if (!$element.length) {1055 return callback();1056 }1057 $window = $(window);1058 offsetTop = $element.offset().top;1059 windowHeight = $window.height();1060 scrollTop = Math.max(0, offsetTop - (windowHeight / 2));1061 this._debug("Scroll into view. ScrollTop: " + scrollTop + ". Element offset: " + offsetTop + ". Window height: " + windowHeight + ".");1062 counter = 0;1063 return $("body,html").stop(true, true).animate({1064 scrollTop: Math.ceil(scrollTop)1065 }, function() {1066 if (++counter === 2) {1067 callback();1068 return _this._debug("Scroll into view. Animation end element offset: " + ($element.offset().top) + ". Window height: " + ($window.height()) + ".");1069 }1070 });1071 };1072 1073 Tour.prototype._onResize = function(callback, timeout) {1074 return $(window).on("resize.tour-" + this._options.name, function() {1075 clearTimeout(timeout);1076 return timeout = setTimeout(callback, 100);1077 });1078 };1079 1080 Tour.prototype._initMouseNavigation = function() {1081 var _this = this;1082 _this = this;1083 return $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']:not(.disabled)").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']:not(.disabled)").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']:not(.disabled)", function(e) {1084 e.preventDefault();1085 return _this.next();1086 }).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']:not(.disabled)", function(e) {1087 e.preventDefault();1088 return _this.prev();1089 }).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']", function(e) {1090 e.preventDefault();1091 return _this.end();1092 }).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']", function(e) {1093 var $this;1094 e.preventDefault();1095 $this = $(this);1096 $this.text(_this._paused ? $this.data("pause-text") : $this.data("resume-text"));1097 if (_this._paused) {1098 return _this.resume();1099 } else {1100 return _this.pause();1101 }1102 });1103 };1104 1105 Tour.prototype._initKeyboardNavigation = function() {1106 var _this = this;1107 if (!this._options.keyboard) {1108 return;1109 }1110 return $(document).on("keyup.tour-" + this._options.name, function(e) {1111 if (!e.which) {1112 return;1113 }1114 switch (e.which) {1115 case 39:1116 e.preventDefault();1117 if (_this._isLast()) {1118 return _this.next();1119 } else {1120 return _this.end();1121 }1122 break;1123 case 37:1124 e.preventDefault();1125 if (_this._current > 0) {1126 return _this.prev();1127 }1128 break;1129 case 27:1130 e.preventDefault();1131 return _this.end();1132 }1133 });1134 };1135 1136 Tour.prototype._makePromise = function(result) {1137 if (result && $.isFunction(result.then)) {1138 return result;1139 } else {1140 return null;1141 }1142 };1143 1144 Tour.prototype._callOnPromiseDone = function(promise, cb, arg) {1145 var _this = this;1146 if (promise) {1147 return promise.then(function(e) {1148 return cb.call(_this, arg);1149 });1150 } else {1151 return cb.call(this, arg);1152 }1153 };1154 1155 Tour.prototype._showBackdrop = function(element) {1156 if (this.backdrop.backgroundShown) {1157 return;1158 }1159 this.backdrop = $("<div/>", {1160 "class": "tour-backdrop"1161 });1162 this.backdrop.backgroundShown = true;1163 return $("body").append(this.backdrop);1164 };1165 1166 Tour.prototype._hideBackdrop = function() {1167 this._hideOverlayElement();1168 return this._hideBackground();1169 };1170 1171 Tour.prototype._hideBackground = function() {1172 this.backdrop.remove();1173 this.backdrop.overlay = null;1174 return this.backdrop.backgroundShown = false;1175 };1176 1177 Tour.prototype._showOverlayElement = function(element) {1178 var $background, $element, offset;1179 $element = $(element);1180 if (!$element || $element.length === 0 || this.backdrop.overlayElementShown) {1181 return;1182 }1183 this.backdrop.overlayElementShown = true;1184 $background = $("<div/>");1185 offset = $element.offset();1186 offset.top = offset.top;1187 offset.left = offset.left;1188 $background.width($element.innerWidth()).height($element.innerHeight()).addClass("tour-step-background").offset(offset);1189 $element.addClass("tour-step-backdrop");1190 $("body").append($background);1191 this.backdrop.$element = $element;1192 return this.backdrop.$background = $background;1193 };1194 1195 Tour.prototype._hideOverlayElement = function() {1196 if (!this.backdrop.overlayElementShown) {1197 return;1198 }1199 this.backdrop.$element.removeClass("tour-step-backdrop");1200 this.backdrop.$background.remove();1201 this.backdrop.$element = null;1202 this.backdrop.$background = null;1203 return this.backdrop.overlayElementShown = false;1204 };1205 1206 Tour.prototype._clearTimer = function() {1207 window.clearTimeout(this._timer);1208 this._timer = null;1209 return this._duration = null;1210 };1211 1212 return Tour;1213 1214 })();1215 return window.Tour = Tour;1216 })(jQuery, window); -
extensions/TakeATour/language/en_UK/description.txt
r27998 r28097 1 Visit your Piwigo to learn how to use it. This plugin has multiple thematic tours for beginners and advanced users.1 Visit your Piwigo to discover its features. This plugin has multiple thematic tours for beginners and advanced users. -
extensions/TakeATour/language/en_UK/plugin.lang.php
r27994 r28097 1 1 <?php 2 $lang['First Contact'] = 'Premier contact'; 3 $lang['Launch the Tour'] = 'Commencez la visite'; 4 $lang[''] = ''; 5 $lang['Welcome in your Piwigo gallery'] = 'Bienvenue dans votre galerie Piwigo'; 6 $lang['Step_1 Let\'s start by adding pictures'] = 'Bonjour, à travers ce guide, vous allez comprendre comment utiliser votre galerie et avoir un aperçu des fonctionnalités offertes'; 7 $lang[''] = ''; 2 $lang['First Contact'] = 'First Contact'; 3 $lang['Start the Tour'] = 'Start the Tour'; 4 5 $lang['first_contact_descrp'] = 'Recommended for beginners, this tour introduce you Piwigo, its basic features. It will start by adding pictures, then manage them. The tour continues with album management and permissions, and ends on the customization using the configuration, the themes and the plugins.'; 6 $lang['first_contact_title1'] = 'Welcome in your Piwigo gallery'; 7 $lang['first_contact_stp1'] = 'Hello! I will be your guide to discover Piwigo. Please follow my instructions, and click Next (or use the arrows of your keyboard) to navigate. If you go in an other page of the administration, you will be redirected to the current page of the Tour.<br>Let\'s start by adding pictures!'; 8 $lang['first_contact_title2'] = ''; 9 $lang['first_contact_stp2'] = 'The link is here. Click Next to continue'; 10 $lang['first_contact_title3'] = 'Add Photo Page'; 11 $lang['first_contact_stp3'] = 'First tab to add photos from your browser, other tabs to add from a software, mobile or FTP'; 12 $lang['first_contact_title4'] = 'Lets add photo!'; 13 $lang['first_contact_stp4'] = 'First choose an album; create one if there is no album yet.'; 14 $lang['first_contact_title5'] = ''; 15 $lang['first_contact_stp5'] = 'Then click the button to select photos to send from your computer'; 16 $lang['first_contact_stp5'] = ''; 17 $lang['first_contact_title6'] = ''; 18 $lang['first_contact_stp6'] = 'You see that photos are being listed. Add at least 2 pictures and when you\'re ready click the button Start Upload'; 19 $lang['first_contact_title7'] = ''; 20 $lang['first_contact_stp7'] = 'Here a summary of your uploaded pictures. See that Piwigo has generated itself the thumbnails. You can know add more photos with the link at the bottom, edit the properties of a picture by cliking on it, or click to manage all the uploaded pictures in the Batch Manager...'; 21 $lang['first_contact_title8'] = ''; 22 $lang['first_contact_stp8'] = 'Let\'s edit them! Click on the link. If you don\'t see it click Prev to add at least 2 photos.'; 23 $lang['first_contact_title9'] = 'The Batch Manager'; 24 $lang['first_contact_stp9'] = 'You are know in the Batch Manager, where you can batch edit multiple pictures. Here the Caddy is set as a filter because we comes from the upload result page.'; 25 $lang['first_contact_title10'] = ''; 26 $lang['first_contact_stp10'] = 'Here is the link to directly access to your caddy: that/s a tool for administrators to easily add pictures to a set in order to edit them in the Batch Manager. You can add photos to the caddy from the public picture page when logged as an admin, or using the action \"Add to caddy\" on the Batch Manager'; 27 $lang['first_contact_title11'] = 'How to edit a photos'; 28 $lang['first_contact_stp11'] = 'So you can select from here one or more photos'; 29 $lang['first_contact_title12'] = ''; 30 $lang['first_contact_stp12'] = 'then edit them using and action. But for instance, you can\'t -for now- batch edit descriptions since they are mostly unique'; 31 $lang['first_contact_title13'] = ''; 32 $lang['first_contact_stp13'] = 'You can edit descriptions and more from the batch manager in unit mode. But for now, let\'s stay in the global mode'; 33 $lang['first_contact_title14'] = ''; 34 $lang['first_contact_stp14'] = 'We will see now the edition page of one picture. That page is reachable from here but also from the public picture page when logged as an administrator. Click on Edit or go next'; 35 $lang['first_contact_title15'] = 'The edition page of a picture'; 36 $lang['first_contact_stp15'] = 'On that page you can edit all the properties of a photo, for instance...'; 37 $lang['first_contact_title16'] = ''; 38 $lang['first_contact_stp16'] = 'here to add or remove the photo from albums. The link is virtual, no photos will be physcally moved ever.'; 39 $lang['first_contact_title17'] = ''; 40 $lang['first_contact_stp17'] = 'and here to set the photo as a picture representative of an album. So you can set as a representative of a public album, a photo in a private album, which is ideal to set custom thumbnails for albums but the user won\'t see those pictures inside those albums. Like setting a portrait of someone as representative, for an album which contains photos of nature; it would be weird to see that photo of the man/woman among trees or animals.'; 41 $lang['first_contact_title18'] = 'Manage albums'; 42 $lang['first_contact_stp18'] = 'That previous example was just a small overview of tricks and how powerfull Piwigo is. So I\'ve told about private albums, but how can we manage albums? Click On album->Manage or hit Next'; 43 $lang['first_contact_title19'] = 'Manage Albums'; 44 $lang['first_contact_stp19'] = 'Here are listed all the \'top\' albums, the ones at the root of your gallery. If you see an album with a dashed backgroung, it\'s an real physical album from a FTP synchro, which can\'t be moved or deleted from here. The others albums are called virtual albums.'; 45 $lang['first_contact_title20'] = 'Manage Albums'; 46 $lang['first_contact_stp20'] = 'When your mouse is hover a album, links and information appear. When you drag and drop an album -a rounded block-, you will change its position and then you can save or cancel your manual order.'; 47 $lang['first_contact_title21'] = 'Other Tabs'; 48 $lang['first_contact_stp21'] = 'The next tab is a page where you can move any virtual album.<br>The permalink tab is to set a particular url for an album, for tecnhical reasons like to set a specific template or for just sending cool customized links.<br>But let\'s edit an album: click on Edit of a album'; 49 $lang['first_contact_title22'] = 'Album Edition Page'; 50 $lang['first_contact_stp22'] = 'Like for a picture, here you can edit the properties of an album'; 51 $lang['first_contact_title23'] = ''; 52 $lang['first_contact_stp23'] = 'Locking a album means only administrators will be able to see that album: it\'s usually used when an admin is managing the properties of an album or don\'t want to publish the album immediatly'; 53 $lang['first_contact_title24'] = ''; 54 $lang['first_contact_stp24'] = 'Certainly, one of the most important page is the permission page of a private album. Click on the permission tab or click next'; 55 $lang['first_contact_title25'] = 'Album Permission'; 56 $lang['first_contact_stp25'] = 'As you can read in the Help of your Piwigo -link at the top right-, album permissions are set by groups and users. You can directly set private/public multiple albums using the Administration » Albums » Properties page.'; 57 $lang['first_contact_title26'] = ''; 58 $lang['first_contact_stp26'] = 'Here you can set the current album as private, then grant access to users and groups. By default, permissions are not recursive for sub albums, but upper-albums will be granted with the same permission in order to let the granted users browse to the album.'; 59 $lang['first_contact_title27'] = ''; 60 $lang['first_contact_stp27'] = 'Important fact: the webmasters and administrators are not omniscient when browsing the public part, but they can access to every album and photos on the admin part.'; 61 $lang['first_contact_title28'] = 'Configuration'; 62 $lang['first_contact_stp28'] = 'Now we will look at the options available to set Piwigo working your way. Click on Configuration->Options or just hit Next.'; 63 $lang['first_contact_title29'] = 'Configuration->Options->General'; 64 $lang['first_contact_stp29'] = 'Here, on that first page, you will set the essential and basic configuration of your gallery.'; 65 $lang['first_contact_title30'] = ''; 66 $lang['first_contact_stp30'] = 'Let\'s start by changing the tittle'; 67 $lang['first_contact_title31'] = ''; 68 $lang['first_contact_stp31'] = 'Then the banner, which will be displayed on top of every pages. As you can see, HTML tags are allowed here. You can also use the %gallery_title% tag to display the tittle you just typed above.'; 69 $lang['first_contact_title32'] = ''; 70 $lang['first_contact_stp32'] = 'Now save you changes'; 71 $lang['first_contact_title33'] = 'Guest settings'; 72 $lang['first_contact_stp33'] = 'Just a final word about the options, the \'Guest settings\' page is to set the preferences of unregistered visitors. Each time Piwigo refers to \'guest\' that means unregistered visitors.<br>Let\'s continue about Configuration: click on Configuration->Themes or just hit Next.'; 73 $lang['first_contact_title34'] = 'Themes'; 74 $lang['first_contact_stp34'] = 'Themes are one of the three way to customize your Piwigo, with Plugins and Templates. Themes installed are listed here.<br>More than one theme can be enabled: users can change their theme by choosing one among the one enabled here, if the option \'Allow user customization\' is checked on the Option page.'; 75 $lang['first_contact_title35'] = 'Themes'; 76 $lang['first_contact_stp35'] = 'Themes can also be set as Default, which means that\'s the theme for unregistred visitors (guests, you remember?) and any new registred user will be have this theme. But for any previously registred users, the theme won\'t change until you do it from the User Management page or you disable their theme: be carefull, you might disturb your users by changing their whole display.'; 77 $lang['first_contact_title36'] = 'Themes'; 78 $lang['first_contact_stp36'] = 'Themes have a system of dependency: that\'s why some theme can\'t be deleted (a parent theme can\'t be deleted if a child theme is enabled) or others can\'t be enabled (a child theme need its parent theme). For instance, when you put you\'re mouse over a Delete link, if the theme can\'t be deleted, a information bubble will explain you why.'; 79 $lang['first_contact_title37'] = 'Themes'; 80 $lang['first_contact_stp37'] = 'To install new themes, you can directly download them from the tab \'Add a theme\'. Only the themes marked as compatible with your version of Piwigo are showed.<br>Let\'s discover the plugins now! Click on Plugin->Manage'; 81 $lang['first_contact_title38'] = 'Plugins'; 82 $lang['first_contact_stp38'] = 'Plugins are very easy ways to customize your Piwigo. They can do almost anything you can imagine from small text addition to complete features, like the Community plugin which allows non admistrators users to upload without entering to the administration part.'; 83 $lang['first_contact_title39'] = 'Plugins'; 84 $lang['first_contact_stp39'] = 'On that first page, are listed the installed plugins. At the top, are listed the plugins activated, which are currently running. At the bottom, the plugins which are installed in the /plugins folder, but disabled. Deleting a plugin means that any trace of the plugin will be removed (files, options etc). For most of the plugins, disabling will keep the data registered by the plugins.'; 85 $lang['first_contact_title40'] = ''; 86 $lang['first_contact_stp40'] = 'Here it\'s me! Don\'t disable me now, but you can see you can Disable or Restore an activated plugin.'; 87 $lang['first_contact_title41'] = ''; 88 $lang['first_contact_stp41'] = 'You can see on the last tab all the plugins available for your version of Piwigo. Hundred of plugins are there!'; 89 $lang['first_contact_title42'] = 'Languages'; 90 $lang['first_contact_stp42'] = 'Piwigo is multilingual. By default, the language displayed by Piwigo change according to the language of the browser of the visitor. If the language of the visitor is not availble, the language set by default is used.'; 91 $lang['first_contact_title43'] = 'It\'s been a great time'; 92 $lang['first_contact_stp43'] = 'This tour was quite long, but we only have seen a small part of how powerfull Piwigo is. Everything has a end, this overview is finished.<br>You can discover much deeper the features of Piwigo by taking an other tour or reading our documentation, on the piwigo.org website.'; 8 93 $lang[''] = ''; 9 94 $lang[''] = ''; -
extensions/TakeATour/language/fr_FR/plugin.lang.php
r27898 r28097 1 1 <?php 2 2 $lang['First Contact'] = 'Premier contact'; 3 $lang[' Launchthe Tour'] = 'Commencez la visite';3 $lang['Start the Tour'] = 'Commencez la visite'; 4 4 $lang[''] = ''; 5 5 $lang['Welcome in your Piwigo gallery'] = 'Bienvenue dans votre galerie Piwigo'; -
extensions/TakeATour/main.inc.php
r28060 r28097 26 26 } 27 27 28 if ( pwg_get_session_var('tour_to_launch') and defined('IN_ADMIN') and IN_ADMIN ) 28 if (pwg_get_session_var('tour_to_launch') and defined('IN_ADMIN') and IN_ADMIN and isset($_GET['page']) and $_GET['page']=="plugin-TakeATour" ) 29 { 30 pwg_unset_session_var('tour_to_launch'); 31 } 32 elseif ( pwg_get_session_var('tour_to_launch') and defined('IN_ADMIN') and IN_ADMIN) 29 33 { 30 34 global $conf; … … 35 39 } 36 40 } 41 37 42 function TAT_add_js_css() 38 43 { -
extensions/TakeATour/tours/first_contact/tour.tpl
r28059 r28097 1 1 {footer_script require='jquery.bootstrap-tour'}{literal} 2 // Instance the tour 2 3 3 var tour = new Tour({ 4 4 name: "first_contact", … … 7 7 }); 8 8 {/literal}{if $TAT_restart}tour.restart();{/if}{literal} 9 // Add your steps. Not too many, you don't really want to get your users sleepy 9 10 10 tour.addSteps([ 11 11 { 12 12 path: "{/literal}{$TAT_path}{literal}admin.php", 13 title: "{/literal}{' Welcome in your Piwigo gallery'|@translate}{literal}",14 content: "{/literal}{' Hello! I will be your guide to discover Piwigo. Please follow my instructions, and click Next (or use the arrows of your keyboard) to navigate. If you go in an other page of the administration, you will be redirected to the current page of the Tour.<br>Let\'s start by adding pictures!'|@translate}{literal}"13 title: "{/literal}{'first_contact_title1'|@translate}{literal}", 14 content: "{/literal}{'first_contact_stp1'|@translate}{literal}" 15 15 }, 16 16 { … … 19 19 element: ".icon-plus-circled", 20 20 reflex:true, 21 content: "{/literal}{'The link is here. Click Next to continue'|@translate}{literal}", 21 title: "{/literal}{'first_contact_title2'|@translate}{literal}", 22 content: "{/literal}{'first_contact_stp2'|@translate}{literal}", 22 23 }, 23 24 { … … 25 26 placement: "bottom", 26 27 element: ".selected_tab", 27 title: "{/literal}{' Add Photo Page'|@translate}{literal}",28 content: "{/literal}{' First tab to add photos from your browser, other tabs to add from a software, mobile or FTP'|@translate}{literal}",28 title: "{/literal}{'first_contact_title3'|@translate}{literal}", 29 content: "{/literal}{'first_contact_stp3'|@translate}{literal}", 29 30 }, 30 31 { … … 32 33 placement: "left", 33 34 element: "#albumSelection", 34 title: "{/literal}{' Lets add photo!'|@translate}{literal}",35 content: "{/literal}{' First choose an album; create one if there is no album yet.'|@translate}{literal}"35 title: "{/literal}{'first_contact_title4'|@translate}{literal}", 36 content: "{/literal}{'first_contact_stp4'|@translate}{literal}" 36 37 }, 37 38 {//5 … … 39 40 placement: "top", 40 41 element: "#uploadify", 41 content: "{/literal}{'Then click the button to select photos to send from your computer'|@translate}{literal}" 42 title: "{/literal}{'first_contact_title5'|@translate}{literal}", 43 content: "{/literal}{'first_contact_stp5'|@translate}{literal}" 42 44 }, 43 45 { 44 46 path: /admin\.php\?page=photos_add/, 45 redirect:function (tour) { tour.goTo(4);},47 redirect:function (tour) {window.location = "admin.php?page=photos_add";}, 46 48 placement: "left", 47 49 element: "#fileQueue", 48 title: "{/literal}{' '|@translate}{literal}",49 content: "{/literal}{' You see that photos are being listed. Add at least 2 pictures and when you\'re ready click the button Start Upload'|@translate}{literal}"50 title: "{/literal}{'first_contact_title6'|@translate}{literal}", 51 content: "{/literal}{'first_contact_stp6'|@translate}{literal}" 50 52 }, 51 53 { 52 54 path: /admin\.php\?page=photos_add/, 53 redirect:function (tour) { tour.goTo(4);},55 redirect:function (tour) {window.location = "admin.php?page=photos_add";}, 54 56 placement: "top", 55 57 element: "#photosAddContent legend", 56 content: "{/literal}{'Here a summary of your uploaded pictures. See that Piwigo has generated itself the thumbnails. You can know add more photos with the link at the bottom, edit the properties of a picture by cliking on it, or click to manage all the uploaded pictures in the Batch Manager...'|@translate}{literal}", 57 onPrev:function (tour) {tour.goTo(4);} 58 title: "{/literal}{'first_contact_title7'|@translate}{literal}", 59 content: "{/literal}{'first_contact_stp7'|@translate}{literal}", 60 prev:4 58 61 }, 59 62 { 60 63 path: /admin\.php\?page=photos_add/, 61 redirect:function (tour) { tour.goTo(4);},64 redirect:function (tour) {window.location = "admin.php?page=photos_add";}, 62 65 placement: "bottom", 63 66 element: "#batchLink", 64 67 reflex:true, 65 content: "{/literal}{'Let\'s edit them! Click on the link. If you don\'t see it click Prev to add at least 2 photos.'|@translate}{literal}", 66 onPrev:function (tour) {tour.goTo(4);} 68 title: "{/literal}{'first_contact_title8'|@translate}{literal}", 69 content: "{/literal}{'first_contact_stp8'|@translate}{literal}", 70 prev:4 67 71 }, 68 72 { … … 71 75 placement: "top", 72 76 element: "", 73 title: "{/literal}{' The Batch Manager'|@translate}{literal}",74 content: "{/literal}{' You are know in the Batch Manager, where you can batch edit multiple pictures. Here the Caddy is set as a filter because we comes from the upload result page.'|@translate}{literal}"77 title: "{/literal}{'first_contact_title9'|@translate}{literal}", 78 content: "{/literal}{'first_contact_stp9'|@translate}{literal}" 75 79 }, 76 80 {//10 … … 79 83 placement: "right", 80 84 element: ".icon-flag", 81 content: "{/literal}{'Here is the link to directly access to your caddy: that/s a tool for administrators to easily add pictures to a set in order to edit them in the Batch Manager. You can add photos to the caddy from the public picture page when logged as an admin, or using the action \"Add to caddy\" on the Batch Manager'|@translate}{literal}" 85 title: "{/literal}{'first_contact_title10'|@translate}{literal}", 86 content: "{/literal}{'first_contact_stp10'|@translate}{literal}" 82 87 }, 83 88 { … … 86 91 placement: "left", 87 92 element: "#checkActions", 88 title: "{/literal}{' How to edit a photos'|@translate}{literal}",89 content: "{/literal}{' So you can select from here one or more photos'|@translate}{literal}"93 title: "{/literal}{'first_contact_title11'|@translate}{literal}", 94 content: "{/literal}{'first_contact_stp11'|@translate}{literal}" 90 95 }, 91 96 { … … 94 99 placement: "top", 95 100 element: "#action", 96 content: "{/literal}{'then edit them using and action. But for instance, you can\'t -for now- batch edit descriptions since they are mostly unique'|@translate}{literal}" 101 title: "{/literal}{'first_contact_title12'|@translate}{literal}", 102 content: "{/literal}{'first_contact_stp12'|@translate}{literal}" 97 103 }, 98 104 { … … 101 107 placement: "bottom", 102 108 element: "#tabsheet .normal_tab", 103 content: "{/literal}{'You can edit descriptions and more from the batch manager in unit mode. But for now, let\'s stay in the global mode'|@translate}{literal}" 109 title: "{/literal}{'first_contact_title13'|@translate}{literal}", 110 content: "{/literal}{'first_contact_stp13'|@translate}{literal}" 104 111 }, 105 112 { … … 109 116 element: "#TAT_FC_14", 110 117 reflex:true, 111 content: "{/literal}{'We will see now the edition page of one picture. That page is reachable from here but also from the public picture page when logged as an administrator. Click on Edit or go next'|@translate}{literal}", 118 title: "{/literal}{'first_contact_title14'|@translate}{literal}", 119 content: "{/literal}{'first_contact_stp14'|@translate}{literal}", 112 120 onNext:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";} 113 121 }, … … 117 125 placement: "bottom", 118 126 element: ".selected_tab", 119 title: "{/literal}{' The edition page of a picture'|@translate}{literal}",120 content: "{/literal}{' On that page you can edit all the properties of a photo, for instance...'|@translate}{literal}"127 title: "{/literal}{'first_contact_title15'|@translate}{literal}", 128 content: "{/literal}{'first_contact_stp15'|@translate}{literal}" 121 129 }, 122 130 { … … 125 133 placement: "top", 126 134 element: "#TAT_FC_16", 127 content: "{/literal}{'here to add or remove the photo from albums. The link is virtual, no photos will be physcally moved ever.'|@translate}{literal}" 135 title: "{/literal}{'first_contact_title16'|@translate}{literal}", 136 content: "{/literal}{'first_contact_stp16'|@translate}{literal}" 128 137 }, 129 138 { … … 132 141 placement: "top", 133 142 element: "#TAT_FC_17", 134 content: "{/literal}{'and here to set the photo as a picture representative of an album. So you can set as a representative of a public album, a photo in a private album, which is ideal to set custom thumbnails for albums but the user won\'t see those pictures inside those albums. Like setting a portrait of someone as representative, for an album which contains photos of nature; it would be weird to see that photo of the man/woman among trees or animals.'|@translate}{literal}" 143 title: "{/literal}{'first_contact_title17'|@translate}{literal}", 144 content: "{/literal}{'first_contact_stp17'|@translate}{literal}" 135 145 }, 136 146 { … … 138 148 redirect:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";}, 139 149 placement: "top", 140 title: "{/literal}{' Manage albums'|@translate}{literal}",141 content: "{/literal}{' That previous example was just a small overview of tricks and how powerfull Piwigo is. So I\'ve told about private albums, but how can we manage albums? Click On album->Manage or hit Next'|@translate}{literal}"150 title: "{/literal}{'first_contact_title18'|@translate}{literal}", 151 content: "{/literal}{'first_contact_stp18'|@translate}{literal}" 142 152 }, 143 153 { … … 145 155 placement: "left", 146 156 element: "#content", 147 title: "{/literal}{' Manage Albums'|@translate}{literal}",148 content: "{/literal}{' Here are listed all the \'top\' albums, the ones at the root of your gallery. If you see an album with a dashed backgroung, it\'s an real physical album from a FTP synchro, which can\'t be moved or deleted from here. The others albums are called virtual albums.'|@translate}{literal}",157 title: "{/literal}{'first_contact_title19'|@translate}{literal}", 158 content: "{/literal}{'first_contact_stp19'|@translate}{literal}", 149 159 onPrev: function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";}, 150 160 … … 154 164 placement: "top", 155 165 element: "#categoryOrdering", 156 title: "{/literal}{' Manage Albums'|@translate}{literal}",157 content: "{/literal}{' When your mouse is hover a album, links and information appear. When you drag and drop an album -a rounded block-, you will change its position and then you can save or cancel your manual order.'|@translate}{literal}"166 title: "{/literal}{'first_contact_title20'|@translate}{literal}", 167 content: "{/literal}{'first_contact_stp20'|@translate}{literal}" 158 168 }, 159 169 { … … 161 171 placement: "left", 162 172 element: "#tabsheet:first-child", 163 title: "{/literal}{' Other Tabs'|@translate}{literal}",164 content: "{/literal}{' The next tab is a page where you can move any virtual album.<br>The permalink tab is to set a particular url for an album, for tecnhical reasons like to set a specific template or for just sending cool customized links.<br>But let\'s edit an album: click on Edit of a album'|@translate}{literal}"173 title: "{/literal}{'first_contact_title21'|@translate}{literal}", 174 content: "{/literal}{'first_contact_stp21'|@translate}{literal}" 165 175 }, 166 176 { … … 169 179 placement: "top", 170 180 element: ".selected_tab", 171 title: "{/literal}{' Album Edition Page'|@translate}{literal}",172 content: "{/literal}{' Like for a picture, here you can edit the properties of an album'|@translate}{literal}"181 title: "{/literal}{'first_contact_title22'|@translate}{literal}", 182 content: "{/literal}{'first_contact_stp22'|@translate}{literal}" 173 183 }, 174 184 { … … 177 187 placement: "top", 178 188 element: "#TAT_FC_23", 179 content: "{/literal}{'Locking a album means only administrators will be able to see that album: it\'s usually used when an admin is managing the properties of an album or don\'t want to publish the album immediatly'|@translate}{literal}" 189 title: "{/literal}{'first_contact_title23'|@translate}{literal}", 190 content: "{/literal}{'first_contact_stp23'|@translate}{literal}" 180 191 }, 181 192 { … … 184 195 placement: "bottom", 185 196 element: ".tabsheet", 186 content: "{/literal}{'Certainly, one of the most important page in the permission page of an album. Click on the permission tab or click next'|@translate}{literal}" 197 title: "{/literal}{'first_contact_title24'|@translate}{literal}", 198 content: "{/literal}{'first_contact_stp24'|@translate}{literal}" 187 199 }, 188 200 {//25 … … 191 203 placement: "left", 192 204 element: "#content", 193 title: "{/literal}{' Album Permission'|@translate}{literal}",194 content: "{/literal}{' As you can read in the Help of your Piwigo -link at the top right-, album permissions are set by groups and users. You can directly set private/public multiple albums using the Administration » Albums » Properties page.'|@translate}{literal}"205 title: "{/literal}{'first_contact_title25'|@translate}{literal}", 206 content: "{/literal}{'first_contact_stp25'|@translate}{literal}" 195 207 }, 196 208 { … … 199 211 placement: "top", 200 212 element: "#selectStatus", 201 content: "{/literal}{'Here you can set the current album as private, then grant access to users and groups. By default, permissions are not recursive for sub albums, but upper-albums will be granted with the same permission in order to let the granted users browse to the album.'|@translate}{literal}" 213 title: "{/literal}{'first_contact_title26'|@translate}{literal}", 214 content: "{/literal}{'first_contact_stp26'|@translate}{literal}" 202 215 }, 203 216 { … … 206 219 placement: "top", 207 220 element: "#selectStatus", 208 content: "{/literal}{'Important fact: the webmasters and administrators are not omniscient when browsing the public part, but they can access to every album and photos on the admin part.'|@translate}{literal}" 221 title: "{/literal}{'first_contact_title27'|@translate}{literal}", 222 content: "{/literal}{'first_contact_stp27'|@translate}{literal}" 209 223 }, 210 224 { … … 212 226 redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}-permissions";}, 213 227 placement: "top", 214 title: "{/literal}{' Configuration'|@translate}{literal}",215 content: "{/literal}{' Now we will look at the options available to set Piwigo working your way. Click on Configuration->Options or just hit Next.'|@translate}{literal}"216 }, 217 { 218 path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration", 219 placement: "top", 220 element: "", 221 title: "{/literal}{' Configuration->Options->General'|@translate}{literal}",222 content: "{/literal}{' Here, on that first page, you will set the essential and basic configuration of your gallery.'|@translate}{literal}"228 title: "{/literal}{'first_contact_title28'|@translate}{literal}", 229 content: "{/literal}{'first_contact_stp28'|@translate}{literal}" 230 }, 231 { 232 path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration", 233 placement: "top", 234 element: "", 235 title: "{/literal}{'first_contact_title29'|@translate}{literal}", 236 content: "{/literal}{'first_contact_stp29'|@translate}{literal}" 223 237 }, 224 238 {//30 … … 226 240 placement: "right", 227 241 element: "#gallery_title", 228 content: "{/literal}{'Let\'s start by changing the tittle'|@translate}{literal}" 242 title: "{/literal}{'first_contact_title30'|@translate}{literal}", 243 content: "{/literal}{'first_contact_stp30'|@translate}{literal}" 229 244 }, 230 245 { … … 232 247 placement: "right", 233 248 element: "#page_banner", 234 content: "{/literal}{'Then the banner, which will be displayed on top of every pages. As you can see, HTML tags are allowed here. You can also use the %gallery_title% tag to display the tittle you just typed above.'|@translate}{literal}" 249 title: "{/literal}{'first_contact_title31'|@translate}{literal}", 250 content: "{/literal}{'first_contact_stp31'|@translate}{literal}" 235 251 }, 236 252 { … … 239 255 placement: "top", 240 256 element: ".formButtons input", 241 content: "{/literal}{'Now save you changes'|@translate}{literal}" 242 }, 243 { 244 path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration", 245 placement: "top", 246 title: "{/literal}{'Guest settings'|@translate}{literal}", 247 content: "{/literal}{'Just a final word about the options, the \'Guest settings\' page is to set the preferences of unregistered visitors. Each time Piwigo refers to \'guest\' that means unregistered visitors.<br>Let\'s continue about Configuration: click on Configuration->Themes or just hit Next.'|@translate}{literal}", 248 onPrev:function (tour) {tour.goTo(30);} 257 title: "{/literal}{'first_contact_title32'|@translate}{literal}", 258 content: "{/literal}{'first_contact_stp32'|@translate}{literal}" 259 }, 260 { 261 path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration", 262 placement: "top", 263 title: "{/literal}{'first_contact_stp33'|@translate}{literal}", 264 content: "{/literal}{'first_contact_stp33'|@translate}{literal}", 265 prev:30 249 266 }, 250 267 { … … 252 269 placement: "top", 253 270 element: "", 254 title: "{/literal}{' Themes'|@translate}{literal}",255 content: "{/literal}{' Themes are one of the three way to customize your Piwigo, with Plugins and Templates. Themes installed are listed here.<br>More than one theme can be enabled: users can change their theme by choosing one among the one enabled here, if the option \'Allow user customization\' is checked on the Option page.'|@translate}{literal}"271 title: "{/literal}{'first_contact_title34'|@translate}{literal}", 272 content: "{/literal}{'first_contact_stp34'|@translate}{literal}" 256 273 }, 257 274 {//35 … … 259 276 placement: "top", 260 277 element: "#TAT_FC_35", 261 title: "{/literal}{' Themes'|@translate}{literal}",262 content: "{/literal}{' Themes can also be set as Default, which means that\'s the theme for unregistred visitors (guests, you remember?) and any new registred user will be have this theme. But for any previously registred users, the theme won\'t change until you do it from the User Management page or you disable their theme: be carefull, you might disturb your users by changing their whole display.'|@translate}{literal}"278 title: "{/literal}{'first_contact_title35'|@translate}{literal}", 279 content: "{/literal}{'first_contact_stp35'|@translate}{literal}" 263 280 }, 264 281 { … … 266 283 placement: "top", 267 284 element: "", 268 title: "{/literal}{' Themes'|@translate}{literal}",269 content: "{/literal}{' Themes have a system of dependency: that\'s why some theme can\'t be deleted (a parent theme can\'t be deleted if a child theme is enabled) or others can\'t be enabled (a child theme need its parent theme). For instance, when you put you\'re mouse over a Delete link, if the theme can\'t be deleted, a information bubble will explain you why.'|@translate}{literal}"285 title: "{/literal}{'first_contact_title36'|@translate}{literal}", 286 content: "{/literal}{'first_contact_stp36'|@translate}{literal}" 270 287 }, 271 288 { … … 273 290 placement: "right", 274 291 element: ".tabsheet", 275 title: "{/literal}{' Themes'|@translate}{literal}",276 content: "{/literal}{' To install new themes, you can directly download them from the tab \'Add a theme\'. Only the themes marked as compatible with your version of Piwigo are showed.<br>Let\'s discover the plugins now! Click on Plugin->Manage'|@translate}{literal}"292 title: "{/literal}{'first_contact_title37'|@translate}{literal}", 293 content: "{/literal}{'first_contact_stp37'|@translate}{literal}" 277 294 }, 278 295 { … … 280 297 placement: "left", 281 298 element: "", 282 title: "{/literal}{' Plugins'|@translate}{literal}",283 content: "{/literal}{' Plugins are very easy ways to customize your Piwigo. They can do almost anything you can imagine from small text addition to complete features, like the Community plugin which allows non admistrators users to upload without entering to the administration part.'|@translate}{literal}"299 title: "{/literal}{'first_contact_title38'|@translate}{literal}", 300 content: "{/literal}{'first_contact_stp38'|@translate}{literal}" 284 301 }, 285 302 { … … 287 304 placement: "left", 288 305 element: "#content", 289 title: "{/literal}{' Plugins'|@translate}{literal}",290 content: "{/literal}{' On that first page, are listed the installed plugins. At the top, are listed the plugins activated, which are currently running. At the bottom, the plugins which are installed in the /plugins folder, but disabled. Deleting a plugin means that any trace of the plugin will be removed (files, options etc). For most of the plugins, disabling will keep the data registered by the plugins.'|@translate}{literal}"291 }, 292 { 306 title: "{/literal}{'first_contact_title39'|@translate}{literal}", 307 content: "{/literal}{'first_contact_stp39'|@translate}{literal}" 308 }, 309 {//40 293 310 path: "{/literal}{$TAT_path}{literal}admin.php?page=plugins", 294 311 placement: "bottom", 295 312 element: "#TakeATour", 296 content: "{/literal}{'Here it\'s me! Don\'t disable me now, but you can see you can Disable or Restore an activated plugin.'|@translate}{literal}" 313 title: "{/literal}{'first_contact_title40'|@translate}{literal}", 314 content: "{/literal}{'first_contact_stp40'|@translate}{literal}" 297 315 }, 298 316 { … … 300 318 placement: "right", 301 319 element: ".tabsheet", 302 content: "{/literal}{'You can see on the last tab all the plugins available for your version of Piwigo. Hundred of plugins are there!'|@translate}{literal}" 320 title: "{/literal}{'first_contact_title41'|@translate}{literal}", 321 content: "{/literal}{'first_contact_stp41'|@translate}{literal}" 303 322 }, 304 323 { 305 324 path: "{/literal}{$TAT_path}{literal}admin.php?page=languages", 306 title: "{/literal}{' Languages'|@translate}{literal}",307 content: "{/literal}{' Piwigo is multilingual. By default, the language displayed by Piwigo change according to the language of the browser of the visitor. If the language of the visitor is not availble, the language set by default is used.'|@translate}{literal}"325 title: "{/literal}{'first_contact_title42'|@translate}{literal}", 326 content: "{/literal}{'first_contact_stp42'|@translate}{literal}" 308 327 }, 309 328 { … … 311 330 placement: "top", 312 331 element: "", 313 title: "{/literal}{' It\'s been a great time'|@translate}{literal}",314 content: "{/literal}{' This tour was quite long, but we only have seen a small part of how powerfull Piwigo is. Everything has a end, this overview is finished.<br>You can discover much deeper the features of Piwigo by taking an other tour or reading our documentation, on the piwigo.org website'|@translate}{literal}"332 title: "{/literal}{'first_contact_title43'|@translate}{literal}", 333 content: "{/literal}{'first_contact_stp43'|@translate}{literal}" 315 334 } 316 335 ]); -
extensions/TakeATour/tpl/admin.tpl
r28061 r28097 6 6 <fieldset> 7 7 <legend>{'First Contact'|@translate}</legend> 8 <div class="TAT_description">{' Recommended for beginners, this tour introduce you Piwigo, its basic features. It will start by adding pictures, then manage them. The tour continues with album management and permissions, and ends on the customization using the configuration, the themes and the plugins.'|@translate}</div>8 <div class="TAT_description">{'first_contact_descrp'|@translate}</div> 9 9 <form action="{$F_ACTION}" method="post"> 10 10 <input type="hidden" name="submited_tour" value="first_contact"> 11 <input type="submit" name="button2" id="button2" value="{' Launchthe Tour'|@translate}">11 <input type="submit" name="button2" id="button2" value="{'Start the Tour'|@translate}"> 12 12 </form> 13 13 </fieldset>
Note: See TracChangeset
for help on using the changeset viewer.