...auf dem Weg nach bootstrap city
Re: ...auf dem Weg nach bootstrap city
Super, alles klar, kapiert. So mach ich es. Es bleibt also auf "Standard".
Nur ums bis zum Ende zu durchdringen: Das Listenfeld mit Auswahl "Standard" und "custom-settings.php" ist also quasi überflüssig, wenn man eh nur die conf.template_default.inc.php hardcoden soll?
Nur ums bis zum Ende zu durchdringen: Das Listenfeld mit Auswahl "Standard" und "custom-settings.php" ist also quasi überflüssig, wenn man eh nur die conf.template_default.inc.php hardcoden soll?
Re: ...auf dem Weg nach bootstrap city
Das brauchst du NUR dann, wenn du einzelne Kategorie deines Site variieren möchtest, der überwiegende "Rest" ist dann eben STANDARD!
Re: ...auf dem Weg nach bootstrap city
So, dank der sehr ausführlichen Anleitung von Old Boy habe ich es geschaft, die CP mit einem div zu umschließen. Danke nochmals!
Re: ...auf dem Weg nach bootstrap city
... aber leider klappt es nicht bei einem Onpager, zumindest nicht bei meiner Vorlage!?
Re: ...auf dem Weg nach bootstrap city
Na Gott sei Dank, ich hatte schon die grössten Befürchtungen
Wäre nun die Frage zu klären ... was willst du denn eigentlich erreichen?
Man muss ja nix kompliziertes nur deshalb machen, weil es geht !!!
Gibt's denn was ONLINE zu sehen???
Wäre nun die Frage zu klären ... was willst du denn eigentlich erreichen?
Man muss ja nix kompliziertes nur deshalb machen, weil es geht !!!
Gibt's denn was ONLINE zu sehen???
Re: ...auf dem Weg nach bootstrap city
Ja, ich hab's jetzt selber gesehen... die Sache mit dem Nachladen von ContentParts per SHOW_CONTENT und der cpgroup_custom Lösung stehen sich im Weg
Wahrscheinlich ist die Reihenfolge der internen Abarbeitung die Ursache... aber das ist reine Spekulation!
OK, ich habe dann noch mal meine alten Notizen ausgegraben und das Ganze mit Bordmitteln für DUMMYS aufgesetzt...
klappt ganz passabel, selbst die "Navigation" funktioniert
http://forum.phpwcms.org/viewtopic.php?f=2&t=24749
Wahrscheinlich ist die Reihenfolge der internen Abarbeitung die Ursache... aber das ist reine Spekulation!
OK, ich habe dann noch mal meine alten Notizen ausgegraben und das Ganze mit Bordmitteln für DUMMYS aufgesetzt...
klappt ganz passabel, selbst die "Navigation" funktioniert
http://forum.phpwcms.org/viewtopic.php?f=2&t=24749
Re: ...auf dem Weg nach bootstrap city
Zeig malOld Boy wrote:Hier werden wir versuchen eine clearfix vor dem 3. Contentpart dann - und nur dann - einzubinden, wenn die responsive Darstellung lediglich 2 CPs nebeneinander anzeigen soll.
It's mostly all about maintaining two or three customer's sites Still supporter for the band Mykket Morton. Visit Mykket Morton on FB. Listen Mykket Morton and live videos on youtube.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.
Re: ...auf dem Weg nach bootstrap city + print
Kann es sein, dass bootstrap alles printet, auch die Linkziele usw und nicht auf NO_PRINT reagiert?
Bisher dachte ich immer, dass phpwcms das steuert...
EDIT: für die Links (dann ohne xy.html) gibt es diese Möglichkeit:
Bisher dachte ich immer, dass phpwcms das steuert...
EDIT: für die Links (dann ohne xy.html) gibt es diese Möglichkeit:
Code: Select all
@media print {
a[href]:after {
content: none;
}
}
It's mostly all about maintaining two or three customer's sites Still supporter for the band Mykket Morton. Visit Mykket Morton on FB. Listen Mykket Morton and live videos on youtube.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.
Re: ...auf dem Weg nach bootstrap city
Hallo erstmal,
vorab erst einmal vielen Dank allen vorherigen Schreibern für ihre ausführlichen Anleitungen und Hinweise.
Dazu zählt beispielsweise auch der Hinweis, wie die Spalten, Zeilen oder Abschnittsbereiche eines Layouts, hier am Beispiel von Bootstrap, mit Hilfe eines globalen Templates definiert werden können.
Bislang hatte ich {hoserunter} das Spaltenlayout global definiert unter:
--> admin --> vorlagen bzw. unter:
--> admin --> templates
sowie durch eine Anpassung der Templates für die jeweiligen Content Parts.
Darüber hinaus, lieber Old Boy, habe ich nun endlich auch das Prinzip der Gruppierung von Content Parts verstanden.
Oder anders ausgedrückt, die Standardwerte werden von den eigenen, individuellen Settings überschrieben.
@update: sofern für die Strukturebene die jeweiligen eigenen Settings ausgewählt wurden.
Es gilt aber auch weiterhin, dass das, was gegebenenfalls später überschrieben werden soll, zuvor global definiert ist:
BEISPIEL:
In diesem Beispiel ergänze ich global ein --> jumbotron in der Datei:
/include/config/conf.template_default.inc.php
In der oder den Dateien mit den eigenen Einstellungen unter:
/template/inc_settings/template_default/custom_settings.php oder bspw.
/template/inc_settings/template_default/eigene_einstellung_01.php
füge ich den gleichen Inhalt ein und ergänze in diesem Beispiel für das --> Bootstrap --> Jumbotron eine weitere CSS-Klasse --> MYNICEBLUEGRADIENT:
Das funktioniert alles wunderbar, verlässlich, sauber. Problematisch finde ich jedoch, dass mit den Änderungen in
/include/config/conf.template_default.inc.php
eine Datei aus dem --> git --> Branch origin:master --> repository betroffen ist.
Wenn OG Aktualisierungen vornimmt, werden meine Änderungen womöglich überschrieben!?
Das versuche ich zu umgehen, indem ich einerseits die Änderungen separat speichere und andererseits lokal mit eigenen Branches arbeite.
Beispielsweise habe ich bei einem neuen Projekt zunächst --> git --> Branch origin:master heruntergeladen.
Danach erstelle ich sofort einen neuen --> Branch "myDevDingsBums", ändere, ergänze, committe.
Und dann merge ich myDEV into MASTER.
Wenn OG dann aktualisiert und ich --> master abrufe und merge, müsste doch alles TUTTI sein, oder?
Ist das der absolut perfekte workflow?
vorab erst einmal vielen Dank allen vorherigen Schreibern für ihre ausführlichen Anleitungen und Hinweise.
Dazu zählt beispielsweise auch der Hinweis, wie die Spalten, Zeilen oder Abschnittsbereiche eines Layouts, hier am Beispiel von Bootstrap, mit Hilfe eines globalen Templates definiert werden können.
Bislang hatte ich {hoserunter} das Spaltenlayout global definiert unter:
--> admin --> vorlagen bzw. unter:
--> admin --> templates
sowie durch eine Anpassung der Templates für die jeweiligen Content Parts.
Darüber hinaus, lieber Old Boy, habe ich nun endlich auch das Prinzip der Gruppierung von Content Parts verstanden.
Es gilt weiterhin das Prinzip, dass die eigenen Einstellungen die globalen Standardwerte überschreiben.update wrote:Das bedeutet im Klartext:
Ich schreibe obige Anweisungen in die conf.template.default.inc.php- Datei und nur da rein. So gut wie alle anderen Anweisungen in einer custom.settings.php sind jedoch auf Strukturebenen beziehbar (bis auf zB body id und class)
Oder anders ausgedrückt, die Standardwerte werden von den eigenen, individuellen Settings überschrieben.
@update: sofern für die Strukturebene die jeweiligen eigenen Settings ausgewählt wurden.
Es gilt aber auch weiterhin, dass das, was gegebenenfalls später überschrieben werden soll, zuvor global definiert ist:
Ich ändere daher immer beide Dateien bzw. überprüfe, ob in beiden Dateien alle erforderlichen Variablen beschrieben sind.Oliver Georgi wrote:Du kannst auch den Wrapper dann für bestimmte Eben variieren, z.B. andere Klasse oder ganz leer. Aber die Definition des Wrappers MUSS global erfolgen.
BEISPIEL:
In diesem Beispiel ergänze ich global ein --> jumbotron in der Datei:
/include/config/conf.template_default.inc.php
Code: Select all
$template_default['attributes'] = array(
'navlist-bs-dropdown-data' => 'data-toggle="dropdown"',
'navlist-bs-dropdown-caret' => ' <b class="caret"></b>',
'cpgroup' => 'data', // data = <span>, href = <a>
'cpgroup_custom' => array(
'bs-container-row' => array( // No underscore allowed here for group index!!!
'title' => 'Bootstrap Container/Row',
'prefix' => '<div class="container"><div class="row">',
'suffix' => '</div></div>'
),
'bs-neue-zeile' => array( // No underscore allowed here for group index!!!
'title' => 'Bootstrap Row',
'prefix' => '<div class="row">',
'suffix' => '</div>'
),
'bs-jumbo' => array( // No underscore allowed here for group index!!!
'title' => 'Jumbotron',
'prefix' => ' <div class="jumbotron"><div class="container">',
'suffix' => '</div></div>'
) /* ,
'sample' => array( // No underscore allowed here for group index!!!
'title' => 'Wrapper',
'prefix' => '%1$s<div class="wrapper">', // optional: %1$s = title, %2$s = tab id
'suffix' => '</div>' // optional: %1$s, %2$s
) */
),
'cp-paginate' => array(
'link-prefix' => ' ',
'link-suffix' => ' ',
'value-prefix' => '',
'value-suffix' => ''
)
);
/template/inc_settings/template_default/custom_settings.php oder bspw.
/template/inc_settings/template_default/eigene_einstellung_01.php
füge ich den gleichen Inhalt ein und ergänze in diesem Beispiel für das --> Bootstrap --> Jumbotron eine weitere CSS-Klasse --> MYNICEBLUEGRADIENT:
Code: Select all
$template_default['attributes'] = array(
'navlist-bs-dropdown-data' => 'data-toggle="dropdown"',
'navlist-bs-dropdown-caret' => ' <b class="caret"></b>',
'cpgroup' => 'data', // data = <span>, href = <a>
'cpgroup_custom' => array(
'bs-container-row' => array( // No underscore allowed here for group index!!!
'title' => 'Bootstrap Container/Row',
'prefix' => '<div class="container"><div class="row">',
'suffix' => '</div></div>'
),
'bs-neue-zeile' => array( // No underscore allowed here for group index!!!
'title' => 'Bootstrap Row',
'prefix' => '<div class="row">',
'suffix' => '</div>'
),
'bs-jumbo' => array( // No underscore allowed here for group index!!!
'title' => 'Jumbotron',
'prefix' => ' <div class="jumbotron MYNICEBLUEGRADIENT"><div class="container">',
'suffix' => '/div></div>'
) /* ,
'sample' => array( // No underscore allowed here for group index!!!
'title' => 'Wrapper',
'prefix' => '%1$s<div class="wrapper">', // optional: %1$s = title, %2$s = tab id
'suffix' => '</div>' // optional: %1$s, %2$s
) */
),
'cp-paginate' => array(
'link-prefix' => ' ',
'link-suffix' => ' ',
'value-prefix' => '',
'value-suffix' => ''
)
);
/include/config/conf.template_default.inc.php
eine Datei aus dem --> git --> Branch origin:master --> repository betroffen ist.
Wenn OG Aktualisierungen vornimmt, werden meine Änderungen womöglich überschrieben!?
Das versuche ich zu umgehen, indem ich einerseits die Änderungen separat speichere und andererseits lokal mit eigenen Branches arbeite.
Beispielsweise habe ich bei einem neuen Projekt zunächst --> git --> Branch origin:master heruntergeladen.
Danach erstelle ich sofort einen neuen --> Branch "myDevDingsBums", ändere, ergänze, committe.
Und dann merge ich myDEV into MASTER.
Wenn OG dann aktualisiert und ich --> master abrufe und merge, müsste doch alles TUTTI sein, oder?
Ist das der absolut perfekte workflow?
Re: ...auf dem Weg nach bootstrap city
Da wir auf dem Weg nach bootstrap city sind, folgt hier mein --> Gruntfile.js
für die aktuelle Bootstrap Version 3.3.5, die noch mit --> less operiert, aber bald danach auf --> SASS umstellt.
grunt erstellt:
/bootstrap-3.3.5/dist/css
/bootstrap-3.3.5/dist/fonts
/bootstrap-3.3.5/dist/js
Default, nach der Installation werden nur
--> /css/bootstrap.css
--> /css/bootstrap-theme.css
--> /fonts
--> /js
usw. erstellt.
In diesem Beispiel [siehe Gruntfile] wird zusätzlich auch
/MY_PROJECT_v1.css
/MY_PROJECT_v1.min.css
usw. erstellt und in das --> Live Project --> kopiert
Zunächst werden in diesem Fall folgenden Dateien erstellt:
/bootstrap-3.3.5/dist/css/bootstrap.css
/bootstrap-3.3.5/dist/css/bootstrap.css.map
/bootstrap-3.3.5/dist/css/bootstrap.min.css
/bootstrap-3.3.5/dist/css/bootstrap-theme.css
/bootstrap-3.3.5/dist/css/bootstrap-theme.css.map
/bootstrap-3.3.5/dist/css/bootstrap-theme.min.css
/bootstrap-3.3.5/dist/css/MY_PROJECT_v1.css
/bootstrap-3.3.5/dist/css/MY_PROJECT_v1.css.map
/bootstrap-3.3.5/dist/css/MY_PROJECT_v1.min.css
Der Befehl [SIEHE OBEN Gruntfile!]
copy: --> THIS_IS_myDist: kopiert alle Dateien in das Verzeichnis
../template/inc_css/bs335
Das Kopieren ist der KNÜLLER! Denn danach liegen die Kopien innerhalb des eigenen Projektes --> Live Project unter:
/template/inc_css/bs335/css
/template/inc_css/bs335/fonts
/template/inc_css/bs335/js
Aufruf von grunt im Terminal, console, shell z.B.:
grunt dist
grunt watch
zack, schwupps, done, fertig.
für die aktuelle Bootstrap Version 3.3.5, die noch mit --> less operiert, aber bald danach auf --> SASS umstellt.
Code: Select all
/*!
* Bootstrap's Gruntfile
* http://getbootstrap.com
* Copyright 2013-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
module.exports = function (grunt) {
'use strict';
// Force use of Unix newlines
grunt.util.linefeed = '\n';
RegExp.quote = function (string) {
return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&');
};
var fs = require('fs');
var path = require('path');
var npmShrinkwrap = require('npm-shrinkwrap');
var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js');
var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js');
var getLessVarsData = function () {
var filePath = path.join(__dirname, 'less/variables.less');
var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' });
var parser = new BsLessdocParser(fileContent);
return { sections: parser.parseFile() };
};
var generateRawFiles = require('./grunt/bs-raw-files-generator.js');
var generateCommonJSModule = require('./grunt/bs-commonjs-generator.js');
var configBridge = grunt.file.readJSON('./grunt/configBridge.json', { encoding: 'utf8' });
Object.keys(configBridge.paths).forEach(function (key) {
configBridge.paths[key].forEach(function (val, i, arr) {
arr[i] = path.join('./docs/assets', val);
});
});
// Project configuration.
grunt.initConfig({
// Metadata.
pkg: grunt.file.readJSON('package.json'),
banner: '/*!\n' +
' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
' * Licensed under the <%= pkg.license %> license\n' +
' */\n',
jqueryCheck: configBridge.config.jqueryCheck.join('\n'),
jqueryVersionCheck: configBridge.config.jqueryVersionCheck.join('\n'),
// Task configuration.
clean: {
dist: 'dist',
docs: 'docs/dist'
},
jshint: {
options: {
jshintrc: 'js/.jshintrc'
},
grunt: {
options: {
jshintrc: 'grunt/.jshintrc'
},
src: ['Gruntfile.js', 'package.js', 'grunt/*.js']
},
core: {
src: 'js/*.js'
},SASSSASS
test: {
options: {
jshintrc: 'js/tests/unit/.jshintrc'
},
src: 'js/tests/unit/*.js'
},
assets: {
src: ['docs/assets/js/src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js']
}
},
jscs: {
options: {
config: 'js/.jscsrc'
},
grunt: {
src: '<%= jshint.grunt.src %>'
},
core: {
src: '<%= jshint.core.src %>'
},
test: {
src: '<%= jshint.test.src %>'
},
assets: {
options: {
requireCamelCaseOrUpperCaseIdentifiers: null
},
src: '<%= jshint.assets.src %>'
}
},
concat: {
options: {
banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>',
stripBanners: false
},
bootstrap: {
src: [
'js/transition.js',
'js/alert.js',
'js/button.js',
'js/carousel.js',
'js/collapse.js',
'js/dropdown.js',
'js/modal.js',
'js/tooltip.js',
'js/popover.js',
'js/scrollspy.js',
'js/tab.js',
'js/affix.js'
],
dest: 'dist/js/<%= pkg.name %>.js'
}
},
uglify: {
options: {
compress: {
warnings: false
},
mangle: true,
preserveComments: 'some'
},
core: {
src: '<%= concat.bootstrap.dest %>',
dest: 'dist/js/<%= pkg.name %>.min.js'
},
customize: {
src: configBridge.paths.customizerJs,
dest: 'docs/assets/js/customize.min.js'
},
docsJs: {
src: configBridge.paths.docsJs,
dest: 'docs/assets/js/docs.min.js'
}
},
qunit: {
options: {
inject: 'js/tests/unit/phantom.js'
},
files: 'js/tests/index.html'
},
less: {
compileCore: {
options: {
strictMath: true,
sourceMap: true,
outputSourceFiles: true,
sourceMapURL: '<%= pkg.name %>.css.map',
sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map'
},
src: 'less/bootstrap.less',
dest: 'dist/css/<%= pkg.name %>.css'
},
compileTheme: {
options: {
strictMath: true,
sourceMap: true,
outputSourceFiles: true,
sourceMapURL: '<%= pkg.name %>-theme.css.map',
sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map'
},
src: 'less/theme.less',
dest: 'dist/css/<%= pkg.name %>-theme.css'
},
compileTHIS_IS_MY_PROJECT: {
options: {
strictMath: true,
sourceMap: true,
outputSourceFiles: true,
sourceMapURL: 'MY_PROJECT_v1.css.map',
sourceMapFilename: 'dist/css/MY_PROJECT_v1.css.map'
},
src: 'less/1_MY_PROJECT_v1.less',
dest: 'dist/css/MY_PROJECT_v1.css'
}
},
autoprefixer: {
options: {
browsers: configBridge.config.autoprefixerBrowsers
},
core: {
options: {
map: true
},
src: 'dist/css/<%= pkg.name %>.css'
},
theme: {
options: {
map: true
},
src: 'dist/css/<%= pkg.name %>-theme.css'
},
MY_PROJECT: {
options: {
map: true
},
src: 'dist/css/MY_PROJECT_v1.css'
},
docs: {
src: ['docs/assets/css/src/docs.css']
},
examples: {
expand: true,
cwd: 'docs/examples/',
src: ['**/*.css'],
dest: 'docs/examples/'
}
},
MY_PROJECT_v1
csslint: {
options: {
csslintrc: 'less/.csslintrc'
},
dist: [
'dist/css/bootstrap.css',
'dist/css/bootstrap-theme.css',
'dist/css/MY_PROJECT_v1.css'
],
examples: [
'docs/examples/**/*.css'
],
docs: {
options: {
ids: false,
'overqualified-elements': false
},
src: 'docs/assets/css/src/docs.css'
}
},
cssmin: {
options: {
// TODO: disable `zeroUnits` optimization once clean-css 3.2 is released
// and then simplify the fix for https://github.com/twbs/bootstrap/issues/14837 accordingly
compatibility: 'ie8',
keepSpecialComments: '*',
advanced: false
},
minifyCore: {
src: 'dist/css/<%= pkg.name %>.css',
dest: 'dist/css/<%= pkg.name %>.min.css'
},
minifyTheme: {
src: 'dist/css/<%= pkg.name %>-theme.css',
dest: 'dist/css/<%= pkg.name %>-theme.min.css'
},
minifyTHIS_IS_MY_PROJECT: {
src: 'dist/css/MY_PROJECT_v1.css',
dest: 'dist/css/MY_PROJECT_v1.min.css'
},
docs: {
src: [
'docs/assets/css/src/pygments-manni.css',
'docs/assets/css/src/docs.css'
],
dest: 'docs/assets/css/docs.min.css'
}
},
csscomb: {
options: {
config: 'less/.csscomb.json'
},
dist: {
expand: true,
cwd: 'dist/css/',
src: ['*.css', '!*.min.css'],
dest: 'dist/css/'
},
examples: {
expand: true,
cwd: 'docs/examples/',
src: '**/*.css',
dest: 'docs/examples/'
},
docs: {
src: 'docs/assets/css/src/docs.css',
dest: 'docs/assets/css/src/docs.css'
}
},
copy: {
fonts: {
expand: true,
src: 'fonts/*',
dest: 'dist/'
},
docs: {
expand: true,
cwd: 'dist/',
src: [
'**/*'
],
dest: 'docs/dist/'
},
THIS_IS_myDist: {
expand: true,MY_PROJECT_v1
cwd: 'dist/',
src: [
'**/*'
],
dest: '../template/inc_css/bs335'
}
},
connect: {
server: {
options: {
port: 3000,
base: '.'
}
}
},
jekyll: {
options: {
config: '_config.yml'
},
docs: {},
github: {
options: {
raw: 'github: true'
}
}
},
htmlmin: {
dist: {
options: {
collapseWhitespace: true,
conservativeCollapse: true,
minifyCSS: true,
minifyJS: true,
removeAttributeQuotes: true,
removeComments: true
},
expand: true,
cwd: '_gh_pages',
dest: '_gh_pages',
src: [
'**/*.html',
'!examples/**/*.html'
]
}
},
jade: {
options: {
pretty: true,
data: getLessVarsData
},
customizerVars: {
src: 'docs/_jade/customizer-variables.jade',
dest: 'docs/_includes/customizer-variables.html'
},
customizerNav: {
src: 'docs/_jade/customizer-nav.jade',
dest: 'docs/_includes/nav/customize.html'
}
},
htmllint: {
options: {
ignore: [
'Attribute "autocomplete" not allowed on element "button" at this point.',
'Attribute "autocomplete" not allowed on element "input" at this point.',
'Element "img" is missing required attribute "src".'
]
},
src: '_gh_pages/**/*.html'
},
watch: {
options: { livereload: true }, // reloads browser on save
src: {
files: '<%= jshint.core.src %>',
tasks: ['jshint:core', 'qunit', 'concat']
},
test: {
files: '<%= jshint.test.src %>',
tasks: ['jshint:test', 'qunit']
},
less: {
files: 'less/**/*.less',
tasks: ['less', 'copy:THIS_IS_myDist']
}
},
sed: {
versionNumber: {
pattern: (function () {
var old = grunt.option('oldver');
return old ? RegExp.quote(old) : old;
})(),
replacement: grunt.option('newver'),
exclude: [
'dist/fonts',
'docs/assets',
'fonts',
'js/tests/vendor',
'node_modules',
'test-infra'
],
recursive: true
}
},
'saucelabs-qunit': {
all: {
options: {
build: process.env.TRAVIS_JOB_ID,
throttled: 10,
maxRetries: 3,
maxPollRetries: 4,
urls: ['http://127.0.0.1:3000/js/tests/index.html?hidepassed'],
browsers: grunt.file.readYAML('grunt/sauce_browsers.yml')
}
}
},
exec: {
npmUpdate: {
command: 'npm update'
}
},
compress: {
main: {
options: {
archive: 'bootstrap-<%= pkg.version %>-dist.zip',
mode: 'zip',
level: 9,
pretty: true
},
files: [
{
expand: true,
cwd: 'dist/',
src: ['**'],
dest: 'bootstrap-<%= pkg.version %>-dist'
}
]
}
}
});
// These plugins provide necessary tasks.
require('load-grunt-tasks')(grunt, { scope: 'devDependencies' });
require('time-grunt')(grunt);
// Docs HTML validation task
grunt.registerTask('validate-html', ['jekyll:docs', 'htmllint']);
var runSubset = function (subset) {
return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset;
};
var isUndefOrNonZero = function (val) {
return val === undefined || val !== '0';
};
// Test task.
var testSubtasks = [];
// Skip core tests if running a different subset of the test suite
if (runSubset('core') &&
// Skip core tests if this is a Savage build
process.env.TRAVIS_REPO_SLUG !== 'twbs-savage/bootstrap') {
testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'csslint:dist', 'test-js', 'docs']);
}
// Skip HTML validation if running a different subset of the test suite
if (runSubset('validate-html') &&
// Skip HTML5 validator on Travis when [skip validator] is in the commit message
isUndefOrNonZero(process.env.TWBS_DO_VALIDATOR)) {
testSubtasks.push('validate-html');SASS
}
// Only run Sauce Labs tests if there's a Sauce access key
if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' &&
// Skip Sauce if running a different subset of the test suite
runSubset('sauce-js-unit') &&
// Skip Sauce on Travis when [skip sauce] is in the commit message
isUndefOrNonZero(process.env.TWBS_DO_SAUCE)) {
testSubtasks.push('connect');
testSubtasks.push('saucelabs-qunit');
}
grunt.registerTask('test', testSubtasks);
grunt.registerTask('test-js', ['jshint:core', 'jshint:test', 'jshint:grunt', 'jscs:core', 'jscs:test', 'jscs:grunt', 'qunit']);
// JS distribution task.
grunt.registerTask('dist-js', ['concat', 'uglify:core', 'commonjs']);
// CSS distribution task.
grunt.registerTask('less-compile', ['less:compileCore', 'less:compileTheme', 'less:compileTHIS_IS_MY_PROJECT']);
grunt.registerTask('dist-css', ['less-compile', 'autoprefixer:core', 'autoprefixer:theme', 'autoprefixer:MY_PROJECT', 'csscomb:dist', 'cssmin:minifyCore', 'cssmin:minifyTheme', 'cssmin:minifyTHIS_IS_MY_PROJECT', 'copy:THIS_IS_myDist']);
// Full distribution task.
grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'dist-js']);
// Default task.
grunt.registerTask('default', ['clean:dist', 'copy:fonts', 'test']);
// Version numbering task.
// grunt change-version-number --oldver=A.B.C --newver=X.Y.Z
// This can be overzealous, so its changes should always be manually reviewed!
grunt.registerTask('change-version-number', 'sed');
grunt.registerTask('build-glyphicons-data', function () { generateGlyphiconsData.call(this, grunt); });
// task for building customizer
grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']);
grunt.registerTask('build-customizer-html', 'jade');
grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () {
var banner = grunt.template.process('<%= banner %>');
generateRawFiles(grunt, banner);
});
grunt.registerTask('commonjs', 'Generate CommonJS entrypoint module in dist dir.', function () {
var srcFiles = grunt.config.get('concat.bootstrap.src');
var destFilepath = 'dist/js/npm.js';
generateCommonJSModule(grunt, srcFiles, destFilepath);
});
// Docs task.
grunt.registerTask('docs-css', ['autoprefixer:docs', 'autoprefixer:examples', 'csscomb:docs', 'csscomb:examples', 'cssmin:docs']);
grunt.registerTask('lint-docs-css', ['csslint:docs', 'csslint:examples']);
grunt.registerTask('docs-js', ['uglify:docsJs', 'uglify:customize']);
grunt.registerTask('lint-docs-js', ['jshint:assets', 'jscs:assets']);
grunt.registerTask('docs', ['docs-css', 'lint-docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs', 'build-glyphicons-data', 'build-customizer']);
grunt.registerTask('prep-release', ['dist', 'docs', 'jekyll:github', 'htmlmin', 'compress']);
// Task for updating the cached npm packages used by the Travis build (which are controlled by test-infra/npm-shrinkwrap.json).
// This task should be run and the updated file should be committed whenever Bootstrap's dependencies change.
grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', '_update-shrinkwrap']);
grunt.registerTask('_update-shrinkwrap', function () {
var done = this.async();
npmShrinkwrap({ dev: true, dirname: __dirname }, function (err) {
if (err) {
grunt.fail.warn(err);
}
var dest = 'test-infra/npm-shrinkwrap.json';
fs.renameSync('npm-shrinkwrap.json', dest);
grunt.log.writeln('File ' + dest.cyan + ' updated.');
done();
});
});
};
grunt erstellt:
/bootstrap-3.3.5/dist/css
/bootstrap-3.3.5/dist/fonts
/bootstrap-3.3.5/dist/js
Default, nach der Installation werden nur
--> /css/bootstrap.css
--> /css/bootstrap-theme.css
--> /fonts
--> /js
usw. erstellt.
In diesem Beispiel [siehe Gruntfile] wird zusätzlich auch
/MY_PROJECT_v1.css
/MY_PROJECT_v1.min.css
usw. erstellt und in das --> Live Project --> kopiert
Zunächst werden in diesem Fall folgenden Dateien erstellt:
/bootstrap-3.3.5/dist/css/bootstrap.css
/bootstrap-3.3.5/dist/css/bootstrap.css.map
/bootstrap-3.3.5/dist/css/bootstrap.min.css
/bootstrap-3.3.5/dist/css/bootstrap-theme.css
/bootstrap-3.3.5/dist/css/bootstrap-theme.css.map
/bootstrap-3.3.5/dist/css/bootstrap-theme.min.css
/bootstrap-3.3.5/dist/css/MY_PROJECT_v1.css
/bootstrap-3.3.5/dist/css/MY_PROJECT_v1.css.map
/bootstrap-3.3.5/dist/css/MY_PROJECT_v1.min.css
Der Befehl [SIEHE OBEN Gruntfile!]
copy: --> THIS_IS_myDist: kopiert alle Dateien in das Verzeichnis
../template/inc_css/bs335
Das Kopieren ist der KNÜLLER! Denn danach liegen die Kopien innerhalb des eigenen Projektes --> Live Project unter:
/template/inc_css/bs335/css
/template/inc_css/bs335/fonts
/template/inc_css/bs335/js
Aufruf von grunt im Terminal, console, shell z.B.:
grunt dist
grunt watch
zack, schwupps, done, fertig.
Re: ...auf dem Weg nach bootstrap city - CP slider
Ich schlage mich gerade mit dem Thema rum, Content Parts zu "sliden".
Bin aber irgendwie festgefahren...
Jemand eine Idee? Wäre cool.
Bin aber irgendwie festgefahren...
Jemand eine Idee? Wäre cool.
It's mostly all about maintaining two or three customer's sites Still supporter for the band Mykket Morton. Visit Mykket Morton on FB. Listen Mykket Morton and live videos on youtube.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.
Re: ...auf dem Weg nach bootstrap city - CP slider
Wie willst du die sliden?update wrote:Ich schlage mich gerade mit dem Thema rum, Content Parts zu "sliden".
Willst du CP´s gruppieren oder willst du sie mittels { SHOW_CONTENT:id } beispielsweise im CP Register/Tabs mit einem enstprechenden Template einbauen?
Für zweiteres hätte ich eine Lösung parat. Heißt Liqiud Slider und ist hier zu finden: http://liquidslider.com/
Template dafür hab ich mir zusammengebaut und läuft auch einwandfrei.
Re: ...auf dem Weg nach bootstrap city
Mensch claus, das hat JEDER
Willst du etwas raffiniertes machen ? Beliebig viele Beiträge, nach Datum und alphabetisch sortiert ? Oder im Kreis slidern ?
Willst du etwas raffiniertes machen ? Beliebig viele Beiträge, nach Datum und alphabetisch sortiert ? Oder im Kreis slidern ?
Re: ...auf dem Weg nach bootstrap city
So wär's mir am liebsten, ja.Uwe367 wrote:Willst du CP´s gruppieren
Ja.juergen wrote:Willst du etwas raffiniertes machen ?
Auch das.juergen wrote:Beliebig viele Beiträge, nach Datum und alphabetisch sortiert ? Oder im Kreis slidern ?
Ist für die Bandseite meines Jüngsten...
It's mostly all about maintaining two or three customer's sites Still supporter for the band Mykket Morton. Visit Mykket Morton on FB. Listen Mykket Morton and live videos on youtube.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.
Re: ...auf dem Weg nach bootstrap city
Wieso funktioniert in Text mit Bild
eigentlich nicht?
Code: Select all
<div class="item [FIRST]active[/FIRST]">
It's mostly all about maintaining two or three customer's sites Still supporter for the band Mykket Morton. Visit Mykket Morton on FB. Listen Mykket Morton and live videos on youtube.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.
Now building a venue for young artists to get wet on stage, rehearsal rooms, a studio, a guitar shop - yes I'm going to build some guitars.