Changeset 28097


Ignore:
Timestamp:
Apr 6, 2014, 3:51:22 PM (10 years ago)
Author:
flop25
Message:

every steps move to lang file
script debugged/enhanced

Location:
extensions/TakeATour
Files:
1 deleted
8 edited

Legend:

Unmodified
Added
Removed
  • extensions/TakeATour/js/custom-bootstrap-tour-standalone.js

    r27993 r28097  
    819819          _this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true.");
    820820        }
     821        if (step.title  === "" & step.content  === "") {
     822            if (skipToPrevious) {
     823              _this._showPrevStep();
     824            } else {
     825              _this._showNextStep();
     826            }
     827            return;
     828        }
    821829        if (step.backdrop) {
    822830          _this._showBackdrop(!_this._isOrphan(step) ? step.element : void 0);
     
    975983        $.extend(options, step.options);
    976984      }
    977       if (step.reflex) {
     985      if (step.reflex & !isOrphan) {
    978986        $element.css("cursor", "pointer").on("click.tour-" + this._options.name, (function(_this) {
    979987          return function() {
  • extensions/TakeATour/js/custom-bootstrap-tour-standalone.min.js

    r27898 r28097  
    1 /* ===========================================================
    2 # bootstrap-tour - v0.9.0
    3 # http://bootstraptour.com
    4 # ==============================================================
    5 # Copyright 2012-2013 Ulrich Sossou
    6 #
    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 at
    10 #
    11 #     http://www.apache.org/licenses/LICENSE-2.0
    12 #
    13 # Unless required by applicable law or agreed to in writing, software
    14 # 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 and
    17 # limitations under the License.
    18 */
    19 /* ========================================================================
    20  * Bootstrap: tooltip.js v3.1.0
    21  * http://getbootstrap.com/javascript/#tooltip
    22  * Inspired by the original jQuery.tipsy by Jason Frame
    23  * ========================================================================
    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 DEFINITION
    33   // ===============================
    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   = null
    42 
    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: false
    56   }
    57 
    58   Tooltip.prototype.init = function (type, element, options) {
    59     this.enabled  = true
    60     this.type     = type
    61     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.DEFAULTS
    87   }
    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.delay
    96       }
    97     }
    98 
    99     return options
    100   }
    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] = value
    108     })
    109 
    110     return options
    111   }
    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()) return
    150       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.placement
    161 
    162       var autoToken = /\s?auto?\s?/i
    163       var autoPlace = autoToken.test(placement)
    164       if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
    165 
    166       $tip
    167         .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].offsetWidth
    175       var actualHeight = $tip[0].offsetHeight
    176 
    177       if (autoPlace) {
    178         var $parent = this.$element.parent()
    179 
    180         var orgPlacement = placement
    181         var docScroll    = document.documentElement.scrollTop || document.body.scrollTop
    182         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().left
    185 
    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                     placement
    191 
    192         $tip
    193           .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 = null
    201 
    202       var complete = function() {
    203         that.$element.trigger('shown.bs.' + that.type)
    204       }
    205 
    206       $.support.transition && this.$tip.hasClass('fade') ?
    207         $tip
    208           .one($.support.transition.end, complete)
    209           .emulateTransitionEnd(150) :
    210         complete()
    211     }
    212   }
    213 
    214   Tooltip.prototype.applyPlacement = function (offset, placement) {
    215     var replace
    216     var $tip   = this.tip()
    217     var width  = $tip[0].offsetWidth
    218     var height = $tip[0].offsetHeight
    219 
    220     // manually read margins because getBoundingClientRect includes difference
    221     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/9
    225     if (isNaN(marginTop))  marginTop  = 0
    226     if (isNaN(marginLeft)) marginLeft = 0
    227 
    228     offset.top  = offset.top  + marginTop
    229     offset.left = offset.left + marginLeft
    230 
    231     // $.fn.offset doesn't round pixel values
    232     // so we use setOffset directly with our own function B-0
    233     $.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 itself
    245     var actualWidth  = $tip[0].offsetWidth
    246     var actualHeight = $tip[0].offsetHeight
    247 
    248     if (placement == 'top' && actualHeight != height) {
    249       replace = true
    250       offset.top = offset.top + height - actualHeight
    251     }
    252 
    253     if (/bottom|top/.test(placement)) {
    254       var delta = 0
    255 
    256       if (offset.left < 0) {
    257         delta       = offset.left * -2
    258         offset.left = 0
    259 
    260         $tip.offset(offset)
    261 
    262         actualWidth  = $tip[0].offsetWidth
    263         actualHeight = $tip[0].offsetHeight
    264       }
    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 = this
    288     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()) return
    299 
    300     $tip.removeClass('in')
    301 
    302     $.support.transition && this.$tip.hasClass('fade') ?
    303       $tip
    304         .one($.support.transition.end, complete)
    305         .emulateTransitionEnd(150) :
    306       complete()
    307 
    308     this.hoverState = null
    309 
    310     return this
    311   }
    312 
    313   Tooltip.prototype.fixTitle = function () {
    314     var $e = this.$element
    315     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.offsetHeight
    329     }, 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 title
    341     var $e = this.$element
    342     var o  = this.options
    343 
    344     title = $e.attr('data-original-title')
    345       || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
    346 
    347     return title
    348   }
    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 = null
    362       this.options  = null
    363     }
    364   }
    365 
    366   Tooltip.prototype.enable = function () {
    367     this.enabled = true
    368   }
    369 
    370   Tooltip.prototype.disable = function () {
    371     this.enabled = false
    372   }
    373 
    374   Tooltip.prototype.toggleEnabled = function () {
    375     this.enabled = !this.enabled
    376   }
    377 
    378   Tooltip.prototype.toggle = function (e) {
    379     var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
    380     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 DEFINITION
    390   // =========================
    391 
    392   var old = $.fn.tooltip
    393 
    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' && option
    399 
    400       if (!data && option == 'destroy') return
    401       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 = Tooltip
    407 
    408 
    409   // TOOLTIP NO CONFLICT
    410   // ===================
    411 
    412   $.fn.tooltip.noConflict = function () {
    413     $.fn.tooltip = old
    414     return this
    415   }
    416 
    417 }(jQuery);
    418 
    419 /* ========================================================================
    420  * Bootstrap: popover.js v3.1.0
    421  * http://getbootstrap.com/javascript/#popovers
    422  * ========================================================================
    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 DEFINITION
    432   // ===============================
    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.js
    449   // ================================
    450 
    451   Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
    452 
    453   Popover.prototype.constructor = Popover
    454 
    455   Popover.prototype.getDefaults = function () {
    456     return Popover.DEFAULTS
    457   }
    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 events
    466       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 do
    472     // 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.$element
    482     var o  = this.options
    483 
    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.$tip
    497   }
    498 
    499 
    500   // POPOVER PLUGIN DEFINITION
    501   // =========================
    502 
    503   var old = $.fn.popover
    504 
    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' && option
    510 
    511       if (!data && option == 'destroy') return
    512       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 = Popover
    518 
    519 
    520   // POPOVER NO CONFLICT
    521   // ===================
    522 
    523   $.fn.popover.noConflict = function () {
    524     $.fn.popover = old
    525     return this
    526   }
    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'>&laquo; Prev</button>              <button class='btn btn-sm btn-default' data-role='next'>Next &raquo;</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: false
    570       };
    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.onResume
    613         }, 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.element
    1000       }).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.
     1Visit 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  
    11<?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.';
    893$lang[''] = '';
    994$lang[''] = '';
  • extensions/TakeATour/language/fr_FR/plugin.lang.php

    r27898 r28097  
    11<?php
    22$lang['First Contact'] = 'Premier contact';
    3 $lang['Launch the Tour'] = 'Commencez la visite';
     3$lang['Start the Tour'] = 'Commencez la visite';
    44$lang[''] = '';
    55$lang['Welcome in your Piwigo gallery'] = 'Bienvenue dans votre galerie Piwigo';
  • extensions/TakeATour/main.inc.php

    r28060 r28097  
    2626}
    2727
    28 if ( pwg_get_session_var('tour_to_launch') and defined('IN_ADMIN') and IN_ADMIN  )
     28if (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}
     32elseif ( pwg_get_session_var('tour_to_launch') and defined('IN_ADMIN') and IN_ADMIN)
    2933{
    3034  global $conf;
     
    3539  }
    3640}
     41
    3742function TAT_add_js_css()
    3843{
  • extensions/TakeATour/tours/first_contact/tour.tpl

    r28059 r28097  
    11{footer_script require='jquery.bootstrap-tour'}{literal}
    2 // Instance the tour
     2
    33var tour = new Tour({
    44  name: "first_contact",
     
    77});
    88{/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
    1010tour.addSteps([
    1111  {
    1212    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}"
    1515  },
    1616  {
     
    1919    element: ".icon-plus-circled",
    2020    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}",
    2223  },
    2324  {
     
    2526    placement: "bottom",
    2627    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}",
    2930  },
    3031  {
     
    3233    placement: "left",
    3334    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}"
    3637  },
    3738  {//5
     
    3940    placement: "top",
    4041    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}"
    4244  },
    4345  {
    4446    path: /admin\.php\?page=photos_add/,
    45     redirect:function (tour) {tour.goTo(4);},
     47    redirect:function (tour) {window.location = "admin.php?page=photos_add";},
    4648    placement: "left",
    4749    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}"
    5052  },
    5153  {
    5254    path: /admin\.php\?page=photos_add/,
    53     redirect:function (tour) {tour.goTo(4);},
     55    redirect:function (tour) {window.location = "admin.php?page=photos_add";},
    5456    placement: "top",
    5557    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
    5861  },
    5962  {
    6063    path: /admin\.php\?page=photos_add/,
    61     redirect:function (tour) {tour.goTo(4);},
     64    redirect:function (tour) {window.location = "admin.php?page=photos_add";},
    6265    placement: "bottom",
    6366    element: "#batchLink",
    6467    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
    6771  },
    6872  {
     
    7175    placement: "top",
    7276    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}"
    7579  },
    7680  {//10
     
    7983    placement: "right",
    8084    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}"
    8287  },
    8388  {
     
    8691    placement: "left",
    8792    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}"
    9095  },
    9196  {
     
    9499    placement: "top",
    95100    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}"
    97103  },
    98104  {
     
    101107    placement: "bottom",
    102108    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}"
    104111  },
    105112  {
     
    109116    element: "#TAT_FC_14",
    110117    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}",
    112120    onNext:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";}
    113121  },
     
    117125    placement: "bottom",
    118126    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}"
    121129  },
    122130  {
     
    125133    placement: "top",
    126134    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}"
    128137  },
    129138  {
     
    132141    placement: "top",
    133142    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}"
    135145  },
    136146  {
     
    138148    redirect:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
    139149    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}"
    142152  },
    143153  {
     
    145155    placement: "left",
    146156    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}",
    149159    onPrev: function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
    150160
     
    154164    placement: "top",
    155165    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}"
    158168  },
    159169  {
     
    161171    placement: "left",
    162172    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}"
    165175  },
    166176  {
     
    169179    placement: "top",
    170180    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}"
    173183  },
    174184  {
     
    177187    placement: "top",
    178188    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}"
    180191  },
    181192  {
     
    184195    placement: "bottom",
    185196    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}"
    187199  },
    188200  {//25
     
    191203    placement: "left",
    192204    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}"
    195207  },
    196208  {
     
    199211    placement: "top",
    200212    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}"
    202215  },
    203216  {
     
    206219    placement: "top",
    207220    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}"
    209223  },
    210224  {
     
    212226    redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}-permissions";},
    213227    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}"
    223237  },
    224238  {//30
     
    226240    placement: "right",
    227241    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}"
    229244  },
    230245  {
     
    232247    placement: "right",
    233248    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}"
    235251  },
    236252  {
     
    239255    placement: "top",
    240256    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
    249266  },
    250267  {
     
    252269    placement: "top",
    253270    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}"
    256273  },
    257274  {//35
     
    259276    placement: "top",
    260277    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}"
    263280  },
    264281  {
     
    266283    placement: "top",
    267284    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}"
    270287  },
    271288  {
     
    273290    placement: "right",
    274291    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}"
    277294  },
    278295  {
     
    280297    placement: "left",
    281298    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}"
    284301  },
    285302  {
     
    287304    placement: "left",
    288305    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
    293310    path: "{/literal}{$TAT_path}{literal}admin.php?page=plugins",
    294311    placement: "bottom",
    295312    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}"
    297315  },
    298316  {
     
    300318    placement: "right",
    301319    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}"
    303322  },
    304323  {
    305324    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}"
    308327  },
    309328  {
     
    311330    placement: "top",
    312331    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}"
    315334  }
    316335]);
  • extensions/TakeATour/tpl/admin.tpl

    r28061 r28097  
    66  <fieldset>
    77    <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>
    99    <form action="{$F_ACTION}" method="post">
    1010      <input type="hidden" name="submited_tour" value="first_contact">
    11       <input type="submit" name="button2" id="button2" value="{'Launch the Tour'|@translate}">
     11      <input type="submit" name="button2" id="button2" value="{'Start the Tour'|@translate}">
    1212    </form>
    1313  </fieldset>
Note: See TracChangeset for help on using the changeset viewer.