|
@@ -1,43 +1,72 @@
|
|
|
var $ = require('jquery');
|
|
|
|
|
|
-var initChangeformTabs = function() {
|
|
|
- $('.changeform').each(function() {
|
|
|
- var $changeform = $(this);
|
|
|
- var $tabItems = $changeform.find('.changeform-tabs-item');
|
|
|
- var $modules = $changeform.find('.module');
|
|
|
+var ChangeFormTabs = function($changeform) {
|
|
|
+ this.$changeform = $changeform;
|
|
|
+};
|
|
|
|
|
|
- if ($tabItems.length == 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ChangeFormTabs.prototype = {
|
|
|
+ getContentWrappers: function() {
|
|
|
+ var $container = this.$changeform.find('#content-main > form > div');
|
|
|
+ var $modules = $container.find('> .module');
|
|
|
+ var $inlines = $container.find('> .inline-group');
|
|
|
|
|
|
- var showTab = function(selector) {
|
|
|
- selector = selector.replace(/^#\/?/, '');
|
|
|
+ return $().add($modules).add($inlines);
|
|
|
+ },
|
|
|
+ getHashSelector: function(hash) {
|
|
|
+ var result = hash.match(/^(#(\/tab\/(.+)\/)?)?$/i);
|
|
|
|
|
|
- var $module = selector.length > 0 ? $modules.filter('#' + selector) : $();
|
|
|
+ if (result == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
- if ($module && $module.length == 0) {
|
|
|
- selector = $tabItems.first().find('a').attr('href').replace(/^#\/?/, '');
|
|
|
- }
|
|
|
+ return result[3] != undefined ? result[3] : '';
|
|
|
+ },
|
|
|
+ showTab: function(hash, firstOnError) {
|
|
|
+ var $tabItems = this.$changeform.find('.changeform-tabs-item');
|
|
|
+ var $contentWrappers = this.getContentWrappers();
|
|
|
+ var selector = this.getHashSelector(hash);
|
|
|
|
|
|
- var $tabItem = $tabItems.find('a[href="#/' + selector + '"]').closest('.changeform-tabs-item');
|
|
|
+ if (!firstOnError && selector == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
+ if (selector == null || selector.length == 0) {
|
|
|
+ selector = this.getHashSelector(
|
|
|
+ $tabItems.first().find('.changeform-tabs-item-link').attr('href')
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ var $contentWrapper = $contentWrappers.filter('.' + selector);
|
|
|
+ var $tabItem = $tabItems
|
|
|
+ .find('.changeform-tabs-item-link[href="#/tab/' + selector + '/"]')
|
|
|
+ .closest('.changeform-tabs-item');
|
|
|
|
|
|
- $tabItems.removeClass('selected');
|
|
|
- $tabItem.addClass('selected');
|
|
|
- $module = $modules.removeClass('selected').filter('#' + selector).addClass('selected');
|
|
|
- $module.find('select').trigger('select:init');
|
|
|
- };
|
|
|
+ $tabItems.removeClass('selected');
|
|
|
+ $tabItem.addClass('selected');
|
|
|
|
|
|
- $('.changeform-tabs-item-link').click(function (e) {
|
|
|
- var moduleSelector = $(this).attr('href');
|
|
|
+ $contentWrappers.removeClass('selected');
|
|
|
+ $contentWrapper.addClass('selected');
|
|
|
+ },
|
|
|
+ initTabs: function() {
|
|
|
+ var self = this;
|
|
|
|
|
|
- showTab(moduleSelector);
|
|
|
+ $(window).on('hashchange',function() {
|
|
|
+ self.showTab(location.hash, false);
|
|
|
});
|
|
|
|
|
|
- showTab(location.hash);
|
|
|
- });
|
|
|
+ this.showTab(location.hash, true);
|
|
|
+ },
|
|
|
+ run: function() {
|
|
|
+ try {
|
|
|
+ this.initTabs();
|
|
|
+ } catch (e) {
|
|
|
+ console.error(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
$(document).ready(function() {
|
|
|
- initChangeformTabs();
|
|
|
+ $('.change-form').each(function() {
|
|
|
+ new ChangeFormTabs($(this)).run();
|
|
|
+ });
|
|
|
});
|